Cle de 128 bits et cryptage

MoveX Messages postés 230 Date d'inscription vendredi 9 mai 2003 Statut Membre Dernière intervention 16 juillet 2005 - 8 mars 2005 à 20:19
PhilippeD3V Messages postés 1 Date d'inscription dimanche 26 février 2006 Statut Membre Dernière intervention 27 mai 2007 - 27 mai 2007 à 17:01
une cle de 128 bits en cryptage ca correspond a quoi? je veux dire, ca n est pas une cle de 128 caracteres?

10 réponses

florenth Messages postés 1023 Date d'inscription dimanche 1 août 2004 Statut Membre Dernière intervention 17 août 2008 3
8 mars 2005 à 20:32
Euh, je ne m'y connais pas trop mais je peux juste te dire qu'un
caractere c'est un octet (8 bits) donc 128 bits correspondent à 16
octets donc 16 carac.

Après, quant à savoir si ces 128 bits sont des caractères ... c'est plus dans mon domaine



J'espere avoir éclaici ta lanterne .

Flo

Si tu ne te plantes pas ......
tu ne poussera jamais
0
MoveX Messages postés 230 Date d'inscription vendredi 9 mai 2003 Statut Membre Dernière intervention 16 juillet 2005 1
8 mars 2005 à 20:39
ok, ca je le savais deja mais merci bien. je pense comme toi mais j aimerais avoir confirmation....
0
sovitec Messages postés 47 Date d'inscription mardi 18 mai 2004 Statut Membre Dernière intervention 24 juillet 2006
9 mars 2005 à 09:32
Salut,



128 bits correspond effectivement à 16 char (8 bits). Mais comme tous
les caractères ne sont pas imprimables et que la norme ASCII de base ne
code que sur 7 bits on ne peut pas écrire un nombre de 128 bits avec 16
caractères.



Si tu veux représenter une clef de 128 bits par une chaine de
caractères il faut donc l'encoder, pour cela il existe des méthodes
standards : Base64, YEnc, UU, ...



Si ton but est, à partir d'une chaine de caractère quelconque (une
phrase de passe), de générer un nombre de 128 bits alors il vaut mieux
utiliser une fonction de hachage : MD5 (non recommandée pour de la
cryptographie), SHA-1 (idem MD5), SHA-256, ... Pour les méthodes de
hachage qui ont une sortie de plus de 128 bits tu peux prendre un bloc
de 128 bits dans la sortie : les 128 premiers par exemple. Attention
que dans ce cas des fonctions de hachage on ne peut pas remonter des
128 bits vers la chaine de caractère.



J'espère avoir été clair.
0
MoveX Messages postés 230 Date d'inscription vendredi 9 mai 2003 Statut Membre Dernière intervention 16 juillet 2005 1
9 mars 2005 à 18:45
ok merci, je pense avoir compris mais un petit exemple serait le bienvenue, il faut que je genere une cle de 128 bits qui corresponde a un nombre premier... javoue ne pas trop savoir comment faire, le tout sans utiliser de composants ext. tout du moins un minimum.

si tu as une idee.

merci encore
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
sovitec Messages postés 47 Date d'inscription mardi 18 mai 2004 Statut Membre Dernière intervention 24 juillet 2006
10 mars 2005 à 09:47
Bonjour



Tu n'avais pas préciser que tu devais générer une clé de 128 bits, et surtout que celle ci devait être un nombre premier.



L'encodage ne sert que si tu veux transmettre ta clé sous forme de
chaine de caractères, dans un email par exemple, ou comme clef
d'activation d'un logiciel qu'un utilisateur doit taper.



Les fonctions de hachage dont je parlais peuvent bien servir à générer
des clefs, mais elles ne sont pas aléatoires, et rien ne garanti la
primalité. Elles servent surtout dans le cadre de mots de passe.



Revenons en à ton problème alors.



D'abord il serait surement beaucoup plus simple d'utiliser un
bibliothèque de gestion des grands nombres qui te permette d'effectuer
les opérations sur des nombres de 128 bits de façon naturelle. Sinon tu
peux en écrire une minimale toi même, ce n'est pas très compliqué.



Ensuite pour la génération de nombres aléatoires si tu as une fonction
qui te donne des nombres de 32bits par exemple, tu peux en concaténer 4
pour générer un nombre aléatoire de 128 bits, ça marche très bien.
Attention cependant que les fonctions random standards de Delphi ne
sont pas du tout cryptographiquement sûres. Si tu travailles sous
windows il n'existe d'ailleurs pas de générateur d'aléa sûr. Sous Linux
il existe une fonction système bien plus sûre, mais pas très rapide
(cependant, vu que tes besoins sont faibles ce devrait être largement
suffisant).



