Mehari s'articule autour de 3 types de livrables :

Plans de la méthode Mehari

1. le Plan Stratégique de Sécurité (PSS)

2. les Plans Opérationnels de Sécurité (POS)

3. le Plan Opérationnel d'Entreprise (POE)

Le **Plan Stratégique de Sécurité** fixe les objectifs de sécurité ainsi que les métriques permettant de les mesurer. C'est à ce stade que le niveau de gravité des risques encourus par l'entreprise est évalué. Il définit la politique de sécurité ainsi que la charte d'utilisation du SI pour ses utilisateurs.

Les **Plans Opérationnels de Sécurité** définissent pour chaque site les mesures de sécurité qui doivent être mises en oeuvre. Pour cela, ils élaborent des scénarios de compromission et audite les services du SI. Sur la base de cet audit, une évaluation de chaque risque (probabilité, impact) est réalisée permettant par la suite d'exprimer les besoins de sécurité, et par la même les mesures de protections nécessaires. Enfin, une planification de la mise à niveau de la sécurité du SI est faite.

Le **Plan Opérationnel d'Entreprise** assure le suivi de la sécurité par l'élaboration d'indicateurs sur les risques identifiés et le choix des scénarios de catastrophe contre lesquels il faut se prémunir.

Des bases de connaissances permettent d'automatiser certains calculs de gravité des scénarios de risques, proposent des liens entre menaces et parades...

Mehari apporte une démarche centrée sur les besoins de continuité d'activité de l'entreprise et fournit des livrables types aidés d'un guide méthodologie. Les audits qu'elle propose permettent la création de plan d'actions concrets. Cette méthode permet donc de construire une politique de sécurité destinée à pallier les vulnérabilités constatées lors des audits du *Plans Opérationnels de Sécurité* et d'atteindre le niveau de sécurité correspondant aux objectifs fixés dans le *Plan Stratégique de Sécurité*.
# CHAPITRE 5. NOTIONS DE CRYPTOGRAPHIE

## 5.1 INTRODUCTION A LA CRYPTOGRAPHIE

**1.1 La Cryptographie** est l'étude des méthodes donnant la possibilité d'envoyer des données de manière confidentielle sur un support donné. Les fonctions principales de la Cryptographie sont le Chiffrement, le Déchiffrement et la Clé.

La cryptographie utilise des concepts issus de nombreux domaines (Informatique, Mathématiques, Electronique). Toutefois, les techniques évoluent et trouvent aujourd'hui régulièrement racine dans d'autres branches (Biologie, Physique, etc.)

### 2.1 Vocabulaire de base

<figure><img src="image_33.png" /><figcaption>FIG. 2.1 – Protocole de chiffrement</figcaption></figure>

**Cryptologie** : Il s'agit d'une science mathématique comportant deux branches : la cryptographie et la cryptanalyse

**Cryptographie** : La cryptographie est l'étude des méthodes donnant la possibilité d'envoyer des données de manière confidentielle sur un support donné.

**Chiffrement** : Le chiffrement consiste à transformer une donnée (texte, message, ...) afin de la rendre incompréhensible par une personne autre que celui qui a créé le message et celui qui en est le destinataire. La fonction permettant de retrouver le texte clair à partir du texte chiffré porte le nom de déchiffrement.

**Texte chiffré** : Appelé également cryptogramme, le texte chiffré est le résultat de l'application d'un chiffrement à un texte clair.

**Clef** : Il s'agit du paramètre impliqué et autorisant des opérations de chiffrement et/ou déchiffrement. Dans le cas d'un algorithme symétrique, la clef est identique lors des deux opérations. Dans le cas d'algorithmes asymétriques, elle diffère pour les deux opérations.
**Cryptanalyse** : Opposée à la cryptographie, elle a pour but de retrouver le texte clair à partir de textes chiffrés en déterminant les failles des algorithmes utilisés.

**Cryptosystème** : Il est défini comme l'ensemble des clés possibles (espace de clés), des textes clairs et chiffrés possibles associés à un algorithme donné.

<figure><img src="image_34.png" /><figcaption>FIG. 2.2 – Schéma d'un cryptosystème</figcaption></figure>

L'algorithme est en réalité un triplet d'algorithmes :

- l'un générant les clés K,

- un autre pour chiffrer M, et

- un troisième pour déchiffrer C.

**Remarque** : On parle de "décryptage" pour désigner l'action permettant de retrouver le texte clair sans connaître la clef de déchiffrement. On emploie également parfois les termes "cryptage" et "crypter" pour qualifier l'action de chiffrer un message. Les mots "encryptage" et "(en)cryptement" sont des anglicismes dérivés du verbe "to encrypt".

## 2.2 Notations

En cryptographie, la propriété de base est que

$$M = D(E(M))$$

où

- M représente le texte clair,

- C est le texte chiffré,

