2010-10-14 33 views
9

Tôi có một sự nhầm lẫn nhỏ trên cái bắt tay SSL giữa trình duyệt và máy chủ trong một kịch bản https web tiêu biểu:Làm thế nào để trình duyệt tạo ra chìa khóa đối xứng trong SSL handshake

Những gì tôi đã hiểu cho đến nay là trong quá trình SSL handshake, client (trình duyệt trong trường hợp này) mã hóa một khóa đối xứng được chọn ngẫu nhiên với khóa công khai (chứng chỉ nhận được từ máy chủ). Điều này được gửi trở lại máy chủ, máy chủ giải mã nó (khóa đối xứng) với khóa riêng. Khóa đối xứng này hiện được sử dụng trong phần còn lại của phiên để mã hóa/giải mã các thông điệp ở cả hai đầu. Một trong những lý do chính để làm như vậy được cho là mã hóa nhanh hơn bằng cách sử dụng các khóa đối xứng.

Câu hỏi 1) Trình duyệt chọn và tạo khóa đối xứng được chọn ngẫu nhiên "" này như thế nào?

2) Các nhà phát triển (hoặc/và người dùng trình duyệt) có quyền kiểm soát cơ chế tạo khóa đối xứng này không?

+0

Khách hàng không tạo khóa phiên; không mã hóa nó; và không truyền nó. Khóa phiên được bắt nguồn qua giao thức thỏa thuận khóa. Mô tả của bạn về cơ bản là không chính xác. Câu hỏi của bạn được thành lập dựa trên giả định sai. – EJP

Trả lời

8

Here là mô tả rất tốt về cách hoạt động của kết nối HTTPS. Tôi sẽ cung cấp tóm tắt cách khóa phiên được mua lại bởi cả hai bên (máy khách và máy chủ), quá trình này được gọi là "giao thức thỏa thuận khóa", tại đây hoạt động như thế nào:

  1. Khách hàng tạo ra 48 byte master secret ”giá trị ngẫu nhiên.
  2. Máy khách đệm các byte này với dữ liệu ngẫu nhiên để tạo đầu vào bằng 128 byte.
  3. Máy khách mã hóa nó bằng khóa công khai của máy chủ và gửi đến máy chủ.
  4. Sau đó chủ chốt là sản phẩm của cả hai bên trong theo cách sau đây:

    master_secret = PRF(
        pre_master_secret, 
        "master secret", 
        ClientHello.random + ServerHello.random 
    ) 
    

PRF là “Pseudo-Random Function” đó cũng được định nghĩa trong spec và khá thông minh. Nó kết hợp bí mật, nhãn ASCII và dữ liệu hạt giống mà chúng tôi cung cấp bằng cách sử dụng các phiên bản mã băm Mã xác thực (HMAC) của cả hàm băm MD5 và SHA-1 . Một nửa đầu vào được gửi đến mỗi hàm băm. Đó là thông minh vì nó khá khả năng chống tấn công, ngay cả khi đối mặt với các điểm yếu của trong MD5 và SHA-1. Quá trình này có thể phản hồi về chính nó và lặp lại vĩnh viễn để tạo bao nhiêu byte tùy theo nhu cầu của chúng tôi.

Làm theo quy trình này, chúng tôi có được "bí mật chính" 48 byte.

+0

Máy khách không tạo khóa phiên; không mã hóa nó; và không truyền nó. Khóa phiên được bắt nguồn qua giao thức thỏa thuận khóa. – EJP

+0

@EJP bạn nói đúng, câu trả lời của tôi hoàn toàn không chính xác, tôi viết lại nó. Hãy kiểm tra nó và cho tôi biết nếu bạn nghĩ rằng nó là tốt hơn bây giờ. – Andrey

Các vấn đề liên quan