Mô-đun crypto-gost-tls13 bao gồm phần triển khai TLS 1.3 (RFC 8446 + RFC 9367) Với thuật toán mã hóa GOST. Phiên bản này là phiên bản đầu tiên của thư viện và sẵn sàng để sử dụng nội bộ.
Một đặc điểm độc đáo của thư viện này là việc nó được lập trình hoàn toàn bằng Java. Tất cả các thao tác mã hóa đều được thực hiện bằng các công cụ tích hợp sẵn của thư viện, không cần bất kỳ phụ thuộc bên ngoài nào.
Đây là một trong những triển khai mã nguồn mở đầu tiên của TLS 1.3 với GOST trong Java, do đó việc kiểm tra khả năng tương thích đã được thực hiện ở mức tối thiểu.
Dưới đây là các chức năng của thư viện.
- Các giao thức:
- Bắt tay: đầy đủ (máy khách/máy chủ), ngắn gọn (PSK), hai chiều (mTLS).
- ALPN (RFC 7301) - Đàm phán giao thức lớp ứng dụng (HTTP/2, HTTP/1.1).
- SNI (RFC 6066) - Chỉ định tên người phục vụ Dành cho các triển khai đa người dùng.
- KeyUpdate (RFC 8446 §4.6.3) – cập nhật các khóa mã hóa lưu lượng truy cập.
- Bộ mật mã: TLS_KUZNYECHIK_MGM_STREEBOG_256_L/S.
- ECDHE: CryptoPro-A (256-bit), CryptoPro-B (512-bit)
- Tái mã hóa TLSTREE cho từng bản ghi — thay đổi khóa mã hóa cho mỗi bản ghi TLS.
- Phân mảnh và lắp ráp lại các bản ghi và bắt tay (RFC 8446 §5.1).
- Khôi phục phiên: PSK thông qua NewSessionTicket (PskStore được lưu trữ trong bộ nhớ, chỉ sử dụng một lần).
- Ghim OCSP: máy chủ прикладывает OCSP-ответ к сертификату.
- Các tin nhắn sau khi bắt tay: NewSessionTicket (lưu lại PSK).
- Mật mã học:
- Lịch trình chính: HKDF-Streebog (RFC 5869) trên TLS 1.3 (RFC 8446 §7.1).
- Bảo vệ bản ghi: MGM-AEAD (Kuznyechik) với nonce theo RFC 8446 §5.3.
- Các khóa tạm thời sẽ bị xóa sau khi sử dụng.
- Chứng chỉ:
- Phân tích cú pháp X.509v3 (GOST R 34.10-2012) — trình phân tích cú pháp DER tích hợp sẵn.
- Chuỗi xác thực: chữ ký, DN (người phát hành → chủ thể), Ràng buộc cơ bản, Cách sử dụng khóa, Cách sử dụng khóa mở rộng * (serverAuth / clientAuth), pathLen.
- Kiểm tra tên máy chủ: dNSName + iPAddress (RFC 6125).
- Xác minh phản hồi OCSP (RFC 6960).
4.Транспорт:
- TlsTransport - giao diện.
- InMemoryTlsTransport - dành cho các bài kiểm tra và các kịch bản xử lý đơn tiến trình (hàng đợi trong bộ nhớ).
- SocketTlsTransport — I/O chặn qua java.net.Socket.
- ChannelTlsTransport - Giao thức truyền tải dựa trên NIO SocketChannel (chế độ chặn, có thể bị gián đoạn).
- Các bước bắt tay từng bước:
- TlsHandshakeEngine là một máy trạng thái dùng cho quá trình bắt tay (tách biệt khỏi I/O). Nó sử dụng TlsSession làm bộ điều phối và phù hợp để tích hợp với JSSE (SSLEngine).
- API ByteBuffer:
- TlsRecord.protect/unprotect — Các phương thức quá tải ByteBuffer để tích hợp không sao chép với NIO. Đang tải khóa:
- Pkcs12Loader — đọc PFX (PKCS#12) với PBKDF2-HMAC-SHA256 + AES-256-CBC.
- Kết thúc buổi học:
- close_notify - đóng cửa đúng cách theo giao thức.
- Việc xóa dữ liệu quan trọng khi đóng hoặc khi xảy ra lỗi.
- Cảnh báo xử lý: nghiêm trọng - đóng ngay lập tức và xóa.
- Bảo mật triển khai:
- So sánh trong thời gian không đổi cho các trình liên kết verify_data và PSK (bảo vệ chống lại các cuộc tấn công dựa trên thời gian)
- Xóa dữ liệu khóa: destroy() trên tất cả các đối tượng có khóa (TlsKeySchedule, TlsTrafficKeys, TlsRecord, HandshakeContext), khi đóng, cảnh báo nghiêm trọng, ngoại lệ trong quá trình bắt tay
- Bảo vệ DoS: giới hạn về độ dài chuỗi chứng chỉ (10), thông báo sau khi bắt tay, kích thước bản ghi.
- MGM nonce: Bit MSB của byte đầu tiên được xóa cho ICN (RFC 9058 §3, RFC 9367 §3.3).
- Khóa riêng tư và bản ghi bắt tay của ECDHE sẽ bị xóa sau khi quá trình bắt tay hoàn tất.
- Vật liệu khóa HMAC bị xóa sau khi sử dụng (HkdfStreebog, KdfGostR3411_2012_256).
- Hạn chế:
- Chỉ hỗ trợ PSK khôi phục (không hỗ trợ 0-RTT và PSK bên ngoài).
- Chỉ hỗ trợ psk_dhe_ke (PSK thuần túy không có ECDHE không được hỗ trợ).
- HelloRetryRequest (RFC 8446 §4.1.4) không được hỗ trợ - chỉ sử dụng một nhóm được đặt tên duy nhất (mặc định là GC256A).
- Chỉ hỗ trợ GOST (không hỗ trợ các bộ mã hóa không phải GOST).
- thử nghiệm:
- Thư viện này chứa các bài kiểm tra đáp án đã biết (Known Answer Tests) từ Phụ lục A.1 của RFC 9367 (các biến thể L và S) — bảng mã khóa đầy đủ, TLSTREE, AEAD và ECDHE. Nó cũng vượt qua toàn bộ các bài kiểm tra KAT.
- 4 bài kiểm tra tích hợp (tự tương tác) thông qua socket TCP thực.
- Kiểm thử mờ (fuzz tests) cho các trình phân tích cú pháp: TlsMessageParser (8 phương thức), TlsDerParser (3 phương thức), TlsOcspVerifier (1 phương thức), nhằm đảm bảo an ninh và giảm thiểu nguy cơ tấn công vào các trình phân tích cú pháp.
- Giải pháp kiến trúc:
- TlsHandshakeEngine - máy trạng thái được tách rời khỏi I/O (dành cho mô-đun JSSE trong tương lai).
- Các phương thức quá tải ByteBuffer của TlsRecord.protect/unprotect dành cho NIO/JSSE.
- Bộ nhớ đệm TLSTREE (TlsTreeCache) - tính toán lại chỉ các cấp độ đã thay đổi (RFC 9367).
- InMemoryTlsTransport.Pair là một cặp giao tiếp hai chiều dùng cho các bài kiểm tra và giao tiếp đơn tiến trình.
Thư viện này được phân phối theo giấy phép tự do.
Nguồn: linux.org.ru
