ĐẠI HỌC QUỐC GIA HÀ NỘI
TRƯỜNG ĐẠI HỌC CÔNG NGHỆ
Lê Anh Trung
CÔNG NGHỆ SSL
Bài tập giữa kỳ môn: An Ninh CSDL
Người hướng dẫn: PGS.TS Trịnh Nhật Tiến
Hà Nội – 2013
MỤC LỤC
MỤC LỤC 2
1.
1.
Giới thiệu SSL
Giới thiệu SSL
1.1.
1.1.
Lịch sử của SSL
Lịch sử của SSL
Ngày nay việc bảo mật thông tin là yếu tố quan trọng để quyết định sự sống còn của
một tổ chức, một công ty hay doanh nghiệp. Với sự phát triển nhanh chóng của công
nghệ đã mang lại nhiều tiện ích cho người dùng nhưng đồng thời cũng đặt ra một nhu
cầu hết sức cấp thiết về sự an toàn và bảo mật. Và SSL chính là giải pháp tốt nhất hiện
Công nghệ SSL
Page 2 of 23
nay đáp ứng những nhu cầu đó và nó được coi như là “lá chắn cuối cùng” trong bảo
mật thương mại điện tử.
Giao thức SSL ban đầu được phát triển bởi Netscape. Version 1.0 thì đã không bao giờ
được công bố rộng rãi. Version 2.0 được công bố vào tháng 2/1995 nhưng chứa nhiều
lỗ hỏng bảo mật và sau cùng đưa đến mô hình SSL version 3.0 được ban hành năm
1996. Bản sau cùng này được dùng cho TLS version 1.0 và được IETF xác định như
một giao thức chuẩn trong RFC 2246 vào tháng 1/1999. Ngày nay Visa, MasterCard,
American Express cũng như nhiều công ty giải pháp tài chính hàng đầu khác trên thế
giới đã và đang ứng dụng SSL trong thương mại điện tử.
Việc truyền các thông tin nhạy cảm trên mạng rất không an toàn vì những vấn đề sau:
- Bạn không thể luôn luôn chắc rằng bạn đang trao đổi thông tin với đúng đối tượng
cần trao đổi.
- Dữ liệu mạng có thể bị chặn ,vì vậy dữ liệu có thể bị 1 đối tượng thứ 3 khác đọc
trộm, thường được biết đến như attacker .
- Nếu attacker có thể chặn dữ liệu, attacker có thể sửa đổi dữ liệu trước khi gửi nó
đến người nhận.
SSL giải quyết các vấn đề trên. SSL giải quyết vấn đề đầu tiên bằng cách cho phép 1
cách tùy chọn mỗi bên trao đổi có thể chắc chắn về định danh của phía đối tác trong 1
quá trình gọi là authentication (xác thực). Một khi các bên đã được xác thực, SSL
cung cấp 1 kết nối được mã hóa giữa 2 bên để truyền bảo mật các message. Việc mã
hóa trong quá trình trao đổi thông tin giữa 2 bên cung cấp sự riêng tư bí mật, vì vậy
mà giải quyết được vấn đề thứ 2. Thuật toán mã hóa được sử dụng với SSL bao gồm
hàm băm mã hóa, tương tự như 1 checksum. Nó đảm bảo rằng dữ liệu không bị thay
đổi trong quá trình truyền dẫn. Hàm băm mã hóa giải quyết vấn đề thứ 3, tính toàn vẹn
dữ liệu. Như vậy, SSL đảm bảo được:
- Xác thực: Đảm bảo tính xác thực của trang mà bạn sẽ làm việc ở đầu kia của kết
nối. Ngược lại, các trang Web cũng có thể kiểm tra được tính xác thực của người
sử dụng.
- Bí mật: Đảm bảo thông tin không thể bị truy cập bởi đối tượng thứ ba. Để loại trừ
việc nghe trộm những thông tin “ nhạy cảm” khi nó được truyền qua Internet.
- Toàn vẹn: Đảm bảo thông tin không bị sai lệch và nó phải thể hiện chính xác
thông tin gốc gửi đến nhờ việc sử dụng chữ ký lên message đã gửi đi.
Cả xác thực và mã hóa đều là tùy chọn, và phụ thuộc vào cipher suites (các bộ mã
hóa) được đàm phán giữa 2 đối tượng.
Công nghệ SSL
Page 3 of 23
Một ví dụ rõ ràng nhất mà trong đó bạn nên sử dụng SSL là trao đổi thông tin giao
dịch qua mạng (e-commerce). Trong trao đổi e-commerce, cần phải hết sức cẩn
thận khi bạn có thể chắc chắn về định danh của server mà bạn đang trao đổi thông
tin. Một hacker có thể dễ dàng tạo ra 1 website giả, với giao diện chương trình là
các dịch vụ quen thuộc, chỉ để cho bạn nhập vào đó số tài khoản. SSL cho phép
bạn, client, xác thực về định danh của server. Nó cũng cho phép server xác thực
định danh của client, tuy nhiên trong các giao tác Internet, việc này hiếm khi được
làm.
Đến nay, SSL được thiết kế để đảm bảo được các dịch vụ sau trên mạng Internet.
Các dịch vụ đi kèm là cổng của giao thức và phần mô tả khi hoạt động trên SSL.
Từ khóa Cổng Mô tả
Nsiiop 261 Dịch vụ tên IIOP trên TLS/SSL
https 443 HTTP trên TLS/SSl
Smtps 465 SMTP trên TLS/SSL
Nntps 563 NNTP trên TLS/SSL
Ldaps 636 LDAP trên TLS/SSL
Ftps-data 989 FTP (dữ liệu) trên TLS/SSL
Ftps 990 FTP (Điều khiển) trên TLS/SSL
Tenets 992 TELNET trên TLS/SSL
Imaps 994 IRC trên TLS/SSL
Pop3s 995 POP3 trên TLS/SSL
Cho đến 2008, TLS 1.2 (SSL 3.3) được công bố với những cải tiến về các thuật
toán mã hóa, như việc bắt buộc sử dụng các thuật toán mã hóa MD5 và SHA-1 đã
hoàn thiện và đảm bảo cho SSL với độ tin cậy cao.
2.
2.
Hoạt động của SSL
Hoạt động của SSL
2.1.
2.1.
Kiến trúc của SSL
Kiến trúc của SSL
SSL được thiết kế để dùng TCP cung cấp 1 dịch vụ bảo mật đầu cuối-đến-đầu cuối
đáng tin cậy. SSL không phải là một giao thức đơn mà là 2 lớp giao thức,như minh
họa dưới đây:
Công nghệ SSL
Page 4 of 23
Mô hình kiến trúc của SSL
SSL Record Protocol cung cấp các dịch vụ bảo mật cơ bản cho nhiều giao thức khác
nhau ở các lớp trên.Trong thực tế, Hyper Text Transfer Protocol (HTTP),cung cấp
dịch vụ trao đổi cho tương tác Web client/server, có thể hoạt động trên đỉnh của SSL.
Ba giao thức lớp trên được định nghĩa như là các phần của SSL: Handshake Protocol,
Change Cypher Spec Protocol và Alert Protocol. Các giao thức mang tính đặc trưng-
SSL này được dùng trong phần quản lý trao đổi SSL và được xét đến trong phần sau.
Hai khái niệm SSL quan trọng là SSL session (phiên SSL) và SSL connection ( kết
nối SSL), được định nghĩa như sau:
- Connection ( kết nối): 1 kết nối là 1 transport _ trong định nghĩa mô hình phân lớp
OSI_ cung cấp 1 loại dịch vụ thích hợp. Với SSL, những kết nối như vậy là những
mối quan hệ ngang hàng. Các kết nối thì trao đổi nhanh chóng.Mỗi kết nối gắn với
1 phiên.
- Session (phiên): 1 phiên SSL là 1 liên kết giữa 1 client và 1 server. Các phiên được
tạo ra bằng Handshake Protocol (giao thức bắt tay). Các phiên định nghĩa 1 tập các
tham số bảo mật bằng mật mã,có thể được chia sẻ giữa nhiều kết nối.Các phiên
được dùng để tránh những đàm phán tốn kém_về các tham số bảo mật mới_cho
mỗi kết nối.
Giữa bất kì 1 cặp của nhóm nào (các ứng dụng như HTTP trên client hay server), có
thể có nhiều kết nối bảo mật. Về lý thuyết, có thể có nhiều phiên đồng thời giữa các
nhóm, nhưng đặc trưng này không được dùng trong thực tiễn.
Thực sự có nhiều trạng thái gắn với mỗi phiên.Một khi 1 phiên được thành lập,có
trạng thái hoạt động hiện thời cho cả đọc và ghi, (như nhận và gửi ). Thêm vào đó,
trong suốt quá trình Handshake Protocol, trạng thái treo đọc và ghi được tạo ra. Dựa
trên kết luận thành công của Handshake Protocol, các trạng thái treo trở thành trạng
thái hiện thời.
Công nghệ SSL
Page 5 of 23
Một trạng thái phiên được định nghĩa bởi các thông số sau (các định nghĩa lấy từ đặc
trưng SSL):
- Session Identifier: 1 chuỗi byte bất kì được chọn bởi server để nhận dạng trạng
thái phiên là hoạt động (active) hay phục hồi lại (resumable).
- Peer certificate: một chứng chỉ X509.v3.Thành phần này của trạng thái có thể là
null.
- Compression method: thuật toán được dùng để nén dữ liệu trước khi mã hóa.
- Cypher spec: chỉ ra thuật toán mã hóa dữ liệu (như rỗng,AES…) và thuật toán băm
(như MD5 hay SHA-1) sử dụng để tính toán MAC.Nó cũng định nghĩa các thuộc
tính mã hóa như hash-size.
- Master secret: 48 byte bí mật được chia sẻ giữa client và server.
- Is resumable: một cờ chỉ ra rằng phiên này có thể được dùng để khởi tạo các kết
nối khác hay không.
Một trạng thái kết nối được định nghĩa bởi các tham số sau:
- Server and client random: các chuỗi byte được chọn bởi server và client cho mỗi
kết nối.
- Server write MAC secret: khóa bí mật được sử dụng bởi phép tính MAC trên dữ
liệu, được gửi bởi server.
- Client write MAC secret: khóa bí mật được sử dụng bởi phép tính MAC trên dữ
liệu,được gửi bởi client.
- Server write key: khóa mã hóa quy ước cho dữ liệu được mã hóa bởi server và
giải mã bởi client.
- Client write key: khóa mã hóa quy ước cho dữ liệu được mã hóa bởi client và giải
mã bởi server.
- Initialization vectors: khi 1 khối mã trong mode CBC được dùng, một vector khởi
tạo (IV) được duy trì cho mỗi key.Phần này được khởi tạo trước tiên bởi SSL
Handshake Protocol.Sau đó, khối mã hóa cuối cùng từ mỗi record được để dành lại
để dùng làm IV cho record sau.
- Sequence number : mỗi bên duy trì các sequence number riêng cho mỗi message
được truyền hoặc được nhận trong mỗi kết nối. Khi 1 bên gửi hoặc nhận một
change cypher spec message, sequence number thích hợp được thiết lập về 0.
Công nghệ SSL
Page 6 of 23
2.2.
2.2.
Các thành phần trong bộ giao thức của SSL.
Các thành phần trong bộ giao thức của SSL.
2.1.1.
2.1.1.
Giao thức SSL Record
Giao thức SSL Record
SSL Record Protocol cung cấp 2 dịch vụ cho kết nối SSL:
o Confidentiality (tính cẩn mật): Handshake Protocol định nghĩa 1 khóa
bí mật được chia sẻ, khóa này được sử dụng cho mã hóa quy ước các dữ
liệu SSL.
o Message integrity (tính toàn vẹn thông điệp):Handshake Protocol cũng
định nghĩa 1 khóa bí mật được chia sẻ, khóa này được sử dụng để hình
thành MAC (mã xác thực message).
Hình sau chỉ ra toàn bộ hoạt động của SSL Record Protocol.SSL Record Protocol
nhận 1 message ứng dụng sắp được truyền đi,phân mảnh dữ liệu thành nhiều
block, nén dữ liệu 1 cách tùy chọn,áp dụng vào 1 MAC, mã hóa, thêm vào header,
và truyền khối kết quả thu được trong 1 segment TCP. Dữ liệu nhận được được
giải mã, kiểm tra, giải nén,sắp xếp lại và phân phối đến người sử dụng ở lớp cao
hơn.
Các quá trình thực hiện của giao thức SSL Record Protocol
Công nghệ SSL
Page 7 of 23
Bước đầu tiên là phân mảnh. Mỗi message của lớp bên trên được phân mảnh thành
các block, mỗi block là16384 byte hoặc ít hơn.
Tiếp theo,nén được block ngắn, có thể, do định dạng quy ước, thuật toán nén thực sự
làm cho output dài hơn input). Trong SSLv3 (cũng như phiên bản hiện tại của TLS),
không có thuật toán nén nào được chỉ rõ, vì vậy thuật toán nén mặc định là null.
Bước xử lí kế tiếp là tính toán MAC (mã xác thực message) trên dữ liệu đã được
nén. Để thực hiện cần dùng đến khóa bí mật được chia sẻ.Phép tính được định nghĩa
như sau:
hash(MAC_write_secret || pad_2 || hash(MAC_write_secret || pad_1 ||seq_num ||
SSLCompressed.type || SSLCompressed.length || SSLCompressed.fragment))
trong đó:
- || : phép nối/hoặc.
- MAC_write_secret: khóa bí mật được chia sẻ.
- hash: thuật toán băm mã hóa, MD5 hoặc SHA-1.
- pad_1: byte 0x36 (0011 0110) được lặp lại 48 lần (384 bit) cho MD5 và 40 lần
(320 bit) cho SHA-1
- pad_2: byte 0x5c (0101 1100) được lặp lại 48 lần cho MD5 và 40 lần cho SHA-1.
- seq_num: sequence number cho message này
- SSLCompressed.type: giao thức ở lớp trên được dùng để xử lí phân mảnh này.
- SSLCompressed.length: chiều dài của phân mảnh đã được nén.
- SSLCompressed.fragment: phân mảnh đã được nén (nếu nén không được dùng,
phân mảnh ở dạng plaintext).
Chú ý rằng, cái này tương tự như thuật toán HMAC.Điểm khác biệt là 2 phần đệm
(pad) được || trong SSLv3 và được XOR trong HMAC. Thuật toán MAC trong SSLv3
được dựa trên bản phác thảo Internet ban đầu cho HMAC. Phiên bản gần nhất của
HMAC được định nghĩa trong RFC 2104,sử dụng XOR.
Kế tiếp, message đã nén cộng thêm MAC được mã hóa theo phương pháp mã hóa đối
xứng. Mã hóa có thể không làm tăng chiều dài nội dung hơn 1024 byte, vì vậy chiều
dài tổng cộng không vượt quá 2^14 + 2048. Các thuật toán mã hóa sau được cho phép:
Công nghệ SSL
Page 8 of 23
Với mã hóa stream (luồng),message đã nén cộng thêm MAC được mã hóa.Chú ý rằng
MAC được tính toán trước khi mã hóa xảy ra và MAC được mã hóa cùng với
plaintext hoặc là plaintext đã nén.
Với mã hóa block (khối),MAC có thể được đệm thêm trước khi mã hóa.Phần đệm
thêm (padding) có dạng gồm nhiều byte đệm được theo sau bởi 1 byte chỉ rõ chiều dài
của phần đệm.Tổng số lượng đệm vào là lượng nhỏ nhất.
sao cho tổng kích thước dữ liệu được mã hóa (plaintext +MAC + padding) là 1 bội số
của chiều dài khối mã hóa. Ví dụ, plaintext (hoặc text đã nén nếu nén được dùng) là 58
byte, với MAC là 20 byte (dùng SHA-1), được mã hóa với chiều dài block là 8 byte
(như DES ). Cùng với byte padding.length ,nó sinh ra tổng cộng 79 byte.Để tạo ra 1
số nguyên là bội của 8,1 byte đệm được thêm vào.
Bước cuối cùng của xử lí SSL Record Protocol là gắn thêm vào1 header, bao gồm
các mục sau:
- Content Type (8 bit): giao thức lớp trên được dùng để xử lí phân mảnh đi kèm.
- Major Version (8 bit): chỉ ra phiên bản SSL tối đa được dùng. Ví dụ, SSLv3,giá trị
này là 3.
- Minor Version (8 bit) : chỉ ra phiên bản tối thiểu được dùng. Ví dụ, SSLv3 ,giá trị
này là 0.
- Compressed Length (16 bit) : chiều dài theo byte của phân mảnh plaintext (hoặc
chiều dài theo byte của phân mảnh đã nén nếu nén được dùng). Gíá trị lớn nhất là
2^14+2048
Các loại nội dung được định nghĩa là change_cipher_spec, alert,handshake, và
application_data. Ba cái đầu tiên là các giao thức đặc trưng-SSL, được bàn đến trong
phần kế tiếp. Chú ý rằng không có sự khác biệt nào được tạo ra giữa các ứng dụng
(như HTTP ) có thể dùng SSL, nội dung dữ liệu được tạo ra bởi các ứng dụng đó thì
không trong suốt đối với SSL.
Công nghệ SSL
Page 9 of 23
Định dạng SSL record
2.1.2.
2.1.2.
Giao thức SSL Change Cipher Spec
Giao thức SSL Change Cipher Spec
Giao thức SSL Change Cipher Spec là giao thức đơn giản nhất trong ba giao thức đặc
trưng của SSL mà sử dụng giao thức SSL Record. Giao thức này bao gồm một
message đơn 1 byte giá trị là 1. Mục đích chính của message này là sinh ra trạng thái
tiếp theo để gán vào trạng thái hiện tại,và trạng thái hiện tại cập nhật lại bộ mã hóa để
sử dụng trên kết nối này.
2.1.3.
2.1.3.
Giao thức SSL Alert
Giao thức SSL Alert
Giao thức SSL Alert được dùng để truyền cảnh báo liên kết SSL với đầu cuối bên kia.
Như với những ứng dụng khác sử dụng SSL, alert messages được nén và mã hóa, được
chỉ định bởi trạng thái hiện tại.
Mỗi message trong giao thức này gồm 2 bytes. Byte đầu tiên giữ giá trị cảnh báo(1) hoặc
nguy hiểm(2) để thông báo độ nghiêm ngặt của message. Nếu mức độ là nguy hiểm, SSL
lập tức chấp dứt kết nối. Những kết nối cùng phiên khác vẫn có thể tiếp tục nhưng sẽ
không kết nối nào khác trên phiên này được khởi tạo thêm. Byte thứ hai chứa một mã chỉ
ra cảnh báo đặc trưng. Đầu tiên, chúng ta liệt kê những cảnh báo đó mà luôn ở mức nguy
hiểm ( được định nghĩa từ những thông số SSL):
- unexpected_message: message không thích hợp.
Công nghệ SSL
Page 10 of 23
- bad_record_mac: MAC không chính xác.
- decompression_failure: việc giải nén nhận input không thích hợp(ví dụ như không
thể giải nén hoặc giải nén lớn hơn độ dài tối đa cho phép).
- handshake_failure: bên gửi không thể thương lượng một bộ chấp nhận được của
các thông số bảo mật được đưa ra từ những lựa chọn có sẵn.
- illegal_parameter: một trường trong một handshake message thì vượt khỏi dãy
hoặc trái với những trường khác.
Phần còn lại của cảnh báo như sau:
- close_notify: thông báo cho bên nhận rằng bên gửi sẽ không gửi thêm message
nào nữa trong kết nối này. Mỗi nhóm thì được yêu cầu gửi một close_notify cảnh
báo trước khi kết thúc phần ghi của một kết nối.
- no_certificate: có thể được gửi để trả lời cho một yêu cầu certificate nếu không
certificate thích hợp nào có sẵn.
- bad_certificate: certificate nhận được thì không hợp lệ(ví dụ như chứa một chữ ký
không xác minh).
- unsupported_certificate: dạng certificate nhận được thì không hỗ trợ.
- certificate_revoked: certificate đã bị thu hồi bởi nhà cung cấp.
- certificate_expired: certificate đã hết hạn đăng ký.
- certificate_unknown: một số phát sinh không nói rõ xuất hiện trong quá trình xử
ký certificate làm cho nó không thể chấp nhận.
Công nghệ SSL
Page 11 of 23
2.1.4.
2.1.4.
Giao thức SSL Handshake
Giao thức SSL Handshake
Giao thức Handshake
Phần phức tạp nhất của SSL là giao thức Handshake. Giao thức này cho phép server và client
chứng thực với nhau và thương lượng cơ chế mã hóa, thuật toán MAC và khóa mật mã được
sử dụng để bảo vệ dữ liệu được gửi trong SSL record.Giao thức SSL Handshake thường được
sử dụng trước khi dữ liệu của ứng dụng được truyền đi.
Giao thức SSL Handshake bao gồm một loạt những message trao đổi giữa client và server.
Mỗi message có ba trường:
- Type (1 byte): chỉ ra một trong mười dạng message .
- Length (3 bytes): độ dài của message theo bytes.
- Content (>=0 bytes): tham số đi kèm với message này, được liệt kê trong hình
dưới.
Kiểu message Thông số
Hello_request type, authorities
Client_hello version, random, session id, cipher suite,
compression method
Server_hello version, random, session id, cipher suite,
compression method
Certificate chain of X.509v3 certificates
Server_key_exchange parameters, signature
Certificate_request type, authorities
Server_done Null
Công nghệ SSL
Page 12 of 23
Certificate_verify signature
Client_key_exchange parameters, signature
Finish hash value
Các kiểu message của HandShake
Giai đoạn 1 – Thiết lập khả năng bảo mật
Giai đoạn này được dung để bắt đầu một kết nối logic và thiết lập khả năng bảo
mật mà sẽ liên kết với nó. Việc trao đổi thì được khởi tạo bởi client bằng việc gửi
một client_hello message với những thông số sau đây:
- Version: version SSL mới nhất mà client biết.
- Random: một cấu trúc sinh ra ngẫu nhiên từ client, bao gồm một nhãn thời gian 32
bit và 28 bytes sinh bởi một bộ sinh số ngẫu nhiên an toàn. Những giá trị này phục
vụ cho lần này và sử dụng suốt quá trình trao đổi khóa để ngăn tấn công lập lại.
- Session ID: một ID của phiên có chiều dài thay đổi được.SessionID khác 0 nghĩa
là client muốn cập nhật tham số của một kết nối đang tồn tại hay tạo một kết nối
mới trên phiên này.SessionID = 0 chỉ ra rằng client muốn thiết lập một kết nối
mới trên một phiên mới.
- CipherSuite: đây là 1 danh sách mà chứa những bộ biên dịch của những thuật toán
mã hóa được hỗ trợ bởi client, tham khảo theo thứ tự giảm dần. Mỗi thành phần
trong danh sách (mỗi bộ mã hóa) định nghĩa cả một khóa trao đổi và một
CipherSpec, những thông số này sẽ được bàn đến sau.
- Compression Method: đây là danh sách của những phương thức nén mà client hỗ
trợ.
Sau khi gửi client_hello message, client chờ nhận server_hello message mà chứa cùng
thông số với client_hello message.Với server_hello message, những thỏa thuận kèm
theo được áp dụng. Trường Version chứa version thấp hơn được đề nghị bởi client và
cao nhất được hổ trợ bởi sever.Trường Random được sinh ra bởi server và độc lập với
trường Random của client. Nếu trường SessionID của client khác 0, thì giá trị tương
tự được dùng bởi server, ngược lại thì trường SessionID của server chứa giá trị của
một phiên mới. Trường CipherSuite chứa bộ mã hóa chọn bởi server từ những đề xuất
của client. Trường Compression chứa phương thức nén chọn bởi server từ những đề
xuất của client.
Công nghệ SSL
Page 13 of 23
Thành phần đầu tiên của thông số Cipher Suite là phương thức trao đổi khóa (ví dụ
như bằng cách nào những khóa mã hóa cho việc mã hóa thông thường và MAC được
trao đổi ). Những phương thức trao đổi khóa sau được hỗ trợ:
- RSA: khóa bí mật được mã hóa với khóa công khai RSA của bên nhận. Một
public-key certificate cho khóa bên nhận phải được tạo sẵn.
- Fixed Diffie-Hellman: đây là sự trao đổi khóa Diffie-Hellman trong certificate của
server chứa các thông số công khai Diffie-Hellman được ký bởi Certificate
Authority (CA) .Nghĩa là certificate khóa công khai chứa các thông số khóa công
khai Diffie-Hellman. Client chứa sẵn các thông số khóa công khai Diffie-Hellman
đó trong certificate nếu chứng thực client được yêu cầu hoặc trong một message
trao đổi khóa.Phương thức này mang lại kết quả một khóa bí mật cố định giữa hai
đầu, dựa trên tính toán Diffie-Hellman sử dụng khóa công khai cố định.
- Ephemeral Diffie-Hellman: Phương pháp được sử dụng để tạo khóa
„ephemeral‟(tạm thời,1 lần)– khóa tạm thời. Trong trường hợp này, khóa công
khai Diffie-Hellman được trao đổi,được ký sử dụng khóa bí mật
- RSA hoặc DSS của bên gửi.Bên nhận có thể sử dụng khóa công khai tương ứng
để xác minh chữ ký.
- Certificate được sử dụng để xác thực khóa công khai. Điều này như là sự bảo đảm
nhất của ba lựa chọn Diffie-Hellman bởi vì nó là kết quả của sự tạm thời và khóa
xác thực.
- Anonymous Diffie-Hellman: thuật toán Diffie-Hellman cơ bản được sử dụng,
không chứng thực. Nghĩa là mỗi lần một bên gửi thông số Diffie-Hellman công
khai của nó cho bên kia thì không xác thực. Điều này gần như là có thể bị tấn công
bởi tấn công Man-in-the-middle, trong đó kẻ tấn công điều khiển cả nhóm
anonymous Diffie-Hellman.
- Fortezza: phương pháp định nghĩa cho lược đồ Fortezza.
Định nghĩa kèm theo cho một phương pháp trao đổi khóa là CipherSpec , bao gồm
những trường sau :
- CipherAlgorithm: một vài thuật toán kể đến : RC4, RC2, DES, 3DES, DES40,
IDEA, Fortezza.
- MACAlgorithm: MD5 hoặc SHA-1.
Công nghệ SSL
Page 14 of 23
- CipherType: luồng hoặc khối.
- IsExportable: True hoặc False.
- HashSize: 0, 16 (cho MD5), hay 20 (cho SHA-1) bytes.
- Key Material: thứ tự của các bytes mà chứa dữ liệu được dùng trong sinh khóa.
- IV Size: kích thước của giá trị khởi tạo cho mã hóa Cipher Block Chaining (CBC)
Giai đoạn 2 – Xác thực server và trao đổi khóa
Server bắt đầu giai đoạn này bằng cách gửi certificate của nó nếu nó cần được xác thực;
thông điệp chứa một hoặc một chuỗi certificate(chứng thực) X.509. Thông điệp chứng
thực được yêu cầu cho bất kì một phương pháp trao đổi khóa nào được thỏa thuận, ngoại
trừ anonymous Diffie-Hellman.Chú ý rằng nếu fixed Diffie-Hellman được dùng,thì thông
điệp chứng thực có chức năng như là thông điệp trao đổi khóa của server vì nó chứa các
tham số Diffie-Hellman công khai của server.
Sau đó một thông điệp server_key_exchange được gửi đi nếu nó được yêu cầu.Nó không
được yêu cầu trong 2 trường hợp sau:
(1) Server đã gửi một certificate với các tham số fixed Diffie-Hellman.
(2) Trao đổi khoá RSA được dùng.
Thông điệp server_key_exchange cần cho các trường hợp sau:
- Anonymous Diffie-Hellman : Nội dung thông điệp bao gồm hai giá trị Diffie-
Hellman toàn cục(một số nguyên tố và một số nguyên tố cùng nhau với số đó)
cùng với khóa Diffie-Hellman của server.
- Ephemeral Diffie-Hellman : nội dung thông điệp bao gồm 3 tham số Diffie-
Hellman cung cấp cho anonymous Diffie-Hellman,cùng với một chữ kí của các
tham số này.
- Trao đổi khóa RSA,mà theo đó server sử dụng RSA nhưng có một khóa chữ kí chỉ
của RSA. Theo đó,client không thể gửi đi cách đơn giản một khóa bí mật được mã
hóa với khóa công khai/bí mật RSA phụ và sử dụng thông điệp
server_key_exchanged để gửi khóa công khai.Nội dung thông điệp bao gồm hai
tham số của khóa công khai RSA phụ(số mũ và số dư) cùng với một chữ ký của
các tham số này.
Công nghệ SSL
Page 15 of 23
- Fortezza: một vài chi tiết thêm về chữ kí được đảm bảo. Như thường lệ, một chữ kí
được tạo ra bởi việc lấy mã băm của một thông điệp và mã hóa nó với khóa bí mật
của bên gửi.
3.
3.
Demo
Demo
Phần demo của bài tập lớn. Em xin giới thiệu một chương mã hóa RSA, có thể sinh ra
một cặp khóa mã/giải mã trên các file văn bản (.txt). Chương trình demo sẽ trình bày
cách sinh ra cặp khóa, dùng khóa mã để mã hóa file văn bản thành dạng không thể đọc
được, sử dụng các thuật toán hàm băm. Sau đó dùng khóa còn lại để giải mã file văn
bản này thành dạng bản rõ.
Chương trình mã hóa em giới thiệu có tên RSACryptoPad là một chương trình Open
Source, được đưa lên trang codeproject ở địa chỉ cụ thể
Do Mathew John Schlabaug thực hiện, là tên của tác giả người Mỹ, là một nhà phát triển
web.
Các hàm mã hóa chính trong source code:
public string EncryptString( string inputString, int dwKeySize,
string xmlString )
{
// TODO: Add Proper Exception Handlers
RSACryptoServiceProvider rsaCryptoServiceProvider =
new
RSACryptoServiceProvider( dwKeySize );
rsaCryptoServiceProvider.FromXmlString( xmlString );
int keySize = dwKeySize / 8;
byte[] bytes = Encoding.UTF32.GetBytes( inputString );
// The hash function in use by the .NET
RSACryptoServiceProvider here
// is SHA1
// int maxLength = ( keySize ) - 2 -
// ( 2 *
SHA1.Create().ComputeHash( rawBytes ).Length );
int maxLength = keySize - 42;
int dataLength = bytes.Length;
int iterations = dataLength / maxLength;
Công nghệ SSL
Page 16 of 23
StringBuilder stringBuilder = new StringBuilder();
for( int i = 0; i <= iterations; i++ )
{
byte[] tempBytes = new byte[
( dataLength - maxLength * i > maxLength ) ?
maxLength :
dataLength -
maxLength * i ];
Buffer.BlockCopy( bytes, maxLength * i, tempBytes, 0,
tempBytes.Length );
byte[] encryptedBytes =
rsaCryptoServiceProvider.Encrypt( tempBytes,
t
rue );
// Be aware the RSACryptoServiceProvider reverses the order
of
// encrypted bytes. It does this after encryption and
before
// decryption. If you do not require compatibility with
Microsoft
// Cryptographic API (CAPI) and/or other vendors. Comment
out the
// next line and the corresponding one in the DecryptString
function.
Array.Reverse( encryptedBytes );
// Why convert to base 64?
// Because it is the largest power-of-two base printable
using only
// ASCII characters
stringBuilder.Append( Convert.ToBase64String( encryptedByte
s ) );
}
return stringBuilder.ToString();
}
public string DecryptString( string inputString, int dwKeySize,
string xmlString )
{
// TODO: Add Proper Exception Handlers
RSACryptoServiceProvider rsaCryptoServiceProvider
Công nghệ SSL
Page 17 of 23
= new
RSACryptoServiceProvider( dwKeySize );
rsaCryptoServiceProvider.FromXmlString( xmlString );
int base64BlockSize = ( ( dwKeySize / 8 ) % 3 != 0 ) ?
( ( ( dwKeySize / 8 ) / 3 ) * 4 ) + 4 : ( ( dwKeySize / 8 ) /
3 ) * 4;
int iterations = inputString.Length / base64BlockSize;
ArrayList arrayList = new ArrayList();
for( int i = 0; i < iterations; i++ )
{
byte[] encryptedBytes = Convert.FromBase64String(
inputString.Substring( base64BlockSize * i,
base64BlockSize ) );
// Be aware the RSACryptoServiceProvider reverses the order
of
// encrypted bytes after encryption and before decryption.
// If you do not require compatibility with Microsoft
Cryptographic
// API (CAPI) and/or other vendors.
// Comment out the next line and the corresponding one in
the
// EncryptString function.
Array.Reverse( encryptedBytes );
arrayList.AddRange( rsaCryptoServiceProvider.Decrypt(
encryptedBytes, true ) );
}
return Encoding.UTF32.GetString( arrayList.ToArray(
Type.GetType( "System.Byte" ) ) as
byte[] );
}
Khởi động chương trình bằng cách ấn đúp vào file RSACryptoPad.exe:
Công nghệ SSL
Page 18 of 23
Chương trình hiện lên giao diện:
Bắt đầu bằng việc mở file văn bản muốn mã hóa. Chọn File, Open
Công nghệ SSL
Page 19 of 23
Sau đó tiếp tục mở đến file cần chọn mã hóa, ở đây chọn file note.txt
Nội dung file note.txt hiện lên rõ ràng trên chương trình.
Ta tiếp tục dùng chương trình để sinh ra cặp khóa mã/giải mã cho file văn bản này.
Chọn Encryption, chọn Generate Key Pair…
Công nghệ SSL
Page 20 of 23
Chương trình sẽ yêu cầu lưu cặp khóa. ở đây ta lần lượt lưu hai cặp khóa có tên là
ma.pke va giaima.kez.
Tiếp theo tiến hành mã hóa file note.txt ở dạng bản rõ thành dạng đã được mã hóa.
Chọn Encryption, Encryp … tiếp theo chỉ đến khóa mã hóa cho văn bản.
Công nghệ SSL
Page 21 of 23
Sau khi được mã hóa, bản rõ của văn bản sẽ được mã thành bản mã như sau :
Cuối cùng, ta dùng khóa giải mã của cặp khóa để giải mã trở lại thành bản rõ mà
người nhận có thể đọc được:
4.
4.
Tài liệu tham khảo
Tài liệu tham khảo
Các tài liệu tham khảo trong quá trình thực hiện bài tập lớn bao gồm:
Understanding SSL/TLS-J.K. HarrisElectrical and Computer EngineeringVirginia Tech
Oct 2008
Công nghệ SSL
Page 22 of 23
SSL/TLS Deployment Best Practices - Ivan Ristic
SSL
/
TLS
Overview - Stanford Secure Computer Systems Group
/> /> />Công nghệ SSL
Page 23 of 23