TLS( Transport layer sercurity)

TLS( Transport layer sercurity)

Rate this post

TLS là một sáng kiến ​​tiêu chuẩn hóa IETF với mục tiêu là tạo ra phiên bản SSL chuẩn trên Internet. TLS được định nghĩa là Tiêu chuẩn Internet Đề xuất trong RFC 5246. RFC 5246 rất giống với SSLv3. Trong phần này, chúng tôi nêu bật những điểm khác biệt.

Các bài viết liên quan:

Version Number 

Định dạng Bản ghi TLS giống với Định dạng Bản ghi SSL, và các trường trong tiêu đề có cùng ý nghĩa. Điểm khác biệt là ở các giá trị phiên bản. Đối với phiên bản hiện tại của TLS, phiên bản chính là 3 và phiên bản phụ là 3.

Message Authentication Code 

Có hai điểm khác biệt giữa lược đồ SSLv3 và TLS MAC: thuật toán thực tế và phạm vi tính toán MAC. TLS sử dụng thuật toán HMAC được định nghĩa trong RFC 2104. Nhớ lại từ các bài trước rằng HMAC được định nghĩa là:

TLS( Transport layer sercurity)
  • H là một hàm băm mật mã
  • m là tin nhắn được xác thực
  • K là chìa khóa bí mật
  • K ‘là một khóa có kích thước khối bắt nguồn từ khóa bí mật, K; hoặc bằng cách đệm vào bên phải với các số 0 lên đến kích thước khối hoặc bằng cách băm xuống nhỏ hơn hoặc bằng kích thước khối trước và sau đó đệm sang bên phải bằng các số không
  • ‖ Biểu thị sự nối
  • ⊕ biểu thị bitwise độc quyền hoặc (XOR)
  • opad là phần đệm bên ngoài có kích thước khối, bao gồm các byte lặp lại có giá trị 0x5c
  • ipad là phần đệm bên trong có kích thước khối, bao gồm các byte lặp lại có giá trị 0x36

SSLv3 sử dụng cùng một thuật toán, ngoại trừ việc các byte đệm được nối với khóa bí mật thay vì được XOR với khóa bí mật được đệm theo độ dài khối. Mức độ bảo mật phải giống nhau trong cả hai trường hợp.

Đối với TLS, tính toán MAC bao gồm các trường được chỉ ra trong phần sau biểu hiện:

MAC (MAC_write_secret, seq_num | TLSCompressed.type | TLSCompressed.version | TLSCompressed.length | TLSCompressed.fragment)

Tính toán MAC bao gồm tất cả các trường được bao phủ bởi phép tính SSLv3, cộng với trường TLSCompressed.version, là phiên bản của giao thức đang được sử dụng.

Pseudorandom Function 

TLS sử dụng một chức năng giả ngẫu nhiên được gọi là PRF để mở rộng bí mật thành các khối dữ liệu cho mục đích tạo khóa hoặc xác thực. Mục tiêu là sử dụng một giá trị bí mật được chia sẻ tương đối nhỏ nhưng để tạo ra các khối dữ liệu dài hơn theo cách an toàn trước các loại tấn công được thực hiện trên các hàm băm và MAC. PRF dựa trên chức năng mở rộng dữ liệu (Hình 16.7) được đưa ra như

TLS( Transport layer sercurity)

Hàm mở rộng dữ liệu sử dụng thuật toán HMAC với MD5 hoặc SHA-1 làm hàm băm cơ bản. Có thể thấy, P_hash có thể được lặp lại nhiều lần nếu cần để tạo ra số lượng dữ liệu cần thiết.

Ví dụ, nếu P_SHA-1 được sử dụng để tạo 64 byte dữ liệu, nó sẽ phải được lặp lại bốn lần, tạo ra 80 byte dữ liệu trong đó 16 byte cuối cùng sẽ bị loại bỏ. Trong trường hợp này, P_MD5 cũng sẽ phải được lặp lại bốn lần, tạo ra chính xác 64 byte dữ liệu. Lưu ý rằng mỗi lần lặp bao gồm hai lần thực thi HMAC — mỗi lần lặp lại liên quan đến hai lần thực thi thuật toán băm cơ bản.

Để làm cho PRF an toàn nhất có thể, nó sử dụng hai thuật toán băm theo cách đảm bảo tính bảo mật của nó nếu một trong hai thuật toán vẫn an toàn. PRF được định nghĩa là

PRF (bí mật, nhãn, hạt giống) = P_hash (S1, nhãn | hạt giống)

PRF nhận đầu vào là giá trị bí mật, nhãn nhận dạng và giá trị hạt giống và tạo ra đầu ra có độ dài tùy ý.

Alert Codes 

