10. fejezet - Alkalmazások

10.1. Azonosítási technikák

A digitális aláírások egyik gyakori alkalmazási területe az azonosítás, mely során a résztvevő egyértelműen tudja bizonyítani identitását valamely más résztvevőnek. Mint ahogy azt már a ??? fejezetben részleteztük, az azonosítás három megvalósítási módját különböztetjük meg. Az első kategória, amikor fizikai és viselkedési jellemzők alapján, második birtoklás alapúak és a harmadik pedig valamely tudásanyag alapján történik az azonosítás. A gyakorlatban előforduló rendszerek esetén általában több kategóriából vett megoldások keverednek. Például ATM automatáknál történő pénzfelvétel esetén, a bankkártyán kívül PIN kód megadása is szükséges. Ez a példa a birtoklás alapú (bankkártya), és a tudás alapú (PIN kód) megoldás kombinációja.

Tegyük fel, hogy egy P személyt egy V fél kívánja azonosítani. A folyamat során a támadó célja, hogy a P résztvevőt megszemélyesítse, azaz úgy viselkedjen, válaszoljon V kérdéseire, mintha P lenne. A támadó azt próbálja elérni, hogy V az azonosítási folyamat végére azt higgye, hogy P-vel vette fel a kapcsolatot. Azt a speciális esetet sem szabad figyelmen kívül hagyni, hogy miután V beazonosítja P-t, ne tudja P-t megszemélyesíteni, azaz V ne rendelkezzen elegendő információval ahhoz, hogy valamely harmadik fél felé úgy tudjon az azonosítás kérdéseire válaszolni, mintha P lenne.

A támadó rendelkezésére áll az összes adat, ami P és V között a nyilvános csatornán keresztül továbbítódott, valamint feltételezzük, hogy pontosan ismeri az azonosítási technika általános folyamatát. A támadó célja azonosítás során mindig a megszemélyesítés. Sikeres támadásnak azt tekintjük, mikor a támadó aktívan részt vesz. Passzív esetben a támadó folyamatosan figyeli a felek közötti beszélgetést, azaz a nyilvános csatornán folyó kommunikációt, valamint rendelkezésére áll az összes nyilvános információ, paraméter. A lehallgatással összegyűjtött információkat egyszer egy későbbi időpontban felhasználva (aktívan) megszemélyesíti valamely résztvevőt. Aktív esetben a támadó megváltoztatja a csatornán továbbított üzeneteket. Több támadás is idesorolható. Módosítás során a támadó megváltoztatja a küldött üzenetet, visszajátszásos támadások során a támadó olyan üzeneteket küld valamely résztvevőnek, melyek szerepeltek már valamely korábbi üzenetben. Egyik példa támadásra például, amikor a támadó közvetlenül az ellenőrzővel kommunikál, és többször egymásután megpróbál „megfelelően” válaszolni a feltett kérdésekre. Az ilyen típusú támadások elleni védekezés egyik lehetséges módja például a próbálkozások számának maximalizálása. Például egymásután legfeljebb háromszor adhat meg a felhasználó rossz jelszót.

Sok biztonságos, és a gyakorlatban is alkalmazható azonosítási rendszer létezik (27). Egyik fontos szempont azonban, hogy az azonosítási technika implementálható legyen smart kártyán, így a számítási bonyolultság is és a memória felhasználásának is minimálisnak kell lennie. Természetesen fokozott figyelmet kell szentelnünk ebben az esetben a kártyára, hiszen, a kártya elegendő ahhoz, hogy az azonosítási kérdésekre megfelelően válaszoljon a támadó. Mindazonáltal, hogy igyekszünk nem elveszíteni, vagy elvesztés esetén egyből letiltatni, szükséges a több faktorú rendszer megvalósítása, azaz a kártya mellett szükséges valamely más adat ismerete is (pl. PIN kód).

Az azonosítás lehet egyoldalú, illetve kölcsönös. Az előbbi esetben csak a résztvevők egyikének azonosítása történik meg, míg az utóbbinál valamennyi résztvevő identitása ellenőrzésre kerül. Egyoldalú azonosításra jó példa, amikor egy szerver valamely klienst azonosítja be. Kölcsönös azonosítás történik az Internetes banki felületeknél, amikor a bank SSL tanúsítványával igazolja magát, míg az ügyfél felhasználói név és jelszó párossal, vagy más technikával bizonyítja identitását.

Sok olyan rendszer áll a rendelkezésünkre, mely az entitás beazonosításával egyidejűleg kulcscserét is megvalósít. A kulcscsere rendszerekkel itt nem foglalkozunk.

10.1.1. Jelszó alapú rendszerek

A gyakorlatban leggyakrabban előforduló azonosítási technika a jelszó alapú azonosítás. Ez többnyire azért van így, mert könnyű implementálni és felhasználóbarát abban az értelemben, hogy nem feltételez extra hardvert és könnyen kezelhető. Viszont több biztonsági kérdést is felvet, amit már a ??? fejezetben ismertettünk.

