OVH Cloud OVH Cloud

Déterminer si un algo est correcte ?

4 réponses
Avatar
Fr
Bonjour,

J'utilise une DLL dans un programme pour implanter le codage BlowFish.

Le problème c'est que je suis obligé de faire confiance à la DLL, car je
n'ai pas les sources et que je ne me sens pas de programmer une telle DLL.

Alors comment savoir si ce que j'ai est bien du BlowFish, ou du "n'importe
quoi" ?

Une personne m'a donné un lien pour vérifier d'après un texte en clair et
une clé (0000000 et 0000000) et je devrais optenir un texte codé bien
précis.

J'ai testé, mais je n'ai pas du tout le même texte ! le soucis c'est que
j'ai essayé avec plusieurs autres logiciels prétendants coder en Blowfish,
et aucun ne sort le même texte codé !

Alors existe t'il un moyen de vérification ? ou est-ce totalement aléatoire
?

Merci

4 réponses

Avatar
Arnaud W.
Bonjour,

Si les mêmes entrées donnent des résultats différents avec
plusieurs implémentations, c'est que :
- soit vous ne donnez pas les entrées correctement,
- soit les implémentations sont fausses (et donc non compatibles)
- soit votre machine n'a pas le bon encoding (attention au big/little
indian)
- soit une combinaison de ces erreurs.

Les vecteurs de tests sont définis pour valider les implémentations
des algorithmes cryptographiques (du moins garantir un certain niveau
de conformité).

Par exemple, si vous testez un logiciel qui crypte des fichiers, vous
ne pouvez pas mettre le vecteur de données dans un fichier par
copier/coller et tenter de le crypter : le vecteur de test doit être
ce qui est lu (donc les octets du fichier) et non ce qui est dans le
fichier qui est lu. La nuance est subtile. Par exemple, si une entrée
doit être 10100111 (en binaire), mettre cette chaine dans un fichier
n'est pas équivalent (car le logiciel lira non pas 1 octet mais 8
octets formés par les codes ascii de la liste des '0' et des '1').
Mais vous le saviez sans doute déjà.

Arnaud W.
http://awr.free.fr
Avatar
Fr
Bonjour,


Bonjour

Si les mêmes entrées donnent des résultats différents avec
plusieurs implémentations, c'est que :
- soit vous ne donnez pas les entrées correctement,


Je pense que je les donne correctement, car je ne rentre qu'un texte et un
clé identique sur tout les logiciels

- soit les implémentations sont fausses (et donc non compatibles)
- soit votre machine n'a pas le bon encoding (attention au big/little
indian)
- soit une combinaison de ces erreurs.


Je ne sais pas ...

Les vecteurs de tests sont définis pour valider les implémentations
des algorithmes cryptographiques (du moins garantir un certain niveau
de conformité).

Par exemple, si vous testez un logiciel qui crypte des fichiers, vous
ne pouvez pas mettre le vecteur de données dans un fichier par
copier/coller et tenter de le crypter : le vecteur de test doit être
ce qui est lu (donc les octets du fichier) et non ce qui est dans le
fichier qui est lu. La nuance est subtile. Par exemple, si une entrée
doit être 10100111 (en binaire), mettre cette chaine dans un fichier
n'est pas équivalent (car le logiciel lira non pas 1 octet mais 8
octets formés par les codes ascii de la liste des '0' et des '1').
Mais vous le saviez sans doute déjà.


En effet, je ne rentre que du texte, je ne passe pas par un fichier

Arnaud W.
http://awr.free.fr


Merci

Avatar
ouah
Une personne m'a donné un lien pour vérifier d'après un texte en clair et
une clé (0000000 et 0000000) et je devrais optenir un texte codé bien
précis.


Si les mêmes entrées donnent des résultats différents avec
plusieurs implémentations, c'est que :
- soit vous ne donnez pas les entrées correctement,
- soit les implémentations sont fausses (et donc non compatibles)
- soit votre machine n'a pas le bon encoding (attention au big/little
indian)
- soit une combinaison de ces erreurs.


Pour la comparaison avec les vecteurs de test, vérifiez aussi que vous
initialisez l'algorithme avec la bonne longueur de clé et que si
votre DLL propose plusieurs modes d'opérations vous utilisez bien le mode
ECB (ou éventuellement CBC avec un IV à 0).

Pour le premier vecteur de test (bloc clair et clé à 0), regardez si vous
n'obtenez
pas les bytes dans le désordre: dans ce cas il s'agirait de votre routine
d'output
des nombres qui ne fonctionne pas correctement...

ouah


Avatar
Arnaud W.
C'est le même problème qu'avec un fichier : les vecteurs sont donnés
en héxadécimal.

Si vous devez entrer AF01 (soit 2 octects) et que vous les tapez dans
un champ texte, ce n'est pas la même chose : cela donne comme entrée
le code ASCII de 'A', puis 'B', puis '0', puis '1' (soit 4 octets) soit
en héxa 41463031 (rien à voir avec AF01 donc). Et ceci si l'encoding
du champ texte est ASCII standard.

En résumé : La valeur héxadécimale AF01 n'est pas équivalente à
la valeur héxadécimale correspondant aux caractères de la chaîne
"AF01".

Il faut pouvoir fournir les données en binaire ou alors essayer
d'encoder correctement les données binaires en ASCII. Par exemple,
avec la table ASCII suivante :
http://www.crossref.org/02publishers/ascii_chart.htm

Avec AF01 cela donne :
1er octect = AF (base 16) = 175 (en décimal)
2ème octet = 01 (base 16) = 01 (en décimal)
Pour taper ces deux caractères sur windows, on peut faire ALT+175 puis
ALT+01 (car ils ne correspondent à aucune touche de clavier standard)

Mais tout dépend comment le soft interprête le champ texte (son
encoding par défaut)...

Arnaud W.
http://awr.free.fr