← Yazılar/Siber GüvenlikYazı 007Örnek

Birbitdeğişir,yarısıdevrilir

Kriptografik özet fonksiyonlarının en sezgisiz özelliği çığ etkisidir: girdideki tek bir bit, çıktının yaklaşık yarısını çevirir. SHA-256'nın içine bakıyor, doğum günü sınırıyla kısmi çakışma arıyoruz.

Tarih
22 Eylül 2026
Okuma
2 dk · 315 kelime
Yazar
RANVIER Ekibi
Kanıt düzeyi
Örnek içerik

Bir sinir lifinde miyelin, sinyali gürültüden yalıtır. Bilgi sistemlerinde bu işi kriptografi yapar. En temel yapı taşlarından biri de özet (hash) fonksiyonudur.

İyi bir özet fonksiyonundan ne bekleriz?

Kriptografik bir özet fonksiyonu HH, keyfi uzunluktaki bir girdiyi sabit uzunlukta bir çıktıya eşler. SHA-256 için bu çıktı 256 bittir. Üç direnç özelliği isteriz:

  • Ön-görüntü direnci: bir hh verildiğinde H(x)=hH(x) = h olan bir xx bulmak zor olmalı.
  • İkinci ön-görüntü direnci: bir xx verildiğinde H(x)=H(x)H(x') = H(x) olan başka bir xx' bulmak zor olmalı.
  • Çakışma direnci: H(x)=H(x)H(x) = H(x') olan herhangi bir xxx \neq x' çifti bulmak zor olmalı.

Bu özelliklerin görünür yüzü çığ etkisidir. Katı çığ ölçütüne göre girdideki tek bir bit değiştiğinde çıktıdaki her bit 1/2 olasılıkla çevrilmelidir. Yani ortalama 128 bit devrilir ve devrilen bit sayısı yaklaşık B(256, 1/2)\mathcal{B}(256,\ 1/2) dağılımına uyar: ortalama 128, standart sapma 8.

L-06SHA-256 Çığ Etkisi
Tam ekran ↗
Canlı deney · kaydırınca başlar
Etkileşimli şekilYazdığınız metnin gerçek SHA-256 özeti. Tek bir karakteri ya da tek bir biti değiştirin; devrilen bitlerin dağılımı zamanla binom eğrisine oturur.

İçeride ne oluyor?

SHA-256, mesajı 512 bitlik bloklara böler ve her bloğu 64 turluk bir sıkıştırma fonksiyonundan geçirir (Merkle–Damgård yapısı). Her turda sekiz adet 32 bitlik çalışma değişkeni döndürme, XOR, çoğunluk ve seçim fonksiyonlarıyla karıştırılır:

sha256 · tek bir tur
const rotr = (x: number, n: number) => (x >>> n) | (x << (32 - n));
 
const S1 = rotr(e, 6) ^ rotr(e, 11) ^ rotr(e, 25);
const ch = (e & f) ^ (~e & g); // seçim: e bitine göre f ya da g
const t1 = (h + S1 + ch + K[i] + W[i]) | 0;
const S0 = rotr(a, 2) ^ rotr(a, 13) ^ rotr(a, 22);
const maj = (a & b) ^ (a & c) ^ (b & c); // çoğunluk
const t2 = (S0 + maj) | 0;
 
h = g; g = f; f = e; e = (d + t1) | 0;
d = c; c = b; b = a; a = (t1 + t2) | 0;

Doğrusal olmayan ch ve maj fonksiyonları ile farklı döndürme miktarları, tek bir bitlik farkın birkaç tur içinde bütün duruma yayılmasını sağlar. 64 tur, bu yayılmanın defalarca tamamlanması için fazlasıyla yeterlidir.

Doğum günü sınırı

23 kişilik bir sınıfta iki kişinin aynı gün doğmuş olma olasılığı %50'yi aşar. Aynı hesap özet fonksiyonları için de geçerlidir: kk bitlik bir çıktıda ilk çakışmayı bulmak için beklenen deneme sayısı

E[deneme]π22k1,252k/2E[\text{deneme}] \approx \sqrt{\frac{\pi}{2} \cdot 2^{k}} \approx 1{,}25 \cdot 2^{k/2}

olur. 16 bitlik kısmi bir çakışma yaklaşık 321 denemede, 32 bitlik bir çakışma yaklaşık 82 000 denemede bulunur. Tam 256 bit için bu sayı 21282^{128} mertebesindedir: evrendeki bütün bilgisayarlarla bile ulaşılamaz. Deneydeki “kısmi çakışma avı” bu sınırı canlı olarak doğrular.

Bu yazıya atıf

RANVIER Ekibi (2026). Bir bit değişir, yarısı devrilir. RANVIER. https://ranvier.science/yazilar/sha256-cig-etkisi/

Sıradaki yazı · 003Fizik

Milyonda bir radyanın hikâyesi

21 Eylül 2026 · 1 dk →