Le Protocole SSL

LE PROTOCOLE SSL

 Les défis de la sécurité.

 

Introduction: le pourquoi de SSL
1. Spécification du protocole SSL
    1.1. Format de l’en-tête de la structure SSL
    1.2. Format des données de la structure SSL
2.  Spécification du protocole Handshake SSL
    2.1. Principe
        · Phase 1
        · Phase 2
    2.2 Le protocole d’alarme
    2.3 Erreurs
        · no-cipher-error
        · no-certificate error
        · bad-certificate-error
        · unsupported-certificate-type-error
    2.4 Messages du protocole Handshake SSL
        2.4.1 Messages du client
            · Client hello
            · Client master key
            · Client certififate
            · Client finished
        2.4.2 Messages envoyés par le serveur
            · Server hello
            · Server verify
            · Server finished
            · Request certificate
        2.4.3 Messages envoyés par le serveur ou le client
            · Error
    2.5 Messages typiques du protocole
        2.5.1 En considérant qu’aucune session n’est authentifiée
        2.5.2 En considérant qu’une session a été authentifiée par le client et le  serveur
        2.5.3 En considérant qu’une session est utilisée et que l’identification du client est faite
3.  Les attaques contre le protocole SSL
    3.1  Craquer les Ciphers
    3.2  Attaque à “texte clair”
    3.3  Attaque replay
    3.4  L’homme au milieu
4.  Quelques liens intéressants.


 

 
 
 

 Introduction: le pourquoi du SSL.

TCP/IP n’a pas été développé en pensant à la sécurité. Il a donc fallu développer quelque chose de nouveau. Les problèmes suivant devaient être résolus :
   Le protocole SSL (Secured Socket Layer) a donc été conçu pour assurer une communication confidentielle et fiable  entre deux applications (un client et un serveur), pour identifier le serveur et parfois le client. SSL nécessite un protocole de transport sûr (par exemple TCP) pour la transmission et la réception de données.

 Le protocole est composé de deux couches. Au niveau le plus bas, juste au dessus d’un protocole de transport sûr, se trouve le SSL Record Protocol. Celui-ci est utilisé pour encapsuler d’autres protocoles de plus haut niveau tel le SSL Handshake Protocol qui permet au serveur et au client de s’authentifier et de négocier un algorithme de chiffrement et des clés cryptographiques avant que le protocole d’application ne reçoive son premier byte d’information.
 
 Voici la situation des couches dans le modèle OSI, qui compte 7 couches.
 

L'IANA réserve les numéros de port suivants pour les communications sécurisées par SSL:

- 443: réservé pour l'utilisation de Hypertext Transfer Protocol avec SSL (https)
- 465: réservé pour l'utilisation de Simple Mail Transfer Protocol avec SSL (ssmtp)
- 563: réservé pour l'utilisation de Network News Transfer Protocol (snntp)

Un protocole d’application de ‘niveau supérieur’ peut se placer au dessus du protocole SSL de manière transparente (par exemple HTTP, FTP, TELNET,...). Le protocole SSL assure un ‘canal de sécurité’ dont les trois propriétés principales sont :
 

 
 

1.  Spécification du protocole SSL

 

1.1.  Format de l’en-tête de la structure SSL

 Dans SSL, toutes les données envoyées sont encapsulées dans une structure record, un objet qui est composé d’une en-tête et d’une certaine quantité de données. Chaque en-tête du record contient un code de longueur de deux ou trois bytes.

 L’en-tête de la structure record définit une valeur appelée PADDING. La valeur du PADDING spécifie le nombre de bytes de données ajoutés à la structure originale par le destinateur. Les données tampon sont utilisées pour que la longueur de la structure soit un multiple de la taille de la clé employée dans le cryptage.

 Le destinataire de la structure décrypte la structure de données entière de manière à avoir les données originales. Le destinataire extrait ensuite la valeur du PADDING pour déterminer la longueur réelle de la structure. Les données du PADDING sont ensuite éliminées.
 

 

