Cryptage asymétrique simple

Description

Après avoir quelque peu critiqué les codes sur le cryptage, on m'a demandé de faire un exemple ... le voici

Un cryptage asymétrique utilise deux clés (ou plus, peu importe) : une privée et une publique

La clé privée est détenue par le receptionneur du message qui pourra ainsi décrypter le message que l'emmeteur à codé avec une autre clé, dite publique.

La clé publique est calculée a partir de la clé privée, et on ne peut pas retrouver la clé privée a partir de la clé publique. C'est le principe de RSA par exemple.

En dehors de la sécurité accrue par rapport a un cryptage "simple" ou symétrique, il y a, du fait meme de cet algorithme, et aussi a cause du VB, des limites a ce programme... Je les met de suite :
- chaque message crypté a environ 8× la taille du message d'origine
- j'ai mis une séparation claire (le petit ; ) entre les lettre cryptées, ce qui permettrais de faciliter une eventuelle tentative de décodage
- le programme est limité a de petits nombres (or plus les nombres sont grands, plus la sécurité augmente) a cause du type Long de VB (limité à 32 bits)

Tout ca pour dire...ce n'est pas RSA, ce n'est pas infaillible. Mais par rapport au XOR ou autres, y'a pas photo :)

Conclusion :


Le principe mathématique pour ceux que ca intéresse :

soit une suite b(b0, b1, b2, b3, ..., b6, b7) de nombres entiers tels que b(i) soit supérieur à la somme de ses prédécesseurs

P doit etre plus grand que la somme de tous les b. Q doit etre premier avec P.

P, Q et b constituent la partie privée du code.

soit a(a0, a1, a2, a3, ..., a6, a7) de nombres entiers tels que a(i) = kP +Qb(i) avec k un entier quelconque.

a consitue la clé privée.

On transmet donc uniquement la clé publique, qui permet de crypter, et on garde (précieusement :P) la clé privée et le couple P, Q

Pour crypter, on décompose un nombre K en binaire (ex "A" = 41 = 0101001) puis on crée le code R tel que R = K(0)a(0) + K(1)b(1) ....

R représente donc le chiffre (ou la lettre) K codé avec la clé publique.

Pour décrypter, il faut donc le message crypté R, la clé privée b et le couple P, Q

On calcule u et v tels que Pu + Qv = 1.
On calcule H, reste de la division Rv/P

On a alors H = K(0)b(0) + K(1)b(1) + ...
Et b(i)> a tous ses prédecesseurs

Si H - b(7) > 0 alors c(7) = 1
Si H - b(6) > 0 alors c(6) = 1 ...

On finit par obtenir c(c0, c1, c2, c3, ...) qui est la représentation binaire du message d'origine, dans notre exemple, 0101001 = "A"...

C'est assez simple, rapide, et relativement sûr :)

Codes Sources

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.