Egyik jelentős probléma az alap jelszó alapú rendszerekkel, a statikusságuk. Fontos feltétel ahhoz, hogy egy azonosítási rendszer biztonságos legyen, a véletlenszerűség biztosítása. Amennyiben az adatsor, amit P küld V-nek, hogy azonosítsa magát mindig ugyanaz, azaz nem változik, akkor a támadó visszajátszásos támadással meg tudja személyesíteni P-t. Tehát minden egyes azonosítás során alkalmazni kell valamely véletlenül generált értéket, így minden alkalommal más és más lesz az elküldött adatsor.

Jelszó alapú azonosítás esetén, ha SSL/TLS kapcsolatot alakítunk ki a két fél között, és a felhasználói név a jelszóval már a titkos csatornán továbbítódik, akkor az SSL/TLS protokoll miatt a kódolt jelszó már nem lesz statikus.

10.1.2. Egyszer használatos jelszavak

Egy másik megoldás az egyszer használatos jelszavak (One-time password ¦ OTP) használata. Mint ahogy a neve is mutatja, az minden jelszó csak egyszer használható. Az egyszer használhatóság miatt a visszajátszásos támadás nem releváns. Ugyanis ha a támadó valahogy megtudja az egyszer használatos jelszót, akkor azt hiába próbálja újra elküldeni, az ellenőrző fél nem fogja elfogadni, hiszen az már nem lesz érvényes. Tehát az egyszer használatos jelszavak biztonságosabbak a statikusoknál, viszont az egyszer használhatóságuk miatt nehezebb is az ember számára megjegyezni.

Alapvetően két kategóriát különböztetünk meg: időszinkronizációs és egyirányú függvényen alapuló rendszerek kategóriáját.

  • időszinkronizációs: Az ilyen rendszerek általában egy hardvereszközzel, tokennel együtt járnak. A token tartalmaz egy beépített órát, mely szinkronizálva van az ellenőrző órájával. Az egyszer használatos jelszavak generálásának alapja az aktuális idő.

  • egyirányú függvényen alapuló: Ezek a rendszerek általában vagy egy megelőző jelszón, vagy egy kapott véletlen értéken alapulva generálják le az egyszer használatos jelszót, egyirányú függvények segítségével.

Az egyszer használatos jelszavak egyik megvalósítása az RSA Security cég által kifejlesztett SecureID token. A rendszer és az algoritmus részletes felépítése nem publikus. Ismereteink szerint minden token tartalmaz egy kriptográfiai processzort, mely szimmetrikus titkosítást hajt végre, egy beépített órát és minden egyes tokenen van egy titkos kulcs is és egy kijelző. Az egyszer használatos jelszó az aktuális időn alapuló érték szimmetrikus titkosítása lesz. Bizonyos időintervallumonként, pl. percenként, generál egy jelszót, melyet megjelenít a kijelzőn. A tulajdonos általában az azonosítás során valamely más jelszóval együtt használja.

A legelső egyszer használatos jelszavakat generáló rendszerek egyike a Lamport séma, mely a következő lépésekből áll.

  • A kliens egy kezdeti w jelszóhoz a h egyirányú függvény segítségével kiszámítja az (n,hn(w)) elempárt, ahol hn(w)-t a w szó a h egyirányú függvény n-szeri alkalmazásával kapjuk. A kliens eljuttatja a (n,hn(w)) párt az ellenőrző félnek.

  • Amikor a kliens i-edik alkalommal azonosítja magát, akkor elküldi wi=hn-i(w) az ellenőrző félnek, ami megvizsgálja, hogy szerepel-e az adatbázisában az (n-i+1,f(wi)) pár, ha igen, akkor az azonosítás sikeres és felülírja az (n-i+1,f(wi)) párt (n-i,wi)-re.

Az ellenőrző oldalon elegendő mindig egy függvényértéket kiszámolni és ellenőrzést végezni. A kliens vagy letárolja az összes jelszót és így nem kell számítást végezni, vagy letárolja w-t és számításokat végez. Vegyük észre, hogy a hn(w) érték megadásával a w titokban marad, hiszen a h egyirányúsága miatt a függvényértékből az w-t nehéz kiszámítani. A Lamport sémán alapulva két rendszert is implementáltak az S/Key és OPIE rendszereket.

10.1.3. Kihívás-és-válasz alapú rendszerek

Az eddig ismertetett jelszó alapú rendszerek az azonosítás során a kliens felhasználói név és jelszó párost küld az ellenőrző félnek. Az ellenőrzés során valamely előre egyeztetett adatok alapján végzi el, mint például biztonságosan tárolt jelszó vagy szinkronizált óra, de nem kommunikál többet a klienssel. A kihívás-és-válasz (challenge-and-response) rendszerek esetén az azonosítás az ellenőrző fél és a kliens interakciója során történik meg. Mint ahogy a neve is mutatja, V egy kihívást (challenge), azaz egy kérdést tesz fel P számára, ami általában egy véletlen érték, melyet sokszor nonce-nak (number used only once) hívunk. Amennyiben P megfelelően válaszolja meg (response) a kérdést, azaz a véletlen értékkel megfelelő számításokat végez, akkor P azonosítása sikeres. Vannak olyan megoldások, mely során az ellenőrző fél több kihívást is küld, melyre várja a válaszokat.