1.2.  Format des données de la structure SSL

La portion de données de la structure record du SSL est composée de trois parties (transmises et reçues dans l’ordre suivant) :

MAC-DATA[MAC-SIZE]
ACTUAL-DATA[N]
PADDING-DATA[PADDING]

ACTUAL-DATA est la donnée actuelle transmise. PADDING-DATA est la donnée tampon envoyée quand un bloc clé est utilisé. MAC-DATA, finalement est le code d’authentification de message (Message Authentication Code).

Quand les structures SSL sont envoyées en clair, aucune clé n’est utilisée. Ainsi, la valeur du  PADDING-DATA sera à zéro et la valeur de MAC-DATA aussi. Quand il y a chiffrement, ces valeurs changent selon certaines valeurs.

Le MAC-DATA est calculé de la manière suivante :

MAC-DATA = HASH[ SECRET, ACTUAL-DATA, PADDING-DATA, SEQUENCE-NUMBER ]
 

SEQUENCE-NUMBER est un compteur qui est incrémenté par le client et le serveur. Chaque fois qu’un message est envoyé le compteur est incrémenté. La valeur de SECRET dépend de la partie qui envoie le message. Si le client envoie le message alors SECRET est CLIENT-WRITE-KEY (le serveur utilisera SERVER-READ-KEY pour vérifier le MAC). Si le client reçoit le message, alors SECRET est CLIENT-READ-KEY (le serveur utilisera SERVER-WRITE-KEY pour générer le MAC).
 

Nous avons donc:

SERVER-READ-KEY = CLIENT-WRITE-KEY
SERVER-WRITE-KEY = CLIENT-READ-KEY
 

Le destinataire du message utilise la valeur attendue de  SEQUENCE-NUMBER comme entrée de la fonction de hachage. Le MAC-DATA calculé doit correspondre bit à bit avec le MAC-DATA transmis. Si la comparaison n’est pas l’identité alors la structure est considéré endommagée et doit être traitée comme si une ‘erreur I/O’ était arrivée.

La couche SSL est utilisée pour toutes les communications SSL, où sont inclus les messages de poignées de mains et les transferts de données.
 

2.  Spécification du protocole Handshake SSL

2.1. Principe

Le protocole Handshake SSL est utilisé pour négocier les attributs d’une session. Ce protocole comporte deux phases. La première phase sert à établir des communications privées. La seconde phase sert à l’authentification du client. Les messages constituant le protocole Handshake SSL doivent être présentés dans un ordre bien précis; dans le cas contraire, il en résulte une erreur fatale.

· Phase 1

La première phase consiste à initier la communication, les deux partis communiquent alors leurs ‘hello’. Le client entame la conversation en envoyant le message CLIENT-HELLO. Le serveur reçoit ce message et renvoie alors le message SERVER-HELLO. Arrivé à ce stade, le client et le serveur ont assez d’informations pour savoir s’ils ont besoin d’une clé maître. Quand une nouvelle clé maître n’est pas nécessaire, le serveur passe immédiatement à la phase 2.

Quand une nouvelle clé est exigée, le message SERVER-HELLO contiendra assez d’information pour que le client la génère. Cela inclut le certificat signé du serveur, une liste de clés de chiffrement et une ‘connection-id’ (valeur générée aléatoirement par le serveur et qui sera utilisée lors d’une seule connexion). Le client génère la clé maître et répond avec un message CLIENT-MASTER-KEY (ou un message d’erreur si le serveur indique que le client et le serveur ne sont pas d’accord sur la clé de cryptage).

Finalement, le serveur envoie un message SERVER-VERIFY au client après que la clé maître ait été déterminée. La dernière étape identifie le serveur car uniquement le serveur qui a la clé publique appropriée peut connaître la clé maître.
 

· Phase 2

La deuxième phase est la phase d’authentification. Le serveur a déjà été authentifié par le client dans la première phase et il ne reste qu’à authentifier le client. Le serveur demandera donc quelque chose provenant du client. Le client répondra s’il a l’information demandée.