- K est la clé (dans le cas d'un algorithme à clé symétrique), $E_k$ et $D_k$ dans le cas d'algorithmes asymétriques,

- $E(x)$ est la fonction de chiffrement, et

- $D(x)$ est la fonction de déchiffrement.

Ainsi, avec un algorithme à clef symétrique,

$$M = D(C) \text{ si } C = E(M)$$
## 2.3 Principe de Kerckhoff

> La sécurité du chiffre ne doit pas dépendre de ce qui ne peut pas être facilement changé.

En d'autres termes, aucun secret ne doit résider dans l'algorithme mais plutôt dans la clé. Sans celle-ci, il doit être impossible de retrouver le texte clair à partir du texte chiffré. Par contre, si on connaît K, le déchiffrement est immédiat.

On parle aussi de la Maxime de Shannon, dérivée du principe énoncé ci-dessus : *L'adversaire connaît le système*.

**Remarque :** Il faut distinguer les termes "Secret" et "Robustesse" d'un algorithme. Le secret de l'algorithme revient à cacher les concepts de celui-ci, ainsi que les méthodes utilisées (fonctions mathématiques). La robustesse quant à elle désigne la résistance de l'algorithme à diverses attaques qui seront explicitées dans la suite de ces notes.

## 2.4 La publication des algorithmes

Selon l'endroit où réside le secret, on peut parler d'algorithme secret ou d'algorithme publié¹. Chacun possède ses atouts et inconvénients.

### 2.4.1 Algorithme secret

- La cryptanalyse, souvent basée sur le secret de la clé, doit ici en plus retrouver l'entièreté de l'algorithme (mécanisme de récupération).

- Souvent, de tels algorithmes sont utilisés par un plus petit nombre d'utilisateurs. Et comme souvent dans ce cas, moins il y a de monde l'utilisant, moins il y a d'intérêts à le casser.

- De tels algorithmes sont rarement distribués par delà les frontières, afin de garder un nombre d'utilisateurs restreint.

### 2.4.2 Algorithme publié

- Puisque l'algorithme est publié, tout le monde a le droit de l'explorer. Ainsi, les failles (laissées intentionnellement ou non par les concepteurs) peuvent être plus facilement découvertes. La sécurité en est donc améliorée.

- Comme la publication est autorisée, il n'est pas nécessaire de chercher à protéger le code contre le reverse-engineering.

- Cette publication permet d'étendre les travaux sur l'algorithme au niveau mondial. Toute une série d'implémentations logicielles peuvent donc être réalisées.

- Tout le monde utilise la même version publique ce qui permet une standardisation générale.

En conséquence, on préférera les algorithmes publiés, souvent plus sûrs pour les raisons explicitées ci-dessus.

## 2.3 Principe de Kerckhoff

> La sécurité du chiffre ne doit pas dépendre de ce qui ne peut pas être facilement changé.
En d'autres termes, aucun secret ne doit résider dans l'algorithme mais plutôt dans la clé. Sans celle-ci, il doit être impossible de retrouver le texte clair à partir du texte chiffré. Par contre, si on connaît K, le déchiffrement est immédiat.

On parle aussi de la Maxime de Shannon, dérivée du principe énoncé ci-dessus : *L'adversaire connait le système*.

**Remarque :** Il faut distinguer les termes "Secret" et "Robustesse" d'un algorithme. Le secret de l'algorithme revient à cacher les concepts de celui-ci, ainsi que les méthodes utilisées (fonctions mathématiques). La robustesse quant à elle désigne la résistance de l'algorithme à diverses attaques qui seront explicitées dans la suite de ces notes.

## 2.4 La publication des algorithmes

Selon l'endroit où réside le secret, on peut parler d'algorithme secret ou d'algorithme publié¹. Chacun possède ses atouts et inconvénients.

### 2.4.1 Algorithme secret

- La cryptanalyse, souvent basée sur le secret de la clé, doit ici en plus retrouver l'entièreté de l'algorithme (mécanisme de récupération).

- Souvent, de tels algorithmes sont utilisés par un plus petit nombre d'utilisateurs. Et comme souvent dans ce cas, moins il y a de monde l'utilisant, moins il y a d'intérêts à le casser.

- De tels algorithmes sont rarement distribués par delà les frontières, afin de garder un nombre d'utilisateurs restreint.

### 2.4.2 Algorithme publié

- Puisque l'algorithme est publié, tout le monde a le droit de l'explorer. Ainsi, les failles (laissées intentionnellement ou non par les concepteurs) peuvent être plus facilement découvertes. La sécurité en est donc améliorée.

- Comme la publication est autorisée, il n'est pas nécessaire de chercher à protéger le code contre le reverse-engineering.

- Cette publication permet d'étendre les travaux sur l'algorithme au niveau mondial. Toute une série d'implémentations logicielles peuvent donc être réalisées.

- Tout le monde utilise la même version publique ce qui permet une standardisation générale.

En conséquence, on préférera les algorithmes publiés, souvent plus sûrs pour les raisons explicitées ci-dessus.

## 2.5 Les principaux concepts cryptographiques

### 2.5.1 Cryptosystème à clé symétrique

Caractéristiques :

- Les clés sont identiques : $K_E = K_D = K$,

- La clé doit rester secrète,

- Les algorithmes les plus répandus sont le DES, AES, 3DES, ...

- Au niveau de la génération des clés, elle est choisie aléatoirement dans l'espace des clés,

- Ces algorithmes sont basés sur des opérations de transposition et de substitution des bits du texte clair en fonction de la clé,

- La taille des clés est souvent de l'ordre de 128 bits. Le DES en utilise 56, mais l'AES peut aller jusque 256,

- L'avantage principal de ce mode de chiffrement est sa rapidité,

- Le principal désavantage réside dans la distribution des clés : pour une meilleure sécurité, on préférera l'échange manuel. Malheureusement, pour de grands systèmes, le nombre de clés peut devenir conséquent. C'est pourquoi on utilisera souvent des échanges sécurisés pour transmettre les clés. En effet, pour un système à N utilisateurs, il y aura $N(N-1)/2$ paires de clés.
<figure><img src="image_35.png" /><figcaption>FIG. 2.3 – Chiffrement symétrique</figcaption></figure>

2.5.2 Cryptosystème à clé publique

<figure><img src="image_36.png" /><figcaption>FIG. 2.4 – Chiffrement asymétrique</figcaption></figure>

Caractéristiques :

- Une clé publique $P_K$ (symbolisée par la clé verticale),

- Une clé privée secrète $S_K$ (symbolisée par la clé horizontale),

- Propriété : La connaissance de $P_K$ ne permet pas de déduire $S_K$,

- $D_{S_K}(E_{P_K}(M)) = M$,

- L'algorithme de cryptographie asymétrique le plus connu est le RSA,

- Le principe de ce genre d'algorithme est qu'il s'agit d'une fonction unidirectionnelle à trappe. Une telle fonction à la particularité d'être facile à calculer dans un sens, mais difficile voire impossible dans le sens inverse. La seule manière de pouvoir réaliser le calcul inverse est de connaître une

trappe. Une trappe pourrait par exemple être une faille dans le générateur de clés. Cette faille peut être soit intentionnelle de la part du concepteur (définition *stricte* d'une trappe) ou accidentelle.

- Les algorithmes se basent sur des concepts mathématiques tels que l'exponentiation de grands nombres premiers (RSA), le problème des logarithmes discrets (ElGamal), ou encore le problème du sac à dos (Merkle-Hellman).

- La taille des clés s'étend de 512 bits à 2048 bits en standard. Dans le cas du RSA, une clé de 512 bits n'est plus sûre au sens "militaire" du terme, mais est toujours utilisable de particulier à particulier.

- Au niveau des performances, le chiffrement par voie asymétrique est environ 1000 fois plus lent que le chiffrement symétrique.

- Cependant, à l'inverse du chiffrement symétrique où le nombre de clés est le problème majeur, ici, seules n paires sont nécessaires. En effet, chaque utilisateur possède une paire $(S_K, P_K)$ et tous les transferts de message ont lieu avec ces clés.

- La distribution des clés est grandement facilitée car l'échange de clés secrètes n'est plus nécessaire. Chaque utilisateur² conserve sa clé secrète sans jamais la divulguer. Seule la clé publique devra être distribuée.

2.5.3 Fonction de hachage

Il s'agit de la troisième grande famille d'algorithmes utilisés en cryptographie. Le principe est qu'un message clair de longueur quelconque doit être transformé en un message de longueur fixe inférieure à celle de départ. Le message réduit portera le nom de "Haché" ou de "Condensé". L'intérêt est d'utiliser ce condensé comme empreinte digitale du message original afin que ce dernier soit identifié de manière univoque. Deux caractéristiques (théoriques) importantes sont les suivantes :
1. Ce sont des fonctions unidirectionnelles :

A partir de $H(M)$ il est impossible de retrouver $M$.

2. Ce sont des fonctions sans collisions :

A partir de $H(M)$ et $M$ il est impossible de trouver $M' \neq M$ tel que $H(M') = H(M)$.

Il est bien entendu que le terme “impossible” n’est pas toujours à prendre au pied de la lettre ! Il s’agit ici de concepts théoriques. La réalité est quelque peu différente. Ainsi, pour le caractère “sans collision”, dans les faits, cela est “très difficile” dans le meilleur des cas, mais jamais impossible, comme le bon sens le laisse penser.

### 2.5.4 Protocoles cryptographiques

Dès que plusieurs entités sont impliquées dans un échange de messages sécurisés, des règles doivent déterminer l’ensemble des opérations cryptographiques à réaliser, leur séquence, afin de sécuriser la communication C’est ce que l’on appelle les protocoles cryptographiques.

Lorsque l’on parle de “sécuriser un échange”, on souhaite prêter attention aux 3 services suivants : la confidentialité, l’intégrité et l’authentification.

Signalons la distinction entre “services” (confidentialité, intégrité, etc.) et “mécanismes” (les moyens utilisés : chiffrement, signature, hachage, etc.).

#### 2.5.4.1 Confidentialité

Elle est amenée par le chiffrement du message. Dans le cas de systèmes à clés symétriques, la même clé est utilisée pour $E_K(M)$ et $D_K(C)$. Ce type de chiffrement nécessite un échange sûr préalable de la clé K entre les entités A et B.

<figure><img src="image_37.png" /><figcaption>FIG. 2.5 – Confidentialité d'un système symétrique</figcaption></figure>

Comme dit précédemment, à l'aide d'un cryptosystème asymétrique, cet échange préalable n'est pas nécessaire. Chaque entité possède sa propre paire de clés. On aura donc la paire $P_{KA}, S_{KA}$ pour l'entité A et la paire $P_{KB}, S_{KB}$ pour l'entité B.

<figure><img src="image_38.png" /><figcaption>FIG. 2.6 – Confidentialité d'un système asymétrique</figcaption></figure>
Comme dit précédemment, à l'aide d'un cryptosystème asymétrique, cet échange préalable n'est pas nécessaire. Chaque entité possède sa propre paire de clés. On aura donc la paire $P_{KA}, S_{KA}$ pour l'entité A et la paire $P_{KB}, S_{KB}$ pour l'entité B.

<figure><img src="image_39.png" /><figcaption>FIG. 2.6 – Confidentialité d'un système asymétrique</figcaption></figure>

En marge de ces deux systèmes, existe également un système appelé "hybride" (figure 2.7), reposant comme son nom l'indique sur les deux systèmes précédents. Par l'intermédiaire du système à clé publique, on sécurise l'échange de la clé K. Ensuite, les deux parties ayant acquis de manière sécurisée cette clé de chiffrement $K^3$, on utilisera le système à clé symétrique pour chiffrer le message.

<figure><img src="image_40.png" /><figcaption>FIG. 2.7 – Confidentialité d'un système hybride</figcaption></figure>

Il faut ici vérifier si le message n'a pas subi de modification durant la communication. C'est ici qu'interviennent les fonctions de hachage.

<figure><img src="image_41.png" /><figcaption>FIG. 2.8 – Vérification de l'intégrité par fonction de hachage</figcaption></figure>

Dans la figure 2.8, on ne parle pas de l'envoi du message. On prête uniquement l'attention à la vérification de l'intégrité.
### 2.5.4.3 Authentification

Elle a lieu à plusieurs niveaux.

- Au niveau des parties communicantes, dans le cas d'un système symétrique (figure 2.9) ou asymétrique (figure 2.10). A la première figure, $R_a$ est une nonce (p. ex. nombre aléatoire), propre à l'utilisateur A. Les lettres A et B représentent des identificateurs personnels.

<figure><img src="image_42.png" /><figcaption>FIG. 2.9 – Authentification dans un système symétrique</figcaption></figure>

A la seconde figure, la clé de chiffrement utilisée est bien la clé privée. Comme le propriétaire de cette clé est le seul à la connaitre, cela prouve qu'il est bien la personne ayant chiffré le message. Attention, dans cet exemple, seule l'authentification est souhaitée. Le message envoyé pourra être lu par toute personne possédant la clé publique, c'est-à-dire, n'importe qui. La confidentialité est ici nulle.

<figure><img src="image_43.png" /><figcaption>FIG. 2.10 – Authentification dans un système asymétrique</figcaption></figure>

- Au niveau du message

- Par l'utilisation d'un MAC (Message Authentication Code) généré à l'aide d'un cryptosystème à clé symétrique où le MAC est constitué des derniers digits de C (figure 2.11), ou généré à l'aide d'une fonction de hachage (figure 2.12), la clé secrète K utilisée étant partagée par les deux entités A et B. Dans les deux cas, l'authentification repose sur l'utilisation de la clé K.

<figure><img src="image_44.png" /><figcaption>FIG. 2.11 – Authentification par MAC et système symétrique</figcaption></figure>
<figure><img src="image_45.png" /><figcaption>FIG. 2.12 – Authentification par MAC et fonction de hachage</figcaption></figure>

- Par l'utilisation d'une signature digitale. Parmi les propriétés remarquables de ces signatures, on peut dire qu'elles doivent être authentiques, infalsifiables, non-réutilisables, non-répudiables, et inaltérables. Dans la figure 2.13, on fait abstraction de la confidentialité. C'est l'authentification qui importe.

<figure><img src="image_46.png" /><figcaption>FIG. 2.13 – Authentification par signature (technique asymétrique)</figcaption></figure>

### 2.5.4.4 Synthèse

<figure><img src="image_47.png" /><figcaption>FIG. 2.14 – Confidentialité(Rouge), Intégrité(Violet), Authentification(Vert)</figcaption></figure>
## 5.2 LA CRYPTOGRAPHIE CLASSIQUE

### 5.2.1 Domaine de cryptographie classique

Dans le schéma ci-dessous figurent les différentes branches de la cryptographie classique.

<figure><img src="image_48.png" /><figcaption>FIG. 3.1 – Domaines inclus dans la cryptologie.</figcaption></figure>

### 3.1 Substitution monoalphabétique

Chaque lettre est remplacée par une autre lettre ou symbole. Parmi les plus connus, on citera le chiffre de César, le chiffre affine, ou encore les chiffres désordonnés. Tous ces chiffres sont sensibles à l'analyse de fréquence d'apparition des lettres (nombre de fois qu'apparait une même lettre dans un texte). De nos jours, ces chiffres sont utilisés pour le grand public, pour les énigmes de revues ou de journaux.

Historiquement, on recense des procédés de chiffrement remontant au Xème siècle avant JC. On trouve par exemple, l'Atbash des Hébreux (-500), la scytale à Sparte (-400), le carré de Polybe (-125), ... Des langues anciennes sont également parfois classifiées dans les codes secrets : le Rongo-Rongo, le linéaire A, les écritures du disque de Phaistos en sont des exemples. Intraduisibles à l'heure actuelle, on les place (à tort ?) dans ce domaine.
### 3.1.2 Analyse de fréquences

Lorsque la langue de départ et la technique de chiffrement sont connus, on peut exploiter les régularités du langage par le principe d'analyse de la fréquence d'une lettre. Cette technique ne fonctionne bien que si le message chiffré est suffisamment long pour avoir des moyennes significatives.

<figure><img src="image_49.png" /><figcaption>FIG. 3.2 – Exemple d'analyse de fréquence</figcaption></figure>

### 3.1.3 Chiffre affine

On dit qu'une fonction est affine lorsqu'elle est de la forme $x \to a * x + b$, c'est-à-dire un polynôme de degré 1. Une fonction linéaire est une fonction affine particulière.

L'idée est d'utiliser comme fonction de chiffrement une fonction affine du type

$$y = (ax + b) \mod 26,$$

où $a$ et $b$ sont des constantes, et où $x$ et $y$ sont des nombres correspondant aux lettres de l'alphabet ($A=0,B=1,...$). On peut remarquer que si $a = 1$, alors on retrouve le chiffre de César où $b$ est le décalage (le $k$ du chiffre de César).

**Propriété de neutralité** : si $b = 0$, alors "a" est toujours chiffré "A" car il ne subit aucun décalage. En effet, si aucun décalage n'a lieu, l'alphabet de départ se retrouve chiffré par lui même, et donc ne subit aucune modification.
## 3.2 Chiffrement polygraphique

Il s'agit ici de chiffrer un groupe de n lettres par un autre groupe de n symboles. On citera notamment le chiffre de Playfair et le chiffre de Hill. Ce type de chiffrement porte également le nom de *substitutions polygrammiques*.

### 3.2.1 Chiffre de Playfair (1854)

On chiffre 2 lettres par 2 autres. On procède donc par digramme. On dispose les 25 lettres de l'alphabet (W exclu car inutile à l'époque, on utilise V à la place) dans une grille de 5x5, ce qui donne la clef. La variante anglaise consiste à garder le W et à fusionner I et J.

Il y a 4 règles à appliquer selon les deux lettres à chiffrer lors de l'étape de substitution. Pour le déchiffrement, on procède dans l'ordre inverse.

1. Si les lettres sont sur des "coins", les lettres chiffrées sont les 2 autres coins.
Exemple : OK devient VA, RE devient XI ...

2. Si les lettres sont sur la même ligne, il faut prendre les deux lettres qui les suivent immédiatement à leur droite.

3. Si les lettres sont sur la même colonne, il faut prendre les deux lettres qui les suivent immédiatement en dessous.

4. Si elles sont identiques, il faut insérer une *nulle* (habituellement le X) entre les deux pour éliminer ce doublon.
Exemple : "balloon" devient "ba" "lx" "lo" "on".

Pour former ces grilles de chiffrement, on utilise un mot-clef secret pour créer un alphabet désordonné avec lequel on remplit la grille ligne par ligne. Ensuite, on combe la grille avec les lettres restantes de l'alphabet.

<figure><img src="image_50.png" /></figure>

<figure><img src="image_51.png" /></figure>

<figure><img src="image_52.png" /><figcaption>FIG. 3.5 – Exemple du chiffre de Playfair</figcaption></figure>

### 3.2.2 Chiffre de Hill (1929)

Les lettres sont d'abord remplacées par leur rang dans l'alphabet. Les lettres $P_k$ et $P_{k+1}$ deviennent $C_k$ et $C_{k+1}$

$$ \begin{pmatrix} C_k \\ C_{k+1} \end{pmatrix} = \begin{pmatrix} a & b \\ c & d \end{pmatrix} \begin{pmatrix} P_k \\ P_{k+1} \end{pmatrix} \pmod{26} $$

Les composantes de cette matrice doivent être des entiers positifs. De plus la matrice doit être inversible dans $Z_{26}$. Cependant, sa taille n'est pas fixée à 2. Elle grandira selon le nombre de lettres à chiffrer simultanément.

Chaque digramme clair ($P_1$ et $P_2$) sera chiffré ($C_1$ et $C_2$) selon :

$$ C_1 \equiv aP_1 + bP_2 \pmod{26} $$

$$ C_2 \equiv cP_1 + dP_2 \pmod{26} $$
## 3.3 Substitutions polyalphabétiques

### 3.3.1 Chiffre de Vigenère (1568)

C'est une amélioration décisive du chiffre de César. Sa force réside dans l'utilisation non pas d'un, mais de 26 alphabets décalés pour chiffrer un message. On parle du *carré de Vigenère*. Ce chiffre utilise une clef qui définit le décalage pour chaque lettre du message (A : décalage de 0 cran, B : 1 cran, C : 2 crans, ..., Z : 25 crans).

**Exemple** : chiffrer le texte "CHIFFRE DE VIGENERE" avec la clef "BACHELIER" (cette clef est éventuellement répétée plusieurs fois pour être aussi longue que le texte clair)

<figure><img src="image_53.png" /><figcaption>FIG. 3.8 – Application du carré de Vigenère</figcaption></figure>

<figure><img src="image_54.png" /></figure>

La grande force du chiffre de Vigenère est que la même lettre sera chiffrée de différentes manières d'où perte de la fréquence des lettres, ce qui rend inutilisable l'analyse de fréquence classique. La figure 3.9 illustre cette perte des fréquences dans une fable de Lafontaine, codée par substitution simple et par Vigenère.

<figure><img src="image_55.png" /><figcaption>FIG. 3.9 – Perte de la fréquence des lettres</figcaption></figure>

### 3.3.2 Chiffre de Vernam (One Time Pad - 1917)

Le masque jetable est défini comme un chiffre de Vigenère avec la caractéristique que la clef de chiffrement a la même longueur que le message clair.

<figure><img src="image_56.png" /><figcaption>FIG. 3.14 – Exemple de One Time Pad</figcaption></figure>

Pour utiliser ce chiffrement, il faut respecter plusieurs propriétés :

- choisir une clef aussi longue que le texte à chiffrer,

- utiliser une clef formée d'une suite de caractères aléatoires,

- protéger votre clef,

- ne jamais réutiliser une clef.
Soit le masque jetable possible : bgfbcdfbfdecdg

Résultat : BONJOURLATERRE

Soit un autre masque jetable : quauwtedbdisjg

Résultat : MASQUESJETABLE

Il est donc impossible de déterminer le bon masque !

☐

Le système du masque jetable, avec les précautions indiquées ci-dessus, est absolument inviolable si l'on ne connaît pas la clef. Il est couramment utilisé de nos jours par les États. En effet, ceux-ci peuvent communiquer les clefs à leurs ambassades de manière sûre via la valise diplomatique.

Le problème de ce système est de communiquer les clefs de chiffrement ou de trouver un algorithme de génération de clef commun aux deux partenaires.

De plus, la création de grandes quantités des clefs aléatoires devient vite problématique. N'importe quel système couramment utilisé pourrait exiger des millions de caractères aléatoires de façon régulière.

La distribution des clés est également complexe. La longueur de la clé étant égale à celle du message, une bonne organisation est nécessaire.

## 3.4 Transpositions

Elles consistent, par définition, à changer l'ordre des lettres. C'est un système simple, mais peu sûre pour de très brefs messages car il y a peu de variantes. Ainsi, un mot de trois lettres ne pourra être transposé que dans 6 (=3!) positions différentes. Par exemple, "col" ne peut se transformer qu'en "col", "clo", "ocl", "olc", "lco" et "loc".

Lorsque le nombre de lettres croît, il devient de plus en plus difficile de retrouver le texte original sans connaître le procédé de brouillage. Ainsi, une phrase de 35 lettres peut être disposée de 35! = 10⁴⁰ manières différentes. Ce chiffrement nécessite un procédé rigoureux convenu auparavant entre les parties.

Une transposition rectangulaire consiste à écrire le message dans une grille rectangulaire, puis à arranger les colonnes de cette grille selon un mot de passe donné (le rang des lettres dans l'alphabet donne l'agencement des colonnes).

### Exemple :

A la figure 3.15, on a choisi comme clef GRAIN pour chiffrer le message SALUT LES PETITS POTS. En remplissant la grille, on constate qu'il reste deux cases vides, que l'on peut remplir avec des nulles (ou pas, selon les désirs des correspondants).

<figure><img src="image_57.png" /><figcaption>FIG. 3.15 – Application d'une transposition</figcaption></figure>
## 5.2 LE CHIFFREMENT PAR CLE PUBLIQUE

### 7.1 Concept

Dans le cas des systèmes symétriques, on utilise une même clé pour le chiffrement et le déchiffrement. Le problème repose dans la transmission de la clé : il faut une clé par destinataire. Dans le cas des systèmes asymétriques, chaque personne possède 2 clés distinctes (une privée, une publique) avec impossibilité de déduire la clé privée à partir de la clé publique. De ce fait, il est possible de distribuer librement cette dernière.

<figure><img src="image_58.png" /><figcaption>FIG. 7.1 – Chiffrement à clé publique</figcaption></figure>

On peut classer l'utilisation des algorithmes à clé publique en 3 catégories :

- Chiffrement/déchiffrement : cela fournit le secret.

- Signatures numériques : cela fournit l'authentification.

- Échange de clés (ou des clefs de session).

Quelques algorithmes conviennent pour tous les usages, d'autres sont spécifiques à un d'eux.

Le concept date officiellement de 1976 de Diffie et Hellman. Officieusement, les bases existent depuis 1969 par Ellis. La première implémentation a lieu en 1978 par Rivest, Shamir et Adleman sous la forme de l'algorithme RSA bien que, là aussi, les fondements de ce système datent de 1973, par Cocks.

La sécurité de tels systèmes repose sur des problèmes calculatoires :

- RSA : factorisation de grands entiers

- ElGamal : logarithme discret

- Merkle-Hellman : problème du sac à dos (knapsacks)

- ...

La recherche des clés par force brute est toujours théoriquement possible mais les clefs utilisées sont trop grandes (> 512bits). La sécurité se fonde sur une assez grande différence en termes de difficulté entre les problèmes faciles (déchiffrement) et difficiles (décryptement) :

- généralement le problème difficile est connu, mais il est trop complexe à résoudre en pratique,

- La génération des clés exige l'utilisation de très grands nombres.

En conséquence, ce type de chiffrement est lent si on le compare aux chiffrements symétriques.
## 7.2 Merkle-Hellman

### 7.2.1 Définition du problème

Soit un havresac de capacité T et un ensemble S d'objets occupant les espaces $S = \{a_1, a_2, a_3, ..., a_n\}$. Il faut trouver un vecteur de sélection $V = \{v_1, v_2, v_3, ..., v_n\}$ satisfaisant la relation $\sum (a_i * v_i) = T$.

Ce problème n'a pas toujours une solution. Aussi, si T et S sont très grands, il est beaucoup plus difficile de trouver le vecteur associé.

**Exemple :** Soit $S = \{17, 38, 73, 4, 11, 1\}$ et $T = 53 = 38 + 4 + 11$. Donc $V = \{0, 1, 0, 1, 1, 0\}$.

Pour $T = 45$, il n'y a pas de solution.

### 7.2.2 Idée de base

Un bloc de texte clair de longueur égale au nombre d'objets d'un tas sélectionnerait des objets. Les bits du texte clair correspondraient aux valeurs des $v_i$ : un 1 signifierait que l'objet est présent et 0 un objet absent. Et le texte chiffré serait la somme résultante.

**Exemple :**

<table><tr><td>M :</td><td>1</td><td>1</td><td>1</td><td>0</td><td>0</td><td>1</td><td>0</td><td>1</td><td>0</td><td>1</td><td>1</td><td>0</td></tr><tr><td>Tas :</td><td>1</td><td>5</td><td>6</td><td>11</td><td>14</td><td>20</td><td>1</td><td>5</td><td>6</td><td>11</td><td>14</td><td>20</td></tr><tr><td>C :</td><td colspan="5">1+5+6+20 = 32</td><td colspan="5">5+11+14 = 30</td></tr></table>

### 7.2.3 Les empilements

Il y a 2 problèmes d'empilement :

- 1 soluble en temps linéaire

- 1 soluble en temps exponentiel

L'empilement facile peut être transformé pour créer un empilement difficile. Pour la clé publique, on utilisera un empilement difficile qui servira à chiffrer. La clé privée quant à elle, utilisera un empilement facile, qui donne un moyen simple de déchiffrer les messages. Bien sûr, ceux qui ne connaissent pas la clé privée sont obligés de résoudre le problème d'empilement difficile, ce qui est infaisable en pratique.

#### 7.2.3.1 Empilement facile

Si la liste des poids est super-croissante<fnref n="1" />, on utilise un algorithme (appelé *glouton*) de la manière suivante :

1. Prendre le poids total et le comparer avec le plus grand nombre de la suite.

- Si le poids total est inférieur à ce nombre, alors celui-ci n'est pas dans le tas. On recommence l'opération avec le nombre suivant dans le tas (qui, par définition de la suite, sera plus petit)

- Si le poids total est supérieur à ce nombre, alors celui-ci est dans le tas

2. Réduire le poids du tas à créer de ce nombre et passer au plus grand nombre suivant de la suite.

3. Répéter jusqu'à ce que ce soit terminé.

4. Si le poids total a pu être ramené à 0 : il y a une solution.

<footnote n="1">¹Une liste est super-croissante lorsque tout terme est plus grand que la somme des termes qui le précède.</footnote>
### 7.2.3.2 Empilement difficile

Dans le cas présent, on ne connaît pas d'algorithmes rapide. Il faut tester méthodiquement toutes les solutions possibles, ce qui, si la suite des poids est suffisamment longue, est impraticable. Ces algorithmes sont exponentiels.

Le cryptosystème de Merkle-Hellman exploite cette propriété. La clé privée est une suite de poids super-croissante. A partir de celle-ci, on calcule la clé publique. Ce calcul consiste à prendre la suite super-croissante, et à la multiplier par $(n \text{ modulo } m)$, avec $m$ supérieur à la somme de tous les termes de la suite, et $n$ ne devant avoir aucun facteur commun avec $m$.

## 7.2.4 Algorithme

Le chiffrement consiste à additionner les termes où un 1 apparaît. Pour le déchiffrement, on calcule $n^{-1}$ tel que

$$n * n^{-1} \equiv 1 \pmod{m}$$

Ensuite, on multiplie chaque valeur du texte chiffré par $n^{-1}$ mod $m$.

En pratique, les sacs contiennent environ 250 éléments. Et chaque terme a une longueur de 200 à 400 bits. Le module a une longueur de 100 à 200 bits.

**Exemple de calcul de la clé publique** Soit $S$, une séquence super-croissante de $h$ entiers : par exemple $S = \{1, 2, 4, 9\}$.

Choisissons un multiplicateur $n$ et un module $m$ : soit $n = 15$ et $m = 17$

$$- 1 * 15 \pmod{17} \Rightarrow 15$$

$$- 2 * 15 \pmod{17} \Rightarrow 13$$

$$- 4 * 15 \pmod{17} \Rightarrow 9$$

$$- 9 * 15 \pmod{17} \Rightarrow 16$$

Le havresac difficile est donc $H = \{15, 13, 9, 16\}$, et représente la clé publique.

Le message est ainsi traité comme une séquence de bits :

$$P = [p_1, p_2, p_3, \dots, p_k]$$

On le divise en blocs de $h$ bits :

$$P_0 = [p_1, p_2, p_3, \dots, p_h], P_1 = [p_{h+1}, p_{h+2}, p_{h+3}, \dots, p_{2h}], \dots$$

On utilise chaque bloc comme vecteur $V$ du problème de havresac.

**Exemple de chiffrement** Soit $P = 0100101110100101 \Rightarrow 0100 1011 1010 0101$

$$- [0, 1, 0, 0] * [15, 13, 9, 16] \Rightarrow 13$$

$$- [1, 0, 1, 1] * [15, 13, 9, 16] \Rightarrow 40$$

$$- [1, 0, 1, 0] * [15, 13, 9, 16] \Rightarrow 24$$

$$- [0, 1, 0, 1] * [15, 13, 9, 16] \Rightarrow 29$$

Le message chiffré est donc $\{13, 40, 24, 29\}$ en utilisant le havresac public (la clé publique) $H = [15, 13, 9, 16]$.

<figure><img src="image_59.png" /></figure>

Pour le déchiffrement, le destinataire légitime connaît le havresac simple $S$ et les valeurs de $n$ et de $m$. Il peut donc déterminer $n^{-1}$.

**Exemple de déchiffrement** Avec $n = 15$ et $m = 17$, $n^{-1}$ vaut $8$ car $15 * 8 = 120 = 7 * 17 + 1$. On a alors, par l'algorithme glouton :
$$ - 13 \ast 8 \text{ mod } 17 = 104 \text{ mod } 17 = 2 = [1, 2, 4, 9] \ast [0100] $$

$$ - 40 \ast 8 \text{ mod } 17 = 320 \text{ mod } 17 = 14 = [1, 2, 4, 9] \ast [1011] $$

$$ - 24 \ast 8 \text{ mod } 17 = 192 \text{ mod } 17 = 5 = [1, 2, 4, 9] \ast [1010] $$

$$ - 29 \ast 8 \text{ mod } 17 = 232 \text{ mod } 17 = 11 = [1, 2, 4, 9] \ast [0101] $$

et le texte en clair est 0100 1011 1010 0101 $\Rightarrow$ 0100101110100101. On a donc bien retrouvé le texte original. □

### 7.2.5 Sécurité

Plusieurs failles ont été découvertes, qui ont rendu l'algorithmme obsolète.

Herlestam a démontré en 1978 qu'un bit de texte clair pouvait souvent être retrouvé.

Malgré les modifications apportées à l'algorithmme à la suite de ces découvertes, des travaux de Shamir (1982-84) et Brickell (1985) ont poussé à l'abandon de cet algorithme.

## 7.3 RSA : Rivest - Shamir - Adleman

Il est basé sur le calcul exponentiel. Sa sécurité repose sur la fonction unidirectionnelle suivante : le calcul du produit de 2 nombres premiers est aisé. La factorisation d'un nombre en ses deux facteurs premiers est beaucoup plus complexe.

Il s'agit du système le plus connu et le plus largement répandu, basé sur l'élévation à une puissance dans un champ fini sur des nombres entiers modulo un nombre premier. Le nombre d'exponentiation prend environ $O((\log n)^3)$ opérations ce qui est rapide et facile. Il emploie de grands nombres entiers (par exemple représentés sur 1024 bits).

Ce cryptosystème utilise deux clés *d* et *e*, interchangeables². Le chiffrement se fait selon

$$ C = M^e \text{ mod } n $$

et le déchiffrement par

$$ M = C^d \text{ mod } n. $$

La sécurité repose sur le coût nécessaire pour factoriser de grands nombres. Le nombre de factorisation prend environ $O(e^{\log n \log(\log n)})$ opérations ce qui demande un temps de calcul trop important pour les machines actuelles, dans un cadre privé. On l'utilise pour la confidentialité, l'authentification, ou encore une combinaison des 2.

### 7.3.1 Principes

On possède une paire de clés, l'une publique (e,n) et une privée (d,n). La première étape revient à choisir n. Il doit s'agir d'une valeur assez élevée, produit de 2 nombres premiers très grands p et q. En pratique, si p et q ont 100 chiffres décimaux, n possèdera 200 chiffres. Selon le niveau de sécurité souhaité, la taille de n peut varier : 512 bits, 768, 1024 ou $2^{2048}$³.

Dans un second temps, on choisira un très grand entier *e*, relativement premier à $(p-1)*(q-1)$. La clé publique sera formée par (e,n). On choisira ensuite un *d* tel que

$$ e \ast d \equiv 1 \text{ mod } (\Phi(n)). $$

La clé privée sera donnée par (d,n).

Dernière phase : on jette p et q. Le cryptanalyste devant retrouver ces valeurs, il faut les détruire pour éviter les fuites.

#### 7.3.1.1 Justification de l'inversibilité

Par les théorèmes d'Euler et de Fermat, on sait que

$$ a^{\Phi(n)} \equiv 1 \text{ mod } n $$
et

$$a^{\Phi(n)} \mod n = 1$$

$$\text{où } (a,n)=1.$$

Dans le RSA, on a $n = p * q$. De plus, $\Phi(n)$ donne le nombre d'entiers positifs plus petits que $n$ et relativement premiers à $n$ (si $p$ est premier, $\Phi(p) = p - 1$). Si $n = p * q$, avec $p$ et $q$ premiers, il vient

$$\Phi(n) = \Phi(p) * \Phi(q) = (p - 1) * (q - 1)$$

De par la façon de choisir $e$ et $d$,

$$e * d \equiv 1 \mod \Phi(n) = k * \Phi(n) + 1$$

pour un certain $k$.

De plus, par définition et propriétés des opérations modulo $n$, on a :

$$D_k(E_k(M)) = ((M)^e \mod n)^d \mod n = (M^e)^d \mod n = M^{e \cdot d} \mod n$$

Et donc :

$$M^{e \cdot d} = M^{k \cdot \Phi(n)+1} = M^{k \cdot \Phi(n)}. M \mod n = 1. M \mod n = M \mod n$$

### 7.3.2 Résumé

1. Génération de 2 nombres premiers $p$ et $q$

2. Calcul de $n = p \cdot q$

3. Déterminer $e$ tel que $3 < e < \Phi(n)$ et $(e, \Phi(n)) = 1$

4. Calculer $d$ tel que $e * d \equiv 1 \mod \Phi(n)$

5. Clé publique : $(e,n)$

6. Clé privée : $(d,n)$

7. $p$ et $q$ doivent rester secrets, voire supprimés

8. $C = M^e \mod n$ et $M = C^d \mod n$

#### Exemple :

Soient $p = 31$, $q = 53$ c'est-à-dire $n=1643$. $\Phi(n) = 1560$ (nombre d'éléments relativement premiers à $n$ et $< n$).

