OVH Cloud OVH Cloud

Perfect Forward Secrecy

13 réponses
Avatar
salus1
Hello,

Je cherchais a mettre ne place un serveur de "blabla" sur un serveur
freeBSD.

Par hasard, je suis tombe sur SILC, un serveur permettant de discuter
mais offrant en plus une couche cryptographique au dessus.

C'est plus que parfait.

En analysant les logs, je suis tombe sur ceci:

[Wed Nov 22 10:29:53 2003] [Info] 192.168.21.123 (192.168.25.13)
security properties: aes-256-cbc hmac-sha1-96 sha1 PFS

Si je comprends bien, la liaison est securisee par l'usage symetrique
de AES-256 pour coder, les clefs publiquent ayant ete echangees avant
; integrite des donnees avec les routines SHA1 mais PFS... Perfect
Forward Secrecy me dit google.com mais je n'ai rien compris du tout.

J'ai essaye de sniffer avant et apres sur le port 706/tcp avec tcpdump
pour ramener le log pour analyse avec ethereal sur mon laptop.
Constatation, je n'ai pas de paquets "en_clair" disant la version du
serveur SILC et celle du client ainsi que les aptitudes
cryptographiques des intervenants (comme je pourrais les avoir au
debut d'une liaison SSH si je venant a sniffer la transaction style
"OpenSSL version x.xx.x ...)

Est-ce cela le PFS? Ne pas laisser passer sur le reseau ces
informations?

Merci,

Salus

10 réponses

1 2
Avatar
Jean-Marc Desperrier
Salus wrote:
[...] Constatation, je n'ai pas de paquets "en_clair" disant la version du
serveur SILC et celle du client ainsi que les aptitudes
cryptographiques des intervenants (comme je pourrais les avoir au
debut d'une liaison SSH si je venant a sniffer la transaction style
"OpenSSL version x.xx.x ...)

Est-ce cela le PFS? Ne pas laisser passer sur le reseau ces
informations?


Non, elle passent forcément sur le réseau à un moment.

Le PFS, c'est utiliser pour l'échange des données chiffrées des clés de
session générées en utilisant un secret temporaire qui ne peut pas être
recalculé à partir des données transmises sur le réseau.
Ce secret, et les clés de session, sont détruits une fois que tu as
validé que l'échange est correct.

Quelqu'un qui aurait loggué l'échange de données, et qui arriverait par
la suite à te dérober tes clés privées ne pourrait remettre la main sur
ce secret temporaire, puisqu'il a été définitivement détruit et ne peut
pas prouver quel est le contenu de que tu as échangé (bien que s'il a
accès à tes clés privées, il a sûrement accès à ton disque dur et donc
quelquepart au contenu échangé).

A priori l'algo qui rempli le cachier des charges pour ce type d'échange
de secret, c'est DH, et les clés publiques serviront surtout à
l'authentification.

C'est bien pour la sécurité, mais le fait que SSL par exemple ne remplit
pas ce critère est très utile pour déboguer de l'extérieur une liaison ...

Avatar
Nicob
On Wed, 26 Nov 2003 03:06:08 -0800, Salus wrote:

Est-ce cela le PFS? Ne pas laisser passer sur le reseau ces informations?


http://www.hsc.fr/ressources/breves/pfs.html


Nicob

Avatar
pornin
According to Jean-Marc Desperrier :
C'est bien pour la sécurité, mais le fait que SSL par exemple ne remplit
pas ce critère est très utile pour déboguer de l'extérieur une liaison ...


Pour SSL ça dépend de ce que négocient le client et le serveur. Si la
"cipher suite" est TLS_RSA_WITH_3DES_EDE_CBC_SHA, effectivement, il
n'y a pas de PFS, et en connaissant la cli privée du certificat du
serveur, on peut déchiffrer la communication. En revanche, si on utilise
un "cipher suite" à base de "Diffie-Hellman Ephemeral" (par exemple
TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA), alors l'échange de clés se fait en
Diffie-Hellman, et la clé privée du certificat du serveur ne sert que
pour de la signature ; dans ces conditions, on a la PFS.

Il est relativement rare que les serveurs SSL fassent du DHE parce que
ça augmente le coût CPU pour eux (un peu) et pour le client (beaucoup) ;
mais il faut savoir que ça existe.


--Thomas Pornin

Avatar
Jean-Marc Desperrier
Thomas Pornin wrote:
According to Jean-Marc Desperrier :
C'est bien pour la sécurité, mais le fait que SSL par exemple ne remplit
pas ce critère est très utile pour déboguer de l'extérieur une liaison ...


Pour SSL ça dépend de ce que négocient le client et le serveur.


Oui, le papier de HSC l'explique, ainsi que les difficultés pour arriver
à le configurer dans un environnement standard.

Donc généralement on tombe pas sur ce cas là avec IE (mais ça doit être
nettement plus facile avec Mozilla), et donc je n'avais jamais vu qu'il
est possible de faire échouer lamentablement un ssldump avec les bons
paramètres :-)


Avatar
pornin
According to Jean-Marc Desperrier :
Oui, le papier de HSC l'explique, ainsi que les difficultés pour arriver
à le configurer dans un environnement standard.

Donc généralement on tombe pas sur ce cas là avec IE (mais ça doit être
nettement plus facile avec Mozilla)


Je ne vois pas quel est le problème. Dans SSL, le client envoie la liste
des "cipher suites" qu'il supporte, et le serveur choisit celle qui lui
convient le mieux. Tout ce que le client a à faire, c'est supporter les
cipher suites "DHE". Le reste concerne le serveur, qu'il faut convaincre
de faire ainsi ; un moyen simple est de lui fournir un certificat DSS,
qui ne marche que pour des signatures : impossible alors pour lui de
négocier autre chose qu'une suite DHE.

Je viens d'essayer avec un serveur maison utilisant un certificat DSS.
Mozilla 1.5 annonce supporter les suites suivantes :
TLS_DHE_RSA_WITH_AES_256_CBC_SHA
TLS_DHE_DSS_WITH_AES_256_CBC_SHA
TLS_RSA_WITH_AES_256_CBC_SHA
TLS_DHE_RSA_WITH_AES_128_CBC_SHA
TLS_DHE_DSS_WITH_AES_128_CBC_SHA
TLS_RSA_WITH_RC4_128_MD5
TLS_RSA_WITH_RC4_128_SHA
TLS_RSA_WITH_AES_128_CBC_SHA
TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA
TLS_DHE_DSS_WITH_3DES_EDE_CBC_SHA
0xFEFF (un truc privé, spécifique à Mozilla)
TLS_RSA_WITH_3DES_EDE_CBC_SHA

Internet Explorer 5.0 (annoncé comme version 5.00.3315.1000, avec support
du chiffrement en "128 bits") annonce ceci :
TLS_RSA_WITH_RC4_128_MD5
TLS_RSA_WITH_RC4_128_SHA
TLS_RSA_WITH_3DES_EDE_CBC_SHA
TLS_RSA_WITH_DES_CBC_SHA
TLS_RSA_EXPORT1024_WITH_RC4_56_SHA
TLS_RSA_EXPORT1024_WITH_DES_CBC_SHA
TLS_RSA_EXPORT_WITH_RC4_40_MD5
TLS_RSA_EXPORT_WITH_RC2_40_CBC_MD5
TLS_DHE_DSS_WITH_3DES_EDE_CBC_SHA
TLS_DHE_DSS_WITH_DES_CBC_SHA
TLS_DHE_DSS_EXPORT1024_WITH_DES_CBC_SHA

Dans les deux cas, ça marche sans problème, la connexion s'établit
sans problème (en TLS_DHE_DSS_WITH_AES_256_CBC_SHA avec Mozilla, et en
TLS_DHE_DSS_WITH_3DES_EDE_CBC_SHA avec Internet Explorer -- mon serveur
choisit la première cipher suite qu'il supporte dans celles annoncées
par le client, car l'ordre d'annonce du client est censé être son ordre
de préférence). On notera que l'Internet Explorer n'est pas de toute
première fraîcheur, et qu'il connaît quand même des suites DHE.


--Thomas Pornin

Avatar
salus1
[...]

Est-ce cela le PFS? Ne pas laisser passer sur le reseau ces informations?


http://www.hsc.fr/ressources/breves/pfs.html
[...]


Hello,

Sur cette page, il y a une trace avec ssldump dont je colle ici un
bout:

8<----------------------------------

# ssldump -i eth0 port 443

New TCP connection #1: 192.0.2.1 (1390) <-> 192.0.2.2 (443)

1 0.0167 (0.0167) C>S SSLv2 compatible client hello
Version 3.1
cipher suites
TLS_RSA_WITH_DES_CBC_SHA

2 0.1111 (0.0943) S>C Handshake
ServerHello
Version 3.1
session_id[32]
random[32]
cipherSuite TLS_RSA_WITH_DES_CBC_SHA
compressionMethod NULL

8<----------------------------------

compressionMethod NULL.... Je ne savais pas qu'il etait possible de
demander a openSSL de compresser et je n'ai rien trouve dans les
fichiers usuels ou mentionner cela.

Vous le savez?

Merci ;-)