Quand un des partis a authentifié l’autre, il envoie son message d’arrêt. Pour le client, par exemple, le message CLIENT-FINISHED contient la forme encryptée de ‘connection-id’. Si la vérification rate, le serveur envoie un message d’erreur. Une fois qu’une partie a envoyé son message d’arrêt, il doit continuer à écouter les messages du correspondant jusqu’à ce qu’il reçoive un message d’arrêt. Dès qu’un parti a envoyé et reçu un message d’arrêt, le protocole handshake SSL est fini. A ce moment-là, le protocole d’application commence à s’exécuter.
 
 

2.2 Le protocole d’alarme

 Les messages d’alarme communiquent la sévérité du message et une description de l’alarme. Le message d’alarme de niveau fatal conclut la connexion immédiatement. Dans ce cas, d’autres connexions correspondant à la session peuvent continuer mais l’identificateur de session doit être invalidé pour empêcher que la session défaillante soit utilisée pour établir de nouvelles connexions. Comme les autres messages, les messages d’alarme sont chiffrés.

 Le client et le serveur doivent tous deux savoir que la connexion va se terminer de manière à éviter une attaque de coupure. N’importe lequel des deux partis peut débuter l’échange des messages de fermeture en envoyant une alerte close_notify avant de fermer le côté écriture de la connexion. Il est nécessaire que l’autre parti réponde avec son propre close_notify et ferme la connexion immédiatement. Il n’est par contre pas nécessaire à l’initiateur de la fermeture d’attendre la réponse avant de fermer le côté lecture de la connexion. Toute information reçue après une alerte de fermeture est ignorée.
 

2.3 Erreurs

La gestion des erreurs dans le protocole de connexion SSL est très simple. Quand une erreur est détectée, le parti détecteur envoie un message à l’autre parti. Lors de la transmission ou de la réception d’un message d’alerte fatale, les deux partis ferment immédiatement la connexion. A la fois serveur et client sont censés oublier les identificateurs de session, les clés et les secrets associés à la connexion défaillante, les erreurs sont donc irrécupérables. Le protocole Handshake SSL définit les erreurs suivantes :
 

NO-CIPHER-ERROR

 
Cette erreur est envoyée par le client au serveur quand il ne peut pas trouver une clé de chiffrement (problèmes de paramétrage) valable pour lui et le serveur. Cette erreur est irrécupérable.
 
 

NO-CERTIFICATE-ERROR

 Quand un message REQUEST-CERTIFICATE est envoyé, cette erreur apparaît si le client ne possède pas de certificat. Cette erreur est récupérable.
 

BAD-CERTIFICATE-ERROR

 Cette erreur est renvoyée quand un certificat est jugé inadéquat par le destinataire. Inadéquat veut dire que la signature du certificat est mauvaise ou que les valeurs du certificat sont inappropriées. Cette erreur est récupérable.
 
 

UNSUPPORTED-CERTIFICATE-TYPE-ERROR

 Cette erreur est envoyée quand le client ou le serveur reçoit un type de certificat qu’il ne peut accepter. Cette erreur est récupérable.
 
 

2.4 Messages du protocole Handshake SSL

Les messages du protocole Handshake SSL sont encapsulés dans le protocole SSL Record et sont composés de deux parties : un code d’un byte et quelques données. Après que la paire de clés de la session ait été déterminée par chaque partie, les corps des messages sont chiffrés. Pour le client, cela arrive après qu’il ait vérifiée l’identité de la session ou qu’il ait créé une nouvelle clé de session et l’ait envoyée au serveur.
 
 

2.4.1 Messages du client

 Il y a plusieurs messages qui sont générés uniquement par le client.
 
 
