byte scambiano i difetti di sicurezza dell'algoritmo di crittografia?

1

L'onestà mi ordina immediatamente di dire che non sono un professionista, ma sono affascinato dalla crittografia dei dati. Questo algoritmo non verrà utilizzato nel codice di produzione, quindi per favore non riempirmi di "Non progettare la tua crittografia", lo so. Mi scuso in anticipo se la domanda non è adatta a questo sito.

Mi chiedevo quanto sarebbe sicuro il seguente algoritmo di crittografia. Ci vorrebbe:

  • una chiave lunga 256-byte, da interpretare come una serie di numeri.
  • dati da crittografare, letti in blocchi lunghi 256 byte.

La chiave è tale che non vengono ripetuti due valori e tutti i valori dovrebbero essere nell'intervallo 0x00-0xFF. Ciò significa che c'è 256! combinazioni possibili, se non sbaglio. Tuttavia, alcune di queste combinazioni sono più entropiche di altre - il che rende alcune di loro meno utili, vero?

Ora, una copia del blocco dati viene creata e la chiave viene iterata su. Il primo byte nel blocco dati originale viene spostato sul primo valore nella chiave; il secondo, il secondo valore nella chiave e così via.

In pseudocode:

for index, destination in enumerate(key):
     data_enc[destination] = data[index]

Non essendo un codice sostitutivo, dovrebbe essere più difficile indovinare quale valore è quale. Tuttavia, sono consapevole che la sostituzione è sempre la stessa in tutti i dati, quindi sicuramente conta come una debolezza.

Il principale punto debole è la sua semplicità, suppongo. Cosa ne pensi?

    
posta Luca 11.07.2014 - 17:03
fonte

2 risposte

3

some of those combinations are more entropic than others

Per favore non torturare parole.

Entropia è una caratteristica di un processo randomizzato: è una quantificazione di quanti diversi risultati si potrebbero ottenere. Nel tuo caso, la tua "chiave" è una permutazione di 256 valori, quindi il processo è quello che produce una nuova permutazione. Il processo ha entropia; nessuna permutazione di uscita ha alcuna entropia. Una permutazione è solo un valore, è ciò che è; non "contiene" entropia. Corrispondentemente, non ha senso affermare che ogni permutazione specifica è più o meno "entropica" di ogni altra; i valori non sono "entropici".

The main weakness is its simplicity, I suppose.

No, la semplicità è il suo principale punto di forza, non la sua principale debolezza. La semplicità è buona. Il principale punto debole del tuo schema è che è debole.

Quello che descrivi è un cifrario di permutazione , che è un sotto-caso di codici di trasposizione . Questi sono tipi di algoritmi che erano popolari ai tempi in cui non potevamo fare molto meglio perché era prima dell'invenzione del computer. Sono orribilmente perdenti in molti modi (ad esempio non nascondono la frequenza delle lettere, poiché tutte le lettere in chiaro sono ancora lì). Edgar Allan Poe si era vantato che avrebbe potuto violare ogni tipo di cifrario di sostituzione o trasposizione, e che non era stato smentito prima della sua morte nel 1849.

    
risposta data 11.07.2014 - 18:01
fonte
1

Sì, è davvero, davvero debole. Prendi in considerazione qualcosa che potresti voler crittografare: per esempio, questa richiesta HTTP.

POST /login HTTP/1.1
Accept-Encoding: gzip;q=0.9
Connection: keep-alive
Content-Type: application/x-www-form-urlencoded
Host: example.com
User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.153 Safari/537.36
username=false&password=%3B4NBt~%3A8%22%26xOqeZy

Trasposizione casuale sui primi 256 byte:

cT_
ox(tAHPM/ztz.au  knel-:amnie-eanL11AwlSCl  Mi.xti ;o 4c (-tpp.s.qpEetX3ewGo71x
P.pr ec H0/e1:iln9mKe/ie3plk8eTKg6fC1apo5 /  3 oe:T-
HrLvegy, S.g
u/1l5w7kne)W. c5
l0 0gn6tOo.x3m-o3i)6-rbo
oci1maioCodet6/h-dp5oc3enifa/cdnoT5lepinraen9UTAlits;ren:.cpin:=6

Se sai qual'è il testo in chiaro - e in molti casi, non è difficile indovinare - ci sono solo poche possibilità per il prossimo blocco, e sei garantito per ottenere il maggior numero di riconoscibili dati in quanto vi sono caratteri univoci nel testo in chiaro noto. Detto questo, riempire il resto diventa più facile, ed è il caso per ogni blocco che ottieni con la stessa chiave.

Questo è ovvio, ma c'è anche il fatto che puoi fare analisi di frequenza per scoprire esattamente cosa viene inviato, o restringere i set di caratteri per le password trasferite, semplicemente supporre ...

Puoi "aggiustarlo" in due modi:

  • Usando una chiave diversa, non correlata per ogni blocco. Congratulazioni; hai una versione più debole del pad singolo.

  • Calcolando una chiave diversa per ogni blocco. Congratulazioni; hai una versione più debole di ogni cifra con programmazione dei tasti.

risposta data 11.07.2014 - 17:21
fonte

Leggi altre domande sui tag