Cơ chế tính khoá phiên trong giao thức SSL

Một phần của tài liệu Hệ tiêu chuẩn tham số an toàn cho hệ mật RSA và ứng dụng (Trang 44 - 46)

Giao thức bắt tay SSL gồm có 3 giai đoạn:

 Giai đoạn 1:

Thực hiện việc thoả thuận một số tham số cho phiên liên lạc: Định danh của phiên liên lạc (Session ID), một giá trị ngẫu nhiên, thuật toán trao đổi khoá, thuật toán mã hoá dữ liệu, …

 Giai đoạn 2:

Thực hiện xác thực lẫn nhau giữa ứng dụng trạm và ứng dụng chủ, thiết lập khoá chung dùng cho phiên liên lạc.

Thiết lập hiệu lực cho các tham số đã được thiết lập ở hai giai đoạn trên và kết thúc quá trình bắt tay.

Việc thỏa thuận khóa chung giữa hai ứng dụng được thực hiện ở giai đoạn 2, qui trình thoả thuận khoá chung có thể mô tả như sau:

Kết thúc giai đoạn thứ nhất của giao thức bắt tay SSL, ứng dụng chủ có được giá trị ngẫu nhiên ClientHello.random, gồm 28 byte được sinh bởi ứng dụng khách; ứng dụng khách có được giá trị ngẫu nhiên ServerHello.random

(gồm 28 byte được sinh bởi ứng dụng chủ) và chứng chỉ điện tử của ứng dụng chủ.

Trong giai đoạn thứ hai của giao thức bắt tay SSL, ứng dụng khách sinh một giá trị ngẫu nhiên thứ hai gồm 48 byte được gọi là pre_master_secret, sử dụng khóa công khai RSA của ứng dụng chủ (được lấy từ chứng chỉ điện tử của ứng dụng chủ) để mã hóa giá trị ngẫu nhiên này và gửi cho ứng dụng chủ. Khi ứng dụng chủ nhận được bản mã giá trị ngẫu nhiên pre_master_secret, ứng dụng chủ sử dụng tham số khóa bí mật RSA để giải mã và nhận được

pre_master_secret.

Kết thúc giai đoạn thứ hai của giao thức bắt tay SSL, ứng dụng chủ và ứng dụng khách có thể tính khóa chung sử dụng cho phiên liên lạc từ các giá trị ClientHello.random, ServerHello.random và pre_master_secret. Trong giao thức SSL phiên bản 3.0 phương pháp tính khóa chung được thực hiện thông qua các hàm băm mật mã MD5 SHA:

Từ 48 byte pre_master_secret, kết hợp với 28 byte ngẫu nhiên

client_random (của SSL Client), 28 byte ngẫu nhiên server_random (của SSL Server), giao thức tạo ra 48 byte khác gọi là master_secret như sau:

master_secret =

MD5(pre_master_secret + SHA1('A' + pre_master_secret + ClientHello.random + ServerHello.random)) +

MD5(pre_master_secret + SHA1('BB' + pre_master_secret + ClientHello.random + ServerHello.random)) +

MD5(pre_master_secret + SHA1('CCC' + pre_master_secret + ClientHello.random + ServerHello.random)) ;

48 byte master_secret được dùng như nguồn ngẫu nhiên để tạo khoá cho các mã pháp khác đã được thỏa thuận cho phiên liên lạc (khóa dùng cho hàm thực hiện sinh mã xác thực thông báo dựa trên hàm băm: HMAC, khoá và véc tơ khởi tạo (IV) dùng cho mã khối, ...). Dãy các byte ngẫu nhiên này được tạo như sau:

key_block =

MD5(master_secret + SHA1('A' + master_secret + ClientHello.random + ServerHello.random)) +

MD5(master_secret + SHA1('BB' + master_secret + ClientHello.random + ServerHello.random)) +

MD5(master_secret + SHA1('CCC' + master_secret + ClientHello.random + ServerHello.random)) + ... ;

Việc gọi hàm MD5, SHA với các giá trị muối (salt, là các ký tự ‘A’, ‘BB’, ‘CCC’, …) tăng dần cho đến khi đủ độ dài cần thiết (tùy thuộc vào độ dài dữ liệu khóa của các thuật toán mật mã đã được thỏa thuận giữa ứng dụng khách và ứng dụng chủ sẽ dùng trong phiên liên lạc).

Một phần của tài liệu Hệ tiêu chuẩn tham số an toàn cho hệ mật RSA và ứng dụng (Trang 44 - 46)