CHƯƠNG II: TÌM HIỂU CHUNG VỀ SECURE SOCKETS LAYER (SSL) VÀ TRANSPORT LAYER SECURITY (TLS)
9.3 Hàm tính số ngẫu nhiên
-TLS tạo cách sử dụng hàm tạo số ngẫu nhiên dùng cho PRF để mở rộng các secret(phần bí mật) thành các khối dữ liệu cho mục đích sinh khóa hay phê chuẩn. Đối tượng là để tạo ra cách sử dụng các giá trị shared secret nhỏ có liên hệ với nhau, nhưng để phát sinh các khối dài hơn theo cách an toàn khỏi sự tấn công dựa trên hàm băm và MACx.PRF dựa trên hàm mở rộng dữ liệu sau:
P_hash(secret, seed) = HMAC_hash(secret, A(1) || seed) ||
HMAC_hash(secret, A(2) || seed) || HMAC_hash(secret, A(3) || seed) || ...
Với A() được định nghĩa: A(0)=seed
A(i) =HMAC_hash(secret,A(i-1))
Hình 11: Hàm tính số ngẫu nhiên
-Hàm mở rộng dữ liệu tạo cách sử dụng giải thuật HMAC, với hoặc MD5 hoặc SHA-1 như là trên cơ sở hàm băm. Như ta có thể thấy,P_hash có thể lặp đi lặp lại nhiều lần như sự cần thiết để tạo ra số lượng dữ liệu được yêu cầu. Ví dụ, nếu P_SHA-1 được dùng để sinh ra 64 byte dữ liệu,nó sẽ được lặp đi lặp lại 4 lần tạo ra 80 byte dữ liệu,mà 16 byte cuối bị loại bỏ. Trong trường hợp này, P_MD5 cũng sẽ được lặp lại 4 lần, tạo ra chính xác 64 bytes dữ liệu. Chú ý rằng mỗi lần lặp lại sẽ gọi 2 hàm
băm.
-Để tạo ra PRF an toàn đến mức có thể,nó sử dụng 2 giải thuật băm theo cách mà sẽ đảm bảo sự an toàn của nó nếu giải thuật vẫn còn bảo mật. PRF được định nghĩa:
hash(ClientHello.random || ServerHello.random || ServerParams)
-PRF lấy khi đầu vào một giá trị bí mật, một nhãn xác định, và một giá trị hạt giống(seed) và tạo ra một output có chiều dài tùy ý. Output được tạo bằng cách phân cắt giá trị bí mật thành hai nửa (S1 và S2 và biểu diễn P_hash ở mỗi nửa, sử dụng MD5 ở một nửa và SHA-1 ở nửa khác. Hai kết quả được thực hiện bởi phép XOR để tạo ra output, cho mục đích này, P_MD5 nhìn chung phải lặp lại nhiều lần hơn P_SHA-1 để tạo một lượng dữ liệu ngang bằng cho input bằng hàm XOR)
9.4 Mã cảnh báo:
-TLS hỗ trợ tất cả các mã alert code được định nghĩa trong SSLv3 với ngoại lệ no_certificate. Một số các code thêm vào được định nghĩa trong TLS, sau đây là một số cảnh báo mức nguy hiểm:
+decryption_failed: một cipher text được giải mã theo cách sai, hoặc nó không phải là phép nhân của chiều dài khối hoặc giá trị đệm của nó, khi kiểm tra là không đúng.
+record_overflow: một TLS record được nhận với một payload (ciphertext) có chiều dài 214+2048 bytes, hoặc ciphertext được giải mã với chiều dài lớn hơn 214+1024 byte.
+unknown_ca: một chuỗi certificate hợp lệ hoặc 1 phần chuỗi được nhận, nhưng certificate không được chấp nhận bởi vì CA certificate không thể được cấp phát hoặc không thể tạo ra kết nối với 1 CA hiểu biết, tin cậy.
+access_defined: một certificate hợp lệ được nhận, vì khi access_control được thừa nhận, sender quyết định không thực thi với thỏa thuận.
+decord_error: một thông điệp không thể được giải mã vì 1 trường bị thiếu range đặc biệt hoặc chiều dài của message không đúng.
+export_restriction: một thỏa thuận không được chấp nhận với việc xuất ra các hạn chế trên chiều dài khóa bị phát hiện.
+protocol_version: phiên bản giao thức mà client nỗ lực thỏa thuận được nhận thấy nhưng không hỗ trợ.
+insufficient_security: trả về thay thế handshake_failure khi thỏa thuận bị thất bại 1 cách đặc biệt bởi vì server yêu cầu cipher nhiều bảo mật hơn những cái khác được hỗ trợ bởi client.
lỗi của giao thức tạo ra không thể để tiếp tục.
-Phần còn lại của các cảnh báo mới bao gồm:
+decrypt_error: toán hạng mã hóa bắt tay bị hư, bao gồm không thể xác minh 1 chữ kí,mã hóa 1 trao đổi khóa hay công nhận 1 thông điệp hoàn tất.
+user_canceled: quá trình bắt tay này bị hoãn lại vì 1 số lí do không liên quan đến sự thất bại giao thức.
+no_renegotiation: gửi đi bởi client trong phần đáp lại client hello sau khi thiết lập bắt tay hoặc những thông điệp này sẽ có kết quả bình thường trong việc thỏa thuận lại, nhưng cảnh báo này chỉ ra rằng sender không thể thỏa thuận. Thông điệp này luôn luôn là 1 cảnh báo(warning).