Kriptográfiai megoldások alapján az azonosítási rendszerek két nagy csoportját különböztetjük meg. Az egyik csoportba azok a megoldások tartoznak, melyek kriptográfiai primitívek, pl. hitelesítő kódok, digitális aláírások etc., közvetlen alkalmazásai. A másik kategória, amikor nem valamely primitívre épülnek, hanem közvetlenül, valamely nehéz problémára. Az utóbbi kategóriába tartozó sémákat itt nem ismertetjük, több megoldást is talál az olvasó a (27) könyvben.

Az alábbiakban ismertetett rendszerek valamennyien kihívás-és-válasz alapú megoldások. Két fő kategóriát különböztetünk meg a szimmetrikus és az aszimmetrikus kulcsú rendszereket.

10.1.3.1. Szimmetrikus kulcsú rendszerek

Ebben a fejezetben azokat a megoldásokat ismertetjük, melyek szimmetrikus kulcsokat használnak. Ezt a szimmetrikus kulcsot, melyet mindkét fél ismer, jelöljük K-val. Tekintsük először azt az esetet, amikor az alkalmazott kriptográfiai primitív hitelesítő kód, melyet MACK -val jelölünk.

Hitelesítő kód alapú azonosítási rendszerek esetén valamely résztvevő azonosítása az alapján történik meg, hogy szabályosan képes-e kiszámolni egy véletlenszám hitelesítő kódját. Mivel csak az identitását bizonyító és az ellenőrző résztvevő ismeri a szimmetrikus kulcsot, így csak ők tudják megadni a megfelelő kódot.

Két lépésben fogjuk bemutatni a hitelesítő kódon alapuló, egyoldalú azonosító rendszert. Az első lépésben ismertetett rendszer még nem biztonságos, a sikeres támadást is részletezzük. A második lépésben pedig a végleges biztonságos rendszert adjuk meg.

Ahhoz, hogy a sémánk biztonságos legyen, feltételezzük, hogy a titkos K kulcsot csak az azonosításban résztvevő két fél ismeri, valamint az ellenőrző fél számára rendelkezésre áll egy jó tulajdonságokkal rendelkező álvéletlenszám generátor, valamint az alkalmazott üzenethitelesítő kód biztonságos.

Az azonosítási rendszer két résztvevőjét továbbra is jelöljük P-vel és V-vel, ahol P jelöli azt az entitást, aki igazolja magát és V pedig az ellenőrző felet. A nem biztonságos rendszer lépései a következők:

  1. V generál egy véletlen r számot, a kihívást és elküldi P-nek.

  2. P kiszámítja m=MACK(r) és visszaküldi V-nek.

  3. V kiszámítja m’=MACK(r) és ellenőrzi az m=m’ egyenlőséget, ha teljesül, akkor az azonosítás sikeres.

A támadó ismeri az r véletlen értéket, és célja az MACK(r) kiszámítása. Mivel a titkos K kulcsot csak P és V ismeri a támadó nem, így a hitelesítő kódot kiszámítani nem tudja, még akkor sem, ha megelőzően több (ri,MACK(ri)) elempár a rendelkezésére. Ennek ellenére mégis lehet támadást indítani a rendszer ellen. A támadót A-val jelöljük. A támadás a következőképpen történik:

  1. V generál egy véletlen r számot, a kihívást és elküldi P-nek.

  2. A a csatornát lehallgatva megtudja az r értéket és visszaküldi V-nek

  3. V kiszámítja m=MACK(r) értéket és visszaküldi A-nak.

  4. A elküldi m=MACK(r) kódot V-nek.

  5. V kiszámítja m’=MACK(r) és ellenőrzi az m=m’ egyenlőséget.

Talán az olvasó azt gondolja, hogy ez a támadás nem elég realisztikus. Az igazság az, hogy előfordulhatnak olyan helyzetek, amikor ez a támadás releváns lehet, célunk, hogy egy azonosítási rendszer biztonságos legyen minden szituációban.

Az előbbi protokoll javítása, azaz a biztonságos megoldás lépései a következő:

  1. V generál egy véletlen r számot, a kihívást és elküldi P-nek.

  2. P kiszámítja m=MACK(ID(P)||r) és visszaküldi V-nek.

  3. V kiszámítja m’=MACK(ID(P)||r) és ellenőrzi az m=m’ egyenlőséget, ha teljesül, akkor az azonosítás sikeres.

Láthatjuk, hogy a különbség az m=MACK(ID(P)||r) üzenetben rejlik. Amennyiben a támadó az előbb ismertetett támadást próbálja végrehajtani, akkor V-től az m=MACK(ID(V)||r) értéket kapja, amit később V vissza fog utasítani.

