Hash ve Mit: Tek Yönlü Sayılara Dair Uygar Bir Rehber

hash fonksiyonu nedir

Not: Bu içerik, Dr. Craig Steven Wright tarafından kaleme alınan orijinal makalenin Türkçe çevirisidir. Çeviri, yazarın izni doğrultusunda hazırlanmıştır ve tüm telif hakları Dr. Craig Steven Wright’a aittir.

Orijinal İngilizce metne şu bağlantı üzerinden ulaşabilirsiniz: https://singulargrit.substack.com/p/the-hash-and-the-myth-a-civilised

Dr. Wright’ın Substack Profili: https://substack.com/@cstominaga

Dr. Wright’ın Twitter (X) Profili: https://x.com/CsTominaga


Hash ve Mit: Tek Yönlü Sayılara Dair Uygar Bir Rehber

Hash’lerin neden acımasız kütüphaneciler gibi davrandığı, çakışmaların neden kaçınılmaz olduğu ve “çakışma imkânsızdır” ifadesinin neden saymayı bilmeyenlerin sloganı olduğu

Anahtar Kelimeler

hash fonksiyonları, çakışmalar, ön-görüntü direnci, güvercin yuvası ilkesi, SHA-256, SHA-512, kriptografi temelleri, benzetmeler, güvenlik varsayımları, mesaj uzayı

I. Açılış Provokasyonu

Sunucu odalarında, yatırımcı sunumlarında ve konferans konuşmalarının loş ışıklı mabetlerinde beslenen modern bir fantezi vardır: bir hash’in bir tür metafizik damga olduğu fantezisi. Verilerinizi kutsal kutudan geçirin, kutsal numarayı alın ve işte: dosya bozulmazlığa vaftiz edildi. İnsanlar, endişeli köylülerin bir zamanlar “kutsal emanet” dediği gibi “kriptografik hash” diyorlar ve bununla aynı şeyi kastediyorlar: şüpheyi nezaketsizlik haline getiren bir tılsım. Bu masalda hash sadece özetlemez; takdis eder. Sanki sahteciliği bir kararnameyle, balmumu üzerindeki bir kraliyet mührü gibi, sadece daha fazla sıfır ve daha az saraylı ile ortadan kaldırıyormuş gibi muamele görür.

Bu inanış rahatlatıcıdır, tam da bu yüzden tehlikelidir. Çünkü yanlış bir huşu öğretir. Hash’in, evrenin tasarımındaki bir başarıdan ziyade, sanki evrende bir boşlukmuş gibi yanlış bir nedenden dolayı etkileyici görünmesine neden olur. Tütsüyü kazıdığınızda hem daha az mistik hem de daha hayranlık uyandırıcı bir şey bulursunuz. Bir hash, uç bir disipline itilmiş sıradan bir matematiktir: acımasızca tutarlı, değişime karşı saçma derecede hassas ve geri döndürme umutlarınıza karşı kasıtlı olarak sağır olan tek yönlü bir indirgeme. Bir kehanet değildir. Bir makinedir. Teolojik anlamda “ispatlamaz”; mühendislik anlamında “sınırlar”. Ona herhangi bir boyutta bir mesaj verirsiniz, o da size soğukkanlı bir memur gibi davranan sabit boyutlu bir parmak izi verir: aynı girdi her zaman aynı çıktıyı verir, farklı bir girdi şiddetli bir öngörülemezlikle farklı bir çıktı verir ve hiçbir yalvarış memura sadece parmak izinden orijinalin ne olduğunu söyletemez.

