Ora che siamo a conoscenza dei passaggi da eseguire per realizzare la crittografia (articolo "Algoritmo di crittografia RollingCode"), non ci rimane che approfondire il funzionamento della Encryption Routine che è il cuore di tutta la procedura di crittografia. Grazie a questa routine infatti vengono generati i codici che corrispondono alle informazioni crittografate.
Come per gli articoli precedenti, anche in questo caso la routine di crittografia può essere spiegata attraverso uno schema che racchiude e rappresenta gli step che l’algoritmo deve eseguire:
Prima di passare alla spiegazione nel dettaglio dell’algoritmo, vediamo quali sono gli “attori” che entrano in gioco: partendo dall’alto in basso delle figura incontriamo una word a 32 bit che corrisponde al valore che dovrà essere criptato; più in basso abbiamo la NLF, ossia la “Non Linear Function”, la quale esegue la crittografia vera e propria generando ad ogni ciclo un bit il cui valore dipende da cinque bit di ingresso opportunamente selezionati; sotto la NLF troviamo un’operazione di OR eseguita tra una serie di bit (tra cui anche quello generato dalla NLF) e ancora più sotto il registro a 64 bit che contiene la chiave per la crittografia, la quale è stata ricavata attraverso i passaggi visti e descritti nell’articolo “Algoritmo di crittografia RollingCode
Ora che abbiamo chiaro quali sono i dati che sono necessari per eseguire la crittografia, possiamo procedere con la spiegazione per punti dell’algoritmo:
1. Come prima cosa devono essere prelevati i bit 2, 9, 20, 26 e 31 dal codice a 32 bit da criptare, per andare a costruire una word formata da 5 bit.
2. La word a 5 bit precedentemente ricavata, deve essere sottoposta in ingresso alla NLF la quale fornirà in uscita un solo bit che sarà funzione dei valori dati in ingresso.
Per ottenere il bit di uscita dalla NLF non vengono richieste particolari operazioni in quanto, questa funzione può essere rappresentata attraverso una tabella mostrata nella figura seguente:
le colonne “I4”, “I3”, “I2”, “I1” e “I0” corrispondono rispettivamente ai bit 31, 26, 20, 9 e 2 del codice da criptare, mentre “NLF” rappresenta il bit di uscita della funzione.
Riprendendo l’esempio precedente avremo che dalla word “
3. Ora che si ha a disposizione il bit dalla “NLF” occorre sottoporlo ad una operazione di OR con il bit 0 della parola da criptare e con il bit 0 della chiave di crittografia, in modo da ottenere un ulteriore bit risultato dell’operazione.
4. Dopo aver ricavato il bit di uscita dall’operazione di OR, deve essere eseguito uno shift di un bit verso destra (verso il bit meno significativo) della parola da criptare.
5. Una volta eseguito lo shift, deve essere eseguita un’operazione di sostituzione del bit 31 della parola appena shiftata, con il bit risultato dell’operazione di OR ricavato nel passo “
6. Un’ultima operazione da eseguire è quella di eseguire una rotazione verso destra (verso il bit meno significativo) della chiave usata per la crittografia.
7. I punti dall’ “
Alla fine dei 66 cicli sulla parola a 32 bit che doveva essere criptata è presente il valore criptato e pronto ad essere utilizzato.
Lettura consigliata: Introduzione alla codifica RollingCode
Ciao,
innanzi tutto vi faccio i complementi per il sito e per le informazioni contenute: sono veramente ottime.
In merito all'articolo, non mi è chiaro perchè sono necessari 66 cicli sulla parola a 32 bit che deve essere cripata: non ne bastano 32? C'è qualcosa che nono ho capito?
Grazie,
Pasquale Pierro
http://www.papierengineering.it
Ciao,
innanzitutto scusa per il ritardo nella risposta.
Effettivamente questo numero è un po’ particolare e per capirlo occorre entrare un po’ più a fondo nell’algoritmo.
Innanzitutto se consideriamo che questi 66 cicli vengono eseguiti ogni volta su un byte della key, abbiamo che il numero di operazioni totali saranno (immagina due “for” uno dentro un altro, in cui uno serve per processare i singoli bit e l’altro per eseguire i 66 cicli):
66*8=528 operazioni
Questo numero è una specifica del protocollo, ovviamente più il numero è grande e più la sicurezza del protocollo è garantita, a discapito però di un costo computazionale maggiore.
Importante è notare che questo numero non è divisibile per 64 (pari al numero di bit della key) ma deriva da 64*8+16 per limitare gli attacchi di tipo “slide” e quindi aumentare la sicurezza del protocollo.
Ciao,
ecco perchè non capivo: io sui cicli ragionavo in termini di bit (528) mentre tu in termini di byte (66).
Tutto chiaro, grazie.
Pasquale Pierro
http://www.papierengineering.it
Ciao scusa se ti chiedo, spero che anche dopo tutti questi anni mi risponderai.
volevo chiedere una cosa,.
Ma la chiave (dal esempio “0011223344556677”) serve solo al operazione OR ?.
Ti ringrazio in anticipo, se mi risponderai.
E volevo sapere anche se del decrypting del messaggio si usa la stessa chiave. Nel senso se è 0011223344556677 o quello che è cambiato dopo i 66 cicli.
Ciao. Scusa il ritardo ma anche io ho dovuto ripassare.
Si la chiave serve solo per le operazioni OR, come spiegato sopra, ed è sempre la stessa chiave che serve per la decrittografia.
Ciao