Ahhoz, hogy azt mondhatjuk egy rendszer biztonságos, fontos pontosan megadni, hogy mit értünk támadáson. Például a következő nem minősül támadásnak:

  1. V generál egy véletlen r számot, a kihívást és elküldi P-nek.

  2. A lehallgatja r-et és továbbítja P-nek.

  3. P kiszámítja m=MACK(ID(P)||r) és visszaküldi A-nak.

  4. A továbbítja m=MACK(ID(P)||r) üzenetet V-nek.

  5. V kiszámítja m’=MACK(ID(P)||r) és ellenőrzi az m=m’ egyenlőséget, ha teljesül, akkor az azonosítás sikeres.

A támadó itt nem aktív, az azonosítás folyamata pontosan ugyanúgy hajtódott végre, mintha a támadó részt sem vett volna a folyamatban. P azonosítása sikeresen megtörtént, amit P el akart küldeni V-nek el is jutott abban a formában, ahogy elküldte, és ugyanez igaz V-re is. Támadás akkor történik, ha vagy megváltozik az üzenet, vagy valamely más résztvevőnek továbbítódik.

Most tekintsük a hitelesítő kódon alapuló, kölcsönös azonosítási rendszert. Ebben az esetben az azonosítás sikeresen fut le, ha mindkét fél azonosítása megtörténik. A támadó célja akár P, akár Q, akár mindkettőjük megszemélyesítése.

Vizsgáljunk meg itt is egy lehetséges megoldást a kölcsönös azonosításra, mely nem biztonságos.

  1. Q generál egy véletlen r1 számot, a kihívást, és elküldi P-nek.

  2. P generál egy véletlen r2 számot, a kihívást, kiszámítja m1=MACK(ID(P)|| r1)|| r2 és elküldi Q-nak.

  3. Q kiszámítja m1’=MACK(ID(P)|| r1) és ellenőrzi az m1=m1 egyenlőséget, ha teljesül, akkor P azonosítása sikeres. Q kiszámítja m2=MACK(ID(Q)|| r2) és elküldi P-nek.

  4. P kiszámítja m2’=MACK(ID(Q)|| r2) és ellenőrzi az m2=m2 egyenlőséget, ha teljesül, akkor Q azonosítása sikeres.

Ez a protokoll nem biztonságos, hiszen a támadó sikeres támadást tud indítani. Csak az egyik fél (Q) megszemélyesítését mutatjuk meg, a támadás hasonlóan végrehajtható a másik féllel szemben is.

  1. A generál egy véletlen r1 számot, és elküldi P-nek.

  2. P generál egy véletlen r2 számot, kiszámítja m1=MACK(ID(P)|| r1)|| r2 és elküldi A-nak.

  3. A az r2 értéket elküldi Q-nak, aki kiszámítja m2=MACK(ID(Q)|| r2)-t és generál egy r3 véletlen értéket, majd m2||r3 üzenetet visszaküldi A-nak.

  4. A továbbítja m2=MACK(ID(Q)|| r2)-t P-nek.

  5. P kiszámítja m2’=MACK(ID(Q)|| r2) és ellenőrzi az m2=m2 egyenlőséget, ha teljesül, akkor Q azonosítása sikeres.

Látható, hogy a támadó a 3. pontban egy új folyamatot indít el Q-val P-től kapott r2 -vel, aki kiszámítja a megfelelő m2=MACK(ID(Q)|| r2) hitelesítő kódot. Így a támadó sikeresen megszemélyesíti a Q résztvevőt. A protokollt a következőképpen lehet biztonságossá tenni:

  1. Q generál egy véletlen r1 számot, a kihívást, és elküldi P-nek.

  2. P generál egy véletlen r2 számot, a kihívást, kiszámítja m1=MACK(ID(P)|| r1|| r2) és elküldi Q-nak.

  3. Q kiszámítja m1’=MACK(ID(P)|| r1|| r2) és ellenőrzi az m1=m1 egyenlőséget, ha teljesül, akkor P azonosítása sikeres. Q kiszámítja m2=MACK(ID(Q)|| r2) és elküldi P-nek.

  4. P kiszámítja m2’=MACK(ID(Q)|| r2) és ellenőrzi az m2=m2 egyenlőséget, ha teljesül, akkor Q azonosítása sikeres.

Szimmetrikus kulcsú azonosítási sémákat nemcsak üzenethitelesítő kódból tervezhetünk, hanem szimmetrikus titkosítás felhasználásával is. Egyik megoldás, hogy az ellenőrző fél által generált véletlen értéket, a kihívást, a szimmetrikus kulccsal titkosítania kell a kliensnek. A másik lehetőség, hogy a kihívás egy a szimmetrikus kulccsal titkosított érték, es a kliensnek vissza kell fejtenie a titkos kulcsot felhasználva. Valamennyi megoldás esetén mindkét fél a titkos szimmetrikus kulcs segítségével végez számításokat, ellenőrzéseket. Mivel a szimmetrikus kulcsot csak a két fél ismeri, így, ha az adott résztvevő a titkos kulcsot szabályos alkalmazza, akkor azonosítása sikeres.

A szimmetrikus titkosítás alapú azonosítás váza a következő:

  1. V --› P: r véletlen

  2. P --› V: EncK(r)