·CLIENT-HELLO (Phase 1 ; Envoyé en clair)
    char MSG-CLIENT-HELLO
    char CLIENT-VERSION-MSB
    char CLIENT-VERSION-LSB
    char CIPHER-SPECS-LENGTH-MSB
    char CIPHER-SPECS-LENGTH-LSB
    char SESSION-ID-LENGTH-MSB
    char SESSION-ID-LENGTH-LSB
    char CHALLENGE-LENGTH-MSB
    char CHALLENGE-LENGTH-LSB
    char CIPHER-SPECS-DATA[(MSB<<8)|LSB]
    char SESSION-ID-DATA[(MSB<<8)|LSB]
    char CHALLENGE-DATA[(MSB<<8)|LSB]

  Quand un client se connecte au serveur, il envoie le message CLIENT-HELLO comme premier message. Le client envoie au serveur sa version SSL, sa clé de cryptage, des données sur une session et quelques données supplémentaires. Les données d’identification de la session sont uniquement envoyées si le client a trouvé une session valable pour le serveur dans son cache. Si aucune session n’est trouvée, la valeur de SESSION-ID-LENGTH sera de zéro. Les données challenge sont utilisées pour authentifier le serveur. Après que le serveur et le client se soient mis d’accord sur une paire de clés, le serveur renvoie un message SERVER-VERIFY avec la forme cryptée de CHALLENGE-DATA.

A noter que le serveur n'enverra pas son message SERVER-HELLO avant d'avoir reçu le message CLIENT-HELLO, cela pour permettre au serveur d’indiquer dans son premier message l’état des sessions renvoyées par le client (les performances du protocole sont ainsi augmentées et on évite des tours pour rien)
 
 

·CLIENT-MASTER-KEY (Phase 1; Envoyé au début en clair)
 

    char MSG-CLIENT-MASTER-KEY
    char CIPHER-KIND[3]
    char CLEAR-KEY-LENGTH-MSB
    char CLEAR-KEY-LENGTH-LSB
    char ENCRYPTED-KEY-LENGTH-MSB
    char ENCRYPTED-KEY-LENGTH-LSB
    char KEY-ARG-LENGTH-MSB
    char KEY-ARG-LENGTH-LSB
    char CLEAR-KEY-DATA[MSB<<8|LSB]
    char ENCRYPTED-KEY-DATA[MSB<<8|LSB]
    char KEY-ARG-DATA[MSB<<8|LSB]

Le client envoie ce message quand il a déterminé la clé maître. Quand les deux partis se sont mis d’accord sur une session, ce message n’est pas envoyé. Le champ CIPHER-KIND indique la clé de chiffrement choisie à partir du CIPHER-SPECS du serveur. Le CLEAR-KEY-DATA contient la portion en clair de MASTER-KEY. Le CLEAR-KEY-DATA est combiné avec le SECRET-KEY-DATA pour former le MASTER-KEY. Le ENCRYPTED-KEY-DATA contient les portions secrètes du MASTER-KEY, chiffrées en utilisant la clé publique du serveur.
 
 

·CLIENT-CERTIFICATE (Phase 2; Envoyé chiffré)
 

    char MSG-CLIENT-CERTIFICATE
    char CERTIFICATE-TYPE
    char CERTIFICATE-LENGTH-MSB
    char CERTIFICATE-LENGTH-LSB
    char RESPONSE-LENGTH-MSB
    char RESPONSE-LENGTH-LSB
    char CERTIFICATE-DATA[MSB<<8|LSB]
    char RESPONSE-DATA[MSB<<8|LSB]

Ce message est envoyé par un client en réponse au message REQUEST-CERTIFICATE du serveur. Le CERTIFICATE-DATA contient des données définies par la valeur du CERTIFICATE-TYPE. CERTIFICATE-TYPE est en général : SSL_X509_CERTIFICATE. Le CERTIFICATE-DATA contient un certificat X509 signé.

Un certificat X.509 contient les informations suivantes :

X.509-Certificate ::= SEQUENCE {
    certificateInfo CertificateInfo,
    signatureAlgorithm AlgorithmIdentifier,
    signature BIT STRING
}

