Solitaire (cifru)

De la Wikipedia, enciclopedia liberă
Salt la: Navigare, căutare

Solitaire este un algoritm criptografic creat de Bruce Schneier "pentru a permite agenților din teren să comunice în siguranță fără să se bazeze pe sisteme electronice sau să fie nevoie să care unelte incriminatoare",[1] la cererea lui Neal Stephenson pentru a-l folosi în romanul său Cryptonomicon. A fost creat astfel încât să fie un criptosistem manual calculat cu ajutorul unui pachet de cărți de joc. În Cryptonomicon, acest algoritm se numea Pontifex pentru a ascunde faptul că avea legătură cu un pachet de cărți.

Unul din motivele creării cifrului Solitaire este că în mediile totalitariste un pachet de cărți este de departe mai accesibil (și mai puțin incriminator) decât un computer personal dotat cu utilități de criptografie. Totuși, așa cum Schneier atenționează în apendicele romanului Cryptonomicon, aproape oricine cu interes în criptanaliză va ști despre acest algoritm.

Solitaire este spart. Criptanaliza efectuată de Paul Crowley în 1999 arată că probabilitatea ca două rezultate succesive ale cifrului să fie aceleași nu este 1/26 așa cum ar trebui, ci aproape de 2/45.

Criptare și decriptare[modificare | modificare sursă]

Algoritmul generează un șir de valori care sunt combinate cu mesajul pentru criptare și decriptare. Fiecare valoare a șirului cheie este folosită pentru o valoare a mesajului, deci șirul trebuie să aibă aceeași lungime ca și mesajul.

  1. Filtrați mesajul astfel încât să rămână doar literele, scrise toate cu majuscule sau minuscule.
  2. Convertiți toate caracterele în valorile lor numerice naturale, A = 1, B = 2 etc., Z = 26.
  3. Pentru a cripta un mesaj, adăugați fiecare valoare a șirului cheie la caracterul coresăunzător din mesaj, revenind la 1 dacă valoarea depășește 26. Pentru decriptare, scădeți fiecare valoare a șirului cheie din caracterul ei corespunzător din criptotext, revenind la 26 dacă rezultatul este mai mic decât 1.

Algoritm[modificare | modificare sursă]

Acest algoritm presupune că utilizatorul are un pachet de cărți și doi jokeri. Pentru simplificare, doar două culori vor fi folosite în acest exemplu. Fiecărei cărți îi va fi atribuită o valoare numerică: prima culoare va fi numerotată de la 1 la 13 (de la as până la rege) și a doua culoare va fi numerotată de la 14 la 26 în același fel. Jokerilor li se vor atribui valorile 27 și 28. Deci, un 5 din prima culoare va avea valoarea 5 în pachetul combinat, valoarea 1 din a doua culoare va avea valoarea 14 în pachetul combinat.

Se presupune că pachetul este un vecor circular, adică după ultima carte urmează prima carte.

  1. Aranjați pachetul conform unei chei. Aceasta este cea mai importantă parte, deoarece dacă cineva cunoaște valoarea de început a unui pachet, poate genera valorile corecte din el. Cum este inițializat pachetul depinde de utilizatori, amestecarea aleatorie fiind de preferat, deși există multe alte metode. Pentru acest exemplu, pachetul va începe la valoarea 1 și aceasta va crește cu 3, modulo 28. Deci pachetul inițial va arăta în felul următor:
    • 1 4 7 10 13 16 19 22 25 28 3 6 9 12 15 18 21 24 27 2 5 8 11 14 17 20 23 26
  2. Localizați primul joker (valoarea 27) și mutați-l în pachet pe poziția următoare, adică schimbați-l cu cartea de după el. Acum, pachetul arată așa:
    • 1 4 7 10 13 16 19 22 25 28 3 6 9 12 15 18 21 24 2 27 5 8 11 14 17 20 23 26
  3. Localizați al doilea joker (valoarea 28) și mutați-l cu două poziții mai departe.
    • 1 4 7 10 13 16 19 22 25 3 6 28 9 12 15 18 21 24 2 27 5 8 11 14 17 20 23 26
  4. Împărțiți pachetul de cărți în trei. Toate cărțile până la joker de deasupra (care, după multe repetări, poate să nu mai fie primul joker) și toate cărțile de după jokerul de dedesubt vor fi interschimbate. Jokerii înșiși și cărțile dintre ei nu sunt schimbate.
    • 5 8 11 14 17 20 23 26 28 9 12 15 18 21 24 2 27 1 4 7 10 13 16 19 22 25 3 6
  5. Uitați-vă la valoarea ultimei cărți din pachet; dacă este oricare dintre jokeri, valoarea este 27. Luați acel număr de cărți de la începutul pachetului și inserați-le în fața ultimei cărți din pachet.
    • 23 26 28 9 12 15 18 21 24 2 27 1 4 7 10 13 16 19 22 25 3 5 8 11 14 17 20 6
  6. Uitați-vă la valoarea primei cărți din pachet. Numărați atâtea poziții în pachet și luați valoarea cărții la care ați ajuns. Această valoare este următoarea valoare din șirul cheie, în acest exemplu ea este 11. (Atenție, nici o carte nu își schimbă locul în acest pas, aici doar se determină valoarea).
  7. Repetați pașii 2-6 pentru toate valorile șirului cheie.

Referințe[modificare | modificare sursă]

  1. ^ en Schneier, Bruce (mai 1999). „Solitaire. http://www.schneier.com/solitaire.html. Accesat la 18 aprilie 2006. 

Legături externe[modificare | modificare sursă]

Criptografie clasică
Cifruri: ADFGVX | Afin | Alberti | Atbash | Autocheie | Bifid | Carte | Cezar | Cod Smithy | Codul bătăilor | Cuvânt cheie | Două pătrate | Francmasonic | Hill | Nihilist | Patru pătrate | Permutare | Playfair | Polialfabetic | Polybius | Rail Fence | Reihenschieber | Reservehandverfahren | ROT13 | Running key | Schitală | Solitaire | Straddling checkerboard | Substituție | Transpoziție | Trifid | VIC | Vigenère
Criptanaliză: Analiza frecvenței | Index de coincidență
Diverse: Criptogramă | Bacon | Pătratul lui Polybius | Schitală | Straddling checkerboard | Tabula recta
Criptografie
Istoria criptologiei | Criptanaliză | Portalul criptografiei | Subiecte în criptografie
Algoritm cu chei simetrice | Cifru bloc | Cifru stream | Criptografie cu chei publice | Funcție hash criptografică | Cod de autentificare a mesajelor | Număr aleatoriu