Attaque par dictionnaire

Publié le par JJ

Bonjour,
aujourd'hui un petit script qui fait une attaque par dictionnaire sur un texte chiffré, en réponse à une blague lancée à un ami à qui j'ai envoyé des identifiants crytpés en lui disant: tu n'as qu'a trouvé la clef.

Comme je suis pas vache, je prouve que l'attaque n'est pas compliquée d'autant que j'indique la méthode (dictionnaire) et le dictionnaire... Le principe est de prendre des mots dans une liste et de voir si ce n'est pas la bonne clef, un peu comme un serrurier qui se pointent avec 2000 clefs pour voir s'il n'arrive pas à en utiliser une sur la serrure.

Ici la tache est grandement simplifiée car toute la partie cryptage (encryption disent d'autres) est sous traitée à un programme, donc pas de grande difficulté de ce côté. Il reste à coder la selection des mots-clef: ici j'ai fait en sorte qu'il n'y ai pas d'espace dans la clef... c'est un choix... qui convient dans le cadre de mon pari stupide mais certainement pas dans le votre.

Pour information, le cryptage utilisé par ccrypt (c'est ça que j'ai utilisé, par commodité non par conviction) est un chiffrage AES si j'ai bien lu le "man" (manuel), et c'est un très bon chiffrage. Cependant mon script trouve tres rapidement la bonne solution lorsqu'elle est dans le dictionnaire... j'espère que ceci pourra convaincre chacun d'avoir des bons mots de passe bisarres, construit avec la 1 lettre des mots d'une phrase et le nombre de lettre dans les mots... ce principe simple permet d'avoir un moyen mnémotechnique pour se souvenir d'un mot de passe compliqué... parce que les deux dangers qui guettent  les mots de passes sont bien l'oubli et la  publicité.
#!/bin/bash function testFile(){
if [ ! -r $1 ] ; then
echo "file $1 isn't readable..."
exit 2
fi
}
echo "This is a script witch perform a dictionnary attac on one crypted file"
echo "it uses the following tool:"
echo

ccrypt --version
echo

if [ -z $2 ] ; then
echo "usage: $0 dictionnaryFile cipherText"
echo " you may use absolute pathname, current pathname is:"
echo " "`pwd`
exit 1;
fi
################################################################################
# verify if files exist
testFile $1
testFile $2

tmp1file=".$1.tmp1.words"
tmp2file=".$1.tmp2.words"
echo "create $tmp1file and $tmp2file as tempory files"
echo
#for next step, word separators may be n and not space as human do
sed -e 'y/t /nn/' $1 > $tmp1file

#useless to test a word twice
sort -u $tmp1file > $tmp2file

################################################################################
echo "please wait while trying the dictionnary.."
echo
i=0;
while read lineWitchIsAWord
do
ccrypt --tmpfiles -d --key $lineWitchIsAWord $2 &> /dev/null
if [ $? -eq 0 ];then
rm -v $tmp1file $tmp2file
echo
echo "found ! ($i before), cypher is now removed"
echo $lineWitchIsAWord
exit 0;
fi
i=$(($i+1))
done < $tmp2file

rm -v $tmp1file $tmp2file
echo

echo echo "not found, sorry"
exit 1

Publié dans Bash

Commenter cet article