Cryptographie

La thématique de la sécurité en informatique traite de l'échange de messages entre un expéditeur et un destinataire via un canal public tout en respectant les quatre principes suivant :

On ajoute souvent aux trois conditions ci-dessus la condition de non-répudiation : l'expéditeur ne doit pas pouvoir nier être l'auteur du message a posteriori.

Les expéditeurs et destinataires du messages ne sont pas forcement distincts, lors du chiffrage de données sur un disque dur par exemple. On distingue ainsi deux mode de chiffrement :

La mise en œuvre de ces quatres principes va nécessiter la mise en place de protocoles : une séries d'étapes à effectuer par au moins deux entités (homme ou machine) en vu de réaliser une tâche.

Enfin, ces protocoles vont souvent nécessiter des algorithmes (une séries d'étapes à effectuer par une entité) pour être correctement mis en œuvre.

L'usage (depuis "applied cryptography" ?) est de personifier les différentes parties prenantes d'un protocole :

On supposera de plus toujours que le protocole, les algorithmes utilisés et leurs implémentations effectives sont connus de tous, joueurs et adversaires. La confidentialité ne devant être garantie que via un paramètre du protocole nommé clé, uniquement connu des joueurs. Cette hypothèse est connue sous le nom du principe de Kerckhoffs.

Enfin, on considérera que les adversaires ne sont pas stupides et ont à leur disposition des outils modernes et performants.

Cryptologie

La cryptologie, ou science du secret est l'étude des protocoles de sécurités. Elle possède deux branches :

À moins d'être un professionnel du domaine, ne créez pas votre propre protocole ni n'implémentez vous même les algorithmes de cryptographies qui les composent. Utilisez les protocoles connus via des bibliothèques reconnues, cela vous évitera de vous croire en sécurité alors que vous ne l'êtes pas (il vaut mieux pas de sécurité qu'une mauvaise sécurité).

Cryptographie

Pour qu'un message $m$ puisse passer de Alice à Bob via un canal public sans qu'Eve ne puisse le lire, il faut qu'il soit chiffré (encrypted) par une fonction $E(m) = c$ pendant son passage dans le canal public, puis déchiffré (decrypted) par une autre fonction $D(c) = m$.

Les fonctions de chiffrements et de déchiffrements sont appelés cipher en anglais ; le message $m$ est appelé plain text et le message chiffré $c$ : ciphertext.

Mais comme Eve connaît (ou peut soudoyer quelqu'un pour connaître) $E()$ et $D()$, il faut que ces fonctions possèdent un paramètre en plus : une clé $k$ connue uniquement d'Alice et Bob :

    Alice    |  Eve   |     Bob
-------------|--------|--------------
    m, k     |        |      k
             |        |
E(k, m) = c -|-- c ---|----> c
             |        | D(k, c) = m
             |        |
espace privé | public |    privé

En supposant qu'Eve ne possède pas d'autre information que le message chiffré, si elle veut prendre connaissance de $m$ sans connaître $k$, on dit décrypter $c$, il lui faut tester $E(k', m)$ pour toutes les combinaisons $k'$ de clés possibles.

La communication est alors confidentielle si le temps nécessaire pour faire tout ces essais est supérieur à la durée de validité du message chiffré.

De part la nature algorithmique de secret, la confidentialité de la transmission de $m$ via $E(k, m)$ n'est garantie que si :

Formalisons tout cela.

Cohérence

Dans toutes leur généralité les fonctions $E$ et $D$ sont définies :

Pour le chiffrement soit effectif, il faut qu'il soit :

On peut se restreindre, sans perte de généralité, aux messages binaires et supposer que $\mathcal{M} = \mathcal{C}$. On a alors :

Robustesse

Il faut que le code puisse résister aux tentatives de décryptage. La résistance d'un code dépend du type d'attaque auquel il doit faire face.

Cependant, tout code doit faire en sorte qu'aucune information sur $m$ ou $k$ ne puisse être déduite à partir de $E(k, m)$. Toute information, même minuscule, peut être transformée en algorithme par un cryptanalyste et utilisé pour compromettre la sécurité du code.

Cryptanalyse

Les tentatives de décryptage d'un message chiffré, on parle d'attaques peuvent s'échelonner en 4 niveaux, selon les possibilités de l'attaquant :

  1. chiffres uniquement (Ciphertext-only attackers, COA). L'attaquant est passif et n'a accès qu'a des textes chiffrés $c$ sans connaître les messages initiaux.
  2. messages connus (Known-plaintext attackers, KPA). L'attaquant est passif et des message ainsi que leurs chiffrement
  3. messages choisis (Chosen-plaintext attackers, CPA). L'attaquant est actif et peut choisir des messages à chiffrer.
  4. chiffres choisis (Chosen-ciphertext attackers, CCA). L'attaquant est actif et peut chiffrer et déchiffrer les message. Dans ce type d'attaque, l'attaquant chercher à connaître la clé de chiffrage.

Codes historiques

Confidentialité

Intégrité

Authentification

Bibliographie