#1 Le 26/05/2019, à 08:50
- Nuliel
[Résolu] chiffrement RSA: transformer un message en nombre décimal
Bonjour,
Je suis actuellement en train d'essayer des trucs avec le chiffrement RSA, et je bute sur un problème tout bête mais sur lequel je bloque. J'ai le message chiffré et la clé publique (.pem). Quand on veut transmettre un message clair M, on le chiffre avant de l'envoyer, mais pour cela il faut transformer le message en un grand nombre, le chiffrer, puis on retransforme après chiffrement en texte si j'ai bien compris. Si j'ai bien compris, le texte clair est transformé lettre par lettre en valeur hexadécimale en utilisant la table ASCII (d'ailleurs que se passe t'il lorsque le message contient un accent?), le tout (un grand nombre hexa) est transformé en décimal, on chiffre, et on va dans l'autre sens (décimal -> hexa -> texte). Est ce bien cela? Y a t'il forcément du padding, et comment savoir ce qu'il faut enlever? Pourquoi les messages chiffrés finissent par ==? C'est pas un signe que c'est en base64? Y a t'il moyen d'utiliser la commande openssl pour récupérer le nombre en décimal? (j'ai du mal avec cette commande) J'imagine que oui mais je suis un peu perdu dans toutes les options d'openssl.
Pour l'instant, je sais que je peux transformer de l'hexa en décimal avec la commande bc, mais je suis pas plus avancé.
J'ai pas mal cherché sur internet, mais ça n'est toujours pas clair pour moi.
Merci d'avance,
Naziel
PS: je savais pas trop où mettre cette demande, je l'ai mis dans "Terminal, scripts et ligne de commande" vu que la solution va sûrement être à base d'openssl
Dernière modification par Nuliel (Le 08/06/2019, à 10:47)
Hors ligne
#2 Le 26/05/2019, à 18:04
- kholo
Re : [Résolu] chiffrement RSA: transformer un message en nombre décimal
salut Naziel,
je vois que tu passes par openssl pour chiffrer...
moi aussi j'ai voulu éviter de passer par le trousseau de clé mais je m'y suis un peu cassé les dents...
j'ai fini par accepter mon sort et passer par la procédure "normale" de gpg que j'ai adapté pour mon usage.
Voilà ma procédure :
à savoir : pour voir la liste des clés déjà créées :
gpg2 --list-keys
donc, pour créer une paire de clés :
gpg2 --full-gen-key
la première question qu'il va te poser :
Sélectionnez le type de clef désiré :
(1) RSA et RSA (par défaut)
(2) DSA et Elgamal
(3) DSA (signature seule)
(4) RSA (signature seule)
Quel est votre choix ?
je prend 1 pour RSA
ensuite la taille de la clé :
Quelle taille de clef désirez-vous ? (2048)
tu peux choisir 2048, 3096, 4048 voire des valeurs intermédiaires (plus je sais pas trop... si c'est nécessaire)
ensuite l'expiration
Veuillez indiquer le temps pendant lequel cette clef devrait être valable.
0 = la clef n'expire pas
<n> = la clef expire dans n jours
<n>w = la clef expire dans n semaines
<n>m = la clef expire dans n mois
<n>y = la clef expire dans n ans
Pendant combien de temps la clef est-elle valable ? (0)
par exemple je lui dit qu'elle n'expire pas 0 et il demande
La clef n'expire pas du tout
Est-ce correct ? (o/N)
je valide avec o
ensuite les questions sont :
Nom réel :
mettre un nom même avec des espaces
Adresse électronique :
bon bah là facile
Commentaire :
et un commentaire
ensuite la dernière question :
Changer le (N)om, le (C)ommentaire, l'(A)dresse électronique
ou (O)ui/(Q)uitter ?
je valide avec O
et c'est parti... il te demande de faire des trucs comme bouger la souris ouvrir des programmes, lancer des fichiers de façon à augmenter l'entropie...
De nombreux octets aléatoires doivent être générés. Vous devriez faire
autre chose (taper au clavier, déplacer la souris, utiliser les disques)
pendant la génération de nombres premiers ; cela donne au générateur de
nombres aléatoires une meilleure chance d'obtenir suffisamment d'entropie.
ensuite tu as un topo sur le travail effectué...
voilà ça c'est fait...
ensuite il faut exporter la clé privée pour pouvoir la diffuser
un petit coup de
gpg2 --list-keys
pour faire le point...
puis
gpg2 --export 'le fameux nom avec des espaces' -o ~/le/chemin/vers/un/fichier.pem
voilà ensuite tu fais parvenir la clé à ton ou tes destinataires...
pour ajouter une clé d'un "ami"
gpg2 --import 'nom du fichier de la clé'
et pour décompresser des fichiers, j'utilise un plugin pour nautilus
sudo apt install seahorse-nautilus
voilà, j'ai pas encore regardé du côté de la signature des clés mais ça doit pas être plus compliqué...
Hors ligne
#3 Le 26/05/2019, à 18:22
- Nuliel
Re : [Résolu] chiffrement RSA: transformer un message en nombre décimal
Merci kholo pour ta réponse. En fait, je suis sur un challenge d'informatique (plus exactement l'envoi d'un même message chiffré avec RSA à trois destinataires différents avec 3 clés publiques différentes, faut pas faire ça parce qu'on peut retrouver le message clair). Je comprends et sais mettre en place toute la partie mathématique (théorème des restes chinois, ...) mais je bloque sur la transformation du texte chiffré en nombre (que je peux exploiter mathématiquement) représentant le texte chiffré.
Mais on peut chiffrer un fichier avec openssl, c'est faisable, mais pas aussi simple que gpg.
Je n'ai pas pensé à gpg pour faire cette transformation, je vais consulter la doc.
Merci
Hors ligne
#4 Le 26/05/2019, à 18:48
- diesel
Re : [Résolu] chiffrement RSA: transformer un message en nombre décimal
Bonsoir Maziel,
En fait, le chiffrement (qu'il soit symétrique ou à clé publique) se fout comme de l'an 40 de la signification du message à chiffrer. Lui, il chiffre une suite d'octets. Que ces octets représentent de l'ASCII, de l'unicode ou du raw, ce n'est pas son problème ; il chiffre.
Idem pour le déchiffrement.
Amicalement.
Jean-Marie
Je déteste qu'on cherche à me faire passer pour un con, j'y arrive déjà très bien tout seul.
Le mort, il sait pas qu'il est mort ; c'est pour les autres que c'est dur.................... Pour les cons, c'est pareil.
En ligne
#5 Le 26/05/2019, à 19:25
- Nuliel
Re : [Résolu] chiffrement RSA: transformer un message en nombre décimal
Je sais bien que le chiffrement ne s'occupe pas de savoir si c'est en ASCII ou en UTF-8, mais je me demandais si le fait que ce soit encodé en ASCII ou en UTF-8 est marquée quelque part. Ça encore, c'est pas le plus gros problème.
Vu https://stackoverflow.com/questions/691 … at-the-end je pense que le texte chiffré est en base64. Et ça explique les deux = en fin de chaîne, et au passage j'ai l'explication sur le padding.
Je ferai des essais dans quelques jours.
Hors ligne
#6 Le 08/06/2019, à 10:46
- Nuliel
Re : [Résolu] chiffrement RSA: transformer un message en nombre décimal
Voilà, j'ai fait des essais, et j'ai réussi à transformer le message en base64 au départ en nombre décimal. Pour cela
cat leMessageChiffré | base64 -d | xxd -ps
qui donne de l'hexa, à retransformer en décimal avec https://www.rapidtables.com/convert/num … cimal.html par exemple.
Je passe en résolu, merci!
Hors ligne
#7 Le 08/06/2019, à 10:57
- Nasman
Re : [Résolu] chiffrement RSA: transformer un message en nombre décimal
Le chiffrement se fiche que ce soit du texte codé en ASCII ou UTF8 - ni même que ce soit du texte ou autre chose, il chiffre une suite d'octets en une suite d'octets sans signification intrinsèque (à moins que l'on ait la clé). Par la suite le déchiffrement transforma la suite d'octets chiffrés en une autre suite d'octets qui retrouvera la structure du fichier d'origine (vidéo, ou texte).
La lecture du fichier dépendra du code MIME du début de fichier (et donc du choix du logiciel pour afficher le contenu) ou de l'extension (Windows)
Nota : le texte brut ne contiendra pas de code MIME - on peut le vérifier avec un éditeur hexa
Le algorithmes de chiffrement efficaces travaillent avec les octets codés au plus bas niveau (hexa ou binaire) et ne s'embarrassent pas de passer par un codage en système décimal.
Dernière modification par Nasman (Le 08/06/2019, à 10:59)
PC fixe sous Bionic 64 bits et portable avec Focal 64 bits
Hors ligne