Le rétroconception d'algorithmes cryptographiques est une discipline à part dans le monde des reversers. La difficulté réside dans le fait de ne pas se « noyer » dans des parties inutiles à l'analyse (dans une fonction de compression d'un algorithme de hachage par exemple). La connaissance des concepts mathématiques sous-jacents à chaque algorithme est inutile. Par contre, la connaissance des grandes familles de fonctions cryptographiques et de leurs implémentations est indispensable : ce sera l'objet de la première partie de cet article. Puis, nous verrons comment appliquer ces résultats sur un exemple concret.
1. Familles de fonctions cryptographiques
1.1 Fonction de hachage
Une fonction de hachage est une fonction à sens unique : son but est d'obtenir un identifiant à partir de données binaires. Par exemple, CRC32 peut être considéré comme un algorithme de hachage bien qu'il soit faible d'un point de vue cryptographique. Ce type de fonction peut avoir plusieurs rôles : stocker une empreinte de mot de passe, être utilisé comme somme de contrôle ou encore dans des processus de signature numérique. Lorsque la fonction utilisée est une fonction standard (md5, sha1, ripemd160, …), elle s'identifie facilement dans un binaire. Cela provient de sa forme spécifique et de l'utilisation de constantes propres à chaque algorithme.
Une fonction de hachage s'utilise en trois phases :
- Initialisation de la fonction (fonction hash_init) : cette phase initialise un contexte qui sera utilisé comme support pour la suite des calculs. Ce contexte a quelques particularités : il...
- Accédez à tous les contenus de Connect en illimité
- Découvrez des listes de lecture et des contenus Premium
- Consultez les nouveaux articles en avant-première