Etape 11 : Cryptage/décryptage et établissement de Session
Cette étape décrit les détails de comment SecureChannelServer classe est implémentée.
Sécurité symétrique de clé partagée est utilisée. Cela signifie que le noyau de l’étincelle et le client Android app doivent partager la même clé secrète pour parler les uns aux autres.
Clé principale
La clé principale de 128 bits doivent être fournis par vous dans ce fichier : core-firmware/libraries/garage/master_key.h. Voici un exemple de ce que cela pourrait ressembler à :
AES-128 est utilisé pour crypter le trafic. Défi basé, chronométré session jetons sont utilisés pour empêcher Les attaques de relecture. Jetons de session sont valables pendant 5 secondes après que le nonce défi aléatoire est délivré à l’app Android.
Deux primitives cryptographiques sont implémentées pour crypter le trafic d’Android à étincelle et vice versa.
AndroidRequest(COMMAND)
SparkResponse(RESPONSE)
Ces deux fonctions atteindre les objectifs suivants :
- L’attaquant ne peut pas voir les messages en texte brut
- L’attaquant ne peut pas modifier le trafic crypté en quelque sorte
- L’attaquant ne peut pas faire la différence entre les messages cryptés, b/c en clair même semble différent à chaque fois qu'il est crypté
Le problème est que nous sommes toujours vulnérables à des attaques par relecture, puisque l’attaquant peut capturer un message chiffré valide, attendez jusqu'à ce que nous sommes allés et lecture pour ouvrir la porte de garage. Pour résoudre ce problème, j’ai utilisé un défi basé, le protocole cryptographique de nonce.
Création de session
L’algorithme suivant fait référence à deux fonctions définies ci-dessus.
Ce protocole est également représenté dans le diagramme ci-joint.