A szimmetrikus visszafejtés alapú azonosítás váza a következő:

  1. V --› P: EncK(r), ahol r véletlen

  2. P --› V: r

10.1.3.2. Aszimmetrikus kulcsú rendszerek

Szimmetrikus kulcsú azonosítás esetén az ellenőrző félnek az első alkalommal minden egyes résztvevővel kulcsot kell cserélnie, majd a titkos kulcsot biztonságosan tárolnia kell. Ezzel szemben aszimmetrikus kulcsú rendszereknél minden résztvevő egy kulcspárral rendelkezik, azaz egy titkos és egy nyilvános kulccsal. Az identitását bizonyító P résztvevő a titkos kulcsát felhasználva (SKP) végez számításokat, az ellenőrző fél, Q pedig P nyilvános kulcsával (PKP) végzi az ellenőrzést. Az alapvető különbség a szimmetrikus és aszimmetrikus kulcsú azonosítási rendszerek között, hogy az azonosítási séma lépésein túl aszimmetrikus esetben nem szükséges megelőző kulcscsere és nem kell tárolni a bizonyító fél kulcsát sem, hanem mindössze a bizonyító fél tanúsítványát kell ellenőrizni. A tanúsítványokról részletesen a ??? fejezetben olvashatunk.

Kétféle aszimmetrikus kulcsú azonosítási rendszer is létezik. Az egyik esetben az identitását bizonyító fél aláírja a kihívásként generált véletlen számot, a másik esetben pedig titkos kulcsával visszafejti a kihívásként küldött aszimmetrikusan titkosított véletlen értéket. Aszimmetrikus esetben is, ha az adott fél egy véletlen értékre megfelelően alkalmazza titkos kulcsát, akkor sikeresen igazolja identitását.

Az egyoldalú azonosítás során két résztvevő szerepel: P a bizonyító személy, aki bizonyítani kívánja személyazonosságát, és V az ellenőrző személy, aki meggyőződik P identitásáról.

A digitális aláírás alapú, egyoldalú azonosítási rendszer esetén a protokoll lépései a következőek:

  1. V generál egy véletlen rV számot, a kihívást és elküldi P-nek.

  2. P kiszámítja m=rP||rV||ID(V)||SignSKP (rP||rV||ID(V))||Certp és visszaküldi V-nek, ahol rP a P által generált véletlen szám és Certp a P tanúsítványa.

  3. V ellenőrzi P tanúsítványát, azaz a Certp érvényes és hiteles-e.

  4. V ellenőrzi az aláírás érvényességét, azaz ténylegesen P titkos kulcsával történt e az aláírás, valamint az elküldött rV és a kapott rP véletlen értékek és ID(V)) konkatenációja lett-e aláírva.

Amennyiben a 3. és 4. lépésben a tanúsítvány és az aláírás is hiteles, akkor P sikeresen igazolta identitását. A P által generált rP véletlen szám az üzenet egyedi voltát jelzi, ugyanis P ugyanazt az aláíró tanúsítványt többször, több alkalmazásnál is felhasználhatja. Tegyük fel, hogy ha P csak a m=rP||rV||ID(V)||SignSKP (rP||rV||ID(V))||Certp üzenetet küldi el, melyet a támadó eltárol. Amennyiben valamely más alkalmazás ugyanazt az rV értéket küldi P-nek, akkor a támadó – például V maga – is tudná igazolni, hogy ő P.

A fenti egyoldalú azonosítás könnyen kölcsönössé alakítható, mely során mindkét fél igazolja identitását a másiknak. Tekintsük a digitális aláíráson alapuló, kölcsönös azonosítási sémát.

Először nézzünk egy olyan rendszert, mely nem biztonságos:

  1. V generál egy véletlen rV számot, a kihívást, és elküldi P-nek.

  2. P kiszámítja m=rP||rV||ID(V)||SignSKP (rP||rV||ID(V))||Certp és visszaküldi V-nek, ahol rP a P által generált véletlen szám és Certp a P tanúsítványa.

  3. V ellenőrzi P tanúsítványát, azaz a Certp érvényes és hiteles-e.

  4. V ellenőrzi az aláírás érvényességét, azaz ténylegesen P titkos kulcsával történt e az aláírás, valamint az elküldött rV és a kapott rP véletlen értékek és ID(V) konkatenációja lett-e aláírva.

  5. V generál egy másik véletlen rV számot, és az m’=rP||rV’||ID(P)||SignSKV (rP||rV’||ID(P))||CertV üzenettel együtt elküldi P-nek, ahol V tanúsítványát CertV jelöli.

  6. P ellenőrzi V tanúsítványát, azaz a CertV érvényes és hiteles-e.

  7. P ellenőrzi az aláírás érvényességét, azaz ténylegesen V titkos kulcsával történt e az aláírás, valamint az elküldött rP és a kapott rV véletlen értékek és ID(P) konkatenációja lett-e aláírva.

