Sie müssen überprüfen, ob Ihr Freund Bob die richtige Telefonnummer hat, können ihn jedoch nicht direkt fragen. Sie müssen die Frage auf eine Karte schreiben, die Sie Eve geben, die die Karte an Bob weitergibt und die Antwort an Sie zurücksendet. Was müssen Sie neben der Frage auf die Karte schreiben, um sicherzustellen, dass Bob die Nachricht verschlüsseln kann, damit Eve Ihre Telefonnummer nicht lesen kann?
Hinweis: Diese Frage befindet sich in einer Liste mit "Google Interview-Fragen". Infolgedessen gibt es Unmengen von Versionen dieser Frage im Internet, und viele von ihnen haben keine klaren oder sogar richtigen Antworten.
Anmerkung 2: Die knifflige Antwort auf diese Frage lautet, dass Bob "Ruf mich an" schreiben soll. Ja, das ist sehr klug, "über den Tellerrand" und alles, aber es werden keine Techniken in jenem CS-Bereich verwendet, in dem wir unseren Helden "Bob" und seinen abhörenden Gegner "Eve" nennen.
Update:
Bonuspunkte für einen Algorithmus, den Sie und Bob beide in angemessener Weise von Hand ausführen können.
Update 2:
Beachten Sie, dass Bob Ihnen keine willkürliche Nachricht senden muss, sondern nur bestätigt, dass er Ihre richtige Telefonnummer hat, ohne dass Eve diese entschlüsseln kann, was zu einfacheren Lösungen führen kann oder nicht.
Antworten:
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=pq p q n p−1 q−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.nn n
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 nm m3 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 mp q m m3 mod n m
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.)
quelle
Sieht aus wie eine klassische Anwendung von Public Key Cryptosystem wie RSA .
Sie senden Ihren öffentlichen Schlüssel mit, BoB verschlüsselt Ihre Telefonnummer aus seiner Kontaktliste und sendet sie an Sie zurück.
quelle
Eines der grundlegendsten Dinge, die Sie tun können, ist ein Diffie-Hellman-Schlüsselaustausch . Es ist nicht erforderlich, dass Sie die Schlüssel eingerichtet haben, bevor die Kommunikation beginnt, da diese so ausgehandelt werden, dass die Zuhörer den Schlüssel nicht selbst ableiten können. Weitere Informationen finden Sie im umfassenden Wikipedia-Artikel .
Solange eine ordnungsgemäße Implementierung vorliegt und sowohl Kommunikatoren als auch Angreifer ungefähr die gleiche Rechenleistung zur Verfügung haben, ist dies sicher.
quelle
Bob muss keine Nachrichten senden, die Sie entschlüsseln können. Er muss Ihnen nur beweisen, dass er Ihre Telefonnummer hat. Daher bieten die kryptografischen Hash-Funktionen (Einwegverschlüsselung) eine Alternative zu einem Kryptosystem mit öffentlichem Schlüssel. SHA-2 ist derzeit ein beliebtes Beispiel für eine solche Funktion.
Bei dieser Strategie müssen Sie die Nachricht von Bob nie wieder entschlüsseln. Sie teilen Bob mit, welche Hash-Funktion er verwenden soll, z. Dann verwenden Sie den gleichen Algorithmus, um Ihre Telefonnummer zu hacken, und prüfen, ob Sie den gleichen Hash erhalten, den Bob erhalten hat. Es ist äußerst unwahrscheinlich, dass zwei verschiedene Telefonnummern zu demselben Hash führen. Sie können also feststellen, ob Bob Ihre richtige Telefonnummer hat oder nicht.
Wenn Ihnen, Bob und Eve keine Computer zur Berechnung der Hash-Funktion (oder zur Durchführung eines Brute-Force-Angriffs) zur Verfügung stehen, kann möglicherweise eine Hash-Funktion verwendet werden, die etwas Sicherheit gegen Brute-Force-Angriffe bietet, aber für Sie und Bob viel einfacher ist berechnen.
quelle
Eine einfache Lösung wäre:
Sowohl Alice als auch Bob stimmen in derselben Farbe überein. und es ist kein Problem, wenn Eva das weiß, werden wir das P nennen. Sagen wir, es ist gelb. Nun wählen Alice und Bob zufällig eine private Farbe, sagen "x". Alice wählt Rot und Bob Blau. Jetzt mischen sie sie zusammen mit dem P. Alice hat jetzt Orange und Bob hat Grün. Alice schickt die orange Farbe an Bob und Bob schickt seine grüne Farbe an Alice. Eve weiß jetzt über Gelb, Orange und Grün Bescheid, aber Alice kennt auch ihre private Farbe Rot und Bob kennt seine private Farbe Blau, die niemand sonst kennt. Sowohl Alice als auch Bob nehmen ihre ursprünglichen privaten Farben und fügen sie zu den Farben hinzu, die sie gerade ausgetauscht haben. Wenn sie nun ihre ursprünglichen privaten Farben, Rot und Blau, in die gemeinsame Farbe mischen, erhalten beide dieselbe Farbe, Braun oder Ziegelrot.
Anstatt Farben zu mischen, können Sie , sodass p eine große Primzahl ist und g eine primitive Wurzel von p ist, denn wenn Sie für ein beliebiges x tun , Das Ergebnis (eine Zahl zwischen Null und p - 1) ist wahrscheinlich eines davon, deshalb gibt es eine primitive Wurzel. Wenn p eine Primzahl 2n + 1 ist, so dass n auch eine Primzahl ist, dann wissen Sie, dass 2 eine Primitivwurzel von p ist (was bedeutet, dass Sie sich nicht die Mühe machen müssen, die Primitivwurzel zu berechnen, die irgendwie hart ist), so dass shared secret = für Bob und für Alice.gx(modp) A xgx(modp) B yAx(modp) By(modp)
Ich denke, Sie können so etwas auf die Karte schreiben:
Es gibt ( ist die Anzahl der Stellen) Möglichkeiten und diese Idee macht nur einige wenige Möglichkeiten für denjenigen ungültig, der eine Ahnung davon hat. Eine Entschlüsselung durch Eva wird also nicht stattfinden. n(10)n n
quelle
Bitten Sie Bob einfach, die Zahl mit 2 oder 3 oder etwas anderem zu multiplizieren und diese Zahl mit der Zahl selbst zu multiplizieren. Es ist von Hand machbar und umkehrbar, wenn die Nummer bekannt ist. Kein sha, rsa oder md5. Einfach Mathe.
quelle
Senden Sie Bob ein mit Ihrer Telefonnummer verschlüsseltes Codewort. Wenn er Ihnen das Codewort zurückschickt, wissen Sie, dass er die richtige Nummer hat.
Die Schwäche ist, dass Eve Bob simulieren kann, also probieren Sie einfach jede Telefonnummer aus, bis sie die erhält, die das Codewort enthält, als Bob zurückkehrte.
Lassen Sie Bob also eine sehr große Zufallszahl an das Codewort anhängen und verschlüsseln Sie sie, bevor Sie sie an Sie zurücksenden. Dies macht den Eves-Suchraum so groß, wie Sie es wünschen.
quelle
Ich werde 10 Telefonnummern in die Karte schreiben und unter diesen werde ich sicherstellen, dass meine Nummer neben Bobs Nummer steht und ich werde erwähnen "Hey Bob, meine Nummer ist neben deiner Nummer, bitte überprüfe" :)
quelle
Ich denke, die Frage ist viel einfacher als jeder denkt. Wir müssen überprüfen, ob die Nummer, die Bob hat, richtig (oder falsch) ist. Da wir "überprüfen", ob die Nummer korrekt ist, kann davon ausgegangen werden, dass Bob bereits Ihre Nummer hat. Daher ist es nicht erforderlich, Bob Ihre Nummer in einem Code zu senden. Meine Antwort wäre: "Lieber Bob, bitte ruf meine Nummer an. Danke, Alice."
quelle
Versuche ein Trik-Spiel wie dieses zu machen
lösung 1: wenn die nummer 37 ist, würde die hash map so aussehen
01 07
15 12
25 20
31 36
49 43
53 50
60 62
72 72
85 82
91 94
und mache dasselbe für 10 oder mehr Ziffern, nur um dich zu verwirren: P
Lösung 2: Oder konstruieren Sie ein Polynom, in dem Ihre Nummer zu einer anderen eindeutigen Nummer wird
lösung 3: schreibe dies in den buchstaben "dude call me"
Lösung 4: Schreiben Sie eine Funktion so, dass sie Operationen für jede Ziffer ausführt und 0 zurückgibt. Dann sendet er wahr oder falsch
quelle
Ich denke, wir können dies tun, indem wir grundlegende bitweise Operationen anwenden oder sie für Papier- und Bleistiftarbeiten anpassen. Wenn die Anzahl der Alice beispielsweise 663 ist, kann sie die Anzahl einfach mit dieser Methode umwandeln. Konvertieren Sie jede Ziffer in eine äquivalente Binärdarstellung. Sagen Sie dies als A 663 -> 110 110 011, und kehren Sie die entsprechenden Bits für jede einzelne Zahl um. Sagen Sie dies als B -> 011 011 110. Führen Sie nun A und B -> 010 010 010 aus. Senden Sie diese Nummer an bob und bitte, dasselbe zu tun, wenn das Ergebnis gleich ist, bitte ihn, Ja oder Nein zu sagen. In diesem Fall kann Eva die Zahl nicht entschlüsseln, und es besteht eine sehr geringe Wahrscheinlichkeit, dass unterschiedliche Zahlen dieselbe Darstellung ergeben. Die einzige Möglichkeit, die wir erraten können, besteht darin, alle möglichen Kombinationen zu schreiben und sie dann alle zu versuchen, um zu berücksichtigen, dass wir dies noch komplizierter machen können, indem wir Links- oder Rechtsverschiebung verwenden und Dummy-Bits hinzufügen.
quelle
Bitte rufen Sie mich an (mein Name ist 1001001). Wenn Sie mich nicht erreichen können, notieren Sie sich bitte Ihre Telefonnummer und bitten Sie Eve, mich zurückzugeben.
Erklärung: Wenn Bob mein korrektes # hat, kann er mich erreichen, dann weiß ich, dass es ein korrektes # ist. Wenn Bob nicht meine richtige Nummer hat, kann Eve auch meine (richtige) Telefonnummer nicht lesen. Auf diese Weise habe ich bereits überprüft, ob mein Freund Bob meine richtige Telefonnummer hat oder nicht.
quelle