Enosmerne (zgoščevalne) funkcije so osmo čudo sveta

Verjetno odkrivam toplo vodo, ampak med sinočnjo nespečnostjo se mi je tole zdelo zelo zanimivo.

Recimo, da si v situaciji, ko nekaj želiš objaviti anonimno, pa vendar ohraniti možnost, da kasneje dokažeš, da si bil vir informacije. Kdo je lahko v taki situaciji?

– whistleblower, ki nekaj razkriva Wikileaksu – če javnost objavo sprejme z odobravanjem, hočeš biti zaslužen; če se zgodi shitstorm, se raje potuhneš
– Bansky – z anonimnostjo gradi buzz, na stara leta pa bi rad s svojimi deli kaj zaslužil
– teroristična organizacija – s slabo izvedenim napadom si nočeš kvariti branda, za dobro izvedenega hočeš pobrati “zasluge”

Kaj narediš? Objavo podpišeš z MD5 SHA-2 hashem svojega e-maila. Npr. iz "janez.novak@gmail.com" se izračuna hash "15530227e98d4806c2244df378d0a2b0"

Iz hasha ni mogoče ugotoviti maila, tako da si anonimen, dokler to želiš. V primeru, da želiš kasneje dokazati, da si avtor objave, moraš le objaviti svoj e-mail in trditev, da si avtor. Dokaz* si lahko vsak sam izračuna: samo iz objavljenega maila pridemo do prvotno objavljenega hasha.

V resnici nisi čisto anonimen. Če želiš objavljati večkrat ali je nabor možnih avtorjev (e-mailov) znan, lahko nekdo izračuna hashe vseh in te s tem osumi avtorstva (kar pa ni dokaz, glej fusnoto*). Za preprečevanje te situacije je mogoče naš “začasno anonimni podpis” še izboljšati. Svojemu emailu pripneš naključen, a smiseln stavek**.

"darko.bodnaruk@gmail.com Sonce je rumeno, tole pa je naključen stavek." => "eaab7fb7f46b1d0736209c91bd198df4"

Pripeti naključen stavek spreminjaš pri vsaki objavi, tako da je celoten podpis nemogoče uganiti. Ko želiš pobrati zasluge, spet enostavno objaviš celoten niz (email in stavek) in s tem dokažeš avtorstvo.

Ne morem se znebiti občutka, da sem samo nekaj po nepotrebnem zakompliciral.



—-
* Hash je dokaz avtorstva le v primeru, kadar hkrati sam trdiš, da si avtor. Če kdo drug trdi, da si avtor, to seveda ni noben dokaz: s hashem tvojega maila se lahko podpiše kdorkoli.

** Prva ideja je bila namesto smiselnega stavka uporabiti kar naključno številko. Vendar se s tem pojavi (malo verjetna) možnost, da nekdo vzame tvoj mail in s spreminjanjem naključne pripete številke zadane pravi hash (collision). S tem te osumi avtorstva (seveda spet nič ne more dokazati).

  • sej to je dost uporabljan koncept za shranjevanje passwordov.. včasih si uporabu samo hash (kao, enosmerna funkcija je secure), potem pa so se začeli pojavljat rainbow tabli, ki imajo prekalkulirane hashe za obsežne password liste, tako da narediš samo še en select.
    zato se dans vedno hasha [password + salt], kar v trenutku invalidira vse tabele (rabu bi ločen rainbow table za vsak salt)
  • Mail
    Hm, zakaj pa ne bi zadeve samo digitalno podpisal in potem podpis nekako šifriral z drugim ključem, da se ga ne da preveriti, dokler ga sam ne odkleneš?
blog comments powered by Disqus