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

Made with Slides.com