Salus


Avatar
pornin
According to Salus :
compressionMethod NULL.... Je ne savais pas qu'il etait possible de
demander a openSSL de compresser et je n'ai rien trouve dans les
fichiers usuels ou mentionner cela.


Le standard SSL (aka TLS, cf RFC 2246) prévoit un système pour que
le client et le serveur se mettent d'accord sur les algorithmes de
cryptographie à utiliser, et aussi un algorithme de compression à
appliquer sur les données. Mais il n'existe qu'un seul algorithme
standard de compression (au sein de SSL/TLS), c'est "NULL", alias
l'absence de compression.

Quand je regarde le code source d'OpenSSL, je vois (dans ssl/s23_srvr.c)
les lignes suivantes :

/* COMPRESSION */
*(d++)=1;
*(d++)=0;

c'est-à-dire que le serveur annonce qu'il connaît exactement _une_
méthode de compression, identifiée par le numéro "0", qui est le numéro
standard de la méthode "NULL" (pas de compression du tout). Ce n'est pas
configurable. Donc il ne doit pas y avoir moyen de convaincre OpenSSL
de faire de la compression par une simple configuration.


--Thomas Pornin

Avatar
Jean-Marc Desperrier
Thomas Pornin wrote:
Je ne vois pas quel est le problème.


