5.4 Sécuriser les échanges de données

Comme mentionné plus haut, toutes les données échangées sur un réseau devraient être chiffrées. Si nos objets communiquent avec le réseau autrement que par HTTPS, on doit quand même prévoir une façon de sécuriser les échanges. Pour les objets connectés, on doit faire le choix entre un chiffrement symétrique, plus léger, ou un chiffrement asymétrique, plus sécuritaire.

Étapes du chiffrement RSA. Une description longue suit. L'expéditeur utilise sa clé privée ou la clé publique du destinataire pour chiffrer son message, qui pourra ensuite être déchiffrée par le destinataire en utilisant la clé publique de l'expéditeur ou sa propre clé privée.

Figure 95 — Chiffrement asymétrique RSA

Le chiffrement asymétrique assure la confidentialité des données. De plus, les clés peuvent aussi être utilisées pour signer le message et en vérifier l’authenticité, en plus d’en assurer la validité.

En Python, sur le Raspberry Pi, on peut installer et utiliser la bibliothèque RSA-light-iot qui permet de faire un chiffrement asymétrique, c’est-à-dire à clés publiques et privées. On l’installe avec la commande pip3 install RSA-light-iot. On pourra ensuite l’utiliser pour générer des clés publique et privée, puis chiffrer et signer nos données avant de les transmettre sur le réseau.

La Figure 96 — Chiffrer et déchiffrer avec RSA montre comment utiliser cette bibliothèque pour générer des clés publiques et privées et pour les utiliser pour chiffrer et déchiffrer des messages. Cependant, ceci ne constitue pas un exemple complet puisqu’il n’y a aucun échange de données ici.

Processus de signature numérique. Une description longue suit. L'expéditeur chiffre le message pour en assurer la confidentialité. Puis, un hachage permet de créer un condensé qui sera chiffré avec sa clé privée, créant ainsi une signature numérique. Le message chiffré est transmis avec la signature numérique au destinataire, qui déchiffre la signature avec la clé publique de l'expéditeur et la compare avec un condensé créé par un hachage du message chiffré. Le condensé et la signature déchiffrée devraient être identiques.

Figure 96 — Chiffrer et déchiffrer avec RSA

Pour utiliser correctement ce mécanisme entre un objet connecté et une application cliente, il faut installer la bibliothèque sur les deux, générer des clés publiques et privées sur les deux, échanger les clés publiques, puis pour chaque message, les chiffrer avec la clé publique de l’autre avant de les transmettre. L’objet connecté doit chiffrer ses messages avec la clé publique de l’application cliente, tandis que l’application cliente doit chiffrer ses données avec la clé publique de l’objet connecté. Ensuite, sur réception, les messages sont déchiffrés avec les clés privées respectives. De plus, si l’on ne veut pas seulement assurer la confidentialité, mais aussi l’authenticité des messages, on peut ajouter la couche de signature, comme présentée à la Figure 97 — Signature avec la clé privée. Celle-ci permet de vérifier l’authenticité du message en plus de s’assurer qu’il n’a pas été modifié.

Fig97_concept

Figure 97 — Signature avec la clé privée

Vidéo 59 : Sécuriser les échanges de données avec RSA en python et sur le Raspberry Pi