Negli anni '80, ho scritto un programma di crittografia per alcuni file di dati di piccole dimensioni (10-20 K). È puramente basato su EOR, quindi sia la crittografia sia la decifratura sono identiche e possono passare avanti e indietro all'infinito.
- L'utente inserisce una password ASCII da 8 byte
- Quattro indicatori di memoria a 16 bit sono impostati dagli 8 byte password
-
I dati crittografati sono EOR-ed con dati del kernel ROM sequenziali
-
Tuttavia, se la password non è corretta durante la decrittografia, i dati decrittografati saranno inutili
Pseudo-codice (trasposto dalla versione in lingua della macchina originale):
*a = password[0] | password[1] << 8;
*b = password[2] | password[3] << 8;
*c = password[4] | password[5] << 8;
*d = password[6] | password[7] << 8;
for(i=0; i<strlen(data); i++) {
n = i & 0xff;
data[i] = data[i] ^ a[n] ^ b[n] ^ c[n] ^ d[n];
}
La mia domanda:
Questo algoritmo ha un punto debole che mi permetterà di trovare la password / decrittografare i dati senza usare la forza bruta regolare (prova tutte le combinazioni, liste di parole, ecc.)?
(Non so come saranno i dati decrittografati, quindi testare per il successo è un puzzle in sé, ma penso che cercare sequenze di codice macchina valido dovrebbe fare il trucco ...)