OVH Cloud OVH Cloud

Questions sur Blowfish

9 réponses
Avatar
Guillaume Kaddouch
Bonjour,

par pure curiosité, créant quelques programmes utilisant le chiffrement
dans mon temps libre, je me demandait ce que valait l'algorithme Blowfish ?

Cet algorithme accepte des clés juqu'a 448 bits apparemment.

Ma question plus précisement serait est ce que Blowfish est loin
derrière AES (Rijndael) soit en terme de sécurité ou de vitesse de
chiffrement/déchiffrement (ou les deux) ou bien est il considéré comme
très sûr ?

Une clé de 256bits pour une utilisation personelle semble-t-elle
raisonable ?

Merci d'avance.
Cordialement,

Guillaume.

9 réponses

Avatar
Michel Arboi
On Sun Aug 08 2004 at 15:17, Guillaume Kaddouch wrote:

par pure curiosité, créant quelques programmes utilisant le
chiffrement dans mon temps libre, je me demandait ce que valait
l'algorithme Blowfish ?


Il n'est pas cassé, à ma connaissance.

Cet algorithme accepte des clés juqu'a 448 bits apparemment.


Oui. Et donc ?

Ma question plus précisement serait est ce que Blowfish est loin
derrière AES (Rijndael) soit en terme de sécurité


Blowfish ne manipule que des blocs de 64 bits. Ça peut déplaire aux
paranoïaques.
Pourquoi ne pas choisir AES, maintenant qu'il existe ?

Une clé de 256bits pour une utilisation personelle semble-t-elle
raisonable ?


Raisonnable ? Non, 128 bits sont largement suffisants, et ça vous
évitera de vous prendre le chou avec des considérations légales.

--
http://arboi.da.ru
FAQNOPI de fr.comp.securite http://faqnopi.da.ru/
NASL2 reference manual http://michel.arboi.free.fr/nasl2ref/

Avatar
pornin
According to Guillaume Kaddouch :
Ma question plus précisement serait est ce que Blowfish est loin
derrière AES (Rijndael) soit en terme de sécurité ou de vitesse de
chiffrement/déchiffrement (ou les deux) ou bien est il considéré comme
très sûr ?


Pour ce qui est de la sécurité, personne ne sait casser un Blowfish
(avec une taille de clé suffisante, i.e. 80 bits ou plus). De même,
personne ne sait casser un AES avec une taille de clé suffisante. Ces
deux algorithmes ont donc, en pratique la même sécurité. Si faiblesse il
y a, ce ne sera pas dans l'algorithme lui-même mais dans son utilisation
et ce qui vient autour (gestion des clés, key-loggers, utilisateurs
idiots, etc...).

(Une précision quand même : Blowfish a une taille de bloc de 64 bits, ce
qui peut induire de légères faiblesses quand on chiffre de gros blocs de
données [plusieurs gigaoctets] avec la même clé, dans certains modes de
chiffrement. Mais dans la pratique ça ne change rien.)


Pour ce qui est de la vitesse : Blowfish a été conçu pour être rapide
sur PC. Mais l'AES aussi. La différence de vitesse entre les deux est
assez faible et c'est de toutes façons très rarement un point limitant
(un PC à 2 GHz pourrait chiffrer pas loin de 100 Mo/s à plein processeur
; un bon disque dur plafonnera à 40 Mo/s, un réseau décent à 10 Mo/s).
Sur des systèmes embarqués (genre carte à puce), en revanche, l'AES
prend nettement l'avantage : Blowfish est un assez gros utilisateur
de mémoire (un peu plus de 4 kilo-octets -- ce qui est gros pour une
carte à puce) et le changement de clé est très coûteux (sensiblement
équivalent au coût de chiffrement de 5 kilo-octets).

Donc ça dépend beaucoup des conditions d'utilisation.


Une clé de 256bits pour une utilisation personelle semble-t-elle
raisonable ?


Hors tout, il y a des chances que, pour une "utilisation personnelle",
il ne soit pas raisonnable de chiffrer tout court. Mais c'est parler
dans le vide. Il n'existe pas de notion de qualité d'un système de
sécurité en dehors d'une analyse minutieuse du contexte. Il faut définir
ce qu'on veut protéger, contre qui, ce que cet attaquant à le pouvoir de
faire, et quelles fonctionnalités on veut conserver par ailleurs. Si on
ne fait pas cette analyse, on est condamné à raconter et faire n'importe
quoi.


--Thomas Pornin