Yine de moda sözcüklerin ruhban sınıfı, hash’leri sanki mantıktan muafiyetmiş gibi pazarlıyor. İşte saflar için sapkınlık gibi göründüğü için broşürlerin dışında tuttukları temel gerçek: bir hash çakışmalıdır (collision). Belki değil. Mutlaka. Eğer sınırsız bir olası mesajlar dünyasını sabit uzunluktaki çıktılardan oluşan sınırlı bir dünyaya sıkıştırırsanız, aşırı kalabalık bir şehrin mükerrer soyadlarını garanti etmesi gibi tekrarları da garanti etmiş olursunuz. Güvercin yuvası ilkesi bir ruh hali değildir; aritmetiktir. Olası hash değerlerinden çok daha fazla olası girdi vardır, hem de bunu kağıda dökmenin bile edepsizlik hissettireceği kadar uçsuz bucaksız bir sonsuzlukla. Dolayısıyla çakışmalar, asla gerçekleşmemesini gergin bir şekilde umduğunuz bir kusur değildir. Onlar, hashing fikrinin ta kendisine dahil edilmiş bir kesinliktir.

Ve yetişkinlerin konuşması tam da burada başlar. Hash’ler tam da çakışmaların kaçınılmazlığını kabul ettikleri ve onları pratikte ilgisiz kıldıkları için kullanışlıdırlar. Onların gücü metafiziksel imkansızlık değil; herhangi bir kestirme yolun disiplinli bir şekilde umutsuz bırakılmasıdır. Saldırganlara zekice bir rota bırakmazlar, sadece “prensipte mümkün” olanın “pratikte saçma” hale geleceği kadar uzatılmış uzun ve aptalca bir kaba kuvvet (brute force) yolu bırakırlar. Kriptografide, her dürüst zanaatta olduğu gibi, batıl inanç ile yetkinlik arasındaki fark, gerçekliğin sizin için bükülmeyeceğini bilmek ve araçları o kadar iyi inşa etmektir ki bükülmesine gerek kalmamasıdır.

II. Ruhban Sınıfı Olmadan Hash Fonksiyonu Nedir?

Bir hash fonksiyonu, herhangi bir şeyi sabit uzunlukta bir parmak izine dönüştüren bir makinedir. Buradaki “herhangi bir şey” lafzidir: tek kelimelik bir not, bir roman, bir fotoğraf, bir veritabanı veya birinin kötü kararlarıyla dolu koca bir sabit disk. Girdiyi ona beslersiniz, o da belirlenmiş bir boyutta—256 bit, 512 bit, tasarım neyi öngörüyorsa—kısa bir bit dizisi tükürür. Boyut asla değişmez. Mesele budur. Girdi küçücük veya devasa olabilir; çıktı, her zaman tek bir formatta hüküm veren bir yargıç gibi, daima aynı uzunluktadır.

Kitabınızın ne kadar değerli olduğunu söylerseniz söyleyin, kitabınızın tamamını saklamayı reddeden acımasız bir kütüphaneci hayal edin. Ona bir parşömen, bir kitap ya da üzerinde üç kelime yazılı bir peçete getirirsiniz ve o size sabit uzunlukta bir katalog kodu verir. O kod sizin metniniz değildir. Metninizin minyatür halini içermez. Sadece tutarlı bir etikettir. Aynı eşyayı tekrar getirirseniz, aynı etiketi alırsınız. Farklı bir şey getirirseniz—sadece bir virgül bile farklı olsa—tamamen alakasız görünen bir etiket alırsınız. Kütüphaneci şiirsel olmaya çalışmıyor; affetmez olmaya çalışıyor. Etiket, tüm kütüphaneyi yanınızda taşımadan kimliği hızlıca kontrol etmenizi sağlar.

Ya da daha kirli ve daha dürüst bir şey tercih ederseniz, tam olarak aynı uzunlukta sosisler üreten bir kıyma makinesi hayal edin. Onu bir tavşanla ya da bir bufaloyla besleyebilirsiniz; her seferinde aynı boyutta sosis çıkar. Makine, içine tıktığınız şeydeki küçücük bir değişikliğin—fazladan bir kemik, farklı bir kesim—sosisi tamamen değiştireceği şekilde tasarlanmıştır. Ancak sosis, daha büyük bir avla beslediğiniz için asla uzamaz. Değişken boyutlu bir girdiden elde edilen sabit boyutlu bir üründür. Daha da önemlisi, sosisi tekrar ineğe geri döndüremezsiniz. Makine, ayırt edici yapıyı bilerek yok eder. Bu tek yönlülük tüm numaradır.

