La première étape du programme va être de générer une paire de clés RSA. Le bloc qui permet de générer les clés est le suivant :

Ce bloc génère une paire de clés (publique et privée) et permet de choisir leur taille. Plus la taille est grande, plus la sécurité augmente, mais plus la génération et le chiffrement/déchiffrement sont lents. Sur micro:bit, on se limite à 32 (contre 2048 ou 4096 pour RSA en pratique). Le bloc renvoie une liste : clé publique en premier, clé privée en second.
Ensuite, il va falloir demander la clé publique du serveur. En effet, pour pouvoir transmettre des données de manière chiffrée, il faut d’abord chiffrer son propre message avec la clé publique du destinataire. Ainsi, il sera le seul à pouvoir le déchiffrer grâce à sa clé privée.
On va définir une requête, nommée CLE. Le client va envoyer ce message au démarrage du programme, en fournissant en valeur sa propre clé publique, pour que le serveur puisse lui aussi récupérer la clé publique du client.
Le client devra également écouter les messages entrants pour récupérer la réponse du serveur, et stocker la clé publique de celui-ci dans une variable.
Attention cependant, tous les messages radio ne peuvent transmettre que des primitifs (chaînes de caractères, nombres entiers, à virgule, etc.). La clé va donc être transmise sous la forme de chaîne de caractères, et non de liste Python, via le bloc ci-dessous :

Il va ensuite falloir utiliser une instruction pour reconvertir la chaine de caractères en tableau. On va utiliser une instruction spéciale, qui permet d’exécuter du code Python sous la forme de chaîne de caractères, pour pouvoir reconstruire la liste à partir de la chaîne de caractères. Ce bloc est le suivant :

Ce bloc exécute le code Python cle_serveur = (1234, 5678), dans le cas où la clé du serveur est (1234, 5678). Attention, ce bloc est ici utilisé pour faciliter la création du programme. Comme vu durant le parcours injection de code, on n’exécute jamais du code utilisateur en temps normal.
Attention - Pour tous les programmes de ce parcours, il faut configurer la radio en utilisant le bloc associé, afin de définir la taille des messages à 250. Dans le cas inverse, les programmes risquent de ne pas fonctionner.
Si tu es bloqué :
- Vérifie que le client et le serveur sont sur le même canal / groupe radio et qu’ils exécutent bien le bloc de génération de clés RSA au démarrage.
- Assure-toi que tu récupères correctement la paire de clés : l’élément 0 de la liste dans cle_publique, l’élément 1 dans cle_privee, et que le message CLE contient bien la clé publique (en texte).
- À la réception d’un message CLE, le client comme le serveur doivent stocker la clé reçue ; si tu utilises le bloc d’exécution de code Python pour reconstruire la clé à partir de la chaîne, affiche temporairement name, value et les variables de clés dans la console pour voir où ça coince.