Solitario (crittografia)

Il solitario è un algoritmo di crittografia che può essere eseguito con le mani utilizzando un gioco di carte e inventato da Bruce Schneier , su richiesta di Neal Stephenson per il suo romanzo di fantascienza Cryptonomicon .

Uno degli obiettivi di questo sistema è quello di poter essere utilizzato in un ambiente totalitario, dove il possesso di un gioco di carte è molto meno incriminante di quello di un computer dotato di un sistema di crittografia.

Paul Crowley ha mostrato nel 1999 che la probabilità che due successivi output di testo codificato siano identici è più vicina a 1 / 22,5 che a 1/26 come ci si potrebbe aspettare.

Crittografia e decrittografia

L'algoritmo genera una serie di valori (la chiave) che vengono combinati con il messaggio per codificarlo o decodificarlo. Ciascun valore di questa sequenza viene utilizzato per un carattere del messaggio. Quindi la chiave è la lunghezza del messaggio.

Il principio di crittografia è il seguente:

  1. Nessuna punteggiatura e nessun caso (in altre parole, il messaggio è in maiuscolo o in minuscolo)
  2. Converti ogni lettera del messaggio nel valore numerico corrispondente (A = 1, B = 2 ..., Z = 26). Per renderlo più difficile, possiamo prendere qualsiasi biiezione da A, B, C ..., Z in 1, 2 ..., 26.
  3. Per crittografare, aggiungi ogni valore della chiave al valore corrispondente nel messaggio, ricominciando da 1 se il valore supera 26 (28 = 2 ad esempio)
  4. Per decrittografare, sottrai ogni valore di chiave dal valore corrispondente nel testo cifrato, iniziando da 26 se il valore è strettamente inferiore a 1.

Generazione delle chiavi

Per generare la chiave, devi avere un mazzo di carte e due jolly. Per motivi di semplicità, nel seguito verranno utilizzate solo due famiglie di carte (su quattro). Ad ogni carta viene assegnato un valore: da 1 a 13 per la prima famiglia (dall'asso al re) e da 14 a 26 per la seconda (anche dall'asso al re). I jolly sono numerati 27 e 28. Ad esempio il jack della prima famiglia vale 11 e il 2 della seconda vale 15.

Consideriamo che il mazzo è una lista circolare, vale a dire che dopo l'ultima carta c'è la prima.

  1. Mescolare il gioco Questa è la parte più importante perché per ogni dato arrangiamento iniziale la chiave è unica. È quindi sufficiente che i corrispondenti abbiano un mazzo di carte nello stesso ordine per poter comunicare. Uno dei modi migliori è mescolare il gioco perfettamente a caso, sebbene possano essere usati molti altri metodi. Nel nostro esempio, mettiamo le carte da 3 a 3, modulo 28. Quindi, all'inizio abbiamo:
    • 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. Individua e sposta il primo jolly (il 27) in basso di una riga, cioè scambialo con la carta sotto di esso. Qui otteniamo:
    • 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. Individua e abbassa il secondo jolly (il 28) di due file.
    • 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. Taglia il gioco in tre parti: la prima (indicata con 1) contiene tutte le carte fino al jolly più alto (che non è necessariamente 27) viene scambiata con la terza che comprende tutte le carte dal jolly più basso fino alla fine del gioco.
    • 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. Guarda il valore della carta sotto il mazzo. Se è un jolly, prendi il valore 27 (indipendentemente dal jolly). Notare questo valore n. Prendi le prime n carte dal mazzo e posizionale appena prima dell'ultima carta.
    • 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. Guarda il valore della carta sul mazzo, ad esempio p. Contare le carte p dopo la prima. La carta p-esima sarà il valore chiave successivo. Nel nostro esempio, sarebbe 11. Questo passaggio non modifica il pacchetto.
  7. Ripeti dal passaggio 2 tante volte quanto necessario.

Riferimenti

  1. Bruce Schneier , "  Solitaire  " ,Maggio 1999(consultato nel 2006 )
  2. Paul Crowley, "  Problemi con il" Solitario "di Bruce Schneier  " ,1999(visitato il 30 maggio 2007 )

Link esterno