Avatar
Guillaume Kaddouch
Merci beaucoup à Monsieur Pornin et Arboi pour vos réponses.

Etant totalement débutant (et encore...) dans la cryptographie c'est
difficile de s'y retrouver parfois.

Cordialement,

Guillaume.
Avatar
vuu-g6c
Oula le troll rampant ;) toucher a Blowfish c'est touche a OpenBSD.

Si Open utilise blowfish avec ne fut-ce qu'un petit risque de par son
design... Un petit risque n'est peut-etre pas grand chose pour les
gens normaux mais pas pour OpenBSD.

Je vais me replonger en meditation a savoir s'il faut ou pas installer
quelque chose d'autre sur mes serveurs :) (ie: Gentoo GNU Pingoin)

/Nicolas

Michel Arboi wrote in message news:...
On Sun Aug 08 2004 at 15:17, Guillaume Kaddouch wrote:

par pure curiosité, créant quelques programmes utilisant le
chiffrement dans mon temps libre, je me demandait ce que valait
l'algorithme Blowfish ?


Il n'est pas cassé, à ma connaissance.

Cet algorithme accepte des clés juqu'a 448 bits apparemment.


Oui. Et donc ?

Ma question plus précisement serait est ce que Blowfish est loin
derrière AES (Rijndael) soit en terme de sécurité


Blowfish ne manipule que des blocs de 64 bits. Ça peut déplaire aux
paranoïaques.
Pourquoi ne pas choisir AES, maintenant qu'il existe ?

Une clé de 256bits pour une utilisation personelle semble-t-elle
raisonable ?


Raisonnable ? Non, 128 bits sont largement suffisants, et ça vous
évitera de vous prendre le chou avec des considérations légales.



Avatar
manu
vuu-g6c wrote:

Si Open utilise blowfish avec ne fut-ce qu'un petit risque de par son
design... Un petit risque n'est peut-etre pas grand chose pour les
gens normaux mais pas pour OpenBSD.


D'où l'idée d'avoir un serveur SSH activé par défaut, d'ailleurs: le
risque, c'est tellement plus trippant.

--
Emmanuel Dreyfus
Publicité subliminale: achetez ce livre!
http://www.eyrolles.com/Informatique/Livre/9782212114638/livre-bsd.php


Avatar
Franck Arnulfo
Michel Arboi wrote:

On Sun Aug 08 2004 at 15:17, Guillaume Kaddouch wrote:


par pure curiosité, créant quelques programmes utilisant le
chiffrement dans mon temps libre, je me demandait ce que valait
l'algorithme Blowfish ?



Il n'est pas cassé, à ma connaissance.


Cet algorithme accepte des clés juqu'a 448 bits apparemment.



Oui. Et donc ?


Ma question plus précisement serait est ce que Blowfish est loin
derrière AES (Rijndael) soit en terme de sécurité



Blowfish ne manipule que des blocs de 64 bits. Ça peut déplaire aux
paranoïaques.


Intuitivement effectivement je perçois un risque mais y'a t-il une
explication plus rationnelle ;-) de ce problème ?
En gros pourquoi manipuler uniquement des blocs de 64 bits peut-être non
secure ?

Pourquoi ne pas choisir AES, maintenant qu'il existe ?


Une clé de 256bits pour une utilisation personelle semble-t-elle
raisonable ?



Raisonnable ? Non, 128 bits sont largement suffisants, et ça vous
évitera de vous prendre le chou avec des considérations légales.




Avatar
pornin
According to Franck Arnulfo :
Intuitivement effectivement je perçois un risque mais y'a t-il une
explication plus rationnelle ;-) de ce problème ?
En gros pourquoi manipuler uniquement des blocs de 64 bits peut-être non
secure ?


Le problème évoqué est que les blocs ne font _que_ 64 bits, et pas 128
comme dans le cas de l'AES.


Prenons le cas du mode de chiffrement OFB avec un feedback d'un bloc
complet. C'est un mode de chiffrement où on utilise l'algorithme
en boucle, avec seulement la clé et sans intervention des données
elles-mêmes, pour générer un flux d'octets pseudo-aléatoires qu'on
combine ensuite avec les données par un XOR bit à bit. Plus précisément,
on part d'une valeur initiale (de la taille d'un bloc) conventionnelle
ou transmise en clair avec le message ; je nomme IV cette valeur.
Du coup, on calcule :
x_0 = E_k(IV) x_0 est le chiffré de IV par la clé k
x_1 = E_k(x_0) x_1 est le chiffré de x_0 par la clé k
x_2 = E_k(x_1) x_2 est le chiffré de x_1 par la clé k
etc...
L'ensemble des x_i, mis bout à bout, forme un flux d'octets
pseudo-aléatoires aussi long qu'on veut. On combine ce flux avec les
données à chiffrer, par XOR. Le déchiffrement est identique (on regénère
le flux et on recombine par XOR). C'est le principe du "one-time pad"
avec le flux pseudo-aléatoire dans le rôle du "pad".

