Favicon
NSI Terminale

Chiffrement symétrique et clef partagée

Principe

Application

  1. table de vérité du décryptage d'image
    pixel de l'image
    à crypter
    pixel de la clef
    de codage
    pixel de l'image
    cryptée
    pixel de la clef
    de codage
    pixel de l'image
    décryptée
    0 0 0 0 0
    0 1 1 1 0
    1 0 1 0 1
    1 1 0 1 1
  2. On constate que l'on retrouve pour le pixel de l'image décryptée les mêmes données que pour l'image à crypter.
  3. Nous allons donc décoder les images en effectuant un ou exclusif entre l'image cryptée et la clef.
  1. La clef contient 1000 x 1000 = 1 000 000 de pixels.
  2. Pour chaque pixel il y a 255 x 255 x 255 = 16 581 375 de couleurs possibles.
  3. Le nombres de clefs différentes possibles est donc : 1 000 000 x 16 581 375 = 1,65.1013 clef différentes possibles.
  4. Si le décodage prends 1ms par clef, la durée d'un craquage en force brute sera de :
    1,65.1013 x 1.10-3 = 1.65.1010s = 523 ans !!!!
  1. 	
    def code(nomFichImage1:str,nomFichImage2:str,nomFichClef:str):
        '''
        la fonction code prend en paramètres le nom des fichiers png de l'image à coder et de la clef, ainsi que de l'image qui va être codée.
        la fonction ne renvoie rien, elle écrit le fichier de l'image codée sur le disque
        '''
        image1=Image.open(nomFichImage1)#recupération de l'image de de départ (à coder ou décoder)
        clef=Image.open(nomFichClef)#recupération de la clef
        image2=Image.new('RGB', (image1.size[0],image1.size[1]))#création de l'image finale (codée ou décodée)
        pixelImage2=[0,0,0]
        for i in range (image1.size[0]):
            for j in range(image1.size[1]):
                pixelImage1=image1.getpixel((i,j))#récupération du pixel de l'image de départ
                pixelClef=clef.getpixel((i,j))#récupération du pixel de la clef
                for k in range(3):#parcours des trois composantes RVB
                    pixelImage2[k]=pixelImage1[k]^pixelClef[k]#ouexclusif entre les trois composantes
                image2.putpixel((i,j),tuple(pixelImage2))#le tableau pixelImage2 est transformé en tuple puis écrit dans l'image d'arrivée
        image2.save(nomFichImage2)#l'imaage finale est écrit sur le disque			
    			
  2. Il n'est pas nécessaire de coder une fonction decode() car c'est la même fonction que la fonction code()
  3. Mystère...Avec ce que vous avez au dessus, vous devrez vous en sortir...

Chiffrement asymétrique et clef privée / clef publique

Principe

Exemple d'échange clef privée / clef publique

  1. La clef publique est 2893, la clef privée est 263. La clef de codage est donc 2893/263 = 11
  2. Le message décodé est donc : VU COMME CELA C'EST FACILE LA CRYPTOGRAPHIE.

En résumé

Le protocole HTTPS

Les faiblesses de HTTP

Le protocole HTTPS

Principe

Description d'un échange

Le certificat d'authenticité

Exercice