
Un outil de cryptanalyse automatisé et modulaire ; c'est-à-dire une Arme de Destruction Mathématique.
FeatherDuster est un outil écrit principalement par Daniel « unicornfurnace » Crowley, avec des contributions de la communauté, pour casser de la crypto ; il essaie de rendre le processus d'identification et d'exploitation des cryptosystèmes faibles aussi simple que possible. Cryptanalib est la mécanique derrière FeatherDuster, et peut être utilisé indépendamment de FeatherDuster.
Pourquoi « FeatherDuster » ? C'est une private joke chez certains spécialistes de la crypto où le fait de mal utiliser la crypto, ou de l'utiliser pour résoudre un problème que la crypto n'est pas censée résoudre, est appelé « saupoudrer de la poussière de fée cryptographique magique ». FeatherDuster sert à nettoyer la poussière de fée cryptographique magique.
Ceci est une version bêta de FeatherDuster. Certaines choses peuvent être cassées.
Si vous trouvez un bug, veuillez ouvrir une issue. Les pull requests sont les bienvenues et encouragées.
python featherduster/featherduster.py [fichier de texte chiffré 1] ... [fichier de texte chiffré n]
Si vous avez installé FeatherDuster dans votre environnement virtuel, vous pouvez simplement l'exécuter comme ceci :
(featherduster) $ featherduster [fichier de texte chiffré 1] ... [fichier de texte chiffré n]
Lors de l'importation d'échantillons via des arguments positionnels, chaque fichier sera consommé et traité comme son propre texte chiffré, quel que soit le format des fichiers. FeatherDuster a la capacité de reconnaître et de décoder automatiquement les encodages courants, donc ce n'est pas grave si ces fichiers contiennent des échantillons encodés.
Une fois la console FeatherDuster lancée, d'autres méthodes d'importation de textes chiffrés seront disponibles, notamment la possibilité d'importer un fichier contenant des échantillons séparés par des sauts de ligne, où chaque ligne sera traitée comme un échantillon distinct, comme ceci :
68657920636f6f6c
796f752072656164
74686520726561646d65
et la possibilité de spécifier un seul texte chiffré dans FeatherDuster via une entrée en ligne de commande. Comme cette entrée se termine par un saut de ligne, il est recommandé d'utiliser une forme d'encodage au cas où l'échantillon contiendrait un saut de ligne.
Cryptanalib peut être utilisé séparément de FeatherDuster pour créer des outils d'attaque cryptographique en Python. La documentation des fonctions de cryptanalib est accessible via la fonction Python help(), comme ceci :
>>> import cryptanalib as ca
>>> dir(ca) # sortie éditée pour un README plus propre
[ ... 'analyze_ciphertext', 'batch_gcd', 'bb98_padding_oracle', 'break_alpha_shift', 'break_ascii_shift', 'break_columnar_transposition', 'break_generic_shift', 'break_many_time_pad', ... ]
>>> help(ca.bb98_padding_oracle)
Help on function bb98_padding_oracle in module cryptanalib:
bb98_padding_oracle(ciphertext, padding_oracle, exponent, modulus, verbose=False, debug=False)
Bleichenbacher's RSA-PKCS1-v1_5 padding oracle from CRYPTO '98
Given an RSA-PKCS1-v1.5 padding oracle and a ciphertext,
decrypt the ciphertext.
ciphertext - The ciphertext to decrypt
padding_oracle - A function that communicates with the padding oracle.
The function should take a single parameter as the ciphertext, and
should return either True for good padding or False for bad padding.
exponent - The public exponent of the keypair
modulus - The modulus of the keypair
verbose - (bool) Whether to show verbose output
debug - (bool) Show very verbose output
Le moteur d'analyse de Cryptanalib, utilisé par FeatherDuster, peut détecter automatiquement les encodages et décoder les échantillons. Le moteur suppose que tous les échantillons sont générés avec le même processus (par exemple, base64encode(aes_encrypt(datum))), mais peut traiter des échantillons mixtes dans une certaine mesure. Actuellement, Cryptanalib peut détecter et décoder les schémas d'encodage suivants :
Le moteur d'analyse de Cryptanalib peut également détecter un certain nombre de propriétés pendant la phase d'analyse :