Yani bir hash, verinin kompakt, tekrarlanabilir bir parmak izidir. Kısa, sabit ve aşırı hassas olduğu için bir şeyleri hızlıca karşılaştırmak, taahhütleri mühürlemek ve kurcalamayı tespit etmek için mükemmeldir. Ancak restorasyon vaat eden bir sıkıştırma şeması değildir. Geri döndürülebilir bir kod değildir. Tek yönlü bir indirgemedir: Gerçekliğin tüm karmaşasını alın ve tüm gerçekliği yanınızda taşımanıza gerek kalmadan aynılığı tanımanızı sağlayan düzenli, sabit uzunlukta bir özet oluşturun. Ruhban sınıfı bunu mistisizmle süslüyor. Oysa bundan daha basit ve öyle olduğu için de daha güçlüdür.

III. Hash’in Amacı: Üç Sade Görev

Bir hash’e sihirli bir muska gibi davranmayı bırakıp ona bir araç gibi davranmaya başladığınızda, kullanım alanları neredeyse utanç verici derecede pratik hale gelir. İlk görev, tahrifatı yakalamanın o gösterişsiz işi olan bütünlüktür (integrity). Eğer o acımasız kütüphaneci dün size bir kitap için bir katalog kodu verdiyse ve siz bugün “aynı” kitapla geri dönerseniz, her şeyi yeniden okumak yerine kodu kontrol edebilirsiniz. Kodlar eşleşirse, kitap aynıdır. Eşleşmezlerse, bir şeyler değişmiştir; belki bir yazım hatası, belki bir sahtecilik, belki de siz bakmazken birisi araya bir sayfa sıkıştırmaya çalışmıştır. Kütüphanecinin değişikliğin nerede olduğunu bilmesine gerek yoktur; uyuşmazlık size nesnenin artık özdeş olmadığını söyler. Hash’ler bunu dosyalar için yapar. Bir bit yer değiştirsin, bir karakter değişsin, bir piksel kaysın; parmak izi anında tamamen farklı bir sayıya fırlar. Değişikliği elle avlamazsınız; hash size değişikliğin var olduğunu söyler.

İkinci görev, zaman içinde uygulanan bütünlük olan taahhüttür (commitment). Bir mesajı henüz ifşa etmeden kendinizi ona bağlamak istersiniz. Bu yüzden mühürlü kitabı kütüphaneciye uzatır, kodu alır ve kodu dünyaya ilan edersiniz. Daha sonra kitabı açtığınızda, herkes onu aynı memurdan geçirebilir ve kodun eşleşip eşleşmediğini görebilir. Eğer eşleşirse, arada kitabı değiştirmemişsiniz demektir. Eşleşmezse, yakalanırsınız. Bu, kimsenin yüz ifadenize güvenmesine gerek kalmadan “Daha sonra hile yapmayacağım” demenin medeni bir yoludur. Hash, kimsenin ifşa olmadan makul bir şekilde yeniden eritemeyeceği balmumu mühürdür.

Üçüncü görev, ölçekli indeksleme ve karşılaştırmadır; yani kıyma makinesinin rüştünü ispatladığı yerdir. Küçük, sabit boyutlu sosisleri saklamak ve karşılaştırmak, bütün inekleri pazarda gezdirmekten çok daha kolaydır. Veritabanları, devasa öğeleri hızlıca etiketlemek ve bulmak için hash’leri kullanır. Sistemler, nesnelerin tamamı yerine parmak izlerini karşılaştırır; çünkü parmak izlerini işlemek ucuzdur, boyutları tektir ve aynılık testleri için acımasızca güvenilirdir. Kütüphane kataloğunuzun her kitabı kataloğun içinde saklamasını istemezsiniz; doğru kitabı hızlıca bulmanızı ve doğrulamanızı sağlayan özlü bir etiket istersiniz. Hash’ler, onlara verdiğiniz herhangi bir veri için kader gibi davranacak kadar iyi tasarlanmış o etiketlerdir.

