[IoT] Arduino e cloud in sicurezza

Salve, sto iniziando a giocare con arduino ed ho appena acquistato la ENC28J60 ( deve ancora arrivare :D ). Quello che voglio provare a fare è controllare un relè collegato all'interruttore della caldaia. Naturalmente con un occhio alla sicurezza.

Avevo pensato di creare un sito web e collegare arduino UNO ad esso. Ciò che vorrei capire è come poter cifrare i pacchetti tra arduino UNO e il sito web/Cloud. L'unica soluzione che mi viene in mente è quella di assegnare una sorta di ID ad arduino e registrarlo sul mio cloud, poi assegnare l'id ad un specifico utente del cloud e quindi abilitare solo esso ad inviare e ricevere dati da arduino. Anche se qualcuno riesca ad intercettare la chiave necessaria dovrebbe inviare i pacchetti dal cloud ( unico indirizzo abilitato ad impartire comandi ad arduino ), trovate pecche in questa implementazione? Avete qualche consiglio da darmi?

Ti invitiamo a presentarti qui: http://forum.arduino.cc/index.php?topic=113640.0 e a leggere il regolamento: http://forum.arduino.cc/index.php?topic=149082.0 - qui una serie di schede by xxxPighi per i collegamenti elettronici vari: http://forum.arduino.cc/index.php?topic=146152.0 - qui le pinout delle varie schede by xxxPighi: http://forum.arduino.cc/index.php?topic=151646.0 - qui una serie di link utili: http://forum.arduino.cc/index.php?topic=126861.0

La ENC non è la scheda Ethernet ufficiale (quella monta un WIZ). Quindi usa un'altra libreria NON fornita con l'IDE. Qui un sito con tutorial in italiano sulla ENC: http://www.lucadentella.it/category/enc28j60-arduino/

Grazie mille, provvedo subito :wink:

nid69ita: La ENC non è la scheda Ethernet ufficiale (quella monta un WIZ). Quindi usa un'altra libreria NON fornita con l'IDE. Qui un sito con tutorial in italiano sulla ENC: http://www.lucadentella.it/category/enc28j60-arduino/

Si avevo già visto e spulciato questo ottimo sito, e appena arriva la shield vedrò di smanettarci.

Ciò che mi preoccupa di più adesso e capire come autenticare in modo sicuro arduino al cloud e il cloud con l'arduino per rendere sicura e cryptata la comunicazione tra i due. Dalle varie ricerche che sto facendo capisco che sarebbe una buona pratica usare SSL che su arduino UNO è impossibile implementare...ma altre soluzioni?

Per esempio adesso ho trovato il framework souliss che da quello che ho capito trasmette tutto in chiaro...essendo studiato per funzionare il locale...dovrei fare qualcosa del genere però su cloud.

Dimenticati la criptatura con Arduino. non é abbastanza potente. Se vuoi criptare usa un rasberry o simile. Ciao Uwe

uwefed: Dimenticati la criptatura con Arduino. non é abbastanza potente. Se vuoi criptare usa un rasberry o simile. Ciao Uwe

Quindi queste librerie sono per la yun? http://forum.arduino.cc/index.php/topic,88890.0.html Beh, allora proverò la udoo che sembra promettere bene...

UPDATE - Eppure ho trovato questo che dovrebbe andare visto che lo danno come testato su arduino duemilanove https://github.com/qistoph/ArduinoAES256

La YUN ha l’ eternet giá a bordo. Non serve un ENC28J60.
Come Ti cavi con Linux?
La YUN esendo una scheda particolare non é tanto diffusa e percui ci sono pochi che possono aiutarti (sopratutto nella parte italiana).
Leggiti la parte del forum riguardante la YUN:

Ciao Uwe

Con linux nessun problema, solo che non ho sentito parlare benissimo della yun...dicono anche che il prezzo sia troppo alto rispetto ai componenti.

La Yun costa quanto una Raspberry ma è meno potente. La Raspberry è capace di far girare anche un ambiente grafico, la Yùn no. Per contro la Yùn ti permette di lavorare con molti shield progettati per Arduino nonché pilotare dispositivi esterni a 5V, mentre la Raspberry è tollerante solo ai segnali a 3,3V.

Insomma, dipende che ci devi fare. Per gestire SSL penso che anche la distro Linux della Yùn basti, dovresti poterci installare openSSL. Ma mi fermo e aspetto qualcuno che l'abbia già fatto per conferma (non ho la scheda).

leo72: Insomma, dipende che ci devi fare. Per gestire SSL penso che anche la distro Linux della Yùn basti, dovresti poterci installare openSSL. Ma mi fermo e aspetto qualcuno che l'abbia già fatto per conferma (non ho la scheda).

