Paso 11: Cifrado/descifrado y establecimiento de la sesión
Este paso describe los detalles de cómo se implementa la clase SecureChannelServer .
Se utiliza la seguridad de clave compartida simétrico. Esto significa que el núcleo de la chispa y la aplicación para Android cliente deben compartir la misma clave secreta para hablar entre sí.
Llave maestra
La llave maestra de 128 bits debe ser suministrado por usted en este archivo: core-firmware/libraries/garage/master_key.h. Aquí un ejemplo de lo que podría parecer:
AES-128 se utiliza para cifrar el tráfico. Desafío había basado, tiempo de sesión de fichas se utilizan para prevenir Ataques de Replay. Tokens de sesión son válidos durante 5 segundos después el nonce desafío aleatorio correspondiente a la aplicación para Android.
Se implementan dos primitivos criptográficos para cifrar el tráfico de Android a chispa y viceversa.
AndroidRequest(COMMAND)
SparkResponse(RESPONSE)
Estas dos funciones lograr lo siguiente:
- El atacante no puede ver los mensajes de texto
- El atacante puede modificar el tráfico encriptado de alguna manera
- El atacante no puede decir la diferencia entre mensajes cifrados, b y c mismo plaintext se ve diferente cada vez que se cifra
El problema que queda es que estamos todavía vulnerables a ataques de repetición, ya que el atacante puede capturar un válido mensaje cifrado, esperar a se han ido y reproducir para abrir la puerta del garaje. Para tratar este tema utilizado un desafío basado, protocolo criptográfico de nonce.
Establecimiento de sesión
El siguiente algoritmo hace referencia a las dos funciones definidas anteriormente.
Este protocolo también se representa en el diagrama de secuencia adjunta.