CertificateInfo ::= SEQUENCE {
    version [0] Version DEFAULT v1988,
    serialNumber CertificateSerialNumber,
    signature AlgorithmIdentifier,
    issuer Name,
    validity Validity,
    subject Name,
    subjectPublicKeyInfo SubjectPublicKeyInfo
}

Version ::= INTEGER { v1988(0) }

CertificateSerialNumber ::= INTEGER

Validity ::= SEQUENCE {
    notBefore UTCTime,
    notAfter UTCTime
}

SubjectPublicKeyInfo ::= SEQUENCE {
    algorithm AlgorithmIdentifier,
    subjectPublicKey BIT STRING
}

AlgorithmIdentifier ::= SEQUENCE {
    algorithm OBJECT IDENTIFIER,
    parameters ANY DEFINED BY ALGORITHM OPTIONAL
}
 
 

·CLIENT-FINISHED (Phase 2; Envoyé crypté)
    char MSG-CLIENT-FINISHED
    char CONNECTION-ID[N-1]

Le client envoie ce message quand il est satisfait avec le serveur. N’oublions pas que le client doit continuer à écouter les messages provenant du serveur jusqu’à ce qu’il reçoive le message SERVER-FINISHED. La donnée CONNECTION-ID est l’identification originale de la session que le serveur envoie dans le message SERVER-HELLO. ‘N’ est le nombre de bytes du message envoyé.
 

 
 

2.4.2 Messages envoyés par le serveur

 
 
·SERVER-HELLO (Phase 1; Envoyé en clair)
 

    char MSG-SERVER-HELLO
    char SESSION-ID-HIT
    char CERTIFICATE-TYPE
    char SERVER-VERSION-MSB
    char SERVER-VERSION-LSB
    char CERTIFICATE-LENGTH-MSB
    char CERTIFICATE-LENGTH-LSB
    char CIPHER-SPECS-LENGTH-MSB
    char CIPHER-SPECS-LENGTH-LSB
    char CONNECTION-ID-LENGTH-MSB
    char CONNECTION-ID-LENGTH-LSB
    char CERTIFICATE-DATA[MSB<<8|LSB]
    char CIPHER-SPECS-DATA[MSB<<8|LSB]
    char CONNECTION-ID-DATA[MSB<<8|LSB]
 

Le serveur envoie ce message après avoir reçu le message CLIENT-HELLO du client. Le serveur renvoie SESSION-ID-HIT indiquant si oui ou non, l’identification de la session est connue par le serveur. Quand la valeur de SESSION-ID-HIT est zéro, le serveur regroupe son certificat, ses paramètres algorithmiques et une identification de connexion pour l’envoyer au client. Ce client, en utilisant cette information, pourra générer une clé de session et la renvoyer au serveur avec le message CLIENT-MASTER-KEY.

Quand SESSION-ID-HIT est non nul, le serveur et le client calculent à deux une nouvelle paire de clés pour la session en cours. Cette paire de clés provient du MASTER-KEY qui fut échangé quand la SESSION-ID fut créée.

Le message SERVER-HELLO est envoyé après que le serveur ait reçu le message CLIENT-HELLO, et avant que le serveur envoie le message SERVER-VERIFY.
 
 
 
 
 

·SERVER-VERIFY (Phase 1; Envoyé chiffré)
 

    char MSG-SERVER-VERIFY
    char CHALLENGE-DATA[N-1]

Le serveur envoie ce message après qu’une paire de clés (SERVER-READ-KEY et SERVER-WRITE-KEY) aient été trouvées. Le message contient une copie cryptée de CHALLENGE-DATA envoyé par le client dans son message CLIENT-HELLO.

Ce message est utilisé pour vérifier l’identité du serveur. Un serveur légitime devrait avoir la clé privée qui correspond avec la clé publique contenue dans le certificat du serveur qui est transmis dans le message SERVER-HELLO. De cette façon, le serveur légitime serait capable d’extraire et de reconstruire la pair de clés de session (SERVER-READ-KEY et SERVER-WRITE-KEY). Finalement, seul un serveur qui a fait l’extraction et le décryptage proprement peut correctement crypté CHALLENGE-DATA. Cela prouve donc que le serveur a la clé privée qui va avec la clé publique contenue dans le certificat du serveur.
 
 