Amennyiben a 3. és 4. lépésben a tanúsítvány és az aláírás is hiteles, akkor P sikeresen igazolta identitását, ha a 6. és 7. lépésben az ellenőrzések eredménye pozitív, akkor V-t sikerült azonosítani. Az előbbi séma az egyoldalú azonosítási rendszer kétszeri végrehajtása, hiszen az 5. lépés a 2. lépés analógja. Milyen sikeres támadást adhatunk meg a fenti sémával szemben?

A rendszer gyenge pontja az 5. lépésben generált rV véletlen érték, melyet V titkos kulcsával aláír. A támadó P-vel és V-vel futtatja le a kölcsönös azonosítási rendszert úgy, hogy hol V-t, hol P-t személyesíti meg. A támadás lépései a következők:

  1. A megszemélyesíti V-t, generál egy véletlen rV számot, a kihívást, és elküldi P-nek.

  2. P kiszámítja m=rP||rV||ID(V)||SignSKP (rP||rV||ID(V))||Certp és visszaküldi A-nak, ahol rP a P által generált véletlen szám és Certp a P tanúsítványa.

  3. A azonosítási folyamatot kezdeményez V-vel, megszemélyesíti P-t, tehát elküldi neki az rP véletlent.

  4. V kiszámítja m’=rP||rV’||ID(P)||SignSKV (rP||rV’||ID(P))||CertV és visszaküldi A-nak, ahol rV a V által generált véletlen szám, és CertV a tanúsítványa.

  5. A elküldi m’=rP||rV’||ID(P)||SignSKV (rP||rV’||ID(P))||CertV üzenetet P-nek.

  6. P ellenőrzi V tanúsítványát, azaz a CertV érvényes és hiteles-e.

  7. P ellenőrzi az aláírás érvényességét, azaz ténylegesen V titkos kulcsával történt e az aláírás, valamint az elküldött rP és a kapott rV véletlen értékek és ID(P) konkatenációja lett-e aláírva.

P a 6. és a 7. lépésben elvégzi az ellenőrzéseket. Mind a tanúsítvány, mind az aláírás érvényes, hiszen V tanúsítványát küldte el A, illetve maga V titkos kulcsával írta alá az adott üzenetet.

A biztonságos kölcsönös, digitális aláíráson alapuló azonosítási folyamat lépései a következők:

  1. V generál egy véletlen rV számot, a kihívást, és elküldi P-nek.

  2. P kiszámítja m=rP||rV||ID(V)||SignSKP (rP||rV||ID(V))||Certp és visszaküldi V-nek, ahol rP a P által generált véletlen szám és Certp a P tanúsítványa.

  3. V ellenőrzi P tanúsítványát, azaz a Certp érvényes és hiteles-e.

  4. V ellenőrzi az aláírás érvényességét, azaz ténylegesen P titkos kulcsával történt e az aláírás, valamint az elküldött rV és a kapott rP véletlen értékek és ID(V) konkatenációja lett-e aláírva.

  5. V kiszámítja az m’=rP||rV’||ID(P)||SignSKV (rP||rV’||ID(P))||CertV üzenetet és elküldi P-nek, ahol V tanúsítványát CertV jelöli.

  6. P ellenőrzi V tanúsítványát, azaz a CertV érvényes és hiteles-e.

  7. P ellenőrzi az aláírás érvényességét, azaz ténylegesen V titkos kulcsával történt e az aláírás, valamint az elküldött rP és ID(P) konkatenációja lett-e aláírva.

Ha a 3., 4., 6. és 7. lépésben végzett ellenőrzések sikeresen megtörténtek, akkor mind P, mind V azonosítása befejeződött. A résztvevők jelenlétét a megfelelő véletlen számok aláírása garantálja.

Aszimmetrikus azonosítási séma generálható aszimmetrikus titkosítás alkalmazásával is. Ebben az esetben az identitását bizonyító félnek vissza kell fejtenie titkos kulcsával a számára titkosított véletlenszámot. Az ilyen típusú azonosító sémák váza a következő:

  1. V --› P:EncPKP (r), ahol r véletlen

  2. P --› V: r

10.1.4. Nulla-ismeretű protokollok

A napjainkban alkalmazott azonosítási rendszerek (pl. jelszó vagy kihívás-és-válasz alapú) általában kiszivárogtatnak valamely részinformációt a titkos információról, melyet az identitását bizonyító fél felhasznál. Például, a digitális aláíráson alapuló azonosítási rendszerek kiszivárogtatják a kihívásként küldött üzenet digitális aláírását. Így az aláírt kihívást a támadó felhasználhatja. Sikeres támadást lehet megvalósítani abban az esetben, ha az identitását bizonyító fél azt a titkos aláíró kulcsot használja azonosításra, mint amit az üzenetek digitális aláírására, akkor az ellenőrző fél kihívásként valamely dokumentum hash értékét is küldheti. Így megszerzi egy általa létrehozott üzenet aláírását.

