OVH Cloud OVH Cloud

Fausses clés sur AES.

2 réponses
Avatar
Steph
Bonjour à tous,

J'ai une question concernant l'utilisation de AES :

Mon application doit dechiffrer des données en provenance d'une autre
application et la clé va parfois etre changée. Pour eviter une synchro
des changements de clés des 2 côtés, j'aurais voulu pouvoir tourner sur
2 jeu de clés (clé1 et clé2).

Voici ce que je comptait faire :

Cas1 :
Fonctionnement nominal qui se seroulera dans 99.9 % des cas :

- Il y a qu'une clé presente (clé1), je dechiffre avec cette clé.

Cas2 :
Si l'appli distante decide de changer de clé à une date future, elle
m'envoie, la prochaine clé, j'ai alors le fonctionnement uivant :

- Il y a 2 clés (clé1 ou clé2), je dechiffre avec clé1.
Si clé1 fonctionne la nouvelle clé n'est pas encore utilisé.
Sinon si le dechiffrage à échoué j'essai clé2.

Plus tard j'efface clé1 et je ne tournerai qu'avec clé2 (Cas1).

Ma question est : Comment deceler de facon sûr que clé1 n'est pas la
bonne clé ?

En effet la plupart du temps lors du dechiffrage avec la mauvaise clé il
se produit une erreur (au niveau du padding) mais parfois le dechiffrage
fonctionne en produisant des données dechifrés (erronées bien-sur).

Dans les essais que j'ai fait sur 65536 clé téstée environ 260 ( 0.4%
des cas donc) ne produisent pas d'erreur de padding.
Avec ces "fausses bonnes clés" j'obtenais toujours des données
dechifrées de la longueur du message chiffré moins 8 bits.
Est-ce par ce moyen que je peux faire la difference entre bonne et
mauvais clé ?
Avec une "fausse bonne clé", est-ce qu'il y a un risque que j'obtienne
un message dechiffré d'une longueur autre que message chiffré moins 8 bits ?


Je precise qu'actuellement j'utilise l'API Java pour faire mes tests
mais que par la suite j'utiliserai probablement les fonctions AES de la
lib OpenSSL (Dev en C++).


Merci.

2 réponses

Avatar
Steph
Re-Bonjour,

Pas de reponse, je n'ai pas du etre assez clair :-(
En resumé ma question est :

Ayant seulement le message chiffré par AES.
Est ce qu l'on est en mesure de determiner si une clé est celle ayant
servi à l'encodage ou pas ?


Merci.




Bonjour à tous,

J'ai une question concernant l'utilisation de AES :

Mon application doit dechiffrer des données en provenance d'une autre
application et la clé va parfois etre changée. Pour eviter une synchro
des changements de clés des 2 côtés, j'aurais voulu pouvoir tourner sur
2 jeu de clés (clé1 et clé2).

Voici ce que je comptait faire :

Cas1 :
Fonctionnement nominal qui se seroulera dans 99.9 % des cas :

- Il y a qu'une clé presente (clé1), je dechiffre avec cette clé.

Cas2 :
Si l'appli distante decide de changer de clé à une date future, elle
m'envoie, la prochaine clé, j'ai alors le fonctionnement uivant :

- Il y a 2 clés (clé1 ou clé2), je dechiffre avec clé1.
Si clé1 fonctionne la nouvelle clé n'est pas encore utilisé.
Sinon si le dechiffrage à échoué j'essai clé2.

Plus tard j'efface clé1 et je ne tournerai qu'avec clé2 (Cas1).

Ma question est : Comment deceler de facon sûr que clé1 n'est pas la
bonne clé ?

En effet la plupart du temps lors du dechiffrage avec la mauvaise clé il
se produit une erreur (au niveau du padding) mais parfois le dechiffrage
fonctionne en produisant des données dechifrés (erronées bien-sur).

Dans les essais que j'ai fait sur 65536 clé téstée environ 260 ( 0.4%
des cas donc) ne produisent pas d'erreur de padding.
Avec ces "fausses bonnes clés" j'obtenais toujours des données
dechifrées de la longueur du message chiffré moins 8 bits.
Est-ce par ce moyen que je peux faire la difference entre bonne et
mauvais clé ?
Avec une "fausse bonne clé", est-ce qu'il y a un risque que j'obtienne
un message dechiffré d'une longueur autre que message chiffré moins 8
bits ?


Je precise qu'actuellement j'utilise l'API Java pour faire mes tests
mais que par la suite j'utiliserai probablement les fonctions AES de la
lib OpenSSL (Dev en C++).


Merci.


Avatar
Sylvain
Steph wrote on 08/09/2005 20:34:
Re-Bonjour,

Pas de reponse, je n'ai pas du etre assez clair :-(


ou alors le périmètre de la question ne succite aucune bonne réponse.

En resumé ma question est :

Ayant seulement le message chiffré par AES.
Est ce qu l'on est en mesure de determiner si une clé est celle ayant
servi à l'encodage ou pas ?


si vos blocs (clairs) débutent tous par 0x11,0x22,0x33,0x44 + 12 octets
utiles, alors oui vous pourrez avec une très bonne proba. estimer que
c'est la bonne clé si vous réobtenez ces mêmes 4 octets en début du msg
déchiffré (j'avais prévenu).

votre question ne porte donc pas sur un art devinatoire mais sur le
déterminisme de votre mise en forme des données (s'il existe) ou sur
l'opportunité d'utiliser un mécanisme de chiffrement-signature
(recherche google avec ces termes pour cette 2nde option).

Sylvain.