TLS hỗ trợ tất cả các mã cảnh báo được xác định trong SSLv3 ngoại trừ no_certificate. Một số mã bổ sung được xác định trong TLS; trong số này, những điều sau đây luôn gây tử vong.

  • record_overflow: Một bản ghi TLS đã được nhận với một trọng tải (bản mã) có độ dài vượt quá 214 + 2048 byte hoặc bản mã được giải mã có độ dài lớn hơn 214 + 1024 byte.
  • unknown_ca: Chuỗi chứng chỉ hợp lệ hoặc một phần chuỗi đã được nhận, nhưng chứng chỉ không được chấp nhận vì không thể định vị chứng chỉ CA hoặc không thể khớp với một CA đáng tin cậy, đã biết.
  • access_denied: Đã nhận được chứng chỉ hợp lệ, nhưng khi truy cập kiểm soát đã được áp dụng, người gửi quyết định không tiếp tục thương lượng.
  • decode_error: Không thể giải mã thông báo vì một trường nằm ngoài phạm vi được chỉ định của nó hoặc độ dài của thông báo không chính xác.
  • protocol_version: Phiên bản giao thức mà khách hàng cố gắng thương lượng được nhận dạng nhưng không được hỗ trợ.
  • insufficient_security: Được trả lại thay vì bắt tay_failure khi thương lượng đã thất bại cụ thể là do máy chủ yêu cầu mật mã an toàn hơn những mật mã được máy khách hỗ trợ.
  • unsupported_extension: Được gửi bởi máy khách nhận được máy chủ mở rộng xin chào có chứa tiện ích mở rộng không có trong ứng dụng xin chào máy khách tương ứng.
  • internal_error: Một nội bộ lỗi không liên quan đến ứng dụng ngang hàng hoặc tính đúng đắn của giao thức khiến bạn không thể tiếp tục.
  • decrypt_error: Thao tác mật mã bắt tay không thành công, bao gồm không thể xác minh chữ ký, giải mã trao đổi khóa hoặc xác thực một thông điệp hoàn chỉnh.

Các cảnh báo còn lại bao gồm những điều sau đây.

  • user_canceled: Bắt tay này đang bị hủy vì một số lý do không liên quan đến lỗi giao thức.
  • no_renegotiation: Được gửi bởi một ứng dụng khách để đáp lại yêu cầu xin chào hoặc bởi máy chủ để phản hồi lại lời chào khách hàng sau lần bắt tay đầu tiên. Một trong hai thông báo này thường dẫn đến thương lượng lại, nhưng cảnh báo nàycho biết rằng người gửi không thể thương lượng lại. Thông báo này luôn luôn là một cảnh báo.

Cipher Suites

Có một số khác biệt nhỏ giữa các bộ mật mã có sẵn theo SSLv3 và theo TLS:

  • Key Exchange:  TLS hỗ trợ tất cả các kỹ thuật trao đổi khóa của SSLv3 ngoại trừ Fortezza.
  • Thuật toán mã hóa đối xứng: TLS bao gồm tất cả các thuật toán mã hóa đối xứng được tìm thấy trong SSLv3, ngoại trừ Fortezza.

Client Certificate Types

TLS xác định các loại chứng chỉ sau được yêu cầu trong thông báo certificate_request: rsa_sign, dss_sign, rsa_fixed_dh và dss_fixed_dh. Tất cả những thứ này đều được định nghĩa trong SSLv3. Ngoài ra, SSLv3 bao gồm rsa_ephemeral_dh, dss_ephemeral_dh và fortezza_kea. Ephemeral Diffie-Hellman liên quan đến việc ký các thông số Diffie-Hellman bằng RSA hoặc DSS. Đối với TLS, kiểu rsa_sign và dss_sign được sử dụng cho hàm đó; không cần một kiểu ký riêng để ký các tham số Diffie-Hellman. TLS không bao gồm lược đồ Fortezza.

certificate_verify and Finished Messages 

Trong thông báo TLS certificate_verify, các băm MD5 và SHA-1 chỉ được tính qua handshake_messages. Nhớ lại rằng đối với SSLv3, hàm bămtính toán cũng bao gồm bí mật tổng thể và miếng đệm. Các trường bổ sung này được cho là không có thêm tính bảo mật nào.

Như với thông báo hoàn thành trong SSLv3, thông báo hoàn thành trong TLS là một băm dựa trên master_secret được chia sẻ, các thông báo bắt tay trước đó và một nhãn xác định máy khách hoặc máy chủ. Cách tính có phần khác. Đối với TLS, chúng tôi có

PRF (master_secret, finish_label, MD5 (handshake_messages)|| SHA-1 (handhake_messages))

trong đó finish_label là chuỗi “máy khách đã hoàn thành” đối với máy khách và “máy chủ đã hoàn thành” đối với máy chủ.

Cryptographic Computations 

Pre_master_secret cho TLS được tính theo cách tương tự như trong SSLv3. Như trong SSLv3, master_secret trong TLS được tính như một hàm băm của pre_master_secret và hai số ngẫu nhiên hello. Dạng tính toán TLS khác với dạng của SSLv3 và được định nghĩa là

master_secret = PRF (pre_master_secret, “bí mật chính”, ClientHello.random || ServerHello.random)

Thuật toán được thực hiện cho đến khi tạo ra 48 bytes đầu ra giả ngẫu nhiên. Việc tính toán vật liệu khối khóa (khóa bí mật MAC, khóa mã hóa phiên và IV) được định nghĩa là

key_block = PRF (master_secret, “key expansion”, SecurityParameters.server_random | SecurityParameters.client_random)

cho đến khi đủ sản lượng. Như với SSLv3, key_block là một func- tổng thể của master_secret và các số ngẫu nhiên của máy khách và máy chủ, nhưng đối với TLS, thuật toán thực tế là khác nhau.

Padding

Trong SSL, phần đệm được thêm vào trước khi mã hóa dữ liệu người dùng là số lượng tối thiểu cần thiết để tổng kích thước của dữ liệu được mã hóa là bội số của chiều dài khối của mật mã. Trong TLS, phần đệm có thể là bất kỳ số tiền nào dẫn đến tổng là bội số của độ dài khối của mật mã, tối đa là 255 byte. Ví dụ: nếu bản rõ (hoặc văn bản nén nếu sử dụng tính năng nén) cộng với MAC cộng với byte padding.length dài 79 bytes, thì độ dài phần đệm(tính bằng byte) có thể là 1, 9, 17, v.v., tối đa 249. Độ dài phần đệm thay đổi có thể được sử dụng để ngăn chặn các cuộc tấn công dựa trên phân tích độ dài của các thông điệp được trao đổi.

Leave a Reply