Ha azt szeretnénk, hogy az azonosítási rendszer semmilyen részinformációt ne adjon ki, akkor nulla-ismeretű azonosítási rendszert kell használnunk. Leegyszerűsítve az ilyen rendszer azon kívül, hogy bizonyítja valamely állítás helyességét, más információt nem ad ki. Az ellenőrző fél azon kívül, hogy bizonyítékot kap arról, hogy az adott állítás helyes, más információhoz nem jut. Ez azt is jelenti, hogy minden, ami polinomiális időn belül kiszámítható a nulla-ismeretű bizonyítás üzeneteiből, az polinomiális időn belül kiszámítható az érvényes állításból magából is. Egy protokoll nulla-ismeretű tulajdonsága tehát azt jelenti, hogy bármit, amit az ellenőrző fél „lát” a bizonyító féllel való interakciója során, mindazt polinomiális időn belül tudja szimulálni maga is a bizonyító fél részvétele nélkül. Azt fontos megjegyezni, hogy a nulla-ismeretű tulajdonságnak akkor is teljesülnie kell, ha az ellenőrző fél nem követi a protokoll előírt lépéseit, hanem eltér tőle.

Amos Fiat és Adi Shamir létrehozott egy nulla-ismeretű azonosítási rendszert, melynek biztonsága a modulo összetett szám szerinti négyzetgyökvonás kiszámításának nehézségén alapszik.

Definíció. Ha létezik x2≡a (mod n) kongruencia megoldható, akkor az a számot kvadratikus maradéknak nevezzük modulo n.

Az a≡0 (mod n) számokat nem soroljuk sem a kvadratikus maradékok, sem a kvadratikus nemmaradékok közé.

Az x2≡a (mod n) kongruencia megoldásainak száma függ a modulustól. Ha a modulus prím, azaz n=p, ahol p prím, akkor a kongruenciának legfeljebb két megoldása lehet. Ha b (mod p) megoldása a x2≡a (mod p) kongruenciának, akkor p-b (mod p) is az.

Amennyiben n=pq, ahol p és q prímszámok, akkor, ha az x2≡a (mod n) kongruenciának van megoldása, akkor négy megoldása is van. A megoldásokat az

x2≡a (mod p)

x2≡a (mod q)

kongruenciák megadásával a kínai maradéktétel segítségével számíthatjuk ki. A megoldásokat b1 (mod n), n-b1 (mod n), b2 (mod n), n-b2 (mod n) formában kapjuk meg.

Ha az x2≡a (mod p) kongruencia megoldható, akkor megoldásainak meghatározására létezik polinomiális idejű algoritmus (O(log4p)). Az x2≡a (mod n), ahol n=pq, kongruencia megoldásait p és q ismeretében polinomiális időn belül kiszámíthatjuk a kínai maradéktétel és az x2≡a (mod p) kongruencia megoldására vonatkozó hatékony algoritmus alkalmazásával. Viszont, ha az n modulus faktorai nem ismertek, akkor az x2≡a (mod n) kongruencia megoldása nehéz probláma.

A Fiat-Shamir azonosítási protokoll biztonsága azon alapszik, hogy az x2≡a (mod n) kongruencia megoldása könnyű, ha n faktorai ismertek, ellenkező esetben nehéz.

A protokollnak két résztvevője van, P az identitását bizonyító fél és V az ellenőrző entitás. V véletlenszerűen választ két olyan nagy prímet, hogy a szorzatuk faktorizálása nehéz legyen. V kiszámítja n=pq modulust, melyet nyilvánosságra hoz. A bizonyító fél generál egy véletlen xЄZ* n' , melyet titokban tart és kiszámítja y≡x2 (mod n) értéket, melyet nyilvánosságra hoz. Így az x a bizonyító fél titkos kulcsa, míg az n és y a nyilvános kulcsa. A Fiat-Shamir azonosítási rendszer a következő kör többszöri végrehajtása.

  1. P generál egy véletlen számot: RZ* n , ahol ЄR jelöli, hogy véletlenül választunk. P kiszámítja t≡r2 (mod n) és elküldi t-t V-nek.

  2. V generál egy véletlen bitet: R{0,1}. V elküldi c-t P-nek.

  3. P kiszámítja s≡rxc (mod n) számot, és elküldi V-nek.

  4. V ellenőrzi, hogy az s2≡tyc (mod n) kongruencia teljesül-e.

Ha a 4. pontban a kongruencia teljesül, akkor P igazolta identitását V felé, ha nem, akkor V elutasítja. Mint ahogy azt már említettük, az előbb részletezett 4 lépést ugyanazon felek között többször is végrehajtódik. Minden egyes körben új r és c véletlen értékek generálódnak.

Vegyük észre, hogy a Fiat-Shamir protokoll is tartalmaz egy kihívás-és-válasz részt. A 2. pontban küldött R{0,1} véletlen bit valójában egy kihívás, melyre P-nek, azaz az identitását bizonyító félnek megfelelő választ kell adnia a 3. pontban. A 4. lépésben az ellenőrző fél elvégzi a megfelelő ellenőrzéseket.

A protokoll minden szabályosan generált s válaszra igaz értékkel tér vissza, azaz a V ellenőrző személy elfogadja az identitását bizonyító P fél válaszát, hiszen

s2≡r2(xc)2≡t(x2)c≡tyc (mod n).