Dolayısıyla bir hash’in amacı gizem değildir. Kesinliğin ekonomisidir: Değişikliği tespit etmenizi, kendinizi bir iddiaya bağlamanızı ve devasa koleksiyonları onların yığını içinde boğulmadan yönetmenizi sağlayan küçücük, sabit uzunlukta bir yapay olgudur.

IV. Çakışmalar: Kaçınılmaz Gölge

Çakışma (collision), iki farklı girdiye aynı hash çıktısının atandığı andır. Hepsi bu. Gök gürültüsü yok, skandal yok; sadece özdeş olmayan iki mesajın özdeş bir parmak izine indirgenebileceği şeklindeki basit gerçek. Eğer bu bir kusur gibi geliyorsa, bunun tek sebebi size matematiğin çocuksu bir versiyonunun pazarlanmış olmasıdır. Çakışmalar, şanssızsanız başınıza gelebilecek tuhaf bir kaza değildir. Hashing fikrinin ta kendisi için ödediğiniz bedeldir.

Soyadından çok daha fazla insanın olduğu bir kasaba hayal edin. Eğer makul bir dolaşımda sadece diyelim ki on bin soyadı varsa ama bir milyon sakin varsa, o zaman o kasabada bir yerde bir ismi paylaşan iki yabancı vardır. Kasaba kötü yönetildiği için değil, sayma işlemi bunu kaçınılmaz kıldığı için. Ya da absürt derecede kalabalık bir galadaki vestiyeri düşünün. Görevlinin sadece bir milyon bileti var. Bir milyar konuk geliyor ve hepsi bir bilet istiyor. Görevli istediğiniz kadar titiz olsun, tekrarlar zorunludur. Bazı insanlar farklı paltolar için aynı numarayı tutarak oradan ayrılacaktır. Tekrarlar görevlinin ahlaki bir kusuru değildir; aritmetiğin her zaman yaptığını yapmasıdır.

Hash’ler de aynı yasa altında yaşar. Bir hash fonksiyonu, pratikte sınırsız olan bir girdi alanını—her zaman başka bir bayt, başka bir paragraf, başka bir dosya, olası mesajlardan oluşan başka bir evren ekleyebilirsiniz—alır ve onu sabit ve sonlu bir çıktı alanına sıkıştırır. 256 bitlik veya 512 bitlik bir özetiniz olabilir, ancak ona hala özet derken sonsuz özete sahip olamazsınız. Sonuç, duygularınızı asla sormayan o acımasız küçük teorem olan güvercin yuvası ilkesi tarafından dikte edilir. Deliklerden daha fazla güvercininiz varsa, bazı deliklere birden fazla güvercin girer. Olası hash değerlerinden daha fazla olası girdiniz varsa, bazı hash değerleri birden fazla girdiye aittir. Çakışmalar var olmalıdır çünkü eşleme tasarımı gereği çoktan-teke (many-to-one) şeklindedir.

O halde önemli olan çakışmaların varlığı değildir. Bu konu siz daha başlamadan karara bağlanmıştır. Önemli olan, bunların bilerek bulunmasının ne kadar zor olduğudur. İyi bir hash, kabus gibi bir kalabalıkta adil bir vestiyer gibi davranır: Evet, prensipte tekrarlar garanti edilmiştir ancak kullanılabilir bir tekrar bulmak—belirli bir hedefle çakışan veya anlamlı bir şeyi taklit etmenize yardımcı olan bir tekrar—hiçbir mantıklı rakibin göze alamayacağı kadar fahiş miktarda araştırma gerektirir. Memurun bilet sistemi “çakışmasız” değildir; sadece “sınırsız zamanı olmayan herkes için çakışma-görünmezidir.” Gerçek oyun budur.

