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.
źródło
Odpowiedzi:
Tak, to jednorazowa podkładka . Jeśli kluczowy materiał nigdy nie zostanie ponownie użyty, jest teoretycznie bezpieczny.
Wadą jest to, że potrzebujesz jednego klucza na parę komunikujących się zleceniodawców i potrzebujesz bezpiecznego sposobu wymiany klucza przed komunikacją.
źródło
Jak wskazuje odpowiedź Vatine , twój algorytm jest w zasadzie jednorazowy.
Aby jednak skomentować jedną z twoich notatek:
Moja odpowiedź brzmi: nie, to nie jest niesamowite. Diabeł zawsze tkwi w szczegółach, a diabeł tutaj polega na wymianie kluczy. Twoja metoda zależy od bezbłędnej wymiany kluczy twarzą w twarz. Nie mogę sobie pozwolić na wysyłanie Jamesa Bonda z dyskiem flash 4 GB dla mnie do każdego sprzedawcy w Internecie za każdym razem, gdy chcę coś kupić lub mieć inne bezpieczne połączenia.
Wreszcie aspekt XOR algorytmu nie jest ważny. Prosty szyfr zastępczy jest w porządku z OTP. Siłą OTP jest to, że klucz nigdy nie jest ponownie używany, i zakłada, że James Bond bezbłędnie wymienia klucze dla obu stron (tj. Wcześniejsza bezpieczna wymiana kluczy)
źródło
Chociaż jednorazowa podkładka ma bezwarunkową (matematycznie udowodnioną) gwarancję prywatności przeciwko atakującemu, który może tylko czytać wiadomości, ma pewne słabości.
Przechwytujący atakujący, który poprawnie zgaduje zwykły tekst, może manipulować tekstem zaszyfrowanym do dowolnego celu (o tej samej długości).
Jeśli atakujący wstawi lub usunie jakąś wiadomość (lub jej część), wskaźniki Alicji i Boba nie są zsynchronizowane i każda kolejna komunikacja jest przerywana.
Aktualizacja: Założono, że obie strony śledzą oba wskaźniki. Jeśli wyślesz bieżącą wartość wskaźnika, jesteś podatny na ataki z użyciem dwóch bloków czasowych (jeśli zezwolisz na użycie tego samego zakresu klucza więcej niż jeden raz) lub ataki DOS (jeśli nie zezwolisz na ten sam zakres klucza do wykorzystania więcej niż jeden raz, np. poprzez ich usunięcie).
Oba te problemy są spowodowane brakującą ochroną integralności i uwierzytelnienia - masz doskonały szyfr, ale nie masz MAC.
Dodaj MAC do protokołu jednorazowego pada, aby rzeczywiście był bezpieczny. Każda wiadomość powinna otrzymać „sumę kontrolną”, która gwarantuje, że faktycznie została wysłana przez domniemanego nadawcę i nie została zmodyfikowana pomiędzy. Powinieneś również wysłać jakiś numer sekwencyjny, aby odbiorca wiedział, której części klucza użyć, gdy poprzednia wiadomość zaginęła (lub odrzucić wiadomość, jeśli jest zduplikowana) - uwzględnij to w obliczeniu sumy kontrolnej.
Zrobiłby to zwykły algorytm MAC, ale przypuszczam, że możesz chcieć użyć jakiegoś jednorazowego wielomianowego MAC, aby mieć zabezpieczenia dopasowane do twojego jednorazowego pada. (Wyjmij klucz MAC z bitów przed lub po kluczu szyfrującym, tj. Nie używaj ponownie jednego klucza do obu celów.)
źródło
W rzeczywistości nie jest to całkowicie bezpieczne. Wyciekiem protokołu jest DŁUGOŚĆ przekazywanej wiadomości.
Na przykład, jeśli szpieg wie, że odpowiesz „tak” lub „nie” i zobaczy długość = 2, może wydedukować to „nie”.
To naprawdę niesamowite, ile można wydedukować tylko ze znanych długości, jeśli można odgadnąć kontekst.
źródło