SHA-384 Secure Hash Algorithm
Gelir İdaresi Başkanlığı teknik kılavuzları, Vergi Usul Kanunu ve UBL-TR standartları referans alınarak doğrulanmıştır.
Tanımı ve Standardizasyon Mimarisi
SHA-384 (Secure Hash Algorithm 384-bit), ABD Ulusal Güvenlik Ajansı (NSA) tarafından tasarlanan ve Ulusal Standartlar ve Teknoloji Enstitüsü (NIST) tarafından FIPS PUB 180-4 standardıyla yayımlanan, SHA-2 kriptografik özet fonksiyonu ailesine ait yüksek güvenlikli bir algoritmadır.
SHA-384, yapısal olarak 64-bit kelime uzunluğuna sahip SHA-512 algoritması ile birebir aynı matematiksel işlem motorunu ve 80 turluk sıkıştırma döngüsünü kullanır. Temel farkı; SHA-512'den farklı 8 adet 64-bitlik başlangıç sabit vektörü ($H_0 \dots H_7$) kullanması ve 80 turun sonunda elde edilen 512 bitlik durum çıktısının en soldaki 384 bitinin (48 Bayt / 96 karakterli onaltılık dize) nihai özet olarak alınması, kalan 128 bitin ise güvenli bir şekilde budanmasıdır (truncation).
Matematiksel Blok Yapısı ve Algoritmik Adımlar
SHA-384 algoritması, 64-bitlik modern işlemci mimarilerinde azami verimlilik sağlayacak şekilde 1024-bitlik bloklar halinde çalışır:
- Mesaj Dolgulama (Padding): Orijinal mesaj uzunluğu $L$ bit olmak üzere, mesajın sonuna '1' biti ve ardından $L + 1 + K \equiv 896 \pmod{1024}$ şartını sağlayacak sayıda '0' biti eklenir. Son 128 bite ise $L$'nin 128-bitlik ikilik gösterimi yazılarak mesaj blokları tam 1024 bite tamamlanır.
- Blok Ayrıştırma: Dolgulanmış mesaj her biri 1024 bitlik ($M_1, M_2, \dots, M_n$) bloklara ayrılır ve her blok 16 adet 64-bit kelimeye bölünür.
- Mesaj Çizelgesi Genişletme ($W_0 \dots W_{79}$): İlk 16 kelime doğrudan bloktan alınır; sonraki 64 kelime ise $\sigma_0$ ve $\sigma_1$ kaydırma ve XOR operasyonlarıyla üretilir.
- 80 Tur Sıkıştırma: 8 çalışma değişkeni ($a, b, c, d, e, f, g, h$) üzerinde 64-bit $Ch$, $Maj$, $\Sigma_0$ ve $\Sigma_1$ mantıksal fonksiyonları işletilir.
- Budama (Truncation): 80 tur sonucunda 8 adet 64 bitlik özet çıktısından ilk 6 tanesi ($H_0, H_1, H_2, H_3, H_4, H_5$) birleştirilerek tam 384 bitlik çıktı elde edilir.
NSA CNSA ve Suite B Güvenlik Standartlarındaki Yeri
SHA-384, ABD Ulusal Güvenlik Ajansı'nın gizli ve çok gizli (Top Secret) devlet sırlarının korunması için yayımladığı CNSA (Commercial National Security Algorithm Suite) şartnamesinde zorunlu tutulan tek özet algoritmasıdır. Bu standartta AES-256 simetrik şifreleme ve ECDSA P-384 eliptik eğri dijital imza standardı ile kusursuz bir güvenlik seviyesi eşleşmesi (192-bit güvenlik eşdeğeri) sunar.
Uygulama Alanları ve E-Dönüşüm Entegrasyonu
- TLS 1.3 ve TLS 1.2 Cipher Suite'leri:
TLS_AES_256_GCM_SHA384veECDHE-ECDSA-AES256-GCM-SHA384gibi en yüksek şifreleme profillerinde anahtar türetimi (HKDF) ve el sıkışma bütünlüğü için kullanılır. - Nitelikli Elektronik İmza (QES): 5070 sayılı Kanun ve eIDAS regülasyonlarında 384-bit Eliptik Eğri (NIST P-384 ve brainpoolP384r1) ile üretilen nitelikli sertifikalarda imza özeti olarak zorunludur.
- Uzatma Saldırılarına Karşı Doğal Koruma (Length-Extension Immunity): Çıktı aşamasında 128 bit budandığı için klasik SHA-256 ve SHA-512'yi etkileyebilen Merkle-Damgård uzatma saldırılarına karşı doğal olarak bağışıktır.
CLI ve Python ile SHA-384 Kullanımı
# Linux / macOS terminalinde SHA-384 özeti alma
sha384sum sozlesme_imzali.pdf
# OpenSSL ile SHA-384 hesaplama
openssl dgst -sha384 -hex e_arsiv_raporu.xml
# Python hashlib ile SHA-384 üretimi
import hashlib
digest = hashlib.sha384("e-Tamga Güvenli Dijital Dönüşüm".encode("utf-8")).hexdigest()
print(f"SHA-384 ({len(digest)*4} bit): {digest}")