Le problème, c'est que le flux pseudo-aléatoire ne le reste pas si
longtemps que ça. À terme, le système boucle : un des x_i finit par
être égal à un x_j précédent. À partir de là, ça cycle, et le flux
pseudo-aléatoire devient répétitif. Le "one-time pad" devient un
"two-times pad", ce qui n'est pas bon du tout du point de vue sécurité.

Il s'avère que le nombre d'étapes nécessaires pour cycler est en gros
égal à la racine carrée de l'espace sur lequelle on travaille. Si les
blocs font 64 bits, l'espace est de taille 2^64 (le nombre de valeurs
distinctes de 64 bits) et la racine carrée est de 2^32, c'est-à-dire un
peu plus de 4 milliards. En clair, ça veut dire qu'au bout de quelques
dizaines de giga-octets de flux générés, on a de bonnes chances d'avoir
bouclé. Donc, si on chiffre en OFB avec un algorithme de chiffrement
qui a des blocs de 64 bits, on a fortement intérêt à ne pas chiffrer
de message plus long que quelques giga-octets. Même chiffrer un unique
DVD est techniquement un risque. Avec un algorithme comme l'AES qui
travaille sur des blocs de 128 bits, le même problème existe, mais ne
survient qu'après 2^64 blocs de 128 bits, soit un peu moins de 300
millions de téra-octets, ce qui laisse de la marge (pour le moment).



Tout ceci est une illustration du fait que des blocs de 64 bits peuvent
poser des problèmes de sécurité quand on manipule des données par
giga-octets, ce qui commence à devenir courant de nos jours (un réseau
ethernet 100baseT crache son giga-octet en moins de deux minutes ; un
DVD contient facilement sa dizaine de giga-octets de données). Le cas du
mode OFB est un peu extrême, mais pas mal d'autres modes de chiffrement
sont affectés (soit qu'il y ait un problème de sécurité avéré, soit
que l'effet "racine carrée" mette à mal une preuve de sécurité et
donc diminue la confiance qu'on peut placer a priori dans le système
de chiffrement). Aussi, un algorithme avec des blocs de 128 bits est
considéré comme meilleur. C'est pour cela que quand le gouvernement
américain a défini son nouvel algorithme de chiffrement pour remplacer
le DES, il a posé comme condition préalable pour les candidats que
l'algorithme devait travailler avec des blocs de 128 bits.


--Thomas Pornin

Avatar
Claudio
Thomas Pornin wrote:
According to Franck Arnulfo :

Intuitivement effectivement je perçois un risque mais y'a t-il une
explication plus rationnelle ;-) de ce problème ?
En gros pourquoi manipuler uniquement des blocs de 64 bits peut-être non
secure ?



Le problème évoqué est que les blocs ne font _que_ 64 bits, et pas 128
comme dans le cas de l'AES.


Prenons le cas du mode de chiffrement OFB avec un feedback d'un bloc
complet. C'est un mode de chiffrement où on utilise l'algorithme
en boucle, avec seulement la clé et sans intervention des données
elles-mêmes, pour générer un flux d'octets pseudo-aléatoires qu'on
combine ensuite avec les données par un XOR bit à bit. Plus précisément,
on part d'une valeur initiale (de la taille d'un bloc) conventionnelle
ou transmise en clair avec le message ; je nomme IV cette valeur.
Du coup, on calcule :
x_0 = E_k(IV) x_0 est le chiffré de IV par la clé k
x_1 = E_k(x_0) x_1 est le chiffré de x_0 par la clé k
x_2 = E_k(x_1) x_2 est le chiffré de x_1 par la clé k
etc...
L'ensemble des x_i, mis bout à bout, forme un flux d'octets
pseudo-aléatoires aussi long qu'on veut. On combine ce flux avec les
données à chiffrer, par XOR. Le déchiffrement est identique (on regénère
le flux et on recombine par XOR). C'est le principe du "one-time pad"
avec le flux pseudo-aléatoire dans le rôle du "pad".