Soit $e = 11$ (par exemple, et on a bien $(e,\Phi(n))=1$).

On détermine que $d = 851$ (inverse modulaire de $e$ sur $Z_{\Phi(n)}$).

La clé publique est donc (11,1643) et la clé privée est (851,1643).

Soit le codage par la position dans l'alphabet du mot «ANEMONE». Il vient

01 14 05 13 15 14 05

On procède selon deux conditions :

1. Découpage en morceaux de même longueur, ce qui empêche la simple substitution :

011 405 131 514 05_

On ajoute un padding initial si nécessaire.

001 140 513 151 405

Cela provoque la perte des patterns (« NE »).

<footnote n="3">³Le FBI utilise le RSA 4096.</footnote>
2. Découpage en morceaux de valeur inférieure à n, car opération modulo n.

Lors du chiffrement, on a

<table><tr><td>001<sup>11</sup> mod 1643</td><td>0001</td></tr><tr><td>140<sup>11</sup> mod 1643</td><td>0109</td></tr><tr><td>513<sup>11</sup> mod 1643</td><td>0890</td></tr><tr><td>151<sup>11</sup> mod 1643</td><td>1453</td></tr><tr><td>405<sup>11</sup> mod 1643</td><td>0374</td></tr></table>

et pour le déchiffrement,

