Algoritmo di crittografia RollingCode

Crittografia Rolling Code

Riprendendo l’introduzione fatta nell’articolo “ Introduzione alla codifica RollingCode”, la parte interessante della codifica RollingCode è quella che si occupa di eseguire la crittografia e quindi la decrittografia, dell’informazione da inviare.

La codifica RollingCode è stata concepita per poter essere implementata su microcontrollori aventi risorse molto limitate, come può essere un comune PIC16F. Proprio per questo motivo l’algoritmo che implementa la crittografia non risulta particolarmente complicato e oneroso sotto un punto di vista computazionale, ma fornisce un grado di sicurezza abbastanza elevato per una trasmissione sicura. Questo tipo di algoritmo prevede che sorgente e destinazione siano a conoscenza di una chiave comune, solitamente a 64 bit, che permetta la crittografia e la decrittografia dell’informazione.

Volendo schematizzare la procedura di crittografia, questa può essere riassunta dal seguente schema:

 

 

 

Come si vede dalla figura precedente la crittografia può essere suddivisa in tre parti, le prime due per la generazione della chiave a partire da quella in possesso dalla sorgente e dal ricevitore e l’ultima che esegue la crittografia dei dati da inviare:

 

  1. questa fase si occupa di eseguire il “padding” del “Serial Number” (indicato con “S.N.” nella figura) con i due “SEED”, ovvero vengono accodati ai 28 bit del “Serial Number” altri 4 bit contenenti il valore “2”, nel caso del “SEED1”, e il valore “6”, nel caso del “SEED2”, in modo da ottenere due word distinte da 32 bit (i bit vengono accodati dal bit più significativo del “Serial Number”).

Volendo prendere come esempio un “Serial Number” di valore “0x5A5A5A5” (è stata utilizzata una notazione esadecimale per semplicità) avremo che nel primo caso atteniamo una word pari a  “0x25A5A5A5”, mentre nel secondo caso otteniamo una word di valore “0x65A5A5A5” (considerando una rappresentazione dei bit di tipo big-endian).

 

  1. in questa fase interviene la chiave a 64 bit in possesso sia dal trasmettitore sia dal ricevitore e che nello schema è chiamata con il nome “MANUFACTURER KEY”.

Questo procedimento utilizza il valore della “MANUFACTORY KEY” e i valori ricavati con il passo precedente, per darli in ingresso alla routine di decrittografia “KEELOQ DECRYPT”. Può sembrare un errore di battitura ma in realtà non lo è: in questa fase dell’algoritmo viene proprio utilizzata la routine di decrittografia che genererà altre due word da 32 bit (“CRIPTO KEY 1/2” e “CRIPTO KEY 2/2”) che unite insieme andranno a formare la chiave a 64 bit che verrà utilizzata nell’ultimo passaggio il quale eseguirà la crittografia vera e proprio dei dati.

Se per esempio si ha una “MANUFACTORY KEY” con il valore “0x0011223344556677” e supponiamo che, dopo aver dato in ingresso alla routine di decrittografia i dovuti valori, otteniamo i due valori “0x8899AABB” e “0xCCDDEEFF” (uno per la prima applicazione e l’altro per la seconda applicazione della “KEELOQ DECRYPT”), la chiave a 64 bit utilizzata nell’ultimo passaggio avrà il valore “0x8899AABBCCDDEEFF”.

Ritengo opportuno precisare che i valori utilizzati sono a scopo esemplificativo e quindi non hanno nessun riscontro con i risultati reali che si ottengono applicando l’algoritmo.

 

  1. come già accennato in precedenza, questo passaggio, nonché ultimo, è quello che esegue la crittografia vera e propria dei dati da inviare, ossia del “Sync Counter”, “Serial Number”, il “Button Status” e i bit di “OVR” opportunamente combinati (vedere l’articolo “Rolling Code – Introduzione 1 di 5”) e utilizzando la chiave ricavata con il passaggio precedente. Questi due valori verranno dati in ingresso alla routine di crittografia “KEELOQ ENCRYPT” (parte fondamentale di tutto il processo di crittografia e la quale verrà spiegata nel dettaglio negli articoli successivi) la quale fornirà una word a 32 contenente le informazioni da inviare opportunamente criptate (nella figura precedente questa word è indicata con il nome “HOPPING PART”).

 

Tutti questi passaggi sembrano complicati ma in realtà si riescono ad implementare con delle semplici operazioni sui bit, che possono essere eseguite con semplicità e in poco tempo anche da un semplice microcontrollore con scarse risorse.

 

Una volta terminato l’algoritmo di crittografia si procederà all’unione del valore criptato con la parte non criptata (vedere l’articolo “Introduzione alla codifica RollingCode), in modo da ottenere una word di 66 bit pronta ad essere inviata.

2 Comments

  1. lucagiuliodori 30 gennaio 2014
  2. Francesco.Laezza 24 gennaio 2014

Leave a Reply