SHA-3 (Keccak) Hash Function
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 Tarihçesi
SHA-3 (Secure Hash Algorithm 3); Guido Bertoni, Joan Daemen, Michaël Peeters ve Gilles Van Assche'den oluşan kriptografi ekibi tarafından tasarlanan Keccak algoritması temel alınarak Ulusal Standartlar ve Teknoloji Enstitüsü (NIST) tarafından 2015 yılında FIPS PUB 202 standardıyla resmen yayımlanan yeni nesil kriptografik özet fonksiyonudur.
NIST'in 2007 yılında başlattığı ve 5 yıl süren global yarışmada yüzlerce algoritma arasından birinci seçilen SHA-3; MD5, SHA-1 ve SHA-2 ailelerinin kullandığı klasik Merkle-Damgård mimarisinden tamamen farklı, devrim niteliğinde bir matematiksel tasarım olan Sünger Fonksiyonu (Sponge Construction) yaklaşımını benimsemiştir.
Sünger Mimarisi: Absorblama (Emme) ve Sıkma Fazları
SHA-3 algoritması, 1600 bit genişliğindeki dahili durum matrisi ($ ext{State} = 5 imes 5 imes 64$ bit) üzerinde çalışır. Durum matrisi iki temel parametreye bölünür:
- Oran (Rate - $r$): Her turda işlenen mesaj bitlerinin genişliği.
- Kapasite (Capacity - $c$): Algoritmanın güvenlik seviyesini belirleyen ve mesaj bitleriyle doğrudan XOR'lanmayan gizli rezerv genişlik ($r + c = 1600$ bit).
Sünger fonksiyonu iki ana fazdan oluşur:
- Absorbing (Emme Aşaması): Girdi mesajı $r$ bitlik bloklara bölünür. Her blok durum matrisinin ilk $r$ biti ile XOR'lanır ve ardından 24 turluk $ ext{Keccak}-f[1600]$ permütasyon fonksiyonu ($ heta, ho, \pi, \chi, \iota$ adımları) işletilir.
- Squeezing (Sıkma Aşaması): Tüm mesaj emildikten sonra, durum matrisinin ilk $r$ bitinden istenen uzunlukta kriptografik özet okunur. Çıktı yetersizse ilave permütasyon turları işletilerek veri sıkılmaya devam edilir.
SHA-3 Ailesi Türevleri ve SHAKE XOF Desteği
| Fonksiyon Adı | Çıktı Boyutu | Oran ($r$) | Kapasite ($c$) | Güvenlik Seviyesi (Çarpışma / Pre-image) |
|---|---|---|---|---|
| SHA3-224 | 224 bit | 1152 bit | 448 bit | 112 bit / 224 bit |
| SHA3-256 | 256 bit | 1088 bit | 512 bit | 128 bit / 256 bit |
| SHA3-384 | 384 bit | 832 bit | 768 bit | 192 bit / 384 bit |
| SHA3-512 | 512 bit | 576 bit | 1024 bit | 256 bit / 512 bit |
| SHAKE128 (XOF) | Değişken | 1344 bit | 256 bit | 128 bit (İstenen uzunlukta çıktı) |
| SHAKE256 (XOF) | Değişken | 1088 bit | 512 bit | 256 bit (Kuantum sonrası kriptografi uyumlu) |
Kriptografik Üstünlükleri ve Uzatma Saldırısı Bağışıklığı
- Uzatma Saldırılarına (Length-Extension Attacks) Karşı %100 Bağışıklık: Sıkma fazında gizli kapasite ($c$) bitleri dışarı sızdırılmadığı için HMAC mekanizmasına dahi gerek kalmadan doğrudan güvenli MAC olarak kullanılabilir (KMAC).
- Donanımsal Silikon Verimliliği: ASIC ve FPGA çiplerinde SHA-2'ye göre çok daha az mantık kapısı (gate) kullanarak son derece yüksek hız ve düşük enerji tüketimi sağlar.
- Kuantum Sonrası Kriptografi (PQC) Standartları: NIST FIPS 203 (ML-KEM) ve FIPS 204 (ML-DSA) kristal tabanlı kuantum sonrası algoritmalarında dahili matris genişletme için SHAKE fonksiyonları temel alınmıştır.
Python ile SHA-3 ve SHAKE Kullanımı
import hashlib
# SHA3-256 Hesaplanması
h_sha3 = hashlib.sha3_256(b"e-Tamga E-Donusum Ansiklopedisi").hexdigest()
print("SHA3-256:", h_sha3)
# SHAKE256 ile İstenen Uzunlukta (Örn: 64 bayt / 512 bit) Değişken Çıktı Üretimi
h_shake = hashlib.shake_256(b"Kriptografik Tohum Verisi").hexdigest(64)
print("SHAKE256 (64 Bayt):", h_shake)