Modül kripto-hayalet-tls13 uygulamayı içerir TLS 1.3 (RFC 8446 + RFC 9367) GOST şifreleme yöntemiyle geliştirilmiştir. Bu sürüm, kütüphanenin ilk versiyonudur ve dahili kullanım için hazırdır.
Kütüphanenin benzersiz bir özelliği, tamamen Java ile yazılmış olmasıdır. Tüm kriptografik işlemler, harici bağımlılıklar olmaksızın, kütüphanenin yerleşik araçları kullanılarak gerçekleştirilir.
Bu, Java'da GOST ile TLS 1.3'ün ilk açık kaynaklı uygulamalarından biridir, bu nedenle birlikte çalışabilirlik testleri mümkün olan en az düzeyde yapılmıştır.
Aşağıda kütüphanenin olanakları yer almaktadır.
- Protokoller:
- El sıkışma: tam (istemci/sunucu), kısa (PSK), karşılıklı (mTLS).
- ALPN (RFC 7301) - Uygulama Katmanı Protokolü Müzakeresi (HTTP/2, HTTP/1.1).
- SNI (RFC 6066) - İsim Belirtimi sunucu Çoklu kiracılı dağıtımlar için.
- KeyUpdate (RFC 8446 §4.6.3) – trafik şifreleme anahtarlarının güncellenmesi.
- Şifre paketleri: TLS_KUZNYECHIK_MGM_STREEBOG_256_L/S.
- ECDHE: CryptoPro-A (256-bit), CryptoPro-B (512-bit)
- Kayıt başına TLSTREE yeniden anahtarlama — her TLS kaydı için şifreleme anahtarının değiştirilmesi.
- El sıkışmaların ve kayıtların parçalanması ve yeniden birleştirilmesi (RFC 8446 §5.1).
- Oturumun yeniden başlatılması: NewSessionTicket aracılığıyla PSK (PskStore bellek içi, tek kullanımlık).
- OCSP zımbalama: sunucu OCSP yanıtını sertifikaya ekler.
- El sıkışma sonrası mesajlar: NewSessionTicket (PSK hariç).
- Kriptografi:
- Ana program: TLS 1.3 üzerinden HKDF-Streebog (RFC 5869) (RFC 8446 §7.1).
- Kayıt koruması: RFC 8446 §5.3'e göre nonce ile MGM-AEAD (Kuznyechik).
- Geçici anahtarlar kullanımdan sonra silinir.
- Sertifikalar:
- X.509v3 ayrıştırma (GOST R 34.10-2012) — yerleşik DER ayrıştırıcısı.
- Doğrulama zinciri: imzalar, DN (veren → konu), Temel Kısıtlamalar, Anahtar Kullanımı, Genişletilmiş Anahtar Kullanımı (sunucu kimlik doğrulaması / istemci kimlik doğrulaması), yol uzunluğu.
- Ana bilgisayar adı kontrolü: dNSName + iPAddress (RFC 6125).
- OCSP yanıtlarının doğrulanması (RFC 6960).
4.Ulaşım:
- TlsTransport - arayüz.
- InMemoryTlsTransport - testler ve tek işlem senaryoları için (bellek içi kuyruk).
- SocketTlsTransport — java.net.Socket üzerinden engellemeli G/Ç işlemi.
- ChannelTlsTransport - NIO SocketChannel tabanlı taşıma (engelleme modu, kesilebilir).
- Adım adım el sıkışma:
- TlsHandshakeEngine, (giriş/çıkıştan bağımsız) el sıkışma için bir durum makinesidir. Orkestratör olarak TlsSession'ı kullanır ve JSSE (SSLEngine) ile entegrasyon için uygundur.
- ByteBuffer API:
- TlsRecord.protect/unprotect — NIO ile sıfır kopyalama entegrasyonu için ByteBuffer aşırı yüklemeleri. Tuşlar yükleniyor:
- Pkcs12Loader — PBKDF2-HMAC-SHA256 + AES-256-CBC ile PFX (PKCS#12) dosyalarını okuyor.
- Oturumun sonu:
- close_notify - protokole uygun şekilde doğru kapatma.
- Kapatma sırasında veya hata yapıldığında önemli malzemelerin silinmesi.
- Uyarı: Ölümcül hata - derhal kapatma + silme.
- Uygulama güvenliği:
- verify_data ve PSK bağlayıcıları için sabit zamanlı karşılaştırmalar (zamanlama saldırılarına karşı koruma)
- Anahtar materyalinin silinmesi: Kapatıldığında anahtar içeren tüm nesnelerde (TlsKeySchedule, TlsTrafficKeys, TlsRecord, HandshakeContext) destroy() işlemi, ölümcül uyarı, el sıkışmada istisna
- DoS koruması: sertifika zinciri uzunluğu (10), el sıkışma sonrası mesajlar ve kayıt boyutu üzerinde sınırlamalar.
- MGM nonce: İlk baytın en anlamlı biti (MSB), ICN için temizlenir (RFC 9058 §3, RFC 9367 §3.3).
- ECDHE özel anahtarı ve el sıkışma tutanağı, el sıkışma işlemi tamamlandıktan sonra yok edilir.
- HMAC anahtar materyali kullanımdan sonra silinir (HkdfStreebog, KdfGostR3411_2012_256).
- Sınırlamalar:
- Yalnızca devam eden PSK (0-RTT ve harici PSK desteklenmiyor).
- Yalnızca psk_dhe_ke (ECDHE içermeyen saf PSK desteklenmiyor).
- HelloRetryRequest (RFC 8446 §4.1.4) desteklenmiyor - yalnızca bir adlandırılmış grup kullanılıyor (varsayılan olarak GC256A).
- Yalnızca GOST (GOST dışı şifreleme paketleri desteklenmemektedir).
- Test yapmak:
- Kütüphane, RFC 9367 Ek A.1'den (L ve S varyantları) Bilinen Cevap Testlerini (KAT) içerir: tam anahtar programı, TLSTREE, AEAD ve ECDHE. Ayrıca tüm KAT testlerinden de geçer.
- Gerçek TCP soketleri üzerinden 4 entegrasyon testi (kendi kendine birlikte çalışabilirlik).
- Ayrıştırıcılar için güvenlik sağlamak ve ayrıştırıcılara yönelik saldırı vektörünü azaltmak amacıyla Fuzz testleri: TlsMessageParser (8 yöntem), TlsDerParser (3 yöntem), TlsOcspVerifier (1 yöntem).
- Mimari çözümler:
- TlsHandshakeEngine - G/Ç'den bağımsız durum makinesi (gelecekteki JSSE modülü için).
- NIO/JSSE için TlsRecord.protect/unprotect fonksiyonlarının ByteBuffer aşırı yüklemeleri.
- TLSTREE önbelleği (TlsTreeCache) - yalnızca değişen seviyelerin yeniden hesaplanması (RFC 9367).
- InMemoryTlsTransport.Pair, testler ve tek işlem iletişimi için çift yönlü bir çifttir.
Kütüphane ücretsiz bir lisans altında dağıtılmaktadır.
Kaynak: linux.org.ru
