Powiedzmy, że Alice i Peter mają 4 GB pamięci flash USB. Spotykają i zapisują na obu patykach dwa pliki o nazwach alice_to_peter.key
(2 GB) i peter_to_alice.key
(2 GB), które zawierają losowo wygenerowane bity. Nigdy więcej się nie spotykają, ale komunikują się elektronicznie. Alice utrzymuje również wywoływaną zmienną, alice_pointer
a Peter utrzymuje wywoływaną zmienną peter_pointer
, które początkowo są zerowane.
Kiedy Alice musi wysłać wiadomość do Piotra, robi to (gdzie n
jest n-ty bajt wiadomości):
encrypted_message_to_peter[n] = message_to_peter[n] XOR alice_to_peter.key[alice_pointer + n]
encrypted_payload_to_peter = alice_pointer + encrypted_message_to_peter
alice_pointer += length(encrypted_message_to_peter)
(i dla maksymalnego bezpieczeństwa, wykorzystaną część klucza można usunąć)
Piotr odbiera encrypted_payload_to_peter
, czyta alice_pointer
zapisane na początku wiadomości i wykonuje:
message_to_peter[n] = encrypted_message_to_peter[n] XOR alice_to_peter.key[alice_pointer + n]
Aby zapewnić maksymalne bezpieczeństwo, po przeczytaniu wiadomości usuń również zużytą część klucza.
- EDYCJA: W rzeczywistości ten krok z tym prostym algorytmem (bez sprawdzania integralności i uwierzytelniania) zmniejsza bezpieczeństwo, patrz post Paŭlo Ebermann poniżej.
Kiedy Peter musi wysłać wiadomość do Alicji, robią to odwrotnie, tym razem z peter_to_alice.key
i peter_pointer
.
Za pomocą tego trywialnego schematu mogą przesyłać codziennie przez kolejne 50 lat 2 GB / (50 * 365) = ~ 115 kB zaszyfrowanych danych w obu kierunkach. Jeśli potrzebują więcej danych do wysłania, mogą użyć większych kluczy, na przykład w dzisiejszych dyskach HD o pojemności 2 TB (klucze 1 TB) możliwa byłaby wymiana 60 MB dziennie przez następne 50 lat! To dużo danych w praktyce; na przykład użycie kompresji to ponad godzina wysokiej jakości komunikacji głosowej.
Wydaje mi się, że atakujący nie ma możliwości odczytania zaszyfrowanych wiadomości bez kluczy, ponieważ nawet jeśli mają nieskończenie szybki komputer, z brutalną siłą mogą uzyskać każdą możliwą wiadomość poniżej limitu, ale jest to liczba astronomiczna wiadomości, a atakujący nie wie, która z nich jest faktyczną wiadomością.
Czy mam rację? Czy ten schemat komunikacji jest naprawdę absolutnie bezpieczny? A jeśli jest bezpieczny, to czy ma własną nazwę? Szyfrowanie XOR jest dobrze znane, ale szukam nazwy tej konkretnej praktycznej aplikacji wykorzystującej duże klucze po obu stronach? Pokornie oczekuję, że ta aplikacja została wymyślona przez kogoś przede mną. :-)
Uwaga: jeśli jest absolutnie bezpieczny, to jest niesamowity, ponieważ przy dzisiejszych tanich i dużych urządzeniach pamięci masowej bezpieczniejsza komunikacja byłaby znacznie tańsza niż przy drogiej kryptografii kwantowej, a to ma równoważne bezpieczeństwo!
EDYCJA:
Myślę, że będzie to bardziej praktyczne w przyszłości, gdy koszty przechowywania spadną.Może na zawsze rozwiązać bezpieczną komunikację.Dziś nie masz pewności, czy ktoś z powodzeniem zaatakuje istniejące szyfry nawet rok później i sprawi, że jego często drogie implementacje będą niebezpieczne. W wielu przypadkach przed komunikacją, kiedy obie strony spotykają się osobiście, nadszedł czas na wygenerowanie kluczy. Myślę, że jest idealny do komunikacji wojskowej, na przykład między okrętami podwodnymi, które mogą mieć dyski twarde z dużymi kluczami, a centrala wojskowa może mieć dyski twarde dla każdej łodzi podwodnej. Może być również praktyczny w życiu codziennym, na przykład do kontrolowania konta bankowego, ponieważ podczas tworzenia konta spotykasz się z bankiem itp.