<table><tr><td>0001<sup>851</sup> mod 1643</td><td>001</td></tr><tr><td>0109<sup>851</sup> mod 1643</td><td>140</td></tr><tr><td>0890<sup>851</sup> mod 1643</td><td>513</td></tr><tr><td>1453<sup>851</sup> mod 1643</td><td>151</td></tr><tr><td>0374<sup>851</sup> mod 1643</td><td>405</td></tr></table>

Lors du déchiffrement, sachant qu'il faut obtenir des blocs de 2 éléments (grâce au codage particulier de l'exemple), on a bien

<table><tr><td>01</td><td>14</td><td>05</td><td>13</td><td>15</td><td>14</td><td>05</td></tr><tr><td>A</td><td>N</td><td>E</td><td>M</td><td>O</td><td>N</td><td>E</td></tr></table>

### 7.3.2.1 Remarques

Il n'est pas très astucieux de choisir d'aussi petites valeurs car on peut retrouver $d$ très facilement.

En pratique, il faut prendre de très grandes valeurs de $p$ et $q$. Pour retrouver ces grandes valeurs, il faudra alors utiliser le Jacobien et le test de Solovay-Strassen par exemple.

## 7.3.3 Sécurité

### 7.3.3.1 Attaques

Il existe trois approches pour attaquer le RSA :