·SERVER-FINISHED (Phase 2; Envoyé chiffré)
   char MSG-SERVER-FINISHED
   char SESSION-ID-DATA[N-1]

Le serveur envoie ce message quand il est satisfait de la sécurité du handshake du client et qu’il est prêt à procéder à une transmission/réception de données dans un protocole de niveau supérieur. Le SESSION-ID-DATA est utilisé par le client et le serveur à ce moment pour ajouter des entrées à leurs caches respectives d’identification de sessions. Les caches doivent contenir une copie de MASTER-KEY envoyé dans le message CLIENT-MASTER-KEY.
 
 

·REQUEST-CERTIFICATE (Phase 2; Envoyé chiffré)
 

    char MSG-REQUEST-CERTIFICATE
    char AUTHENTICATION-TYPE
    char CERTIFICATE-CHALLENGE-DATA[N-2]
 

Un serveur peut à tout instant faire cette demande pendant la seconde phase du handshake. Le client répond immédiatement avec un message CLIENT-CERTIFICATE s’il en a un, ou avec un message d’erreur (avec le code NO-CERTIFICATE-ERROR) s’il n’en a pas.
 
 
 

 

 

2.4.3 Messages envoyés par le serveur ou le client

 ERROR (envoyés en clair ou chiffrés)

 char MSG-ERROR
 char ERROR-CODE-MSB
 char ERROR-CODE-LSB

 Ce message est envoyé quand une erreur est détectée. Après que le message soit envoyé, la partie destinateur arrête la connexion. Le destinataire enregistre l’erreur et arrête ensuite la connexion.

 Ce message est envoyé en clair si l’erreur arrive pendant la négociation des clés de session. Après qu’il ait eu entente sur les clés de session, les erreurs sont envoyées cryptés comme tous les autres messages.
 
 
 

 

2.5 Messages typiques du protocole

 La notation  ‘{quelque chose}key’ veut dire qu’il y a eu cryptage de 'quelque chose' avec la clé ‘key’.
 
 

2.5.1 En considérant qu’aucune session n'est authentifiée

 

client-hello                 C -> S:   challenge, cipher_specs
server-hello                S -> C:  connection-id,server_certificate,cipher_specs
client-master-key       C -> S:  {master_key}server_public_key
client-finish                 C -> S:  {connection-id}client_write_key
server-verify               S ->; C:{challenge}server_write_key
server-finish                S -> C: {new_session_id}server_write_key
 

Le client envoie le message CLIENT-HELLO où se trouvent les différents paramètres du cryptage (cipher_specs) et les données challenge. Le serveur renvoie le SERVER-HELLO. On y trouve le certificat du serveur, une numéro d’identification de connexion et les paramètres de chiffrement. Une clé maître a du être créée puisqu’aucune session est authentifiée. La poignée de mains se termine lorsque chacun des partis envoie leur message finish.
 

 

 

2.5.2 En considérant qu’une session a été authentifiée par le client et le  serveur

 

client-hello           C -> S: challenge, session_id, cipher_specs
server-hello         S -> C: connection-id, session_id_hit
client-finish          C -> S: {connection-id}client_write_key
server-verify        S -> C: {challenge}server_write_key
server-finish         S -> C: {session_id}server_write_key
 

Ici, aucune clé maître n’est créée et l’on utilise les clés secrètes de la session authentifiée.
 

 

2.5.3 En considérant qu’une session est utilisée et que l’identification du client est faite