Burası çocuk masalının bittiği yerdir. Hashing’de güvenlik “çakışma olmaması” değildir, çünkü bu gerçekliğin yapısıyla çelişirdi. Güvenlik, çakışmaları mühendislik yoluyla üretmenin fantastik derecede zor olmasıdır. Bir çocuğun iki kişinin aynı doğum gününü paylaştığını işaret etmesi gibi, sanki derin bir şey keşfetmişsiniz gibi kollarınızı sallayıp “ama çakışmalar var!” diye bağırabilirsiniz. Yetişkinlerin vereceği cevap, kafa sallamak ve ardından bu durumdan faydalanıp faydalanamayacağınızı sormaktır. İyi tasarlanmış bir hash’te cevap, bir medeniyetin kaynaklarına ve jeolojinin sabrına sahip olmadığınız sürece fiilen hayırdır.

Dolayısıyla çakışmalar, sabit uzunluktaki parmak izleriyle birlikte gelen kaçınılmaz gölgedir. Hashing’i geçersiz kılmazlar; hashing’in anlamlı olduğu koşulları tanımlarlar. Zafer, gölgenin yok olması değildir. Zafer, onu yakalayamıyor olmanızdır.

V. Neden Hiçbir Hash Çakışmaları Ortadan Kaldıramaz

Mümkün olan en iyi hash çakışmaları durdurmaz; onları o kadar derin bir okyanusta saklar ki, herhangi bir pratik canlı için onlar başka bir gezegendeymiş gibi kabul edilebilir. Çakışmasız bir hash beklemek, sonsuz sayıda insanın olduğu bir şehrin sonsuza dek benzersiz soyadları vermesini beklemek gibidir. Bunu talep edebilir, tepinebilir, bu konuda yönergeler yayınlayabilirsiniz; ancak aritmetiğin umurunda olmaz. Sabit uzunluktaki bir çıktı, sınırsız bir girdi kümesini benzersiz bir şekilde temsil edemez. Bu karamsarlık değildir; sayı doğrusunun şeklidir.

İyi bir hash hakkında düşünmenin doğru yolu “çakışmaları engeller” değil, “çakışmaları tanrı olmayan herkes için yararsız kılar” şeklindedir. Bazı numaraların bir yerlerde mutlaka tekrarlanması gerekse de, ihtiyacınız olan belirli tekrarı tahmin etme şansınızın fiilen sıfır olduğu kadar çok bilete sahip bir piyango hayal edin. Ya da doğum günü benzetmesini duygusallıktan arındırarak ele alalım. Bir yerlerde birinin sizinle aynı doğum gününü paylaşmasını engelleyemezsiniz. Dünya çok büyük ve doğum günleri kümesi çok küçüktür. Ancak bir yabancının rastgele bir gün içinden tam doğum gününüzü tahmin etme şansını, üzerine bahis oynamanın çılgınlık sayılacağı kadar küçük hale getirebilirsiniz. Çakışmalar ortak doğum günleri gibidir; çakışma direnci (collision resistance) ise, istediğiniz anda, seçtiğiniz bir hedef için istediğiniz o özel ortak doğum gününü bulmanın pratik imkansızlığıdır.

Dürüst bir İngilizceyle “çakışma direnci”nin anlamı budur: Çakışmanın mantıksal olarak imkansız olması değil, bilerek bir çakışma keşfetmenin pratik olarak yapılamaz olması. Bu ayrım önemlidir. Mantıksal imkansızlık batıl inancın dilidir. Pratik yapılamazlık ise mühendisliğin dilidir. Hash tasarımcıları çakışmaların kaçınılmaz olduğunu bilirler, bu yüzden adil bir rastgelelik gibi davranan fonksiyonlar inşa ederler: Bir çakışma bulmak için astronomik büyüklükteki bir alanda, hiçbir zekice kestirme yol olmaksızın körü körüne arama yapmalısınız. Yapabileceğiniz en iyi şey çabalamaktır (grind) ve bu çaba sizden daha uzun sürecek şekilde boyutlandırılmıştır.