- recherche par force brute de la clé (impossible étant donné la taille des données),

- attaques mathématiques (basées sur la difficulté de calculer $\Phi(n)$, la factorisation du module $n)$ :

- factoriser $n=p*q$ et par conséquent trouver $\Phi(n)$ et puis $d$,

- déterminer $\Phi(n)$ directement et trouver $d$,

- trouver $d$ directement.

- attaques de synchronisation (sur le fonctionnement du déchiffrement).

A l'heure actuelle, la factorisation connait de lentes améliorations au cours des années. La meilleure amélioration possible reste l'optimisation des algorithmes. Excepté un changement dramatique, le RSA-1024 restera sûr pour les prochaines années. D'après les projections, une clé de 2048 bits est sensée tenir jusque 2079 si on tient compte de la loi de Moore. Mais ces valeurs sont correctes uniquement si on respecte les propriétés de $e$, $d$, $p$ et $q$.

#### Attaque de synchronisation (timing attack)

Développé dans le milieu des années 90, il s'agit d'exploiter les variations de temps pris pour effectuer certaines opérations (par exemple la multiplication par un petit ou un grand nombre).

Plusieurs contre-mesures existent telles que l'emploi de temps constants d'élévation à une puissance, l'ajout de délais aléatoires, ou le fait de rendre non visibles les valeurs utilisées dans les calculs. Dans ce dernier cas, cela reviendrait à calculer :

