SharedSecret v1.5, Mars 2022 http://sectools.free.fr Ces 2 petits programmes permettent d'échanger une clé secrète à travers un réseau NON sécurisé. Le principe général est bien sûr celui de Diffie-Hellman : https://fr.wikipedia.org/wiki/%C3%89change_de_cl%C3%A9s_Diffie-Hellman Client Serveur ShrSecClt.exe <-------> ShrSecSrv.exe | | | | v v ShrSecClt.dat ShrSecSrv.dat clés ShrSecClt.bat ShrSecSrv.bat commandes pour décoder et/ou déchiffrer Utilisation : Lancer le serveur puis lancer le client. Ce dernier se connecte au serveur, lui envoie une clé publique éphémère, et réceptionne en retour celle du serveur. Ensuite chacun calcule (dérive) indépendamment la clé symétrique (secrète) qu'ils vont partager. Pour un test rapide, ils peuvent se lancer sur la même machine et sans aucun argument. Arguments : ShrSecClt.exe : -HostAddr=... URL ou adresse du serveur à contacter ( par défaut "localhost" ) -HostPort=... port de destination ( par défaut 6600 ) -TimeOut=... délai d'attente sur connexion, envoie et réception -DH use DH group : 2048 MODP 256 RFC 5114 -EC[=...] use Elliptic Curve, default=prime256v1 -X25519 use X25519 Curve -X448 use X448 Curve -Seed valeur impliquée dans la génération du secret -Pass[=...] Phrase de passe -h aide de la commande Un seul argument (optionel, par défaut X25519) parmi 'DH', 'EC', 'X25519' et 'X448' peut être employé. Si c'est le cas, la valeur doit être identique côté serveur. Consultez la liste des courbes dans le fichier listcurves.txt Si une 'graine' (seed) est fournie, alors ce doit être la même pour le serveur. Elle est sensée être confidentielle, pour offrir un moyen rudimentaire d'authentification des parties. Elle peut être transmise par un autre canal, par exemple au téléphone. Si l'option -Pass n'est PAS utilisée, le secret partagé est stocké en clair dans le fichier ShrSecClt.dat, mais encodé en base64. Le fichier ShrSecClt.bat généré contient la commande OpenSSL pour décoder la clé (->donne la valeur binaire brute). Si l'option -Pass EST utilisée, avec une valeur (-Pass=testpass), alors cette valeur sert à chiffrer le secret partagé. Le fichier ShrSecClt.dat contient alors le résultat du chiffrement, encodé en base64. Le fichier ShrSecClt.bat généré contient, lui, la commande OpenSSL pour décoder ET déchiffrer la clé (pour ce faire il faudra entrer la phrase de passe). Il contient aussi, en commentaire, la commande pour retrouver l'IV et la clé (si on connait la phrase de passe) pour déchiffrer avec un autre logiciel. Si l'option -Pass EST utilisé, mais SANS valeur (-Pass[=]), alors la phrase de passe sera demandée sur le terminal sans s'afficher. C'est un peu moins pratique, mais plus sûr. La phrase de passe ne concerne que le fichier généré. Elle n'est PAS liée à une utilisation côté serveur. ShrSecSrv.exe : -LisPort=... port à écouter ( par dfaut 6600 ) -ClientIP=... adresse du client à filtrer -TimeOut=... délai d'attente sur envoie et réception -DH, EC=, (comme pour le client) ... " Une fois lancé, le serveur attend indéfiniment. Pour l'arrêter taper Ctrl+C. Si l'argument ClientIP est utilisé, alors la connexion cliente n'est acceptée que si elle provient de cette adresse. Exemples : ShrSecSrv -LisPort=54321 -Seed="graine de voyou" -Pass="garder secret" ShrSecClt -HostAddr=MonAutreOrdi -HostPort=54321 -Seed="graine de voyou" -Pass *** Note technique : si on observe les messages sur le réseau, on peut vérifier qu'après l'entête de 6 octets, seule une clé publique éphémère (au format DER) est transmise.