Prima di tutto: so che AES è un codice a blocchi e non una funzione di hashing. Tuttavia, sono bloccato con un microcontroller con poca RAM e memoria flash, e AES-128 è già implementato su di esso e utilizzato per lo scopo previsto - la crittografia.Utilizzo di AES per i controlli di integrità dei file, sostituzione di MD5
Sfortunatamente, dovrò anche implementare una funzione di hashing per i controlli di integrità dei file sullo stesso microcontrollore. Date le risorse limitate, mi chiedevo se sarebbe stato possibile utilizzare l'algoritmo AES esistente invece di MD5 per l'hashing. Una possibilità per farlo potrebbe essere:
- crittografare il primo blocco del file utilizzando una chiave fittizia (come tutti gli zeri per esempio)
- Encrypt il blocco successivo con il blocco cifrato precedente come chiave
- continuare in questo modo fino a quando tutti i dati del file è stato elaborato
- Usa l'ultimo blocco cifrato come l'hash
in teoria, credo che questo dovrebbe funzionare. Se ci sono dati corrotti ovunque nel file, ciò porterebbe a differenze in tutti i blocchi successivi.
Ora, la grande domanda è: quanto bene questo metodo si comporterebbe in termini di collisioni? O per dirla diversamente: come sarebbe distribuito l'ultimo "hash"?
Mi chiedo se lo schema personalizzato occuperebbe meno spazio sul dispositivo rispetto all'implementazione di un algoritmo SHA o almeno di CRC32. –
Poiché AES è già sul dispositivo, il mio schema personalizzato non richiederebbe quasi spazio aggiuntivo. CRC32 non è sufficiente, poiché il controllo di integrità viene utilizzato per convalidare gli aggiornamenti del firmware da caricare sul microcontrollore. Anche un singolo errore di bit renderebbe il dispositivo completamente inutilizzabile. – Makai
Ricorda chi è il tuo avversario. Se si tratta solo di rumore di linea, allora l'uso di un controllo progettato per catturare il rumore di linea è probabilmente soddisfacente, dal momento che non hai avversari malevoli. Stai solo evitando di essere sfortunato, quindi una possibilità di corruzione 2^32 significa ancora che puoi aspettarti di aggiornare il firmware una volta al secondo per 68 anni senza mai vedere un problema. Suggerisco caldamente di confrontare almeno la tua soluzione AES-128 con un semplice CRC32 vecchio e di vedere se esiste una differenza misurabile contro la corruzione non dannosa. – me22