Confidentialité

           k                   k
           |                   | 
           v                   v
        -------             -------
       |       |           |       |
 m --> |   E   | --> c --> |   D   | --> m
       |       |           |       | 
        -------             ------- 

Deux types d'attaques :

On considère en 2024 que si le nombre de clés est supérieur $2^{128}$, l'approche brute-force n'est pas profitable car il faudrait un temps de déchiffrage supérieure à la durée de vie du message. Si l'on utilise des connaissances supplémentaires, il est possible de faire baisser ce nombre drastiquement.

Qu-est ce que la confidentialité ?

Le message ne doit pouvoir être lu que par son destinataire. Comment partager la clé en secret ?

Chiffrer un message

Les algorithmes de chiffrement classiques ne permettent pas de chiffrer des message de taille quelconque. Ils sont conçus pour chiffrer des blocs de taille fixes.

Chiffrer un message de taille fixe

Chiffrer un message de taille quelconque

Il existe historiquement deux types de codes même si les différences commencent à s'estomper entres eux :

Attention aux implémentations

Les side channel attacks permettent, on l'a vue, de tirer parie de l'implémentation de l'algorithme pour obtenir un avantage npn négligeable. Pour qu'aucune information ne transparaisse, il faut que l'algorithme :

  1. fasse tout le temps la même chose
  2. consomme la même énergie
  3. ...

Bref, n'implémentez pas vous même les algorithmes, prenez des implémentations éprouvées.

Générer des clés

Générateur de nombre aléatoire cryptographique

TBD LSFR

Rapport de stage sur les codes LSFR : projet codes LSFR

Trouver la clé

Il faut utiliser des générateur avec entropie. Il n'est pas utile de retrouver le nombre ensuite.

TBD /dev/random ou /dev/urandom TBD : faire grossir partie aléatoire

Key derivation function

Les protocole vont avoir besoin de tout un tas de clés différentes. Une pour chaque message à transmettre et pour chaque messages. La façon la plus simple, si on a un PRF sous la main est de :

Puis il suffit d'étier le process à chaque fois que l'in veut une clé avec : $F(\text{SK}, \text{CTX} || i)$, où $i$ est un compteur.