Günlük, dürüst kullanımda çakışmalar birer hayalettir. Dosyaları, şifreleri, işlemleri veya sisteminizin neye ihtiyacı varsa onları hash’lersiniz ve asla kazara bir çakışmayla karşılaşmazsınız; çünkü alan o kadar geniştir ki kazara çakışmalar yok denecek kadar nadirdir. Aksine saldırganlar, kazara olanı aramazlar; bir amaca hizmet eden bir çakışmayı imal etmeye çalışırlar. İşte kozmik emek burada devreye girer. İyi bir hash çakışmaları ortadan kaldırmaz. Birini avlama eylemini o kadar yıkıcı derecede maliyetli hale getirir ki, rasyonel saldırgan ya vazgeçer ya da denerken ölür.

VII. 512-Bit Sonek Düşünce Deneyi

Şimdi yavaşlıyoruz ve sayımı gün ışığında yapıyoruz, çünkü batıl inancı hiçbir şey açıkça yazılmış aritmetik kadar iyi iyileştirmez. Sabit bir dosya alın — bir roman, bir veritabanı dökümü, bir fotoğraf, her neyse. Dosyanın her bitini dondurun. Şimdi bu dosyanın sonuna 512 bitlik bir sayı ekleyin. Bu sonek, özgürce seçebileceğiniz bir etikettir. 512 bitlik bir etiketin tam olarak 2⁵¹² olası değeri vardır. Bu şiir değildir; bu bir sayımdır: yaklaşık 1.34×10¹⁵⁴ farklı sonek. Dosyanın geri kalanı tamamen aynı kalır; yalnızca bu son 512 bitin değişmesine izin verilir.

Şimdi çıktı boyutu m bit olan bir hash fonksiyonu seçin. Yalnızca 2ᵐ olası özet (digest) vardır. Nokta. Hash ideal davranıyorsa — yani girdileri, manipüle edebileceğiniz bir yanlılık olmaksızın özet uzayına eşit biçimde dağıtıyorsa — o zaman 2⁵¹² adet dosya varyantı, 2ᵐ olası özet arasında yaklaşık olarak eşit dağılır. Buna göre herhangi bir belirli özete düşen soneklerin beklenen sayısı şudur:

2⁵¹² ÷ 2ᵐ = 2⁵¹²⁻ᵐ.

Bu tek satır tüm mekanizmadır. Geri kalan her şey sonuçtur.

İnsanların genellikle kutsal bir sertifika gibi öne sürdüğü duruma sabitleyelim: SHA-512’de olduğu gibi 512 bitlik bir hash çıktısı. O zaman m = 512 olur ve beklenti 2⁵¹²⁻⁵¹² = 2⁰ = 1’e iner. Yani: tüm 2⁵¹² olası 512 bitlik sonek arasında, herhangi bir belirli SHA-512 özetini veren yaklaşık bir tane beklenir. Dosyanız-artı-sonekinizin özetini seçerseniz, beklediğiniz “bir” neredeyse kesin olarak orijinal sonekin kendisidir. Evet, sınırsız girdi evreninde çarpışan mesajların sonsuz sayıda olduğu doğrudur — bunu zaten ortaya koyduk. Ama bu özel 512 bitlik sonek penceresi içinde, özet başına beklenen sayı birdir. Ek bir çarpışan sonek mevcut olabilir, fakat onu bulmayı kozmolojiye yakışır, mühendisliğe değil, ölçüde müstehcen bir arama yapmadan beklememelisiniz.