Pourtant, tu le décris un peu plus loin dans ton message ...

[...] Le reste concerne le serveur, qu'il faut convaincre
de faire ainsi


Au fond, ça doit être là qu'on s'est mal compris.
Je ne sais pas ce que tu as lu dans mon message, mais je n'ai jamais dit
que c'était impossible à faire, seulement que ça n'était pas le cas le
plus courant.
Et dans ta réponse, ce que tu fais c'est bien expliquer qu'il faut
configurer le serveur de manière spéciale pour y arriver avec IE,
puisqu'il faut impérativement un certificat DSS ce qui doit être le cas
de 0.5% des serveurs.
Erwann, si tu nous lis, tu as le chiffre ? ;-)

Dans SSL, le client envoie la liste
des "cipher suites" qu'il supporte, et le serveur choisit celle qui lui
convient le mieux.


Non. Enfin la majorité des serveurs ne sont pas implémentés comme cela.

[...] mon serveur
choisit la première cipher suite qu'il supporte dans celles annoncées
par le client, car l'ordre d'annonce du client est censé être son ordre
de préférence).


Tu vois, tu indique plus loin que les serveurs sont implémentés pour
préférer la première suite proposée par le client, et *pas* celle qui
leur convient le mieux.

Les suites DHE sont les trois dernières proposées par IE.
Pour se connecter en DHE, le serveur doit donc refuser *toutes* les
suites RSA proposées par le client.

Alors qu'avec Mozilla, les trois premiers choix sont trois suites AES/DHE.

Donc avec IE, seul un serveur qui n'a un certificat DSS et pas de RSA se
connectera en DHE, et donc fera du PFS.
Alors qu'avec Mozilla, tous les serveurs supportant l'AES se connectent
directement en DHE et font du PFS.
Par *défaut*, *d'usine*, sans toucher aucun réglage.

Et si tu configure un serveur comme il faut pour préférer se connecter
en DHE avec IE, il ne fera pas de RSA ce qui veut dire que certains
clients ne pourront pas se connecter, un exemple typique est TinySSL,
mais il y a certainement d'autres clients qui n'implémentent pas DSS ou
dont le DSS est complètement buggé à force de ne jamais être utilisé.

