Come si aggiunge la crittografia a livello di applicazione a una connessione BLE Android?
Il Bluetooth Low Energy Android documentazione consiglia di aggiungere la crittografia a livello di applicazione on-top della connessione BLE se i dati scambiati è sensibile:
Attenzione : quando un utente abbina il proprio dispositivo a un altro dispositivo utilizzando BLE, i dati comunicati tra i due dispositivi sono accessibili a tutte le app sul dispositivo dell'utente.
Per questo motivo, se la tua app acquisisce dati sensibili, dovresti implementare la sicurezza a livello di app per proteggere la privacy di tali dati.
Poiché vorrei evitare di "eseguire il rollio della mia crittografia", sto cercando un modo pronto per la produzione per crittografare i pacchetti.
Ho un canale fuori banda per scambiare un messaggio (es. Chiave) da un partecipante all'altro (codice QR). Entrambi i partecipanti sono dispositivi Android, uno che opera in modalità server (periferica) e uno come client (centrale).
Ho considerato il Noise Protocol Framework come un'alternativa più leggera a TLS, ma sembra che sia ancora troppo lavoro manuale (?).
C'è una soluzione semplice? Sembra che questo debba essere un problema risolto.
Risposte
Innanzitutto, un consiglio: StackExchange non è per consigliare prodotti specifici, quindi qui sarò relativamente generale. Chiunque leggerà questo in futuro potrebbe trovarsi in un mondo in cui ci sono alternative nuove e molto migliori, o anche in cui si è scoperto che la vecchia guardia è stata rotta.
Esistono diverse librerie crittografiche di alto livello che, data una chiave precondivisa, gestiranno la crittografia dei messaggi o possibilmente dei flussi (e i relativi requisiti di sicurezza come l'integrità dei dati) con il minimo sforzo. La semplice ricerca di "easy crypto library" ti troverà alcuni candidati. Nota che molte persone ignorano il consiglio contro il rollio della tua crittografia e alcuni di loro la pubblicano, quindi vuoi assicurarti che la libreria che scegli sia ben rivista da esperti, idealmente non correlata al suo sviluppo.
Dovrai anche considerare cosa esattamente vuoi (e hai bisogno) dalla tua libreria. Deve supportare flussi crittografati di lunghezza arbitraria (o messaggi molto grandi che non si adattano facilmente alla memoria) o funzionerà un semplice protocollo basato su messaggi? La libreria deve essere molto piccola, nell'impronta di installazione o nell'utilizzo della RAM? Molto veloce, su una particolare CPU? Compatibile con qualche altra libreria in particolare? Utilizzare cifrari specifici o altre primitive per motivi di conformità (spero di no)? Disponibile in una lingua particolare?
Per alcuni esempi apprezzati a partire dalla metà del 2020, considera LibSodium o Monocypher . Entrambi sono ben considerati, revisionati e focalizzati sulla facilità d'uso. Altre alternative sono NaCl, LibHydrogen e così via. Notare che non tutti si concentrano allo stesso modo su sicurezza, velocità o convenienza; ad esempio, TweetNaCl enfatizza la dimensione minima del codice, sacrificando molta velocità e potenzialmente un po 'di sicurezza nel processo, rispetto al NaCl originale.