Favicon

NSI Vaugelas - Terminale

Connexion

Sommaire

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(image:str, image_cryptee:str, clef: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, ou l'affiche.
        '''
        img1 = Image.open(image)                              # ouverture de l'image de de départ (à coder ou décoder)
        cle = Image.open(clef)                                # ouverture de la clef
        img2 = Image.new('RGB', (img1.size[0], img1.size[1])) #création de l'image finale (codée ou décodée)
        pixel2 = [0,0,0]
        for i in range (img1.size[0]):
            for j in range(img1.size[1]):
                pixel1 = img1.getpixel((i,j))           # récupération du pixel de l'image de départ
                pixel_clef = cle.getpixel((i,j))        # récupération du pixel de la clef
                for k in range(3):                      # parcours des trois composantes RVB
                    pixel2[k] = pixel1[k]^pixel_clef[k] # ou exclusif entre chaque composante
                img2.putpixel((i,j),tuple(pixel2))      # le tableau 'pixel2' est transformé en tuple puis écrit dans l'image d'arrivée
        img2.save(image_cryptee) # ou : img2.show()			
    			
  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 devriez 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. Le décalage 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