2.3 Un protocole fortement évolutif
Le TLS à une très forte capacité
évolutive. Comme vu précédemment, le TLS va utiliser des
moyens cryptographiques pour remplir ses objectifs. Or, même si ces
derniers sont essentiels au TLS, celui-ci n'est pas dépendant
d'algorithme de chiffrement précis. Aussi, tant qu'un algorithme reste
compatible avec les besoins du TLS, celui-ci pourra être utilisé
par ce dernier. Par conséquent, il est relativement simple pour TLS
d'ajouter ou supprimer le support d'un algorithme pour augmenter la
sécurité.
Par ailleurs, la structure du TLS se base sur un
système d'extension permettant de rajouter des fonctionnalités
sans pour autant devoir à modifier la structure du protocole. L'avantage
de cette architecture permet d'assurer une interopérabilité
minimale entre un client et un serveur même s'ils ne supportent pas les
mêmes extensions. Ce service minimum regroupe bien entendu les trois
objectifs vus précédemment. A titre d'information, nous pouvons
citer le SNI ou l'ALPN4 comme extensions utiles. Mais leur
non-support ne présente aucune incidence majeure sur le protocole TLS
lui-même.
2.4 Rappel cryptographique
Avant d'aller plus loin, il est important de procéder
à quelques rappels de base sur la cryptographie. Le protocole TLS va
utiliser plusieurs notions cryptographiques différentes qui se
compléteront entre elles afin de fournir un niveau de
sécurité acceptable. Le but de cette section n'étant pas
de voir en détail les algorithmes existants et utilisés, mais de
comprendre les différentes notions cryptographiques qui sont
utilisées par le TLS.
2.4.1 Chiffrement symétrique
Le chiffrement symétrique est un moyen de chiffrement
qui utilisera la même clef pour chiffrer et déchiffrer les
données. Cela repose sur un secret partagé entre toutes les
identités ayant besoin d'échanger des données de
façon sécurisée.
4. Application Layer Protocol Negotiation : Extension TLS
permettant d'annoncer le protocole transporté par TLS.
Edouard Petitjean M2 MIAGE SIID 10
TLS : un protocole compliqué? - Rappel cryptographique
Soit,
m : le message
e : le message chiffré k : la clef symétrique
c : la fonction de chiffrement
d : la fonction de déchiffrement alors,
e = ck(m)
m = dk(e)
et,
m = dk(ck(m))
Ce type de chiffrement ne permet pas d'assurer que la
confidentialité des données. À aucun moment il n'est
possible de s'assurer de l'identité de l'expéditeur d'un message,
ni même de fournir une garantie de l'intégrité du message.
Pourtant, le chiffrement symétrique a deux atouts majeurs dans son
utilisation. La première est le faible coût en ressource qu'il
nécessite comparé à un algorithme asymétrique.
D'autre part, les algorithmes symétriques sont plus complexes et donc
plus sécurisés.
Pour finir, la principale faiblesse dont souffre le
chiffrement symétrique est de savoir comment échanger les
différentes clefs entre les différentes identités, sans
que celles-ci ne puissent être interceptées par un tiers
n'étant pas dans la confidentialité.
2.4.2 Chiffrement asymétrique
Les algorithmes de chiffrement symétrique ont la
particularité d'avoir plusieurs rôles. En plus de pouvoir assurer
la confidentialité en chiffrant les données, ils ont la
capacité de générer leurs propres clefs ainsi que de
pouvoir « signer » les données, répondant aux besoins
de non répudiation et d'intégrité du TLS.
La plus grosse différence avec le chiffrement
symétrique est l'utilisation d'une paire de clefs par identité.
Chaque identité aura deux clefs, une dite publique et la
seconde dite privée.
La clef publique sera annoncée à
quiconque voulant s'adresser à son propriétaire. Elle servira
à la fois à chiffrer les données qui devront être
envoyées à son possesseur, ainsi qu'à la
vérification de la signature envoyée.
La clef privée sera toujours gardée
secrète par son propriétaire. C'est celle-ci qui permettra de
déchiffrer les données reçues. Donc le principe de
confidentialité est lié au fait que l'identité à
destination du message soit la seule à pouvoir en comprendre le sens. La
clef privée sera également utilisée pour signer
un message envoyé, de ce fait, le destinataire du message pour
vérifier l'identité de l'expéditeur en vérifiant la
signature via la clef publique de l'expéditeur.
Edouard Petitjean M2 MIAGE SIID 11
TLS : un protocole compliqué? - Rappel cryptographique
Soit,
kpub : la clef publique kpri : la clef
privée
m : le message
e : le message chiffré
s : la signature du message envoyé
c : la fonction de chiffrement
d : la fonction de déchiffrement
alors pour chiffrer,
e = ckpub(m) m = dkpri(e)
et pour signer,
s = ckpri(m) m = dkpub(m)
Ce type d'algorithme propose clairement un principe de
confidentialité plus important que le chiffrement symétrique,
dans le sens où un message sera chiffré autant de fois qu'il y
aura de destinataires. Également, en se basant sur un couple de clefs
dont une est publique, le problème de communication des clefs de
chiffrement ne se pose plus. Alors pourquoi TLS utilise-t-il le chiffrement
symétrique?
Pour commencer, comme évoqués
précédemment, les algorithmes asymétriques reposent sur
des notions mathématiques simples. En effet, tous vont se reposer
à la base sur un couple de nombres premiers, où leur
multiplication sera annoncée de façon publique. Aussi, savoir
factoriser un nombre en nombres premiers permet de « casser » la
sécurité de ces algorithmes. Pour pallier cela, ces derniers
utilisent maintenant des nombres très grands. De nos jours, il est
courant que ces nombres utilisent une longueur de 2048 bits, soit des nombres
avec plus de 600 décimales! Si les algorithmes asymétriques sont
encore utilisés de nos jours, cela est uniquement dû à
l'incapacité technique et mathématique à factoriser des
nombres si grands en des temps raisonnables 5.
En reprenant le point précédent, les clefs des
algorithmes asymétriques sont donc très grandes. Or, il n'est pas
aisé, même en informatique, de faire des calculs avec des nombres
si grands. Cela demande des algorithmes mathématiques spécifiques
pour la gestion de la mémoire, mais aussi, des ressources très
importantes, contrairement au chiffrement symétrique.
Néanmoins, les algorithmes de chiffrement ont deux
rôles majeurs, le premier, assurer l'identité et
l'intégrité des messages. Mais également de palier au
principal défaut du chiffrement symétrique : l'échange des
clefs. En effet, les algorithmes asymétriques seront utilisés
pour chiffrer, non pas de la donnée directement, mais les clefs
symétriques afin de pouvoir les échanger en toute
quiétude.
A ce stade, il est important de faire attention à une
autre limite des algorithmes asymétriques. Ils permettent de signer un
message pour s'assurer l'identité de l'expéditeur, mais cette
fonctionnalité a l'inconvénient de rendre le message lisible par
tous et ne permettant plus d'assurer la confidentialité. Les fonctions
utilisées pour signer le message et vérifier la signature sont
les mêmes que pour chiffrer et déchiffrer le message. Par
conséquent, en envoyant la signature, qui n'est rien d'autre que le
message chiffré avec la clef privée de
l'expéditeur, n'importe qui pourrait prendre connaissance du message en
déchiffrant la signature avec la clef publique de cet
expéditeur.
2.4.3 Empreinte numérique
Une empreinte numérique est une représentation
chiffrée d'un message. Elle s'effectue au travers d'un algorithme de
chiffrement irréversible aussi dit « hash ». Cela
veut dire deux choses :
1. En utilisant un même algorithme, une donnée aura
toujours la même empreinte numérique,
5. Nous parlons de temps raisonnable lorsque la durée
de factorisation est inférieure à la durée de vie de
l'information à déchiffrer
Edouard Petitjean M2 MIAGE SIID 12
TLS : un protocole compliqué? - Authentification: un
principe de confiance
2. Il n'existe aucun algorithme permettant de retrouver une
donnée à partir de son empreinte numérique6.
Soit,
m : le message
h : l'empreinte numérique du message
alors,
h = Hash(m)
|
Cette particularité d'irréversibilité
sera utilisée par TLS pour combler le défaut de la signature des
messages. Aussi, ça ne sera plus le message lui-même qui sera
chiffré pour servir de signature, mais l'empreinte numérique de
celui-ci. Aussi, peu importe si les personnes peuvent déchiffrer la
signature, le résultat sera l'empreinte du message. Et par
conséquent, impossible de retrouver le message. Pour ce qui en est du
destinataire, celui-ci fera une comparaison de l'empreinte numérique
reçue, avec l'empreinte numérique du message qu'il aura
déchiffré avec sa propre clef privée.
Soit,
Alicepub : la clef publique d'Alice
Alicepri : la clef privée d'Alice Bobpub
: la clef publique de Bob Bobpri : la clef
privée de Bob m : le message
e : le message chiffré
s : la signature du message envoyé
c : la fonction de chiffrement
d : la fonction de déchiffrement
Alice envoie un message à Bob,
e =
cBobpub(m)
s =
cAlicepri(Hash(m))
Bob reçoit le message,
m =
dBobpri(e) h =
Hash(m)
h' =
dAlicepub(s)
Si h et h' sont
identiques, Bob prend en compte le message et sait qu'il vient d'Alice.
Pour finir avec ce rappel, en combinant ces 3 types
d'algorithmes de chiffrement, TLS peut répondre à deux de ses
objectifs principaux : « Confidentialité » et « non
répudiation et intégrité ».
|