Code RSA
Histoire, fonctionnement et intérêt aujourd'hui
Au programme
- Cryptologie, définition et histoire
- RSA, histoire et clés publiques / privées
- Dans la pratique : Clés publiques / privées
- Dans la pratique : Cryptage / Decryptage
Une définition claire
De la cryptologie
La cryptologie est littéralement la science du secret. Elle a pour objectif de cacher les informations d’un message pour que celles ci ne soient pas lisibles de tous. Son but est triple : assurer la confidentialité, garantir l’authenticité et conserver l’intégrité des informations.
Killian, 2015
DÉCRYPTONS L'HISTOIRE
De la Cryptographie
Scytale Antiquité
RSA, la protection des petites gens
Histoire du RSA
Une CLÉ Publique, Une cLÉ PRIVÉE
Pour communiquer en toute sécurité
Trouver des cles RSA
Création de clés privées et publiques
Crypter vos DONNÉES
Cryptage RSA
Sortir vos DONNÉES de la crypte
Decryptage RSA
#!/usr/bin/env python
# -*- coding: utf-8 -*-
def bezout(a, b):
''' Calcule (u, v, p) tels que a*u + b*v = p et p = pgcd(a, b) '''
if a == 0 and b == 0: return (0, 0, 0)
if b == 0: return (a/abs(a), 0, abs(a))
(u, v, p) = bezout(b, a%b)
return (v, (u - v*(a/b)), p)
def inv_modulo(x, m):
''' Calcule y dans [[0, m-1]] tel que x*y % abs(m) = 1 '''
(u, _, p) = bezout(x, m)
if p == 1: return u%abs(m)
else: raise Exception("%s et %s ne sont pas premiers entre eux" % (x, m))
def creationClee():
entierAlice1 = int ( raw_input("Entrer un nombre premier: ") )
entierAlice2 = int ( raw_input("Entrer un autre nombre premier: ") )
moduleDeChiffrement = entierAlice1 * entierAlice2
indicatriceEuler = (entierAlice1 - 1) * (entierAlice2 - 1)
exposantChiffrement = int ( raw_input("Entrer nombre première et inférieur a {}: ".format(indicatriceEuler)) )
d = inv_modulo(exposantChiffrement, indicatriceEuler)
print("Clée publique({},{}) et clée privée({},{})".format(moduleDeChiffrement, exposantChiffrement, moduleDeChiffrement, d) )
return ( ( moduleDeChiffrement, exposantChiffrement ), ( moduleDeChiffrement, d ) )
def cryptage( donnee, cleePublique ):
return donnee ** cleePublique[1] % cleePublique[0]
def decryptage( donnee, cleePrivee ):
return donnee ** cleePrivee[1] % cleePrivee[0]
def main():
creationClee()
cryptage(31, (33,7))
#creationClee()
return 0
if __name__ == '__main__':
main()
Pourquoi crypter nos DONNÉES
Intérêt aujourd'hui
deck
By johnsmithgv
deck
- 67