GCM (Galois/Counter Mode), blok şifreleri için tasarlanmış bir AEAD çalışma kipidir. TLS'te en sık AES ile birlikte, AES_128_GCM ve AES_256_GCM adıyla görülür.
Temel çalışma prensibi
GCM iki bileşenin birleşimidir:
- CTR (Counter) kipi: Bir sayaç değeri şifrelenerek anahtar akışı üretilir ve düz metinle XOR'lanır. Bu, paralel işlemeye izin verir.
- GHASH: Şifreli metin ve AAD üzerinde Galois alanında çarpma ile hesaplanan bir özet; sonuç kimlik doğrulama etiketini oluşturur.
TLS'te etiket genellikle 128 bit, nonce ise 96 bittir. Modern işlemcilerdeki AES-NI ve karşıt çarpma (PCLMULQDQ) komutları GCM'yi çok hızlı kılar.
Güvenlik açısından kritik nokta
GCM'de aynı anahtarla aynı nonce'un iki kez kullanılması ciddi bir zayıflıktır: anahtar akışı tekrarlanır ve doğrulama anahtarının sızdırılması mümkün hale gelebilir. TLS 1.3, nonce'u kayıt sıra numarasından türeterek bu riski protokol düzeyinde yönetir. Kendi uygulamanızda GCM kullanıyorsanız nonce'ları rastgele veya sayaçla, tekrar etmeyecek biçimde üretin.
Sunucuda GCM paketlerini öne alma
# Nginx
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-CHACHA20-POLY1305;
ssl_prefer_server_ciphers off;
Hangi GCM paketlerini OpenSSL'inizin desteklediğini görmek için:
openssl ciphers -v 'ECDHE+AESGCM'
Ne zaman tercih edilir?
- AES donanım hızlandırması olan sunucularda ilk tercihtir.
- Hızlandırma olmayan eski mobil cihazlarda ChaCha20-Poly1305 daha verimli olabilir.
Yapılandırmanızı SSL denetleme aracıyla sınayabilir, genel kavramlar için bilgi bankamıza bakabilirsiniz. Özetle GCM, hem hızlı hem de doğru kullanıldığında güvenilir bir AEAD kipidir.