Bonjour!. Je pense présentement à concevoir un programme qui encoderait/décoderait des fichiers textes selon la méthode RSA (la même qui est utilisée sur les sites sécurisés), mais je bute sur le traitement des grands nombres impliqués là-dedans. Ces nombres sont de l'ordre de 1056^823, et ne rentrent pas dans un double double... que faire?
Je me souviens
Ad mari usque ad mare
GENERATION 23: The first time you see this, copy it into your sig on any forum and add 1 to the generation. Social experiment.
Il faut utiliser un algorithme spécialisé pour calculer les puissances modulo N. Il y a des implémentations sous GPL, probablement aussi certaines sous licence BSD, que tu peux regarder. N'importe quelle librairie de cryptographie sérieuse gère le RSA de nos jours (depuis que le brevet a expiré).
En fait, c'est plutôt "pour voir", comme tu dis... l'idée ici ce n'est pas d'encoder tout le texte d'une frappe, mais plutôt 2 ou 3 caractères à la fois...
Je me souviens
Ad mari usque ad mare
GENERATION 23: The first time you see this, copy it into your sig on any forum and add 1 to the generation. Social experiment.
On ne peut pas utiliser des flottants pour faire ce genre d'opérations sur les entiers, d'ailleurs, les arrondis détruisent toute l'information!
Côté maths, c'est pas vraiment ça le problème, en fait on voit la théorie nécessaire en cours de math... j'aimerais juste pousser ça un peu plus loin, c'est tout... en fait, je suis encore à l'étape de la conception; je n'ai pas encore codé une seule ligne, je suis plutôt occupé à penser aux différents problèmes que je pourrais rencontrer et à la facon dont je vais les résoudre...
Je me souviens
Ad mari usque ad mare
GENERATION 23: The first time you see this, copy it into your sig on any forum and add 1 to the generation. Social experiment.
Jyaif Le 03/03/2008 à 10:50 (en Java, il y a (de base) la classe BigInteger qui permet d'avoir des entiers de n'importe quelle taille).
oui, c'est ça qu'il doit recoder en C (et que j'ai fait aussi)
Les opérations de base fonctionnent, mais sont très lentes pour faire du RSA. Surtout la division, qui se fait par dichotomie, et qui est nécessaire pour chaque opération modulaire.
Naïvement ça passe pas.
Je vais utiliser la multiplication modulaire de Montgomery pour accélérer l'exponentiation modulaire, mais je l'ai pas encore codée.
Perso, je comptais plutôt "casser" l'opération en plusieurs parties, assez petites pour être calculées...
ex: 10 mod 3 => 5*2 mod 3 => (5 mod 3) * (2 mod 3) => (2*2) mod 3 = 1
ce qui est bien égal à 10 mod 3... Peut-être que je me trompe, mais à première vue, ça semble marcher.
De toute façon, je ne compte pas coder en RSA 128 bits; je vais plutôt garder des nombres pas trop gros...
Je me souviens
Ad mari usque ad mare
GENERATION 23: The first time you see this, copy it into your sig on any forum and add 1 to the generation. Social experiment.