Newsgroup: it.hobby.elettronica.digitale
Titolo: Per rolling code si intende...

...parlando di trasmissione monodirezionale
la prima cosa che ti rispondono è che il telecomando e la centralina 
concordano ogni volta quale sarà il prossimo codice.
Mi sembra assurdo ,perchè se ci sono più telecomandi tutti gli altri ,che 
non sono stati usati, non possono sapere quale sarà il prossimo codice
 
io credo che in pratica ,,venga generato un codice diverso ogni volta,che 
però soddisfa l'algoritmo presente nella centralina
 
 
chiedo lumi
 
grazie 
 
 

 però soddisfa l'algoritmo presente nella centralina
 
Credo che più semplicemente venga generato un rolling-code diverso per ogni telecomando.
Es: 6 telecomandi => 6 I.D. distinti => 6 contatori rolling nel ricevitore.
Di fatto ogni telecomando invia il proprio unico I.D. e lo stato del suo contatore.
Il ricevitore distingue l'I.D. ed incrementa il relativo contatore.
 
Piccio.

 non sono stati usati, non possono sapere quale sarà il prossimo codice
 
Esiste una tolleranza (un codice appartenente a un range) e poi io 
sapevo che esisteva un codice splittato in  una parte + stabile e una 
variabile, appunto nel caso in cui diversi telecomandi usino lo stesso 
ricevitore.
 
 
 
-- 
La cricca dei giacobini (C) M.G.

 ...parlando di trasmissione monodirezionale
 
Ci sono varie teNNiche, la piu usata e' una semplice lista di
codici condivisa tra chiave e serratura: ad ogni uso, sia serratura
che chiave aumentano di 1 la posizione in lista, arrivati alla fine
ripartono da 0. (da qui il termine rolling, un po' come immaginare la
lista di codici stampata su un tubo che ruota).
 
I benefici sono evidenti: intercettare un codice non serve a nulla
perchè chiave e serratura useranno di nuovo quel codice solo tra N
interazioni (se la lista e' di 128 codici, lo stesso codice sarà valido
solo dopo altri 127 "buoni"), non e' indispensabile che chiave e
serratura comunichino in modo bidirezionale: (es con un telecomando)
chiave viene usato 1 volta di troppo, il suo codice non e' piu 
allineato
quindi trasmetterà 1 codice "avanti", serratura NON aprirà ma aspetterà
che il prossimo codice sia "avanti" +1 (segno che chi trasmette ha
"saltato" un codice e riallinea la lista.
 
Ci sono tecniche piu raffinate, del tipo 2 liste, il codice e' composto
da lista1 + lista2, solo che mentre lista1 avanza di 1 passo, lista 2
avanza di 3 passi ad ogni uso, con questa tecnica si arriva a fare 
circa
10 mila combinazioni usando 2 liste da 128 codici...

Dopo dura riflessione, Franz_aRTiglio ha scritto :

Manca un pezzo: va da se' che l'unica cosa che la serratura deve sapere
per "accettare" una chiave e' l'ID univoco di detta chiave e quale sia
il codice che sta per trasmettere, in questo modo piu chiavi con gli
stessi identici codici (ma con ID diverso) possono usare le stesse
liste.

Il 10/04/2017 09:19, blisca ha scritto:

C'è una lista fissa e condivisa di codici tra TX (chiave? telecomando?) 
e RX (serratura?). Ad ogni uso il TX passa al codice successivo e così 
l'RX. Se sono sincronizzati, nessun problema.
 
Se il TX viene usato N volte senza che l'RX se ne accorga (perché il TX 
è lontano dall'RX, per esempio) i due non sono più sincronizzati. Per 
evitare che l'RX non riconosca più il TX, esso controlla che il codice 
ricevuto sia quello che si aspetta (considerando l'ultimo codice 
ricevuto) o uno degli N successivi della lista. Se N è 50, puoi premere 
il telecomando 50 volte senza problemi. Chiaramente l'RX, riconosciuto 
il codice con uno degli N successivi, lo accetta e risincronizza il 
puntatore alla lista.
 
Chiaramente la lista non è una vera e propria lista, ma solo un 
algoritmo che genera una lista di codici diversi passandogli un indice 
diverso (tipo una generazione di numeri pseudo-casuali).
 
Inoltre il codice inviato dal TX non è solo il codice variabile, ma 
anche un ID fisso che individua il singolo TX. Questo permette di usare 
diversi TX, ognuno dei quali in uno stato diverso, cioé corrispondenti 
ad una posizione diversa nella lista.
Inoltre questo permette anche di eliminare un particolare TX (magari 
perché lo abbiamo perso) dalla memoria dell'RX.
 
Infine è possibile crittografare il pacchetto "ID+CODICE VARIABILE" in 
modo che un reverse engineering sia ancora più complicato (altrimenti 
con uno sniffer vedresti facilmente la parte fissa e la parte variabile 
e potresti tentare di capire l'algoritmo usato per generare la parte 
variabile osservando qualche codice).
 
Quello che mi affascina dei rolling code è che sul mercato esistono 
aziende che promettono di duplicare telecomandi rolling code. Come 
fanno, senza conoscere l'algoritmo usato dal produttore originale?
L'unica spiegazione è che molti di questi produttori usano lo stesso 
algoritmo che dovrebbe essere il famoso KeeLoq della Microchip 
implementato in alcuni IC.
Se non ho capito male, questo algoritmo è noto, ma è utilizzabile solo 
conoscendo una master key (una sorta di password) condivisa tra TX e RX. 
In pratica è un algoritmo crittografico a chiave simmetrica.
Sempre se ho capito bene, questo algoritmo è stato analizzato ed 
esistono dei metodi per risalire alla master key sniffando una sola o un 
paio di trasmissioni del TX.
Forse è questo quello che fanno i duplicatori universali di 
telecomandi... anche se mi sembra strano che i produttori abbiano usato 
il KeeLoq così com'è (io avrei come minimo fatto uno scrambling dei byte).
 
Oppure il KeeLoq non c'entra nulla e i duplicatori universali fanno 
qualche altri magheggio che non conosco.
 
 
Simpatico è il "replay attack": un dispositivo riceve il codice di un TX 
e contemporaneamente aziona un jammer che confonde il ricevitore. Così 
il TX viene azionato una seconda volta e il dispositivo legge anche 
questo secondo codice e invia all'RX il codice precedentemente letto. 
Bene, a questo punto il dispositivo ha a disposizione un codice che può 
usare in futuro. In teoria può acquisirne anche più di uno con la stessa 
tecnica.
 
Per evitare ciò, penso che oggi questi sistemi si siano evoluti e 
utilizzino un timestamp che rende valido un codice solo per un periodo 
di tempo molto limitato (tipo gli OTP per accedere alle banche online).
Da capire come fa il telecomando a generare un timestamp che sia valido 
(un semplice RTC con quarzo e batteria sempre in funzione?).
 


Grazie a tutti ,grazie a pozz per la ampia risposta

 il KeeLoq così com'è (io avrei come minimo fatto uno scrambling dei byte).
 
Vero, però devi considerare che appena uscito esistevano degli integrati che lo implementavano, su cui non c'era possibilità di modificare nulla, per esempio l'RX aveva un ok/ko che ti diceva se la ricezione era valida o meno. 
Poi successivamente sono state rilasciate le routine firmware per la decodifica e la codifica, a quel punto si sarebbe potuto inserire un ulteriore livello di sicurezza, personalizzando l'algoritmo nativo, però si sarebbe persa la retrocompatibilità con ciò che ne frattempo c'era nel mercato.