Un algorithme de chiffrement tel que blowfish peut être utilisé dans le cadre d'un algorithme de hachage. Blowfish est juste un "bloc de construction" et peut être utilisé à des fins différentes. Il peut être implémenté en tant qu'outil de chiffrement/déchiffrement ou en tant que primitive cryptographique d'un algorithme de hachage. Cela ne signifie pas que vous êtes soudainement capable d'inverser un algorithme de hachage.
Le simple fait que la sortie de l'algorithme de hachage est toujours une longueur constante est un cadeau qu'il ne peut pas être inversé. Vous ne pouvez pas crypter un nombre infini de valeurs d'entrée potentielles d'une manière réversible dans une sortie de longueur fixe. L'algorithme est nécessairement avec perte.
comme une simple illustration, Blowfish peut être utilisé comme celui-ci à Crypter données (qui peuvent ensuite être déchiffré):
ABCD EFGH IJKL MNOP ...
| | | |
v v v v
NPCQ JQ0C MPZW LKAQ
Chaque bloc de l'entrée est transformé en texte chiffré individuellement par blowfish. C'est pourquoi blowfish est appelé un code de bloc (par opposition à flux de chiffrement qui traiterait l'entrée comme un flux, pas comme un ensemble de blocs de longueur fixe). Le résultat de cette opération est un tas de blocs qui peuvent être inversés. La sortie est de la même longueur que l'entrée (plus le remplissage pour remplir un bloc si nécessaire).
Une fonction de hachage en utilisant Blowfish fonctionne comme suit:
ABCD EFGH IJKL MNOP ...
| | | |
v v v v
NPCQ JQ0C MPZW LKAQ
| | | |
+----+--> PMQZ --+--> OLMQ --+--> UALG ...
La sortie de chaque bloc est exécuté par une fonction de compression qui combine deux blocs en un seul. La sortie des deux premiers blocs est combinée (en PMQZ
), puis cette valeur est combinée avec la sortie du troisième bloc (en OLMQ
) et ainsi de suite. La sortie de la dernière compression est le résultat du hachage.Comme vous le voyez, blowfish est utilisé en interne comme un chiffrement cryptographique, mais sa sortie est combinée avec une fonction de compression avec perte qui rend impossible l'inversion de la sortie.