Rodzaj algorytmu |
strumieniowy, opcjonalnie blokowy |
---|---|
Autorzy | |
Długość klucza |
54 bity |
Liczba rund |
1 |
Solitaire – szyfr stworzony przez Bruce’a Schneiera dla potrzeb osób niemających dostępu do komputera. Jest to prosty szyfr strumieniowy (jednakże autor zaleca używanie go w trybie blokowym ze względu na wygodę), w którym cyfry oznaczające litery tekstu jawnego poddawane są operacji dodawania modulo 26 ze strumieniem klucza, a następnie ponownie zamieniane na litery. Strumień klucza jest generowany przy użyciu talii kart.
Strumieniem klucza nazywamy ciąg wartości wygenerowany za pomocą odpowiedniego algorytmu, za pomocą którego szyfrowany jest tekst jawny, w tym przypadku będzie to algorytm przekładania kart. Kluczem nazywamy ciąg wartości, na podstawie których będziemy obliczać strumień klucza, w tym przypadku będzie to początkowe ułożenie kart.
Szyfrowanie polega na dodaniu modulo 26 liczb odpowiadających literom tekstu jawnego oraz strumienia klucza, a następnie ponowną zamianę wyniku tego działania na litery. Można to zapisać jako następujące działanie matematyczne
(M + K) mod 26 = C
gdzie M to zbiór wartości liter tekstu jawnego, K to zbiór wartości strumienia klucza a C to szyfrogram. Wartości liczbowej litery odpowiada jej pozycja w alfabecie. Litera A będzie odpowiadała liczbie 1, litera B liczbie 2, C liczbie 3 i tak dalej. Autor zaleca, aby dla wygody szyfrować tekst jawny w pięcioznakowych grupach. Jeżeli długość tekstu jawnego nie jest wielokrotnością liczby 5, należy dopełnić wiadomość do takiej długości za pomocą liter „X”.
Tekst jawny:
To jest tajna wiadomosc.
Strumień klucza:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
Po zamianie na wartości liczbowe tekst jawny będzie miał postać:
20 15 10 5 19 20 20 1 10 14 1 23 9 1 4 15 13 15 19 3
Należy po kolei dodać wartości liczbowe liter tekstu jawnego i strumienia klucza modulo 26. W wyniku otrzymamy:
21 17 13 19 24 26 1 9 19 24 12 9 22 15 19 5 4 7 12 23
Po zamianie liczb na litery będzie to:
Uq mixz aisxl ivosedglw.
Deszyfrowanie wiadomości polega na odejmowaniu modulo wartości liter szyfrogramu i klucza.
Mamy szyfrogram:
Uq mixz aisxl ivosedglw.
oraz strumień klucza:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
Zamieniamy szyfrogram na wartość liczbową. Szyfrogram:
21 17 13 19 24 26 1 9 19 24 12 9 22 15 19 5 4 7 12 23
Następnie odejmujemy po kolei każdą wartość strumienia klucza od wartości szyfrogramu. Jeżeli wynikiem jest liczba mniejsza od 1, obliczamy 26 – wynik. Dla przykładu: po odjęciu liczb 13 i 21 uzyskamy wynik -8. Obliczamy więc 26-8=18. Jest to wartość litery tekstu jawnego. Następnie zamieniamy liczby na litery. W ten sposób otrzymamy tekst jawny:
To jest tajna wiadomosc.
Najważniejszą częścią szyfru jest generator strumienia klucza, którego działanie polega na odpowiednim manipulowaniu talią kart. Aby właściwie wygenerować klucz, w talii muszą występować 54 karty (standardowa talia 52 kart + 2 jokery). Dodatkowo, oba jokery muszą się od siebie różnić. Przed rozpoczęciem generowania strumienia klucza należy ustalić, który z jokerów jest „ważniejszy”. W dalszej części będzie on oznaczany literą A, natomiast joker mniej ważny literą B. Należy uznać najpopularniejsze starszeństwo kart, od najsłabszych: As, 2..10, Walet, Dama, Król.
Przy punkcie 7. i 8. ułożenie talii nie zmienia się.
Ze względów praktycznych w przykładzie użytych jest tylko 12 kart (od Asa do 10 trefl oraz 2 jokery).
Najtrudniejszą częścią całej operacji jest ułożenie talii w pozycji początkowej, a dokładniej ustalenie tej pozycji, czyli klucza. Można oczywiście użyć zupełnie losowego klucza i jest to wyjście najbezpieczniejsze, jednak najtrudniejsze do wykonania. Autor przedstawia metodę na ułożenie talii przy pomocy klucza. Należy ułożyć talię według starszeństwa (na końcu Joker A i B), a następnie wykonywać kolejne kroki jak przy generowaniu strumienia, z tym, że zamiast pkt. 7 wykonaj pkt. 6 biorąc jako liczbę kart do odliczenia wartości kolejnych liter hasła. Jeżeli kluczem jest słowo „Tajne”, to pkt. 6 powtórzymy dwukrotnie – raz normalnie, i drugi raz nie używając dolnej karty, a wartości 20 (litera T). Przy generowaniu kolejnej wartości strumienia użyjemy liczby 1 (litera A), kolejnym 10 (litera J) i tak dalej. Kartę na spodzie talii należy zostawić w niezmienionej pozycji.
Do tej pory nie znaleziono poważnych dziur w generatorze strumienia Solitaire’a. Jednak ze względu na to, że szyfr opiera się na dodawaniu i odejmowaniu modulo, nie wolno używać tego samego klucza do szyfrowania dwóch wiadomości.