Najpierw musimy założyć, że Ewa jest tylko pasywna. Rozumiem przez to, że zgodnie z prawdą wysyła kartę do Boba, a wszystko, co przyniesie Alice, jest rzeczywiście odpowiedzią Boba. Jeśli Ewa może zmienić dane w jednym lub obu kierunkach (a jej działanie pozostanie niewykryte), wszystko pójdzie dobrze.
(Aby uhonorować wieloletnie tradycje, dwie uczciwe strony zaangażowane w rozmowę nazywają się Alice i Bob. W swoim tekście powiedziałeś „ty”. Moje prawdziwe imię to nie „Alice”, ale odpowiem tak, jakbyś napisał że Alice chce zweryfikować numer telefonu Boba).
Prostą (ale słabą) odpowiedzią jest użycie funkcji skrótu. Alice pisze na karcie: „zwróć mi skrót SHA-256 swojego numeru telefonu”. SHA-256 to kryptograficzna funkcja skrótu, która jest uważana za bezpieczną, jeśli chodzi o funkcje skrótu. Obliczenie go ręcznie byłoby żmudne, ale wciąż wykonalne (to około 2500 32-bitowych operacji, gdzie każda operacja jest dodatkiem, przesunięciem słowa lub rotacją lub bitową kombinacją bitów; Bob powinien być w stanie to zrobić w ciągu jednego dnia lub więc).
Co jest w tym słabego? SHA-256, będący kryptograficzną funkcją skrótu, jest odporny na „preimages”: oznacza to, że biorąc pod uwagę dane wyjściowe skrótu, bardzo trudno jest odzyskać odpowiednie dane wejściowe (to problem, przed którym stoi Eve). Jednak „bardzo trudny” oznacza „najłatwiejszą metodą jest brutalna siła: próbowanie możliwych danych wejściowych, aż do znalezienia dopasowania”. Problem polega na tym, że brutalna siła jest tutaj łatwa: nie ma tak wielu możliwych numerów telefonów (w Ameryce Północnej to 10 cyfr, czyli zaledwie 10 miliardów). Bob chce robić rzeczy ręcznie, ale nie możemy zakładać, że Ewa jest tak ograniczona. Podstawowy komputer PC może wypróbować kilka milionów skrótów SHA-256 na sekundę, więc Ewa będzie gotowa w mniej niż godzinę (mniej niż 5 minut, jeśli używa GPU).
Jest to ogólny problem: jeśli Bob jest deterministyczny (tzn. Dla danej wiadomości od Alicji zawsze zwraca tę samą odpowiedź), Ewa może go zasymulować. Mianowicie, Ewa wie wszystko o Bobie z wyjątkiem numeru telefonu, więc praktycznie obsługuje 10 miliardów Bobów, które różnią się tylko swoim przypuszczalnym numerem telefonu; i czeka, aż jeden z wirtualnych Bobów zwróci wszystko, co rzeczywiście wrócił Bob. Wada wpływa na wiele rodzajów „inteligentnych” rozwiązań obejmujących losowe elementy jednorazowe i szyfrowanie symetryczne i tak dalej. Jest to silna wada, a jego korzeń leży w ogromnej różnicy w mocy obliczeniowej między Ewą i Bob (obecnie, jeśli Bob również posiadało komputer tak duży jak Eve, to mógłby użyć powolnyfunkcja skrótu za pomocą wielu iteracji; mniej więcej o to chodzi w haszowaniu hasła, z numerem telefonu zamiast hasła; zobacz bcrypt, a także tę odpowiedź ).
Dlatego też słabe rozwiązanie musi wiązać się z pewną przypadkowością ze strony Boba: Bob musi kilkakrotnie rzucić monetą lub rzucać kostką i wstrzykiwać wartości w swoich obliczeniach. Co więcej, Ewa nie może być w stanie odkryć tego, co zrobił Bob, ale Alice musi być w stanie, więc niektóre informacje są poufnie przekazywane od Boba do Alice. Nazywa się to szyfrowaniem asymetrycznym lub przynajmniej asymetryczną zgodą klucza. Najprostszym algorytmem tej klasy do obliczenia, ale wciąż dość bezpiecznym, jest RSA z wypełnieniem PKCS # 1 v1.5 . RSA może używać jako wykładnika publicznego. Tak więc protokół działa w następujący sposób:e = 3
Alicja generuje dużą liczbę całkowitą gdzie i są liczbą całkowitą o podobnej wielkości, tak że rozmiar jest wystarczający do zapewnienia bezpieczeństwa (tj. Co najmniej 1024 bity, według stanu na 2012 r.). Alicja musi również ustalić, aby i nie były wielokrotnościami 3.p q n p - 1 q - 1n = p qpqnp - 1q- 1
Alice zapisuje na karcie.n
Bob najpierw wpisuje swój numer telefonu w sekwencję bajtów tak długo, jak , jak opisano w PKCS # 1 (oznacza to: 00 02 xx xx ... xx 00 bb bb .. bb, gdzie „bb” to dziesięć bajtów, które kodują numer telefonu i „xx” to losowe niezerowe wartości bajtów, dla całkowitej długości 128 bajtów, jeśli jest 1024-bitową liczbą całkowitą).nnn
Bob interpretuje swoją sekwencję bajtów jako dużą liczbę całkowitą (kodowanie big-endian) i oblicza (więc to kilka mnożenia z bardzo dużymi liczbami całkowitymi, a następnie dzielenie, czego wynikiem jest pozostała część podziału). Nadal można to zrobić ręcznie (ale tam też prawdopodobnie zajmie to większą część dnia). W rezultacie Bob odsyła Alice.m 3 m o d nmm3 mod n
Alicja wykorzystuje swoją wiedzę o i odzyskać z wysyłane przez Boba. Strona Wikipedii na temat RSA zawiera pewne dość jasne wyjaśnienia tego procesu. Kiedy Alice ma , może usunąć dopełnienie („xx” są niezerowe, więc pierwszy bajt „bb” można jednoznacznie zlokalizować), a następnie ma numer telefonu, który może porównać z tym, który miała.q m m 3 m o d n mpqmm3 mod nm
Obliczenia Alicji będą wymagały komputera (to, co robi komputer, jest zawsze elementarne i wykonalne ręcznie, ale komputer jest diabelnie szybki, więc „wykonalne” może zająć zbyt wiele czasu w praktyce; ręczne odszyfrowanie RSA zajęłoby wiele tygodni).
(Właściwie moglibyśmy mieć szybsze obliczenia ręczne przy użyciu szyfrowania McEliece , ale wtedy klucz publiczny - co Alice zapisuje na karcie - byłby ogromny, a karta po prostu nie zrobiłaby; Ewa musiałaby przetransportować pełną książkę cyfr.)