Şimdi hash çıktısını 256 bite kısaltın (SHA-256’yı düşünün) ve aynı 512 bitlik sonek varyasyonunu koruyun. O zaman m = 256 olur ve beklenti 2⁵¹²⁻²⁵⁶ = 2²⁵⁶’ya çıkar. Bu, her bir 256 bitlik özet için grotesk derecede büyük bir çarpışan sonek sürüsüdür — yaklaşık 1.16×10⁷⁷ tane. Düz konuşursak: yalnızca 512 bitlik bir kuyruğu değiştirir ve 256 bitlik bir çıktı ile hash’lerseniz, herhangi bir seçilmiş hedef özet için yalnızca bir yerde bir çarpışmayı değil, onlardan bir okyanusu garanti edersiniz. Bunlar vardır, çünkü sonek uzayı özet uzayından katbekat daha büyüktür.

Her iki durumda da yasa gözünü kırpmaz. Sabit boyutlu çıktılar, aritmetiğin kalanları zorunlu kılması kadar kesin biçimde çarpışmaları zorunlu kılar. Hash güvenliği “çarpışma yoktur” değildir. Güvenlik, seçtiğiniz amaca hizmet eden bir çarpışmayı bulmanın astronomik zorluğudur. Yukarıdaki sayılar hash’leri zayıflatmaz. Çarpışmaların bir olasılık değil, bir kesinlik olduğu bir evrende iyi hash’lerin neden işe yaradığını açıklar.

VIII. Bunun Gerçek Güvenlik Açısından Anlamı

Tüm bu sayma işlemi bir salon numarası değildir. Hash’lerin gerçek dünyada işe yaramasının, ama onlar hakkındaki masalların yaramamasının nedeni budur. Hash’ler güvenilirdir, çünkü bir çarpışmaya giden en kısa yol bile herhangi bir gerçekçi saldırganın erişiminin ötesinde olacak şekilde tasarlanmışlardır. Çarpışmalar ilke olarak vardır, sonsuz sürüler hâlinde, ama manzara, istediğiniz bir tanesine yönelmenizi engelleyecek biçimde düzenlenmiştir. Sistem, evrenin kendi kurallarını bozmasına dayanmaz; evrenin, kaynaklarınız için fazla büyük olmasına dayanır.

Pratik sezgi eskidir ve acımasızca basittir. İdeal bir m bitlik hash’te, herhangi bir çarpışmayı bulmanın en hızlı genel yolu, belirli bir özeti hedeflemek değil, girdileri fonksiyona atıp ikisinin aynı çıktıya düşmesini beklemektir. Bu, smokin giymiş doğum günü problemidir. Bir tekrar beklemek için 2ᵐ girdi toplamanız gerekmez; yaklaşık 2^(m/2) mertebesinde girdi yeterlidir. Kareköklü düşüş bütün dramatik noktadır. 256 bitlik bir hash için 2^(256/2), yani 2¹²⁸ işlem demektir — “denemek” kavramını bir tür komediye dönüştüren kadar büyük bir sayı. 512 bitlik bir hash içinse çarpışma avı yaklaşık 2²⁵⁶ işleme tırmanır; bu yalnızca zor değil, fiziksel olarak da gülünçtür. Bu aramayı ciddi bir plan hâline getirecek makul bir küme yoktur, tasavvur edilebilir bir bütçe yoktur, uygarlık ölçeğinde bir enerji kaynağı yoktur. Matematik “mümkün” der, ama fizik “bu evrende değil” der.