Avec modssl/Apache, on doit pouvoir arriver à favoriser un algo qui
n'est pas proposé en premier par le client, mais mettre deux certifs, un
DSA pour forcer le DSA sur IE, et un RSA pour passer quand même sur les
clients exotiques, je ne crois pas que c'est possible, donc tu es bloqué.

Avatar
Erwann ABALEA
Bonjour,

On Thu, 27 Nov 2003, Jean-Marc Desperrier wrote:

Et dans ta réponse, ce que tu fais c'est bien expliquer qu'il faut
configurer le serveur de manière spéciale pour y arriver avec IE,
puisqu'il faut impérativement un certificat DSS ce qui doit être le cas
de 0.5% des serveurs.
Erwann, si tu nous lis, tu as le chiffre ? ;-)


Je lis, je lis... ;)

Chez nous, un beau 0. La plupart des clients ne savent déjà pas ce qu'est
un certificat, une clé privée, et parfois même un mot de passe, alors
aller faire une manip spécifique pour avoir un certificat DSS, ça ne
risque pas d'arriver. Je n'irais pas mettre ma main à couper que chez
VeriSign le constat sera le même, mais je le crois. (il est toujours
possible qu'un techos ait fait ce genre de demande, et je n'ai pas envie
de perdre une main pour ces c*nneries :)). Je pense qu'on peut aller
jusqu'à 10 certificats DSS pour plusieurs centaines de milliers de
certificats vendus par VeriSign et Thawte (je n'ai pas leurs chiffres,
mais les CRLs peuvent être téléchargées sur le site de VeriSign, et les
dernières CRL générées (cette nuit à 3h du mat') contiennent 35465
certificats au total). En comptant environ 10% de révocation, ça nous fait
dans les 0.003% de certificats DSS. A la louche.

D'ailleurs, dès que j'ai un peu de temps, j'essayerais de demander un
certificat DSS chez eux, tiens... Je ne suis même pas certain que la plate
forme supporte une clé DSA.

[...]
Avec modssl/Apache, on doit pouvoir arriver à favoriser un algo qui
n'est pas proposé en premier par le client, mais mettre deux certifs, un
DSA pour forcer le DSA sur IE, et un RSA pour passer quand même sur les
clients exotiques, je ne crois pas que c'est possible, donc tu es bloqué.


Je pense qu'il doit être possible de bidouiller OpenSSL pour réaliser
cela, sachant que la négociation du cryptosystème utilisé est effectuée
*avant* l'authentification du serveur et du client. La liste des
cryptosystèmes supportés par le client est envoyée lors du ClientHello,
qui est le premier message. Le serveur répond par un ServerHello en
indiquant son choix de cryptosystème parmi la liste proposée par le
client, et envoit également son certificat, si le client l'a demandé lors
du ClientHello.

Mais bon. Qui fait du DHE, à part Mozilla et OpenSSL?

--
Erwann ABALEA - RSA PGP Key ID: 0x2D0EABD5
-----
Il est évident que quelque chose ne va pas chez vous. Vérifiez que
vous n'avez pas un trojan qui s'était introduit et qui ouvre un de vos
port à un malfrat qui pompe des choses de chez vous.
-+-ER in <http://neuneu.mine.nu> Se retrouver trojan comme devant-+-

Avatar
Erwann ABALEA
Bonjour,

On 27 Nov 2003, Salus wrote:

compressionMethod NULL.... Je ne savais pas qu'il etait possible de
demander a openSSL de compresser et je n'ai rien trouve dans les
fichiers usuels ou mentionner cela.


Comme l'a écrit Thomas, SSL et TLS supportent la compression, mais ne
définissent aucun algo.

Il me semble qu'en tant que développeur (avec OpenSSL), on peut ajouter le
support d'un schéma type "zlib" lors de la négociation SSL. Ca s'est
sûrement déjà fait.

Il faut bien entendu que l'autre bout supporte le même schéma, et le
déclare, sinon, ça compresse pas.

--
Erwann ABALEA - RSA PGP Key ID: 0x2D0EABD5
-----
Salut,
Je ne reçoit plus de messages de la mailing-list des nordistes.
-+- SG in: GNU - Un ch'ti coup d'fufe pour la route ? -+-

1 2