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?