Dolayısıyla pratikte hash’ler, çarpışmalar ulaşılamazmış gibi davranır. Bir dosyayı kurcalamayı tespit etmek için hash’lediğinizde, benzersizliğe bahis oynamazsınız. Maliyete bahis oynarsınız: aynı özete sahip alternatif bir dosya üretmenin maliyeti, uygulanabilir hesaplamanın o kadar ötesindedir ki, bu girişim irrasyoneldir. Bir mesajın hash’ini yayımlayarak ona bağlandığınızda, ilahi bir korumaya güvenmezsiniz. Hile yapmaya çalışan herkesin kestirme yolu olmadığı gerçeğine güvenirsiniz; başarı garantisi olmaksızın astronomik bir uzayı öğütmek zorundadırlar. Ve sistemler hash’leri kullanarak ölçekte indeksleme, tekilleştirme ya da doğrulama yaptığında, bunu kazara çarpışma olasılığının günlük riskler arasında yer almayacak kadar yok denecek düzeyde olması nedeniyle yaparlar.

O hâlde bir hash, kurcalamaya karşı pratik bir silahtır; matematiğe karşı metafizik bir garanti değildir. Çarpışmaları ortadan kaldırmaz; onları, sonlu makineleri olan sonlu varlıkların yaşadığı herhangi bir dünyada önemsiz kılar. Olgun bakış açısı daha serin ve daha güçlüdür: gerçeklik çarpışmaları garanti eder, iyi tasarım ise onları sömüremeyeceğinizi garanti eder. “Kriptografik” kelimesi, onu bir tılsım sözcük gibi ele almayı bıraktığınızda, işte bunu ifade eder.

IX. Kapanış Muhasebesi

Sanki evrenin bir özelliğiymiş gibi “çakışmasız hash’lerden” bahseden yegane insanlar, ya saftır ya da bir şey pazarlıyorlardır. Saftırlar, çünkü henüz karanlık bir ara sokakta aritmetikle tanışmamışlardır. Pazarlıyorlardır, çünkü bu ifade, mekanizmalar yerine büyüleri tercih eden müşterilere rahatlatıcı gelir. Gerçeklik ise daha az gurur okşayıcı ama çok daha güvenilirdir: Her hash’te çakışmalar garantidir, her zaman. Çıktı alanı sonludur, girdi alanı ise değildir ve hiçbir pazarlama metni, sonlu bir kutunun sonsuz bir kalabalığı tekrarlar olmadan barındırmasını sağlayamaz.

Yetişkin bakış açısı daha soğukkanlı ve daha güçlüdür. Evrenden farklı davranmasını istemez. Bir çakışmanın bilerek, zamanında ve gerçek bir rakibin makul olarak komuta edebileceği kaynaklarla bulunup bulunamayacağını sorgular. Ciddi bir tasarım rüştünü burada ispatlar. Ciddi bir hash fonksiyonu, kullanışlı bir çakışma arayışını o kadar grotesk düzeyde pahalı bir girişime dönüştürür ki, bu durum bir tür hiciv halini alır. Evet, çakışmalar prensipte mevcuttur. Pratikte ise devletlerin bütçeleriyle ve makinelerin ömrüyle alay eden mesafelerin arkasına mühürlenmişlerdir. Bir çakışmayı suistimal etmek için bir saldırgan, imparatorlukları yetersiz ödenekli ve sabırlı gösterecek ölçekte kaynaklara ihtiyaç duyar ve o durumda bile başarı bir vaat değil, sadece bir umuttur.

Dolayısıyla bir hash’in değeri, tam da masalın bakmayı reddettiği yerdedir: matematiksel kaçınılmazlık ile insani uygulanabilirlik arasındaki uçurumda. Bir hash çakışmaları iptal etmez; onları, kozmosun ısı ölümünü bir hesaplama kümesi olarak ele geçiremeyecek olan fiziksel dünyanın herhangi bir sakini için ilgisiz kılar.

İşte parfümsüz haliyle tez budur ve sloganlar çürüdüğünde de ayakta kalacaktır: Herhangi bir hash’te çakışmalar kaçınılmazdır ve anlamlı olan tek soru, bir tane bulmanın hesaplama açısından ulaşılamaz olup olmadığıdır — ki iyi bir hash tam da bunu sağlamak için inşa edilir.

Yorum bırakın