Azt bizonyítani, hogy minden nem szabályosan generált válasz esetén a protokoll hamis értékkel tér vissza, azaz a V fél elutasítja meg kell vizsgálnunk, hogy a támadó milyen támadásokat indíthat a rendszerrel szemben.

A lehetséges támadások a következők:

  • A támadó generál egy véletlen RZ* n , és vár V véletlen c bitjére, majd megpróbálja kitalálni a megfelelő s válaszértéket. Ennek valószínűsége elég nagy n esetén kicsi.

  • A támadó megpróbálja megjósolni a c véletlen bitet és ennek megfelelően adja meg a t, illetve s számokat. Ha c=0, akkor véletlenül választ egy RZ* n számot, majd kiszámítja t≡r2 (mod n) számot, és a 4. lépésben az s=r válaszértéket adja meg. Amennyiben azt jósolja meg, hogy c=1, akkor a támadó véletlenül választ egy RZ* n számot és kiszámítja a t≡s2/y (mod n). Az így meghatározott értékeket a megfelelő lépésekben a támadó elküldi V-nek. Mindkét esetre a támadó nem tud felkészülni, mert akkor ki tudja számítani az x titkos kulcsot. Ugyanis, ha valahogy a támadó meg tudná adni az s0 értéket, ha c=0 és s1 -t, ha c=1, azaz tudja, hogy milyen értéket vesz fel s0 , hogy s0=r, és s1 -t, hogy s1=rx, akkor könnyen meg tudja határozni az x titkos kulcsot is, hiszen x=s1/s0 . Annak valószínűsége, hogy a támadó eltalálja a c véletlen bitet 1/2 minden körben. Ha a lépéseket k-szor hajtjuk végre, akkor annak valószínűsége, hogy a támadó sikeresen adja meg az értékeket 1/2k .

A Fiat-Shamir protokoll több verziója is létezik. Egyik lehetőség a körök számának csökkentése úgy, hogy az t,c,s számok mindegyike egy-egy k elemű vektor. Így a bizonyító fél egy lépésben küldi vissza k db t, c és s értékeket. Ezzel felgyorsítjuk az azonosítást, csak a bizonyítható, hogy a protokoll nulla-ismeretű volta viszont megszűnik, ugyanis V hatékonyan nem tudja szimulálni a protokoll üzeneteit P részvétele nélkül. Következésképpen ugyanazon titkos és nyilvános kulcs mellett a k db érték kiszámítása nem ajánlott.

Viszont egy másik megoldás, ha k db titkos-nyilvános kulcspárt generál az identitását bizonyító fél. A párhuzamosított verziója a Fiat-Shamir protokollnak:

  1. P generál egy véletlen számot: RZ* n , ahol ЄR jelöli, hogy véletlenül választunk. P kiszámítja t≡r2 (mod n) és elküldi t-t V-nek.

  2. V generál k db véletlen bitet: ciЄR{0,1}, ahol i=1,..,k. V elküldi ci -t (i=1,..,k) P-nek.

  3. P kiszámítja s≡r∏k i=1xci i (mod n) számot, és elküldi V-nek.

V ellenőrzi, hogy az s≡r∏k i=1yci i (mod n) kongruencia teljesül-e. Így a protokoll egyszer fut le, csak k db értékkel, és annak valószínűsége, hogy a támadó sikeresen tudja P-t megszemélyesíteni 1/2k .

A Fiat-Shamir protokollnak többféle verziója is van. Az eddig ismertetett verzió esetén a nyilvános kulcs érvényességét tanúsítvány igazolja, tehát valamely nyilvános kulcsokat tartalmazó könyvtárból nyeri az ellenőrző fél. Egy másik lehetséges megvalósítás, egy megbízható kulcskiosztó központ alkalmazása, mely minden igénylőnek ad egy vagy több titkos kulcsot, mely függ az igénylő biometrikus adataitól. Például P személyesen felkeresi a központot, ahol igazolja személyazonosságát és ujjlenyomata és/vagy más biometrikus adatot vesznek tőle. Jelöljük I-vel azt az egyedi bitsorozatot, mely alapján P egyértelműen beazonosítható. A megbízható központ választ ji (i=1,..,k) értékeket úgy, hogy f(I,ji)=yi kvadratikus maradék legyen, ahol f nyilvános függvény. A központ kiszámítja a titkos kulcsot és P smart kártyájára írja. A kártya lehetővé teszi P-hez tartozó I és ji értékek ellenőrzését, V ellenőrző fél a nyilvános f függvény segítségével kiszámítja az f(I,ji)=yi nyilvános kulcsot. Majd a protokoll lépései ugyanúgy hajtódnak végre.

A kriptográfiai primitíveket általában nem önmagukban alkalmazzuk, hanem valamely komplex kriptográfiai protokoll részei. A gyakorlatban sok olyan alkalmazás van, mely magas szintű biztonságot követel meg, így a kriptográfiai rendszerek használata elengedhetetlen. Ilyen protokollok például az elektronikus fizetési vagy szavazó protokollok. A következőkben egy szavazórendszert mutatunk be.