Le problème, c'est que le flux pseudo-aléatoire ne le reste pas si
longtemps que ça. À terme, le système boucle : un des x_i finit par
être égal à un x_j précédent. À partir de là, ça cycle, et le flux
pseudo-aléatoire devient répétitif. Le "one-time pad" devient un
"two-times pad", ce qui n'est pas bon du tout du point de vue sécurité.

Il s'avère que le nombre d'étapes nécessaires pour cycler est en gros
égal à la racine carrée de l'espace sur lequelle on travaille.


Ce n'est pas tout à fait exact (en tout cas de manière générale) !

Cela dépend de l'estimation du nombre d'états inversibles par la
fonction f. En effet, si par exemple tous les états sont inversibles,
alors le nombre d'itérations moyens avant de boucler, correspond au
nombre d'itérations moyen requis avant de tomber sur l'inverse de l'état
initial, c'est à dire 2^63 et non plus 2^32.


Si les
blocs font 64 bits, l'espace est de taille 2^64 (le nombre de valeurs
distinctes de 64 bits) et la racine carrée est de 2^32, c'est-à-dire un
peu plus de 4 milliards. En clair, ça veut dire qu'au bout de quelques
dizaines de giga-octets de flux générés, on a de bonnes chances d'avoir
bouclé. Donc, si on chiffre en OFB avec un algorithme de chiffrement
qui a des blocs de 64 bits, on a fortement intérêt à ne pas chiffrer
de message plus long que quelques giga-octets. Même chiffrer un unique
DVD est techniquement un risque. Avec un algorithme comme l'AES qui
travaille sur des blocs de 128 bits, le même problème existe, mais ne
survient qu'après 2^64 blocs de 128 bits, soit un peu moins de 300
millions de téra-octets, ce qui laisse de la marge (pour le moment).



Tout ceci est une illustration du fait que des blocs de 64 bits peuvent
poser des problèmes de sécurité quand on manipule des données par
giga-octets, ce qui commence à devenir courant de nos jours (un réseau
ethernet 100baseT crache son giga-octet en moins de deux minutes ; un
DVD contient facilement sa dizaine de giga-octets de données). Le cas du
mode OFB est un peu extrême, mais pas mal d'autres modes de chiffrement
sont affectés (soit qu'il y ait un problème de sécurité avéré, soit
que l'effet "racine carrée" mette à mal une preuve de sécurité et
donc diminue la confiance qu'on peut placer a priori dans le système
de chiffrement). Aussi, un algorithme avec des blocs de 128 bits est
considéré comme meilleur. C'est pour cela que quand le gouvernement
américain a défini son nouvel algorithme de chiffrement pour remplacer
le DES, il a posé comme condition préalable pour les candidats que
l'algorithme devait travailler avec des blocs de 128 bits.


--Thomas Pornin



Avatar
pornin
According to Claudio :
Ce n'est pas tout à fait exact (en tout cas de manière générale) !

Cela dépend de l'estimation du nombre d'états inversibles par la
fonction f. En effet, si par exemple tous les états sont inversibles,
alors le nombre d'itérations moyens avant de boucler, correspond au
nombre d'itérations moyen requis avant de tomber sur l'inverse de l'état
initial, c'est à dire 2^63 et non plus 2^32.


En effet, je me suis gouré. Si on fait de l'OFB en "full feedback",
alors on se balade sur un cycle de la permutation, et la taille moyenne
du cycle est en O(n/2) si on travaille sur un espace de taille n (ici,
n = 2^64) (apparemment, pour une permutation aléatoire, le plus grand
cycle fait environ 62% de l'espace, et on a donc 62% de chances de
tomber sur ce cycle avec une IV aléatoire).

On retombe sur 2^32 si on fait de l'OFB avec un feedback plus réduit,
parce qu'alors on n'a plus une permutation mais une fonction aléatoire.


Ceci étant, l'idée générale que je soulevais (à savoir qu'une taille
de blocs de 64 bits, c'est trop peu pour des gros messages -- suivant
le mode de chainage) reste valide. Ça peut se voir en CBC, où une
collision fournit un test pour un attaquant qui cherche à savoir si les
données envoyées sont celles qu'il attend, ou d'autres. Ça peut se voir
aussi en mode CTR (ou même OFB en mode "full feedback") si on chiffre
plusieurs messages avec la même clé (on peut faire varier les IV, mais
on a un risque de recouvrement des flux générés et ce risque est bien en
O(sqrt(n))).


--Thomas Pornin