Confermo, il suo web-server è in grado di accettare richieste HTTPS ;)

Guglielmo

Ma si programma come la UNO, giusto? Posso usare gli stessi sketch, con qualche piccola modifica? La parte linux la si modifica a parte tramite SSH, right?

Quasi come la Uno, in realtà la parte Arduino è una [u]Leonardo[/u], con alcune lib aggiuntive per comunicare con la parte Linux.

sarovin: UPDATE - Eppure ho trovato questo che dovrebbe andare visto che lo danno come testato su arduino duemilanove https://github.com/qistoph/ArduinoAES256

AES è un sistema di criptazione sincrono, ottimo per criptare dati ma inutile da solo se vuoi creare una COMUNICAZIONE sicura, in tal caso ti serve un sistema di criptazione asincrono (detto anche a chiave pubblica e privata), oltre a tutto il protocollo per stabilire un canale sicuro con richiesta della chive, verifica delle identità, verifica di non injection e man in the middle, e un sacco di altri particolari che gridano "se non lo sai fare non farlo".

d'altronde se i big del settore si sono fatti sfuggire per ANNI un bug pericolosissimo come l'heartbleed, figuriamoci la "sicurezza" che può dare un algoritmo custom fatto con limite di risorse molto grande.

Quello che puoi fare (per avere una sicurezza decente per l'uso "personale" e non sei una persona a rischio) è criptare i dati lato arduino (con una chiave nota sia all'arduino che al server), caricare i dati sul server, che li decripta, se la decriptazione va a buon fine allora c'è una ottima probabilità che i dati sono stati caricati dall'arduino. Occhio che così sei a richio attacco "replay", ovvero qualcuno può catturare il tuo messaggio e reinviarlo più volte. All'interno del file caricato puoi mettere un numero progressivo, ma poi c'è tutta la parte di sincronizzazione di questo numero..

Ma si programma come la UNO, giusto? Posso usare gli stessi sketch, con qualche piccola modifica? La parte linux la si modifica a parte tramite SSH, right?

corretto, considera poi che con la libreria Process puoi lanciare comandi sulla parte Linux: http://arduino.cc/en/Tutorial/Process e che la gestione delle connessioni è molto più semplice in quanto gestita dalla parte Linux, usando lato Arduino la libreria HttpClient: http://arduino.cc/en/Tutorial/HttpClient (oppure usando Process e i lcomando curl fai la medesima cosa :))

lesto:

sarovin: UPDATE - Eppure ho trovato questo che dovrebbe andare visto che lo danno come testato su arduino duemilanove https://github.com/qistoph/ArduinoAES256

AES è un sistema di criptazione sincrono, ottimo per criptare dati ma inutile da solo se vuoi creare una COMUNICAZIONE sicura, in tal caso ti serve un sistema di criptazione asincrono (detto anche a chiave pubblica e privata), oltre a tutto il protocollo per stabilire un canale sicuro con richiesta della chive, verifica delle identità, verifica di non injection e man in the middle, e un sacco di altri particolari che gridano "se non lo sai fare non farlo".

d'altronde se i big del settore si sono fatti sfuggire per ANNI un bug pericolosissimo come l'heartbleed, figuriamoci la "sicurezza" che può dare un algoritmo custom fatto con limite di risorse molto grande.

Quello che puoi fare (per avere una sicurezza decente per l'uso "personale" e non sei una persona a rischio) è criptare i dati lato arduino (con una chiave nota sia all'arduino che al server), caricare i dati sul server, che li decripta, se la decriptazione va a buon fine allora c'è una ottima probabilità che i dati sono stati caricati dall'arduino. Occhio che così sei a richio attacco "replay", ovvero qualcuno può catturare il tuo messaggio e reinviarlo più volte. All'interno del file caricato puoi mettere un numero progressivo, ma poi c'è tutta la parte di sincronizzazione di questo numero..

Ottimo, la risposta che mi serviva...difatti la soluzione che volevo adottare io è la seconda ma corro il rischio di replay. Quindi la soluzione definitiva mi pare quella di usare la YUN. Anche NSA ha dato dimostrazione di poter rompere anche SSL :D

Anche NSA ha dato dimostrazione di poter rompere anche SSL

che il baco trovato in ssl sia collegabile all'nsa è poco probabile, hanno fatto untuire che sapevano della sua esistenza,ma il primo attacco (noto) avvenuto con successo (ottenimento della chiave privata) è avvenuto solo dopo la fix del baco (anche se chissà quanti server sono ancora vulnerabili!)