Sok hivatalos, pénzügyi és más dokumentum hitelességvizsgálatát eldönti egy kézzel írott aláírás jelenléte vagy hiánya. A fénymásolatok ilyen szempontból szóba sem jönnek. Ahhoz azonban, hogy számítógépes üzenetkezelő rendszerek válthassák ki a papír- és tintaalapú, fizikai úton vándorló dokumentumokat, valamilyen új eljárásra van szükség, hogy a dokumentumokat hamisíthatatlan módon lehessen aláírni.
Nehéz feladat a kézi aláírások helyettesítésének problémájára megoldást találni. Alapvetően azt kell elérni, hogy legyen egy olyan rendszer, amelynek segítségével az egyik fél elküldhessen a másiknak egy aláírt üzenetet, mégpedig úgy, hogy közben teljesüljenek az alábbi feltételek:
A fogadó ellenőrizhesse a feladó valódiságát.
A küldő később ne tagadhassa le az üzenet tartalmát.
A fogadó saját maga ne rakhassa össze az üzenetet.
Az első követelmény például egy pénzügyi rendszerben szükséges. Mikor egy ügyfél számítógépe utasítja a bank számítógépét, hogy vegyen egy tonna aranyat, annak meg kell tudnia állapítani, hogy a számítógép, amely az utasítást adta, tényleg annak a cégnek a tulajdona, amelyiknek a bankszámláját terhelni kell. Más szóval, a banknak hitelesítenie kell az ügyfelet (és az ügyfélnek is hitelesítenie kell a bankot).
A második követelmény azért szükséges, nehogy a bankot kijátsszák. Tegyük fel, hogy a bank megveszi az egy tonna aranyat, és közvetlenül utána az arany ára drasztikusan leesik. Egy nem becsületes ügyfél esetleg beperelheti a bankot, mondván, hogy sohasem adott utasítást arany vásárlására. Amikor a bank a bíróságon bemutatja az üzenetet, az ügyfél letagadja, hogy ő küldte volna. Azt a tulajdonságot, hogy egyik szerződő fél sem tagadhatja le később az aláírását, letagadhatatlanságnak (nonrepudiation) nevezzük. Az alábbiakban tanulmányozandó digitális aláírási sémák segítenek biztosítani ezt a tulajdonságot.
A harmadik követelmény abban az esetben fontos, ha az arany ára megugrik, és a bank megpróbál egy olyan üzenetet konstruálni, amelyben az ügyfél egy tonna arany helyett egy rudat rendelt. Az effajta csalásnál a bank a maradék aranyat egyszerűen megtartja magának.
A digitális aláírás egyik megközelítésében adva van egy központi hitelességvizsgáló szerv, amely mindent tud, és amelyben mindenki megbízik, nevezzük mondjuk Nagy Testvérnek (Big Brother, BB). Ezután minden felhasználó választ egy titkos kulcsot, és saját kezűleg elviszi BB irodájába. Ily módon csak Aliz és BB ismeri Aliz titkos kulcsát, -t és így tovább.
Ha Aliz a P aláírt, kódolatlan üzenetet szeretné elküldeni bankárjának, Bobnak, akkor előállítja a -t, ahol B Bob személyazonossága,
egy Aliz által választott véletlen szám, t egy időbélyeg, ami a frissességet biztosítja, és a
az Aliz kulcsával,
-val kódolt üzenet. Aliz tehát a 8.18. ábrán látható módon elküldi az üzenetet. BB látja, hogy az üzenet Aliztól jött, visszakódolja, és az ábrán látható módon küld egy üzenetet Bobnak. A Bobnak küldött üzenet tartalmazza Aliz eredeti üzenetét és a
aláírt üzenetet is. Bob ezután teljesíti Aliz kérését.
Mi történik, ha Aliz utóbb letagadja az üzenetet? Először is mindenki beperel mindenkit (legalábbis az Egyesült Államokban). Amikor az ügy végül is bíróságra kerül, és Aliz nyomatékosan tagadja, hogy a szóban forgó levelet ő küldte volna Bobnak, a bíró meg fogja kérdezni Bobot, hogy mivel tudja bizonyítani, hogy az üzenet Aliztól, és nem Trudytól jött. Bob először is rámutat, hogy BB nem fogad el üzenetet Aliztól, ha az nem a -val van titkosítva, tehát Trudynak nincs lehetősége hamis levelet küldeni BB-nek Aliz nevében, hiszen BB rögtön észrevenné a csalást.
Bob ezek után drámai módon felmutatja az A bizonyítékot, -t. Bob azt állítja, hogy ez egy üzenet BB aláírásával, ami bizonyítja, hogy Aliz elküldte P-t Bobnak. A bíró tehát megkéri BB-t (akiben mindenki megbízik), hogy kódolja vissza az A bizonyítékot. Mikor BB alátámasztja, hogy Bobnak igaza van, a bíró a pert Bob javára dönti el. Az ügy ezzel véget ért.
Egy lehetséges probléma a 8.18. ábrán látható aláírás protokollal az, hogy Trudy mindkét üzenetet képes visszajátszani. Ennek a problémának a minimalizálására mindent időbélyegekkel látnak el. Ezenkívül Bob megvizsgálhatja az összes nemrég érkezett üzenetet, hogy szerepelt-e bennük. Ha igen, akkor az üzenet mint visszajátszás eldobható. Vegyük észre, hogy Bob visszautasít minden elég régi üzenetet az időbélyegek miatt. A gyors visszajátszás ellen Bob úgy védekezik, hogy ellenőrzi minden beérkező üzenetben
-t, hogy lássa, nem érkezett-e az utóbbi egy órában hasonló üzenet. Ha nem, akkor nyugodtan feltételezheti, hogy a kérés vadonatúj.
A szimmetrikus kulcsú kriptográfiát alkalmazó digitális aláírások alapvető szervezési problémája, hogy mindenkinek egységesen meg kell bíznia a Nagy Testvérben. A Nagy Testvér ráadásul minden aláírt levelet el tud olvasni. A legkézenfekvőbb jelöltek a Nagy Testvér szerepére a kormány, a bankok, a könyvelők és az ügyvédek lehetnek. Sajnos ezen szervezetek közül egyiknek sem sikerült teljes bizalmat keltenie az összes állampolgárban. Jó volna tehát, ha a dokumentumok aláírásához nem lenne szükség egy megbízható hatóság közreműködésére.
Szerencsére ezen a téren jelentős eredményt kínálhat a nyilvános kulcsú titkosítás. Tegyük fel, hogy a nyilvános kulcsú titkosító algoritmusok a szokásos tulajdonság mellett szintén rendelkeznek az
tulajdonsággal. (A feltételezés nem alaptalan, hiszen az RSA rendelkezik ezzel a tulajdonsággal.) Ezt feltételezve Aliz elküldhet egy aláírt kódolatlan üzenetet Bobnak, ha
-t küldi el. Fontos észrevenni, hogy Aliz ismeri mind saját (egyéni) visszakódoló kulcsát,
-t, mind Bob nyilvános kulcsát,
-t, tehát képes egy ilyen üzenet megkonstruálására.
Amikor Bob megkapja ezt az üzenetet, átalakítja azt saját titkos kulcsával, és eredményül megkapja -t, ahogy azt a 8.19. ábra is mutatja. Ezt a szöveget egy biztonságos helyen tárolja, majd visszakódolja
segítségével, hogy megkapja az eredeti kódolatlan üzenetet.
Annak érdekében, hogy lássuk, hogyan is működik az aláírás, tételezzük fel, hogy Aliz ismételten tagadja, hogy P-t ő küldte volna Bobnak. Mikor az ügy a bíróság elé kerül, Bob bemutathatja mind P-t, mind -t. A bíró egyszerűen ellenőrizheti, hogy a Bob-féle,
-val titkosított üzenet tényleg érvényes azzal, hogy visszakódolja azt
-val. Mivel Bob nem ismeri Aliz egyéni kulcsát, ezért csakis úgy tehetett szert egy azzal titkosított üzenetre, hogy azt Aliz küldte neki. Amíg Aliz börtönben ül hamis eskü és csalás vádjával, rengeteg ideje lesz érdekes, új, nyilvános kulcsú algoritmusok kigondolására.
Annak ellenére, hogy a nyilvános kulcsú titkosítás használata digitális aláírásokhoz egy elegáns módszer, azért vannak problémák, amelyek nem az algoritmus alapjaiból, hanem a futtatási környezetből adódnak. Csak egy a sok közül, hogy Bob csak addig tudja bizonyítani, hogy a levelet Aliz küldte, ameddig titokban van. Ha Aliz felfedi titkos kulcsát, akkor az állítás már nem helytálló, hiszen bárki küldhette az üzenetet, akár maga Bob is.
A probléma akkor jelentkezhet, ha például Bob Aliz tőzsdeügynöke. Aliz utasítja Bobot, hogy vegyen meg egy bizonyos részvényt vagy kötvényt. Közvetlenül vásárlás után az árak drasztikusan leesnek. Aliz, hogy letagadhassa a Bobnak küldött üzenetet, elszalad a rendőrségre azzal, hogy betörtek otthonába, és lemásolták a kulcsát. Attól függően, hogy melyik országban él, lehet, hogy Aliz törvényesen felelősségre vonható, de az is lehet, hogy nem, főleg akkor, ha azt állítja, hogy a munkából hazaérkezvén fedezte fel a betörést, órákkal azután, amikor az állítólagosan történt.
Szintén probléma az aláírási rendszerrel kapcsolatban, ha Aliz úgy dönt, hogy lecseréli egyéni kulcsát, ami teljesen törvényes, és időről időre ajánlott is. Előfordulhat, később egy a fent leírt bírósági ügyben, hogy a bíró visszakódolja -t az aktuális
-val, majd megállapítja, hogy nem P az eredmény. Bob ekkor igen kínosan érezné magát. Következésképpen valami hiteles szerv mégiscsak kell, hogy feljegyezzék a kulcscseréket és azok időpontjait.
Gyakorlatilag bármely nyilvános kulcsú titkosító algoritmus használható a digitális aláírásokhoz. A de facto hivatalos szabvány az RSA-algoritmus. Sok titkosítást használó termék alapul ezen. Mindazonáltal 1991-ben a NIST (National Institute of Standards and Technology) az El Gamal nyilvános kulcsú algoritmus egy variációjának használatát javasolta új digitális aláírás szabványukban (Digital Signature Standard, DSS). Az El Gamal biztonságát nem a nagy számok prímtényezős felbontása, hanem a diszkrét logaritmus számolásának kivitelezhetetlenségéből nyeri.
Ahogyan az lenni szokott, ha a kormányzat szeretné a digitális titkosító szabványokat diktálni, most is nagy felhördülés volt. A DSS-t a következők miatt kritizálták:
Túlságosan titkos (az NSA az El Gamalra alapozva fejlesztette ki).
Túlságosan új (az El Gamal kimerítő vizsgálata még nem fejeződött be).
Túlságosan lassú (10-40-szer lassúbb a digitális aláírások ellenőrzése, mint az RSA-ban).
Nem elég biztonságos (fix 512 bit hosszúságú kulcs).
Egy ezt követő, átdolgozott kiadás révén a 4-es pont tárgytalanná vált, mert engedélyezték a maximum 1024 bites kulcsokat is. Az első két pont azonban még mindig érvényes.
Az aláírások egyik kritikája, hogy gyakran párosítanak két eltérő funkciót: a hitelesítést és a titkosítást. Gyakran csak a hitelességvizsgálatra van szükség, és a titkosításra nem. Mivel a titkosítás lassú, ezért gyakran van igény aláírt kódolatlan dokumentumok küldésére. Az alábbiakban egy olyan hitelesítési módszert mutatunk be, amelyhez nem kell az egész üzenetet titkosítani
Ez a módszer egy egyirányú hash-függvényen alapszik, amely egy tetszőlegesen hosszú szövegből fix hosszúságú bitfüzért generál. Ez a hash-függvény, amelyet gyakran üzenetpecsétnek (message digest) neveznek, négy fontos tulajdonsággal bír:
Adott P-hez könnyen számolható .
Adott -hez gyakorlatilag lehetetlen
-t megtalálni.
Senki sem képes két különböző üzenetet generálni (-t és P'-et), amelyekhez ugyanaz az üzenetpecsét tartozik
.
A bemeneten még 1 bit megváltozása is teljesen más kimenetet eredményez.
A 3. feltétel teljesítéséhez a pecsétnek legalább 128 bitesnek vagy még hosszabbnak kell lennie. A 4. feltételhez az szükséges, hogy a hash nagyon alaposan szétszórja a biteket, akárcsak az eddig látott szimmetrikus kulcsú algoritmusok esetében.
Az üzenetpecsétek kiszámítása egy szöveghez sokkal gyorsabban elvégezhető, mint ugyanazon szöveg kódolása egy nyilvános kulcsú algoritmussal, tehát az üzenetpecsétek használhatók a digitális aláírás algoritmusok gyorsítására. Ahhoz, hogy lássuk ez hogyan is működik, tekintsük ismét a 8.18. ábrát. Ahelyett, hogy BB a -t
-vel írná alá, most kiszámolja az üzenetpecsétet, azaz
-t kiszámolja
-re, aminek eredménye
. BB ezek után
helyett becsomagolja
-t, mint ötödik elemet a
-vel titkosított listába, amelyet Bobnak küld.
Amennyiben vita támad, Bob előveheti mind -t, mind
-t. Miután ezt a Nagy Testvér visszakódolta a bíróságnak, Bob birtokában van a garantáltan eredeti
-nek és az állítólagos
-nek. Bárhogy is van, mivel gyakorlatilag lehetetlen, hogy Bob egy másik üzenetet találjon, aminek szintén ez a pecsétje, a bíró könnyen meggyőzhető arról, hogy Bob igazat mond. Az üzenetpecsétek ilyen módon történő használata mind a kódolási idő, mind az üzenet átvitel és tárolási költség szempontjából megtakarítást jelent.
Az üzenetpecsétek a nyilvános kulcsú titkosító rendszerekben is használhatók, amint az a 8.20. ábrán látható. Itt Aliz először kiszámolja az üzenetpecsétet saját szövegéhez. Ezt követően aláírja az üzenetpecsétet, és elküldi Bobnak mind az aláírt pecsétet mind a kódolatlan szöveget. Ha Trudy útközben kicseréli -t, Bob észreveszi ezt, amint maga is kiszámolja
-t.
Az üzenetpecsét függvényekre több változatot javasolnak. A legszélesebb körben használatos üzenetpecsét-függvény az SHA-1 (Secure Hash Algorithm 1 – 1-es típusú biztonságos hash-algoritmus) [NIST, 1993]. Ahogy a többi üzenetpecsét, ez is a hiányzó bitekkel operál egy meglehetősen bonyolult eljárásban, ahol minden bemeneti bit minden kimeneti bitet befolyásol. Az SHA-1-et az NSA dolgozta ki és a NIST hagyta jóvá a FIPS 180-1 szabványban. A bemeneti adatokat 512 bites blokkokban dolgozza fel, és egy 160 bites üzenetpecsétet állít elő. A 8.21. ábra azt mutatja be, hogyan küldhet Aliz egy nem titkos, de aláírt üzenetet Bobnak. Itt a nyílt szöveg képezi az SHA-1 algoritmus bemenetét, így áll elő a 160 bites SHA-1 pecsét. Aliz ezután aláírja a pecsétet a saját RSA-kulcsával, majd a nyílt szöveget az aláírt pecséttel együtt elküldi Bobnak.
Miután Bob megkapta az üzenetet, maga is kiszámolja az SHA-1 pecsétet, valamint alkalmazza Aliz nyilvános kulcsát az aláírt pecsétre, hogy megkapja az eredeti pecsétet, H-t. Ha a két pecsét megegyezik, akkor az üzenet érvényesnek tekinthető. Bob könnyen észreveszi, ha Trudy bármit is átír az üzenetben, mivel Trudy sehogy sem képes átvitel közben úgy módosítani a (kódolatlan) üzenetet, hogy az új üzenet is a H pecsétet adja eredményül. A 8.21. ábrán látható sémát ezért széles körben használják olyan üzenetek esetén, melyeknek sérthetetlensége fontos, de tartalma nem titkos. Így viszonylag kis számítási költséggel biztosítható, hogy a nyílt szövegen végrehajtott bármilyen módosítást nagy valószínűséggel észlelni lehessen.
Most pedig nézzük át röviden, hogyan működik az SHA-1! Az algoritmus először egy 1-est tesz az üzenet végéhez, majd annyi 0-t, amennyi szükséges, de legalább 64-et, hogy az üzenet hossza 512 bit többszöröse legyen. Ezután az üzenet alsó 64 bitjének helyére az ottani bitek és az üzenet (kitöltés előtti) hosszát tartalmazó 64 bites szám VAGY kapcsolatának eredményét helyettesítik. A 8.22. ábrán az üzenet a jobb oldalról van kitöltve, mivel az angol szöveg és a számok balról jobbra olvasandók (vagyis általában a bal alsó sarkot tekintik a szám végének). A számítógépeknél ez az igazítás a felsővég gépeknek felel meg (ilyen például a SPARC, valamint az IBM 360 és az azt követő generációk), de az SHA-1 mindig az üzenet végét tölti ki, függetlenül a számábrázolás igazításától.
8.22. ábra - (a) 512 bit többszörösére kitöltött üzenet. (b) A kimeneti változók. (c) A szavak tömbje
A számítás során az SHA-1 öt darab 32 bites változót kezel -tól
-ig, ezekben gyűlik majd össze a pecsét. A változókat a 8.22.(b) ábra mutatja. A szabvány szerint ezeknek kezdeti érték gyanánt egy konstanst kell adni.
Ezután -tól
-ig sorban minden blokk feldolgozásra kerül. Az aktuális blokk 16 szavát először a W jelű, 80 szavas segédtömb elejére másolják, ahogy az a 8.22.(c) ábrán is látható. A W maradék 64 szavát a következő képlet segítségével töltik fel:
ahol a W 32 bites szó b bittel balra történő körkörös forgatását jelöli. Ezután A-tól E-ig öt segédváltozót inicializálnak a
értékeivel.
A tényleges számítást a következő pszeudo-C kóddal lehet leírni:
for (i = 0; i < 80; i++) {
temp = S5(A) + fi(B, C, D) + E + Wi + Ki;
E = D; D = C; C = S30(B); B = A; A = temp;
}
ahol a konstansokat a szabvány rögzíti. Az
keverőfüggvényeket a következőképp definiálták:
Ha a ciklus mind a 80 iterációja véget ért, akkor az A–E változók értékeit hozzáadják a értékeihez.
Miután így feldolgozásra került az első 512 bites blokk, jöhet a következő. A W tömböt újrainicializálják az új blokkból, de a H változók értékei megmaradnak. Ha ez a blokk is kész, jön a következő és így tovább, amíg az üzenet összes 512 bites blokkja bele nem kerül a fazékba. Amikor az utolsó blokk is készen van, a H változókban levő öt darab 32 bites szó adja meg a 160 bites kriptográfiai pecsétet. Az SHA-1 teljes C-kódját az RFC 3174 adja meg.
Az SHA-1 új változatát már kidolgozták, amelyik 224, 256, 384 és 512 bites pecsétet állít elő. Ezeket a változatokat együttesen SHA-2-nek nevezik. Ezek a pecsétek nemcsak hosszabbak az SHA-1-nél, de a hash-függvény is megváltozott annak érdekében, hogy kiküszöbölje az SHA-1 néhány potenciális gyengeségét. Az SHA-2-t széles körben még nem használják, de a jövőben minden bizonnyal fogják használni.
A teljesség kedvéért szólnunk kell egy másik népszerű pecsétről is. Ez az MD5 [Rivest, 1992], amelyik az ötödik az üzenetpecsétek sorozatában, és amelyet Ronald Rivest tervezett. Működése nagyon röviden a következő. Az üzenetet töltelékbitekkel 448 bit hosszúságra (modulo 512) növelik. Ezután ehhez az üzenet eredeti hosszát hozzáfűzi mint egy 64 bites egészet, hogy ez kiadja a teljes bemenetet, amelynek a hossza 512 bit többszöröse. Minden számítási ciklus vesz a bemenetről egy 512 bites blokkot, ezt gondosan összekeveri egy futó 128 bites puffer tartalmával. A jó eredmény érdekében belekever egy, a szinusz függvény értékeiből konstruált táblázatot is. Egy ismert függvény használata azt a célt szolgálja, hogy minden gyanút elkerüljön arra vonatkozóan, hogy a tervező egy ügyes kiskaput épített be, amelyen keresztül csak ő tud bemenni. Ez a folyamat folytatódik egészen addig, amíg az összes bemeneti blokk el nem fogy. A 128 bites puffer tartalma lesz az üzenetpecsét.
A több mint tíz éves állandó használat és tanulmányozás után az MD5-ben rejlő gyengeségek oda vezettek, hogy képesek vagyunk megtalálni az ütközéseket vagy az ugyanahhoz a hash-függvényhez tartozó kölönböző üzeneteket [Sotirov és mások, 2008]. Ez halálos döfés egy pecsétfüggvényre, mert ez azt jelenti, hogy képtelenek vagyunk a pecsétet biztonságosan használni egy üzenet hitelesítésére. Így a biztonsági kérdésekkel foglalkozó szakemberek az MD5-öt feltörhetőnek tartják. Helyettesíteni kell, ahol lehet, mással, és új rendszerekbe nem szabad ezzel tervezni. Ettől függetlenül, az MD5-tel még találkozhatunk a meglévő rendszerekben.
A titkosítás világában semmi sem az, aminek tűnik. Az ember azt hiheti, hogy egy m bites üzenetpecsét kicselezése nagyságrendileg műveletet igényel. Gyakorlatilag azonban sokszor
művelet is elég, amennyiben a születésnap-támadást használjuk, amelyet Yuval [1979] publikált a ma már klasszikusnak számító cikkében a „Hogyan játsszuk ki Rabint”-ban.
Ennek a támadásnak az alapja egy, a matematikaprofesszorok által valószínűség-számítás előadásokon gyakran használt módszer. A kérdés: Hány embernek kell egy osztályban lenni ahhoz, hogy annak a valószínűsége, hogy két ember ugyanazon a napon született, meghaladja az 1/2-et? A legtöbb hallgató messze több mint 100-ra tippel megoldásként. Valójában azonban a valószínűség-számítás szerint csak 23. Anélkül, hogy precíz bizonyítást adnánk, szemléletesen 23 emberre (23 × 22)/2 = 253 különböző párt alkothatunk, és minden pár találati valószínűsége 1/365. Ebben a megközelítésben nem is olyan meglepő a tény.
Általánosabban, ha a bemenet és a kimenet között létezik egy megfeleltetés, n bemenet (ember, üzenet stb.) és k lehetséges kimenet (születésnap, üzenetpecsét stb.) esetén, akkor bemeneti pár van. Ha
> k, akkor annak az esélye, hogy legalább egy megfelelő párt találunk, elég nagy. Így megközelítőleg n>
esetén számíthatunk találatra. Ez az eredmény azt jelenti, hogy egy 64 bites üzenetpecsét nagy valószínűséggel feltörhető, ha generálunk 232 db üzenetet, és keresünk kettőt, aminek ugyanaz az üzenetpecsétje.
Nézzünk meg egy gyakorlati példát. Az Állami Egyetem Informatika karán egy végleges kari oktatói állásra két jelentkező van, Tom és Dick. Tomot két évvel korábban vették fel, mint Dicket, először tehát őt bírálják el. Ha megkapja az állást, akkor Dick pórul jár. Tom tudja, hogy a kar elnöke, Marilyn, jó véleménnyel van a munkájáról, tehát megkéri, hogy írjon ajánlást a dékánnak, aki majd Tom ügyét el fogja bírálni. Minden levél bizalmassá válik, miután elküldték.
Marilyn utasítja titkárnőjét, Ellent, hogy írjon egy levelet a dékánnak, kiemelve azt, amit szeretne benne látni. Amikor a levél elkészül, Marilyn majd át fogja nézi, ki fogja számítani és alá fogja írni a 64 bites pecsétet, majd el fogja küldi a dékánnak. Ellen a levelet később e-mailben elküldheti. Tom számára a helyzet szerencsétlen, mert Ellen romantikus kapcsolatban van Dickkel, és át akarja verni Tomot, tehát az alább látható levelet írja, 32 szögletes zárójellel ellátott választási lehetőséggel.
Kedves Smith Dékán Úr,
Ez [a levél | az üzenet] [őszinte | nyílt] véleményemet tolmácsolja Tom Wilson professzorról, aki [éppen | ebben az évben] véglegesítésre jelölt | van jelölve]. [Ismerjük egymást | Együtt dolgoztam] Wilson professzorral [már | majdnem] hat éve. [Kiváló | Kiemelkedő] [tehetséggel | képességekkel] megáldott kutató, aki [világszerte | nemzetközileg] ismert [briliáns | kreatív] meglátásaiért [sok | a legkülönbözőbb] [nehéz | bonyolult] problémakörben.
Emellett [nagyon | kiemelkedően] [tisztelt | csodált] [tanár | oktató]. Hallgatói [jó | kitűnő] véleménnyel vannak [óráiról | előadásairól]. [Tanszékünkön | Nálunk] a [legnépszerűbb | legkedveltebb] [tanár | előadó].
[Sőt mi több | Ezenfelül] Wilson professzor [tehetséges | hatékony] alapítványi pályázó. [Szerződései | alapítványi pénzei] [sok | számot tevő] pénzt hoztak [nekünk | a tanszékünknek]. Ez a [pénz | támogatás] [lehetővé tette | engedte meg] számunkra, hogy sok [speciális | fontos] programokkal [foglalkozhassunk | dolgozhassunk], [mint például | többek között] az ön State 2000 programjával. Ezen pénzek nélkül nem [lennénk képesek | tudnánk] folytatni tevékenységünket, ami pedig mindkettőnknek [fontos | lényeges]. Azt tanácsolom, hogy véglegesítse őt.
Tom pechére, amint Ellen befejezte a levél fogalmazását és begépelését, rögtön ír egy másikat is.
Kedves Smith Dékán Úr,
Ez [a levél | az üzenet] [őszinte | nyílt] véleményemet tolmácsolja Tom Wilson professzorról, aki [éppen | ebben az évben] véglegesítésre [jelölt | van jelölve]. [ Ismerjük egymást | Együtt dolgoztam] Professzor Wilsonnal [már | majdnem] hat éve. [Gyenge | szegényes] képességekkel bíró kutató, és nem nagyon ismert a [szakterületén | tevékenységi körében]. Kutatásai [ritkán | csak elvétve] tartalmaznak jó [meglátásokat | észrevételeket] [napjaink | az aktuális] problémáinak [fő | kulcs] gondolatával kapcsolatban.
Továbbá nem kifejezetten [kedvelt | tisztelt] [előadó | tanár]. [Előadásairól | Óráiról] [rossz | pocsék] véleménnyel vannak hallgatói. [Tanszékünkön | Nálunk] a legnépszerűtlenebb [előadó | tanár], aki [főleg | elsősorban] azon [tulajdonságáról | hajlamáról] ismert [nálunk | tanszékünkön], hogy [zavarba | kellemetlen helyzetbe] hozza azokat a diákokat, akik kérdezni [mernek | merészelnek] óráin.
[Sőt mi több | Ezenfelül] Tom [gyenge | átlagon aluli] pénzszerző. [Ösztöndíjai | Szerződései] csak [kevés | elenyésző] pénzt hoznak [nekünk | tanszékünknek]. Ha nem találunk gyorsan új [pénzbevételi | anyagi] forrást elképzelhető, hogy le kell állítanunk néhány fontos programunkat, mint például az ön State 2000 programját. Sajnos ezen [körülmények | helyzet] mellett nem tudom [becsülettel | tiszta lelkiismerettel] ajánlani [véglegesítésre | végleges pozícióra].
Ezek után Ellen beprogramozza a számítógépét, hogy az éjszaka számolja ki mind a 232 üzenetpecsétet mindkét üzenethez. Jó esély van rá, hogy az első levél pecsétjei közül egy megegyezik a második levél egyik pecsétjével. Ha nem, akkor hozzáadhat még egy-két lehetőséget, és éjszaka újra próbálkozhat. Tegyük fel, hogy talál két egyezőt. Nevezzük a jó levelet A-nak, a rosszat pedig B-nek.
Ellen ezután jóváhagyás végett elektronikus levélben elküldi az A levelet Marilynnek. A B levelet titokként kezeli és senkinek nem mutatja meg. Marilyn természetesen jóváhagyja azt, és kiszámítja a 64 bites üzenetpecsétet, aláírja azt, és az aláírt levelet elküldi Smith dékán úrnak. Függetlenül ettől, Ellen a B levelet elektronikus levélben elküldi a dékánnak (nem pedig az A-t, amire megkérték).
A dékán, miután megkapta az elektronikus levelet és az aláírt pecsétet, lefuttatja az üzenetpecsét algoritmust a B levélen és látja, hogy az megegyezik a Marilyn által küldöttel, és kirúgja Tomot. A dékán nem veszi észre, hogy Ellen volt az, aki két levelet készített ugyanazzal az üzenetpecséttel, és küldte azt neki másként, mint ahogy azt Marilyn látta és hitelesítette. (Egy lehetséges végkifejlet: Ellen elmondja Dicknek, hogy mit tett. Dick megdöbben, és szakít vele. Ellen dühbe jön és bevallja bűnét Marilynnek. Marilyn felhívja a dékánt. Tomot végül is véglegesítik.) Az SHA-1-nél a születésnap-támadás keresztülvihetetlen, mert még a másodpercenként 1 billió üzenetpecsétes sebességgel is 32 000 évig tartana kiszámolni mind a 280 darab pecsétet két levélhez, melyek közül mindegyikben 80 variáció lehetséges, és még utána sem garantált a találat. Egy 1 millió chipből álló felhő párhuzamos működése esetén a 32 000 év lecsökkenne 2 hétre.