Tôi đã cố gắng giải mã thủ công một số lưu lượng truy cập TLS 1.3 vì lý do giáo dục và đã vấp phải rào cản. Cho đến nay, tôi đã có thể hoàn thành hầu hết lịch trình khóa, bao gồm cả việc lấy được các bí mật lưu lượng truy cập bắt tay chính xác từ các khóa ECDHE. Tuy nhiên, tôi không thể tìm thấy nhiều thông tin về cách định dạng bản mã và thẻ xác thực trong các thông báo Dữ liệu ứng dụng.
Đây là bản ghi đầy đủ.
1703030017bf687d10e2f209661418d92aaf3626dfe5670f3127d6ed
Và đây là bí mật lưu lượng bắt tay của máy chủ:
475a0f3b5a86d4797e24545c2eb6388de9507e5e0bc367c74c3e78e0d8033f34b721a2e3a1d89ec5990287954402fc43
Wireshark nói với tôi rằng việc giải mã tin nhắn này mang lại bản rõ 08 00 00 02 00 00
, tương ứng với thông báo Tiện ích mở rộng được mã hóa.
Từ những gì tôi có thể nói, "dữ liệu được liên kết" phải là byte 17 03 03 00 17
, và phần còn lại của bản ghi là bản mã + thẻ xác thực.RFC 8446 nói rằng bộ mật mã TLS_AES_256_GCM_SHA384 được định nghĩa trong RFC 5116, nhưng RFC 5116 nói:
Tài liệu này không chỉ định bất kỳ mã hóa cụ thể nào cho AEAD
đầu vào và đầu ra, vì mã hóa không ảnh hưởng đến bảo mật
các dịch vụ được cung cấp bởi một thuật toán AEAD.
Tuy nhiên, tất cả những nỗ lực của tôi để giải mã dữ liệu đều không xác thực được, điều này dẫn đến hai khả năng:
- Tôi đang dẫn xuất các khóa giao thông sai. Tôi biết rằng quy trình HKDF-Mở rộng-Nhãn của tôi hoạt động vì tất cả các bí mật khác được lấy chính xác và khớp với các giá trị được OpenSSL ghi lại. Tuy nhiên, phải thừa nhận rằng tôi không chắc chắn 100% khóa chính xác và độ dài IV là gì. Hiện tại tôi đang sử dụng khóa 32 byte và IV 12 byte. Tôi không biết đó có phải là những gì TLS 1.3 sử dụng hay không.
- Tôi đang đọc sai thẻ xác thực/bản mã. Tôi không thể tìm thấy bất kỳ tài liệu tham khảo nào về định dạng phù hợp, vì vậy tất cả những nỗ lực của tôi trong lĩnh vực này chỉ là phỏng đoán. Đặc biệt, tôi không chắc thẻ xác thực dành cho bộ mật mã này dài bao lâu, mặc dù việc tra cứu trên Google gợi ý rằng nó dài 12 byte.
Tôi đang làm gì sai?