
Uma ferramenta automatizada e modular de criptoanálise; ou seja, uma Arma de Destruição Matemática.
O FeatherDuster é uma ferramenta escrita principalmente por Daniel "unicornfurnace" Crowley, com contribuições da comunidade, para quebrar criptografia; ela tenta tornar o processo de identificação e exploração de criptossistemas fracos o mais fácil possível. O Cryptanalib é o mecanismo por trás do FeatherDuster e pode ser usado de forma independente do FeatherDuster.
Por que "FeatherDuster"? Há uma piada interna entre alguns entusiastas de criptografia em que usar criptografia de forma inadequada, ou para resolver um problema que a criptografia não foi feita para resolver, é chamado de "polvilhar pó de fada criptográfico mágico". O FeatherDuster serve para limpar o pó de fada criptográfico mágico.
Esta é uma versão beta do FeatherDuster. Algumas coisas podem estar quebradas.
Se você encontrar um bug, por favor abra uma issue. Pull requests são bem-vindos e incentivados.
python featherduster/featherduster.py [ciphertext file 1] ... [ciphertext file n]
Se você instalou o FeatherDuster no seu ambiente virtual, basta executá-lo assim:
(featherduster) $ featherduster [ciphertext file 1] ... [ciphertext file n]
Ao importar amostras via argumentos posicionais, cada arquivo será consumido e tratado como seu próprio texto cifrado, independentemente do formato dos arquivos. O FeatherDuster tem a capacidade de reconhecer e decodificar automaticamente codificações comuns, então não há problema se esses arquivos contiverem amostras codificadas.
Assim que o console do FeatherDuster for iniciado, métodos alternativos de importação de textos cifrados estarão disponíveis, especificamente a capacidade de importar um arquivo com amostras separadas por quebras de linha, onde cada linha será tratada como uma amostra distinta, como em:
68657920636f6f6c
796f752072656164
74686520726561646d65
e a capacidade de especificar um único texto cifrado no FeatherDuster por meio de entrada de linha de comando. Como essa entrada termina em uma quebra de linha, é recomendável usar alguma forma de codificação caso a amostra contenha uma quebra de linha.
O Cryptanalib pode ser usado separadamente do FeatherDuster para criar ferramentas de ataque criptográfico baseadas em Python. A documentação das funções do cryptanalib pode ser acessada pela função help() do Python da seguinte forma:
>>> import cryptanalib as ca
>>> dir(ca) # output edited for a cleaner README file
[ ... '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
O mecanismo de análise do Cryptanalib, usado pelo FeatherDuster, pode detectar automaticamente codificações e decodificar amostras. O mecanismo assume que todas as amostras são geradas com o mesmo processo (por exemplo, base64encode(aes_encrypt(datum))), mas pode lidar com amostras mistas até certo ponto. Atualmente, o Cryptanalib pode detectar e decodificar os seguintes esquemas de codificação:
O mecanismo de análise do Cryptanalib também pode detectar várias propriedades na fase de análise: