Cifratura su Arduino

Ciao a tutti, sono un nuovo iscritto, e ho scoperto da poco arduino, lo trovo fantastico, ma ancora non ho avuto modo di apprezzare il suo potenziale. Vorrei portare avanti un progetto che ho da tempo, ovvero, aprire il garage con lo smartphone, e grazie ad arduino ora posso farlo. Per quanto riguarda l'elettronica attendo un aiuto da un amico esperto a breve, nel frattempo sto cercando di progettare la sicurezza dal lato software. ebbene vorrei avere qualche consiglio su come programmare la board. Ecco le mie idee:

  1. scambio della password in chiave asimmetrica( se la pass non viene cambiata basta un Man in the middle per rubare la conversazione cifrata e riutilizzarla per aprire la porta )
  2. scambio di one-time-pad con scambio di chiavi alla diffie-hellman.
  3. uso di un counter sincrono sui arduino e device che richiedono apertura per cifrare una password.

cosa mi consigliate?

aprire il garage con lo smartphone, e grazie ad arduino ora posso farlo

Cioè ? tiri lo smartphone contro il portellone e si apre? :slight_smile: :slight_smile:
scambio di passw attraverso cosa?

edge33:
Ciao a tutti, sono un nuovo iscritto,

Ti invitiamo a presentarti (dicci quali conoscenze hai di elettronica e di programmazione) qui: Presentazioni
e a leggere il regolamento se non lo hai già fatto: Regolamento
Qui una serie di link utili, non inerenti al tuo problema:

Immagino che tu conosca i telecomandi rolling code...

pablos:
Cioè ? tiri lo smartphone contro il portellone e si apre? :slight_smile: :slight_smile:
scambio di passw attraverso cosa?

attraverso socket tcp

nid69ita:
Ti invitiamo a presentarti (dicci quali conoscenze hai di elettronica e di programmazione) qui: Presentazioni
e a leggere il regolamento se non lo hai già fatto: Regolamento
Qui una serie di link utili, non inerenti al tuo problema:

grazie :slight_smile:

cyberhs:
Immagino che tu conosca i telecomandi rolling code...

ne ho sentito parlare, usano uno Psudo random number generator con un seed comune per generare un codice, che deve essere uguale, da telecomando e ricevitore.... se non erro...

Mi sembra poco probabile che qualcuno si metta a organizzare un man in the middle per aprire la porta del tuo garage. Fa prima ad usare una leva...

paulus1969:
Mi sembra poco probabile che qualcuno si metta a organizzare un man in the middle per aprire la porta del tuo garage. Fa prima ad usare una leva...

si, sono d'accordo, ma è pur sempre un buon esercizio didattico cercare di rendere sicura una conversazione :slight_smile:

Stavo dando un occhiata a un protocollo rolling code.... servirebbe un algoritmo sicuro inizializzato con un seed su arduino, che possa essere utilizzato su tutti gli altri dispositivi con lo stesso seed per avere codici uguali, come la vedete?

Per la cronaca l'algoritmo di Keeloq usato nei telecomandi è stato clonato: esistono telecomandi in grado di clonare telecomandi rolling code, sia pure di alcune marche.

L'algoritmo del chip encoder (proprietà MICROCHIP) genera una stringa di 66 bit, dei quali i primi 28 formano il codice fisso, 32 quello variabile e 6 trasmettono le informazioni per la risincronizzazione con il ricevitore.

cyberhs:
Per la cronaca l'algoritmo di Keeloq usato nei telecomandi è stato clonato: esistono telecomandi in grado di clonare telecomandi rolling code, sia pure di alcune marche.

L'algoritmo del chip encoder (proprietà MICROCHIP) genera una stringa di 66 bit, dei quali i primi 28 formano il codice fisso, 32 quello variabile e 6 trasmettono le informazioni per la risincronizzazione con il ricevitore.

Grazie per le tue delucidazioni.

Stamattina pensavo a questo con un amico. Protocollo interamente cifrato con AES-256 ( o 128 )

IO: "apri cancello con password 'password' e numero 1"
SERVER: "ricevo 'password' ( corretto ) e numero 1 ( corretto ), procedo e invio conferma!"
IO: "ricevuta conferma, il prossimo numero sarà 2"

mettiamo caso che "Darth", riesca a intercettare il messaggio al server, e senza modificare nulla ( la conversazione è cifrata e non la capisce ) re-invia lo stesso messaggio al server ( replay-attack ).

DARTH: "apri cancello con password 'password' e numero 1"
SERVER: "ricevo 'password' ( corretto ) e numero 1 ( errato, stavo attendendo 2 ), Non apro!"

cosa ne pensate?

rolling-code, aes, pc1, etc...va bene tutto tanto anche se c'è un "man in the middle" deve tentare un eternità prima di provare tutti i codici possibile, soprattutto se metti un delay tra un tentativo e il successivo o un limite max di tentativi

... avete idea cosa si può fare con un semplice "crick" per auto o con un "martinetto idraulico" ? :smiling_imp:

Ci scardinano inferriate e ci si apre una porta di un garage in meno di 1 minuto ...
... altro che hacker e Man-In-Middle :stuck_out_tongue_closed_eyes: :stuck_out_tongue_closed_eyes: :stuck_out_tongue_closed_eyes:

Guglielmo

basta una chiave lunga quanto il messaggio e sei già sicurissimo.
Se hai un messaggio di un byte la chiave è un byte, etc etc etc..
un messaggio lungo 4 byte con chiave lunga 4 byte è già impossibile da cifrare.
Se aggiungi poi un blocco sul dispositivo che per ogni inviò si deve aspettare almeno un secondo e per ogni errore 10 secondi sei già a cavallo.
Perdipiu non è semplice usare l'AES, se vuoi un esempio dell'AES puoi guardare nella mia firma easyframework->easycrypto

Come dice @gpb01 i "ladri" hanno altre tecniche, molto più rapide, semplici ed efficaci.

Grazie a entrambi, ora studio un po' tutte le risorse che mi avete passato :slight_smile:

Punta, mazzetta, piede di porco, flessibile a batteria sono le password che di solito usa chi vuole entrare. Nessuno violerà il tuo codice, se per caso trovi qualcuno che lo fa ti aprirà la serranda senza rubarti nulla, ma solo per dimostrarti e per sua personale soddisfazione che è più intelligente di te... Io devo ancora trovare il ladro che ha svaligiato un locale mettendo fuori uso un impianto antintrusione o violato codici su frequenze radio, codici da digitare su keypad, accessi su badge, impronte digitali... Intercettare le chiavi e decifrarle per rubare è roba da Hollywood
Il primo punto debole della tua serranda è il comando elettrico a chiavetta e il cavetto tirante di sblocco manuale anche se si trovano in una cassetta murata rinforzata, il secondo più semplice, il più probabile è attendere che tu la apra ... insomma più complichi la vita all'intruso più metti a rischio la tua vita, è un paradosso, ma le cose oggi stanno così.

per disattivare le sinere, una bella spruzzata di poliuretano espanso..
Le fiat di qualche anno fa si aprivano col cacciavite, 3 secondi...
Vetro temprato? lo segni con punta diamantata da 5€, scaldi, aspetti qualche secondo e un bel colpo ed entri senza problemi in 5/10 minuti.

Aprono le porte blindate col crick in 10' e secondo te si dovrebbero mettere li ad aspettare che tu arrivi a premere il pulsantino e scoprire la frequenza che usi, poi cercare di violare il sistema, oh ma sim pazzi? lavorano a cottimo non a ore!

Ammettiamo comunque che lo voglia fare per il puro piacere di farlo.
Suggerisco un'altra opzione più semplice ma sicura.

Se vuoi aprirlo con lo smartphone, sfrutterai una connessione ad internet.
Quindi il tuo smartphone è connesso ad internet ed anche la tua centralina aprigarage.

A questo punto usa un qualsiasi servizio gratuito per mettere un sistema che genera dei numeri casuali, potresti anche prendere dati radioastronomici da qualche sito di ESA - NASA così facciamo una cosa bella.
Come password devi trasmettere un numero di base e poi gli sommi un numero ottenuto da quei numeri casuali, facile da verificare e impossibile da violare senza conoscere la provenienza dei numeri casuali da sommare, infatti la fonte di quei numeri casuali non viene mai trasmessa, quindi se non la conosci a priori....

Emmm ... mai sentito parlare di TOTP ? Ci sono interi programmi già pronti da cui prendere spunto ... è il sistema usato da "Google Authenticator", se fate un po' di ricerche trovate di tutto e di più :wink:

Guglielmo

P.S. : Una persona ci stava preparando un esame ... ne abbiamo parlato in QUESTO thread :wink:

vbextreme:
... lavorano a cottimo non a ore!

... e il SILPA (Sindacato Italiano Ladri Politicanti e Affini :stuck_out_tongue: :smiling_imp:) non protesta ? ... :stuck_out_tongue_closed_eyes:

CIao se la tua necessita' e' di criptare un dato sensibile ti consiglio di provare Cape, e' una libreria di encryption di stringhe che si basa su un algoritmo di cripting realizzato da me che utilizza un algoritmo di hashing reversibile (simile ad RC4) sommato a un vettore di inizializzazione di 1 byte (che e' un numero a caso aggiunto alla stringa che influenza l'output del risultato che ti permette di avere 255 versioni della stessa stringa, il che rende molto complicato determinare quale sia il messaggio originale)