$$ (r^e * m^e)d \mod n $$
### 7.3.3.2 La menace quantique

Les valeurs précitées sont valables si on pratique la factorisation. A coté de cela, la physique pourrait faire pencher la balance, par l' utilisation d'un ordinateur quantique⁴. Celui-ci existe d'un point de vue théorique depuis 1994 (algorithme de Shor), et son prototype depuis 1996. Si son évolution se poursuit, il permettrait de réaliser la factorisation d'un nombre en un temps polynomial. Le principe est que les 0 et 1 représentés par les portes logiques des transistors sont remplacés par l'orientation du champ magnétique émit par les atomes (que l'on nomme des q-bits).

### 7.3.4 Conseils d'utilisation du RSA

Pour garantir une bonne sécurité, il faut respecter certains règles telles que :

- Ne jamais utiliser de valeur n trop petite,

- N'utiliser que des clés fortes (p-1 et q-1 ont un grand facteur premier),

- Ne pas chiffrer de blocs trop courts,

- Ne pas utiliser de n communs à plusieurs clés,

- Si (d,n) est compromise ne plus utiliser n.

<table><caption>FIG. 7.2 – Taille des clés pour une utilisation sûre.</caption><thead><tr><th>Level</th><th>Protection</th><th>Symmetric</th><th>Asymmetric</th></tr></thead><tbody><tr><td>1</td><td>Attacks in "real-time" by individuals<br>Only acceptable for authentication tag size</td><td>32</td><td>-</td></tr><tr><td>2</td><td>Very short-term protection against small organizations<br>Should not be used for confidentiality in new systems</td><td>64</td><td>816</td></tr><tr><td>3</td><td>Short-term protection against medium organizations,<br>medium-term protection against small organizations</td><td>72</td><td>1008</td></tr><tr><td>4</td><td>Very short-term protection against agencies, long-term<br>protection against small organizations<br>Smallest general-purpose level,<br>protection from 2008 to 2010<br>Legacy standard level</td><td>80</td><td>1248</td></tr><tr><td>5</td><td>Use of 2-key 3DES restricted to 10<sup>8</sup> plaintext/ciphertexts,<br>protection from 2008 to 2016</td><td>96</td><td>1776</td></tr><tr><td>6</td><td>Medium-term protection<br>protection from 2008 to 2026<br>Long-term protection</td><td>112</td><td>2432</td></tr><tr><td>7</td><td>Generic application-independent recommendation,<br>protection from 2008 to 2036</td><td>128</td><td>3248</td></tr><tr><td>8</td><td>"Foreseeable future"<br>Good protection against quantum computers</td><td>256</td><td>15424</td></tr></tbody></table>

