Zunächst müssen wir annehmen, dass Eva nur passiv ist. Damit meine ich, dass sie die Karte wahrheitsgemäß an Bob schickt, und alles, was sie Alice zurückbringt, ist tatsächlich Bobs Antwort. Wenn Eve die Daten in eine oder beide Richtungen ändern kann (und ihre Aktion bleibt unentdeckt), ist alles möglich.
(Um langjährige Traditionen zu ehren, heißen die beiden ehrlichen Gesprächspartner Alice und Bob. In Ihrem Text haben Sie "Sie" gesagt. Mein richtiger Name ist nicht "Alice", aber ich werde antworten, als ob Sie geschrieben hätten dass Alice Bobs Telefonnummer überprüfen will.)
Die einfache (aber schwache) Antwort ist die Verwendung einer Hash-Funktion. Alice schreibt auf die Karte: "Gib mir den SHA-256-Hash deiner Telefonnummer zurück". SHA-256 ist eine kryptografische Hash-Funktion, von der angenommen wird, dass sie in Bezug auf Hash-Funktionen sicher ist. Es wäre mühsam, es von Hand zu berechnen, aber immer noch machbar (das sind ungefähr 2500 32-Bit-Operationen, bei denen jede Operation eine Addition, eine Wortverschiebung oder -rotation oder eine bitweise Kombination von Bits ist; Bob sollte es in der Lage sein, es an einem Tag oder zu tun damit).
Was ist daran so schwach? SHA-256 ist als kryptografische Hash-Funktion resistent gegen "Preimages": Dies bedeutet, dass es bei einer Hash-Ausgabe sehr schwierig ist, eine entsprechende Eingabe wiederherzustellen (das ist das Problem, mit dem Eve konfrontiert ist). "Sehr hart" bedeutet jedoch "Die einfachste Methode ist Brute Force: Mögliche Eingaben versuchen, bis eine Übereinstimmung gefunden wird". Das Problem ist, dass rohe Gewalt hier einfach ist: Es gibt nicht so viele mögliche Telefonnummern (in Nordamerika sind das 10 Ziffern, dh nur 10 Milliarden). Bob möchte Dinge von Hand machen, aber wir können nicht davon ausgehen, dass Eva so begrenzt ist. Ein einfacher PC kann ein paar Millionen SHA-256-Hashes pro Sekunde versuchen, sodass Eva in weniger als einer Stunde fertig ist (weniger als 5 Minuten, wenn sie eine GPU verwendet).
Dies ist ein allgemeines Problem: Wenn Bob deterministisch ist (dh für eine bestimmte Nachricht von Alice würde er immer die gleiche Antwort zurückgeben), kann Eve ihn simulieren. Eve weiß nämlich alles über Bob, außer der Telefonnummer. Sie betreibt also praktisch 10 Milliarden Bobs, die sich nur durch ihre angenommene Telefonnummer unterscheiden. und sie wartet darauf, dass einer der virtuellen Bobs zurückkommt, was auch immer der echte Bob tatsächlich zurückgebracht hat. Der Fehler betrifft viele Arten von "intelligenten" Lösungen, die zufällige Nonces und symmetrische Verschlüsselung und so weiter beinhalten. Es ist ein schwerwiegender Fehler, und seine Wurzel liegt in dem großen Unterschied in der Rechenleistung zwischen Eve und Bob (wenn Bob jetzt auch einen Computer hatte, der so groß ist wie der von Eve, dann könnte er einen langsamen benutzenHash-Funktion durch die Verwendung vieler Iterationen; Das ist mehr oder weniger das, worum es beim Passwort-Hashing geht, wobei die Telefonnummer das Passwort ersetzt. siehe bcrypt und auch diese antwort ).
Daher ist eine nicht-schwache Lösung muss eine gewisse Zufälligkeit auf Bob Teil beinhaltet: Bob muss eine Münze werfen oder Würfel wiederholt werfen, und die Werte in seinen Berechnungen injizieren. Darüber hinaus muss Eve nicht in der Lage sein, zu enträtseln, was Bob getan hat, aber Alice muss es können, damit einige Informationen vertraulich von Bob an Alice weitergegeben werden. Dies wird als asymmetrische Verschlüsselung oder zumindest als asymmetrische Schlüsselvereinbarung bezeichnet. Der einfachste Algorithmus dieser Klasse, der berechnet werden kann, aber dennoch relativ sicher ist, ist RSA mit dem PKCS # 1 v1.5-Padding . RSA kann als öffentlichen Exponenten verwenden. So geht das Protokoll also:e=3
Alice generiert eine große Ganzzahl wobei und ähnlich große Primzahlen sind, sodass die Größe von ausreicht, um die Sicherheit zu gewährleisten (dh mindestens 1024 Bit, Stand 2012). Außerdem muss Alice dafür sorgen, dass und keine Vielfachen von 3 sind.p q n p - 1 q - 1n=pqpqnp−1q−1
Alice schreibt auf die Karte.n
Bob fügt zuerst seine Telefonnummer in eine Byte-Sequenz ein, die so lang wie , wie von PKCS # 1 beschrieben (dies bedeutet: 00 02 xx xx ... xx 00 bb bb .. bb, wobei 'bb' die zehn Bytes sind, die codieren Die Telefonnummer und das 'xx' sind zufällige Nicht-Null-Bytewerte für eine Gesamtlänge von 128 Bytes, wenn eine 1024-Bit-Ganzzahl ist.nnn
Bob interpretiert seine Bytesequenz als einen großen Ganzzahlwert (Big-Endian-Codierung) und berechnet (das sind also ein paar Multiplikationen mit sehr großen Ganzzahlen, dann eine Division, wobei das Ergebnis ist Rest der Division). Das ist immer noch von Hand machbar (aber auch hier wird es wahrscheinlich den größten Teil eines Tages dauern). Das Ergebnis ist das, was Bob an Alice zurücksendet.m 3 m o d nmm3 mod n
Alice verwendet ihre Kenntnisse von und , um aus dem von Bob gesendeten wiederherzustellen . Die Wikipedia-Seite zu RSA enthält einige einigermaßen klare Erklärungen zu diesem Prozess. Sobald Alice , kann sie die Füllung entfernen (die 'xx' sind nicht Null, so dass das erste 'bb'-Byte eindeutig lokalisiert werden kann) und sie hat dann die Telefonnummer, die sie mit der vergleichen kann, die sie hatte.q m m 3 m o d n mpqmm3 mod nm
Für die Berechnung von Alice ist ein Computer erforderlich (was ein Computer tut, ist immer elementar und von Hand ausführbar, aber ein Computer ist extrem schnell, sodass das "Ausführen" in der Praxis möglicherweise zu viel Zeit in Anspruch nimmt; die RSA- Entschlüsselung von Hand würde viele erfordern Wochen).
(Tatsächlich könnten wir mit McEliece-Verschlüsselung schneller von Hand rechnen , aber dann wäre der öffentliche Schlüssel - was Alice auf die Karte schreibt - riesig und eine Karte würde einfach nicht reichen; Eve müsste ein volles Buch transportieren von Ziffern.)