¿Cómo agrego cifrado de nivel de aplicación a una conexión BLE de Android?

Aug 17 2020

El androide Bluetooth Low Energy documentación recomienda la adición de cifrado de capa de aplicación en la parte superior de la conexión BLE si los datos intercambiados es sensible:

Precaución : cuando un usuario empareja su dispositivo con otro dispositivo mediante BLE, todas las aplicaciones del dispositivo del usuario pueden acceder a los datos que se comunican entre los dos dispositivos.

Por este motivo, si su aplicación captura datos confidenciales, debe implementar la seguridad en la capa de la aplicación para proteger la privacidad de esos datos.

Como me gustaría evitar "lanzar mi propio cifrado", estoy buscando una forma lista para la producción de cifrar paquetes.

Tengo un canal fuera de banda para intercambiar un mensaje (p. Ej., Clave) de un participante a otro (código QR). Ambos participantes son dispositivos Android, uno operando en modo servidor (periférico) y otro como cliente (central).

Vi el Noise Protocol Framework como una alternativa más liviana a TLS, pero parece que todavía es mucho trabajo manual (?).

hay una solucion facil? Parece que este tiene que ser un problema resuelto.

Respuestas

1 CBHacking Aug 18 2020 at 05:26

Primero, un consejo: StackExchange no es para recomendar productos específicos, así que voy a ser relativamente general aquí. Quien lea esto en el futuro puede estar en un mundo donde hay alternativas nuevas y mucho mejores, o incluso donde se ha descubierto que la vieja guardia está rota.

Hay varias bibliotecas de cifrado de alto nivel que, dada una clave previamente compartida, manejarán el cifrado de mensajes o, posiblemente, de transmisión (y los requisitos de seguridad relacionados, como la integridad de los datos) con un mínimo de esfuerzo. Simplemente buscando "biblioteca de cifrado fácil" encontrará algunos candidatos. Tenga en cuenta que muchas personas ignoran el consejo de no lanzar su propia criptografía, y algunas de ellas la publican, por lo que debe asegurarse de que la biblioteca que elija esté bien revisada por expertos, idealmente no relacionada con su desarrollo.

También querrá considerar qué es exactamente lo que desea (y necesita) de su biblioteca. ¿Necesita admitir transmisiones cifradas de longitud arbitraria (o mensajes muy grandes que no caben fácilmente en la memoria), o funcionará un protocolo simple basado en mensajes? ¿Debe la biblioteca ser muy pequeña, en espacio de instalación o uso de RAM? ¿Muy rápido, en una CPU en particular? ¿Compatible con alguna otra biblioteca en particular? ¿Usa cifrados específicos u otras primitivas por razones de cumplimiento (espero que no)? ¿Disponible en un idioma en particular?


Para algunos ejemplos bien considerados a mediados de 2020, considere LibSodium o Monocypher . Ambos están bien considerados, revisados ​​y enfocados en la facilidad de uso. Otras alternativas son NaCl, LibHydrogen, etc. Tenga en cuenta que no todos se centran por igual en la seguridad, la velocidad o la comodidad; por ejemplo, TweetNaCl enfatiza el tamaño mínimo del código, sacrificando mucha velocidad y potencialmente algo de seguridad en el proceso, en comparación con el NaCl original.