Un concours, connu sous le nom de "RSA Factoring Challenge", proposait une certaine somme d'argent à tout groupe ayant réussi la factorisation d'une clé de taille donnée (la récompense étant proportionnelle à la taille de la clé mise en défaut). La plus grande clé "cassée" atteignit 663 bits (2005). Le concours fut stoppé fin 2007.
## 5.4 GESTION DE CLES

La gestion des clés est principalement constituée de quatre domaines :

1. La génération des clés : il faut prendre garde aux caractères choisis, aux clés faibles, ... et veiller à utiliser des générateurs fiables,

2. Le transfert de la clé : l'idéal est de se rencontrer, ou d'utiliser un canal de transmission protégé. Mais cela est souvent impossible. Aussi, si A et B ont des communications sûres avec un tiers C, ce dernier peut relayer la clé entre A et B. Un tiers est un intermédiaire de confiance, à qui tous les usagers font confiance, pour négocier l'établissement de transmissions sûres entre elles,

3. La vérification des clés : par hachage, ou utilisation de certificats,

4. Le stockage des clés : que ce soit dans des fichiers, sur supports extérieurs, par surchiffrement, ...

### 10.1 Distribution des clés

#### 10.1.1 Clés symétriques

Dans ce cas, il est nécessaire pour les deux usagers de partager une clé secrète commune. Bien souvent, l'échec d'un système sûr est dû à une rupture dans le schéma de distribution des clés. Comment distribuer sûrement cette clé ?

- Physiquement : par une rencontre, un canal de transmission protégé, ...

- Utiliser un tiers de confiance. Celui-ci choisit et fournit la clé,

- Utiliser une ancienne clé pour chiffrer une nouvelle clé (ce qui suppose cependant un échange préalable de cette ancienne clé),

- Distribution automatique de clés à la demande des utilisateurs. Cette solution existe, mais elle nécessite une totale confiance au système.

La figure 10.1 illustre le protocole Needham-Schroeder, dont nous reparlerons dans le chapitre consacré à l'authentification des parties. Ce scénario suppose que les deux entités (A et B) possèdent chacune une clé secrète avec le KDC (l'autorité de confiance du système).

<figure><img src="image_60.png" /><figcaption>FIG. 10.1 – Exemple d'une distribution de clés dans le cas symétrique (Needham-Schroeder).</figcaption></figure>

#### 10.1.2 Clés asymétriques