Dernier point : la clé doit être un nombre premier. D'abord il n'existe
pas de façon de générer un nombre premier aléatoire. Donc la solution
est de générer un nombre aléatoire, puis de vérifier s'il est premier.
S'il ne l'est pas on tire un nouveau nombre jusqu'à en trouver un qui
soit premier. Le problème est maintenant de vérifier qu'un nombre de
128 bits est premier. Avec une méthode exhaustive comme le cribble
d'Erasthotène cela peut prendre enormément de temps. Donc pour les
grands nombres on utilise des méthodes probabilistes, telle que la
méthode de Miller-Rabin, qui ne garantie pas absolument que le nombre
soit premier, mais qui dit simplement que le nombre est premier avec
une forte probabilité (on peut choisir son seuil de probabilité en
effectuant plusieurs passes).



Sinon je peux demander pourquoi la clé doit être un nombre premier ? Le
cas le plus classique où l'on ai besoin de nombre premier est celui des
clés RSA. Mais dans ce cas 128 bits c'est vraiment très faible.
0
MoveX Messages postés 230 Date d'inscription vendredi 9 mai 2003 Statut Membre Dernière intervention 16 juillet 2005 1
10 mars 2005 à 18:05
cest bien pour un cryptage rsa, j essaie de reproduire un ptit programme qui crypte en rsa, j ai une activite dans mon bouquin de math qui explique le systeme rsa.... bref, j ai deja un code pour generer un nombre premier compose d un certain nombre de chiffres. si tu le veux, il te suffit daller voir dans le post suivant celui ci dans le forum...

pour commencer, je ne vois pas vraiment a quoi correspond un nombre de 32 bits. donc... ensuite, 128 bits est peut etre faible mais cest pour commencer, on verra ensuite quand ca fonctionnera deja un minimum.

enfin, j aimerais eviter d utiliser des librairies exterieures...

voila, si tu as un lien ou deux pour m expliquer les bases en ce qui concerne les cles de cryptage notamment la notion de longueur....
0
sovitec Messages postés 47 Date d'inscription mardi 18 mai 2004 Statut Membre Dernière intervention 24 juillet 2006
11 mars 2005 à 09:39
Une explication du codage binaire, libre et en français :

http://www.commentcamarche.net/base/binaire.php3



Une bibliothèque de cryptage libre pour Delphi (elle ne fait pas le
RSA, mais elle a tous les outils pour la manipulation des grands
nombres) :

http://www.cityinthesky.co.uk/delphi.html



Je viens aussi de regarder ton code, en fait je l'avais déjà vu, et
j'avais même répondu, mais je n'avais pas fait le rapprochement. Elle
marche peut être bien pour un nombre à 3 chiffres (décimaux, soit 10
chiffres binaires environ), mais pour 128 bits ça risque d'être
loooooong : La racine carrée d'un nombre de 128 bits est un nombre de
64 bits soit environ 2x1017. Imaginons que dans ta boucle tu
puisses tester un million de diviseurs par seconde (c'est un ordre de
grandeur optimiste sur un PC moyen), alors il te faudra de l'ordre de
2.1011 secondes pour tester si un nombre est premier,
c'est à dire environ 6000 ans. C'est pourquoi je te disais de te
documenter sur les méthodes telles que Miller-Rabin (tu trouveras
pleins de doc avec Google).
0
MoveX Messages postés 230 Date d'inscription vendredi 9 mai 2003 Statut Membre Dernière intervention 16 juillet 2005 1
11 mars 2005 à 17:32
ok, je pensais que 128 bits ca correspondait a 8 caracteres, et ca marchait bien mon generateur avec 8 chiffres....
0
vegetalain Messages postés 747 Date d'inscription mardi 25 mars 2003 Statut Membre Dernière intervention 11 août 2022
13 mars 2007 à 14:01
"La racine carrée d'un nombre de 128 bits est un nombre de
64 bits soit environ 2x10<sup>17"

Ca veut dire qu'un nombre à 64 bits équivaut à un nombre à 18 chiffres?

Soit pour un nombre composé de 2.868 chiffres par exemple, en ferait un
nombre à 10.197 bits, et donc une clé de cryptage à 10.197 bits?...
</sup>
0
PhilippeD3V Messages postés 1 Date d'inscription dimanche 26 février 2006 Statut Membre Dernière intervention 27 mai 2007
27 mai 2007 à 17:01
Le codage sur 64 bit signifie que l'on manipule des nombres compris dans l'intervalle [-(2^63);(2^63)-1] = [-9223372036854775808;+9223372036854775807], soit des nombres de l'ordre de 10^18 au maximum, soit 19 chiffres. Un nombre de 64 bits est un nombre de l'ordre de 10^18.
En généralisant on a : codage sur n bits --> manipulation de nombres appartenant à [-(2^n);(2^n)-1].

Par contre, quelqu'un serait comment manipuler des nombres de 512 bits ou 1024 sous delphi tout en sachant que les méthodes necessaire pour le chiffrage/dechiffrage RSA necessitent des opération sur entiers... Et que les entiers ne ce codent aux mieux que sur 64bit (int64).... Si quelqu'un à une petite idée, je suis preneur ;) bonne journée ou soirée a tous!!!!!!
0
Rejoignez-nous