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.
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.
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é.
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