Le chiffrement par clé publique permet de résoudre les problèmes de distribution de clés secrètes. Malgré tout, la distribution des clés publiques continue de poser problème, principalement au niveau de l'authentification des utilisateurs liés à ces clés. Il existe quatre solutions permettant un transfert des clés dans le cas asymétrique :

- Annonce publique

- Annuaire publiquement disponible

- Autorité de clés publique

- Certificats de clé publique
### 10.1.2.1 Annonce Publique

La distribution des clés publiques se fait directement aux destinataires ou par broadcast à la commu- nauté. Il est par exemple possible d'apposer les clefs PGP aux emails ou les poster dans des newsgroups ou mailing-lists. Mais le risque majeur avec cette méthode est la contrefaçon : n'importe qui peut créer une clef en prétendant être quelqu'un d'autre et la publier. La mascarade continuera tant que la contrefaçon n'est pas découverte.

### 10.1.2.2 Annuaire Publique

On enregistre ici des clés dans un annuaire public, ce qui implique de faire confiance à cet annuaire. Ce dernier doit avoir plusieurs propriétés :

- Il doit contenir les entrées {nom, clef publique},

- Il doit être possible de s'inscrire de manière sécurisée dans l'annuaire,

- On doit pouvoir remplacer la clef à tout moment,

- L'annuaire doit être publié périodiquement,

- Il devrait également permettre la consultation électronique.

Même si ce schéma est clairement plus sûr que les annonces publiques individuelles, il reste vulnérable. Il est en effet nécessaire que l'annuaire soit sécurisé. Dans le cas contraire, un individu pourrait détourner l'annuaire et fournir des clefs publiques contrefaites, voire à ne pas transmettre les clés correspondant aux demandes des entités communicantes.

### 10.1.2.3 Autorité de clés publique

Il s'agit de renforcer le contrôle de la distribution des clefs à partir de l'annuaire. Il dispose des mêmes propriétés que ce dernier. Cependant, la sécurité est renforcée. En effet, dans le cas présent, chaque entité dispose de la clé publique de l'autorité. Ainsi, lorsqu'une entité désirera obtenir la clé publique d'un correspondant, il enverra une requête à l'autorité. Celle-ci contiendra la requête proprement dite et un marqueur temporel (timestamp). En retour, l'autorité renverra la clé demandée, le timestamp pour prouver le non-rejeu d'un ancien message, le tout chiffré avec sa clé privée. De cette manière, l'entité A, possédant la clé publique de l'autorité, pourra vérifier la bonne provenance de la clé publique de B. L'entité B pourra pratiquer de la même manière.

<figure><img src="image_61.png" /><figcaption>FIG. 10.2 – Utilisation d'une autorité de clés publiques</figcaption></figure>

### 10.1.2.4 Certificats de clés publiques

Cette approche alternative (1978) consiste à employer des certificats pouvant être utilisés par des participants pour échanger des clefs sans entrer en contact avec une autorité de clés publiques, d'une façon fiable comme si les clefs avaient été obtenues directement à partir d'une telle autorité.

Chaque certificat contient une clef publique et des informations supplémentaires (la période de validité, les droits d'utilisation, etc.). Il est créé par une autorité de certification (Certificate Authority, CA) et est donné au participant disposant de la clef privée assortie. Un participant fournit l'information sur sa clé à un autre en transmettant son certificat. Son contenu est signé par la clé privée du CA. Cette situation est illustrée à la figure 10.3
<figure><img src="image_62.png" /><figcaption>FIG. 10.3 – Certificats de clés publiques</figcaption></figure>

Plusieurs propriétés permettent de garantir une meilleure sécurité :

- N'importe quel participant peut lire un certificat pour déterminer le nom et la clé publique du propriétaire du certificat.

- N'importe quel participant peut vérifier que le certificat provient réellement du CA et n'est pas contrefait.

- Seul le CA peut créer et mettre à jour des certificats.

- Tous les participants peuvent vérifier la validité des certificats (Denning - 1983)

Pour mieux comprendre ce concept, illustrons le par un exemple : si vous commandez des cds sur Internet, comment être sûr que vous envoyez bien votre numéro de carte bleue au commerçant, et non à un pirate qui aurait usurpé son identité et donné sa propre clé publique ?

Pour passer un examen, il vous faut prouver votre identité grâce à une carte d'identité, un passeport ou un permis de conduire. Un organisme supérieur (l'Etat) a signé ces certificats, s'assurant auparavant (par un acte de naissance,...) qu'il s'agit bien de vous.

Les certificats numériques fonctionnent sur le même principe. Alice veut certifier que sa clé publique lui appartient. Elle envoie sa clé à un organisme de certification, ainsi que différentes informations la concernant (nom, email, etc...). Cet organisme vérifie les informations fournies par Alice, et ajoute au certificat son propre nom, une date limite de validité, et surtout une signature numérique. Cette signature est réalisée grâce à sa clé privée et à un algorithme de hachage laissé au choix, bien que le RSA et le SHA soit maintenant préféré. En résumé, l'autorité de certification fournit un certificat tel que

$$C_A = E_{KR_{auth}}[T, ID_A, KU_a]$$

où $E_{KR_{auth}}$ représente la signature apposée au certificat, T est un timestamp, ID_A est l'ensemble des informations propres à l'entité A et $KU_a$ est la clé publique de A.

Lorsque Bob veut envoyer un message à Alice ou simplement vérifier la validité du certificat que A lui a envoyé, il applique la clé publique de l'autorité de certification. Cette action permet de vérifier que le certificat est bien authentique :

$$D_{KU_{auth}}[C_A] = D_{KU_{auth}}[E_{KR_{auth}}[T, ID_A, KU_a]] = (T, ID_A, KU_A)$$
### 10.1.3 Les certificats - Service d'authentification X.509

Il s'agit d'une partie de la norme de service d'annuaire X.500, qui regroupe des serveurs distribués maintenant une base de données d'informations. Le service définit le cadre pour des services d'authentification, internationalement admis pour construire un certificat de clé publique. L'annuaire peut stocker des certificats de clé publique et les clés publiques des utilisateurs correspondants. Ces certificats sont également signés par une autorité de certification. Il utilise la cryptographie à clé publique et les signatures digitales. Aucun algorithme de chiffrement n'est imposé, mais le RSA est recommandé.

#### 10.1.3.1 Obtention d'un certificat

N'importe quel utilisateur ayant accès au CA peut obtenir un certificat de celui-ci, mais seul le CA peut modifier un certificat. Comme il est difficile de forger un certificat, on peut sans trop de risque le placer dans un annuaire public.

La figure 10.4 illustre le format d'un certificat. L'exemple donné concerne un certificat signé par RSA et MD5.

#### 10.1.3.2 Hiérarchie de certificats

On émet ici une hypothèse : si les deux utilisateurs partagent un CA commun alors on suppose qu'ils connaissent sa clef publique.

<figure><img src="image_63.png" /><figcaption>FIG. 10.4 - Format standard et exemple de certificat X.509</figcaption></figure>

Sur la figure 10.5, chaque CA possède des certificats pour les clients (vers l'avant) et le parent (vers l'arrière). Chaque client fait confiance aux certificats parents. On parle alors de hiérarchie de CA. Le principe est d'employer les certificats liant les membres de la hiérarchie pour valider d'autres CA. L'objectif est de permettre la vérification de n'importe quel certificat d'un CA par des utilisateurs de tout autre CA dans la hiérarchie.