Innanzitutto dobbiamo supporre che Eva sia solo passiva. Con questo intendo dire che spedisce sinceramente la carta a Bob, e qualunque cosa lei riporti ad Alice è davvero la risposta di Bob. Se Eva può modificare i dati in una o entrambe le direzioni (e la sua azione rimane inosservata), allora tutto va bene.
(Per onorare le tradizioni di lunga data, le due parti oneste coinvolte nella conversazione si chiamano Alice e Bob. Nel tuo testo hai detto "tu". Il mio vero nome non è "Alice", ma risponderò come se stessi scrivendo che Alice vuole verificare il numero di telefono di Bob.)
La risposta semplice (ma debole) è usare una funzione hash. Alice scrive sulla carta: "restituiscimi l'hash SHA-256 del tuo numero di telefono". SHA-256 è una funzione hash crittografica ritenuta sicura, per quanto riguarda le funzioni hash. Calcolarlo a mano sarebbe noioso ma comunque fattibile (sono circa 2500 operazioni a 32 bit, in cui ogni operazione è un'aggiunta, uno spostamento o rotazione di parole o una combinazione di bit bit a bit; Bob dovrebbe essere in grado di farlo in un giorno o così).
Cosa c'è di debole in questo? SHA-256, essendo una funzione hash crittografica, è resistente alle "preimmagini": ciò significa che dato un output hash, è molto difficile recuperare un input corrispondente (questo è il problema che Eva affronta). Tuttavia, "molto difficile" significa "il metodo più semplice è la forza bruta: provare possibili input fino a quando non viene trovata una corrispondenza". Il problema è che la forza bruta è facile qui: non ci sono così tanti numeri di telefono possibili (in Nord America, sono 10 cifre, cioè solo 10 miliardi). Bob vuole fare le cose a mano, ma non possiamo presumere che Eva sia così limitata. Un PC di base può provare alcuni milioni di hash SHA-256 al secondo, quindi Eva verrà eseguita in meno di un'ora (meno di 5 minuti se utilizza una GPU).
Questo è un problema generico: se Bob è deterministico (cioè per un determinato messaggio di Alice, restituirebbe sempre la stessa risposta), Eva può simularlo. Vale a dire, Eva sa tutto di Bob tranne il numero di telefono, quindi gestisce virtualmente 10 miliardi di Bob, che differiscono solo per il numero di telefono presunto; e aspetta che uno dei Bob virtuali ritorni qualunque cosa il vero Bob sia effettivamente tornato. Il difetto riguarda molti tipi di soluzioni "intelligenti" che coinvolgono nonces casuali e crittografia simmetrica e quant'altro. È un grosso difetto e la sua radice sta nell'enorme differenza nella potenza di calcolo tra Eva e Bob (ora, se Bob avesse anche un computer grande come quello di Eva, allora potrebbe usare un lentofunzione hash attraverso l'uso di molte iterazioni; questo è più o meno ciò che riguarda l'hashing della password, con il numero di telefono al posto della password; vedi bcrypt e anche questa risposta ).
Quindi, una soluzione non debole deve comportare una certa casualità da parte di Bob: Bob deve lanciare una moneta o lanciare dadi ripetutamente e iniettare i valori nei suoi calcoli. Inoltre, Eva non deve essere in grado di svelare ciò che Bob ha fatto, ma Alice deve esserlo, quindi alcune informazioni vengono trasmesse in modo sicuro da Bob ad Alice. Questo si chiama crittografia asimmetrica o, almeno, accordo di chiave asimmetrica. L'algoritmo più semplice di quella classe da calcolare, ma ancora ragionevolmente sicuro, è quindi RSA con il padding PKCS # 1 v1.5 . RSA può usare come esponente pubblico. Quindi il protocollo va così:e=3
Alice genera un intero grande dove e sono numeri primi di dimensioni simili, in modo tale che la dimensione di sia sufficiente per garantire la sicurezza (ovvero almeno 1024 bit, a partire dal 2012). Inoltre, Alice deve disporre che e non siano multipli di 3.p q n p - 1 q - 1n=pqpqnp−1q−1
Alice scrive sulla carta.n
Bob prima inserisce il suo numero di telefono in una sequenza di byte fintanto che , come descritto da PKCS # 1 (ciò significa: 00 02 xx xx ... xx 00 bb bb .. bb, dove "bb" sono i dieci byte che codificano il numero di telefono e "xx" sono valori di byte casuali diversi da zero, per una lunghezza totale di 128 byte se è un numero intero a 1024 bit).nnn
Bob interpreta la sua sequenza di byte come un grande valore intero (codifica big-endian) e calcola (quindi sono un paio di moltiplicazioni con interi molto grandi, quindi una divisione, il risultato è il resto della divisione). È ancora fattibile a mano (ma, di nuovo, probabilmente ci vorrà la parte migliore di una giornata). Il risultato è ciò che Bob rimanda ad Alice.m 3 m o d nmm3 mod n
Alice usa la sua conoscenza di e per recuperare dal inviato da Bob. La pagina di Wikipedia su RSA ha alcune spiegazioni ragionevolmente chiare su questo processo. Una volta che Alice ha , può rimuovere il padding (i 'xx' sono diversi da zero, quindi il primo byte 'bb' può essere posizionato in modo inequivocabile) e quindi ha il numero di telefono, che può confrontare con quello che aveva.q m m 3 m o d n mpqmm3 mod nm
Il calcolo di Alice richiederà un computer (ciò che fa un computer è sempre elementare e fattibile a mano, ma un computer è diabolicamente veloce, quindi il "fattibile" potrebbe richiedere troppo tempo per essere messo in pratica; la decodifica RSA a mano richiederebbe molti settimane).
(In realtà potremmo avere un calcolo manuale più veloce usando la crittografia McEliece , ma poi la chiave pubblica - ciò che Alice scrive sulla carta - sarebbe enorme e una carta semplicemente non lo farebbe; Eva dovrebbe trasportare un libro intero di cifre.)