client-hello                C -> S: challenge, session_id, cipher_specs
server-hello               S -> C: connection-id, session_id_hit
client-finish                C -> S: {connection-id}client_write_key
server-verify              S -> C: {challenge}server_write_key
request-certificate      S -> C: {auth_type,challenge'}server_write_key
client-certificate         C -> S:   {cert_type, client_cert,response_data} client_write_key
server-finish               S -> C: {session_id}server_write_key
 
 
 

3.  Les attaques contre le protocole SSL

 Dans cette section, nous allons tenter de vous décrire les différentes attaques qui pourraient être utilisées contre le protocoles SSL. Nous ne pouvons cependant pas garantir l’exhaustivité de cette liste. SSL a été défini pour contrer ces attaques.
 
 

3.1.  Craquer les Ciphers

 SSL dépend de plusieurs technologies cryptographiques différentes. Le chiffrement par clé publique de RSA est utilisé pour l’échange de la clé de session et pour l’authentification du client/serveur. Différents algorithmes cryptographiques sont utilisés. Si des attaques cryptographiques sont réalisées avec succès contre ces technologies, le protocole SSL ne pourra plus être considéré comme sûr.

 Des attaques contre une session de communication spécifique peuvent être réalisées en enregistrant la session et ensuite utiliser cet enregistrement pour craquer soit la clé de session, soit la clé publique RSA jusqu’à l’obtention de la communication claire. Cet approche est plus facile que de craquer les technologies cryptographiques pour tous les messages possibles. Notez que SSL tente de rendre le coût d’une telle attaque supérieur au bénéfice d’une attaque réussie, l’attaque devient donc une perte d’argent et/ou de temps.
 

3.2.  Attaque à “texte clair”

 Les attaques à “texte clair” ont lieu lorsque l’attaquant a une idée du message chiffré qui est envoyé. L’attaquant peut générer une base de données dont les clés sont la valeur cryptée du texte clair et dont les valeurs sont la session cipher key. Lorsque cette base de données est construite, une simple fonction de recherche identifie la clé de session qui va avec une valeur chiffrée particulière. Une fois la clé de session connue, le message entier peut être déchiffré. Un hardware adéquat peut rendre ce système peu coûteux et très rapide.

 A cause de la nature même de SSL, les attaques à “texte clair” sont possibles. SSL tente tout de même d’éviter ce genre d’attaque en utilisant des clés de session très grandes. D’abord, le client génère une clé plus grande que permise par exportation, et envoie une portion de celle-ci en clair au serveur. Cette portion claire de la clé, concaténée avec la portion secrète donne une clé très grande.

 Le hardware nécessaire pour réaliser une telle attaque est donc rendue prohibitive. Chaque bit ajouté à la longueur de la clé double la grandeur de la base de données. En utilisant une clé d’une longueur de 128 bits, la base de données nécessaire n’est pas réalisable. Même si une base de données plus petite est utilisée, elle doit d’abord être générée avec les bits clairs. Il s’agit alors d’un processus très lent et coûteux.

 Une conséquence de la défense SSL est que les attaques de force brute deviennent les attaques les moins chères. Les attaques de force brute ont un rapport espace/temps bien connu, et il devient alors possible de déterminer le coût d’une attaque. Pour une clé à 128 bits, le coût est théoriquement infini. Pour une clé à 40 bits, ce coût est fortement réduit mais toujours hors de portée d’un “random hacker”.
 

3.3. Attaque replay

 Une attaque replay est simple. Une personne enregistre une session de communication entre un client et un serveur. Plus tard, cette personne se connecte à ce même serveur et rejoue les messages du client qu’il vient d’enregistrer.

 SSL élimine cette attaque en utilisant une “nonce” (connection-id) qui est “unique” pour chaque connexion. En théorie, le malfrat ne peut prédire à l’avance la nonce car elle est basée sur une série d’événements sur lesquels il n’a aucun contrôle. Le malfrat ne peut donc pas répondre aux demandes du serveur.

 Une personne avec un bon matériel peut enregistrer beaucoup de session entre un client et un serveur et tenter de choisir la bonne session en se basant sur la nonce que le serveur envoie initialement dans son message SERVER-HELLO. Cependant, les nonces SSL ont une longueur de 128 bits. Le malfrat aurait donc besoin d’environ 264 nonces pour avoir 50% de chance de choisir la bonne session. Ce nombre est suffisamment grand que pour rendre le coût du matériel nécessaire à l’enregistrement prohibitif.

3.4.  L’homme au milieu

 L’attaque de “l’homme au milieu” peut avoir lieu lorsque trois personnes sont dans une session de communication : le client, le serveur et le malfrat. Ce dernier se situe sur le réseau entre le client et le serveur et intercepte le trafic provenant à la fois du client et du serveur.

 L’homme du milieu opère en faisant semblant d’être le vrai serveur envers le client. Avec SSL, cette attaque est impossible grâce à l’utilisation de certificats du serveur. Durant la poignée de main initiale, le serveur est demandé à présenter un certificat signé par une autorité. La clé publique du serveur, son nom ainsi que le nom du donneur du certificat sont contenus dans le certificat du serveur. Le client vérifie le certificat en regardant la signature et en vérifiant si le nom du donneur de certificat est quelqu’un que le client reconnaît.

 De plus, le serveur doit chiffrer quelque chose avec la clé privée qui s’associe avec la clé publique mentionnée dans le certificat. Seul un serveur qui possède à la fois le certificat et la clé privée peut répondre convenablement à ce challenge.

 Si l’homme du milieu fournit un faux certificat, la vérification de la signature le détectera. Si la signature est une signature légitime pour le malfrat mais pas pour le serveur, la signature passera mais alors c’est la vérification du nom du serveur qui détectera l’effraction.

 Finalement, si le malfrat fournit un certificat légitime pour le serveur en question, la signature et le nom passeront. Cependant, le malfrat, ne possédant pas la clé privée du serveur, ne pourra pas encoder convenablement sa réponse au challenge et sera détecté lors de cette dernière vérification.

 Dans le cas très peu probable où le malfrat a deviné la clé privée, il ne peut toujours pas déchiffrée la clé de session et ne peut donc pas visualiser l’information chiffrée.
 
 

 
 

4.    Quelques liens intéressants.

 

A tout seigneur, tout honneur. Voici donc la page de Netscape traitant de SSL . SSL n'est pas le seul résultat de recherche de sécurité sur internet. Pour vous en convaincre, visitez cette page.

SSL étant un standard de fait, l'IETF s'en inspire largement pour établir un draft: TLS (transport layer security).

Voici deux sites traitant des certificats X.509: Public key infrastructure , X.509 certificate. Ces certificats sont délivrés par des autorités de certification. Si la plus connue est Verisign, tout le monde ne connaît pas Belsign, société belge, pionnière européenne en la matière, et reconnue par Netscape et Microsoft..

RSA Data Security n'est pas la seule société présente dans le domaine du chiffrement. Un de ses challengers est Certicom.

Voici enfin le site de Dell qui vend des PC en ligne, les échanges de données étant sécurisées par SSL. Pour ceux qui ne croient pas encore que le commerce électronique est un grand enjeux, voici e-Christmas, site dédié à la promotion du commerce électronique en Europe. Parmi ses instigateurs, on retrouve Hewlet Packard et Microsoft.
 
L'utilisation de la cryptographie sur internet mène parfois à des situation cocasses.

Ainsi, les Etats-Unis considèrent la  cryptographie à 128 bits comme une arme, et interdisent donc son exportation. C'est ainsi que la version de PGP disponible pour les européens est une version bridée. Mais le plus surprenant dans cette histoire est que ces mêmes Etats-Unis sont pour la libre circulation des livres. Ceci a donnée l'idée à quelqu'un de transcrire l'algorithme de PGP dans un livre, de l'envoyer en Europe où il a été réencodé. PGP était disponible en Europe!

La France quant à elle a une législation aussi sévère que celle de l'Iran en la matière (crypto uniquement autorisée pour les transactions banquaires, dépôt des clef à une autorité,...). Si vous vous rendez sur le site FTP de Netscape, vous verrez qu'une version spécialement destinée à la France se trouve dans le répertoire /pub/communicator_for_france !