
자동화된 모듈식 암호분석 도구, 즉 수학 파괴 무기
FeatherDuster는 주로 Daniel "unicornfurnace" Crowley가 커뮤니티의 기여와 함께 작성한 암호 해독 도구입니다. 이 도구는 취약한 암호 시스템을 식별하고 공격하는 과정을 최대한 쉽게 만들기 위해 설계되었습니다. Cryptanalib는 FeatherDuster의 내부 동작을 담당하는 부분으로, FeatherDuster와 독립적으로 사용할 수 있습니다.
왜 "FeatherDuster"일까요? 암호 전문가들 사이에는 암호를 잘못 사용하거나, 암호로 해결할 수 없는 문제를 암호로 해결하려는 행동을 "마법의 암호 요정 가루를 뿌린다"라고 부르는 농담이 있습니다. FeatherDuster는 바로 그 마법의 암호 요정 가루를 청소하기 위한 도구입니다.
이 버전은 FeatherDuster의 베타 릴리스입니다. 일부 기능이 제대로 작동하지 않을 수 있습니다.
버그를 발견하면 이슈를 등록해 주세요. 풀 리퀘스트도 환영하며 적극 권장합니다.
python featherduster/featherduster.py [ciphertext file 1] ... [ciphertext file n]
FeatherDuster를 가상 환경에 설치했다면 다음과 같이 간단히 실행할 수 있습니다:
(featherduster) $ featherduster [ciphertext file 1] ... [ciphertext file n]
위치 인자를 통해 샘플을 가져오면 파일 형식과 관계없이 각 파일이 하나의 암호문으로 처리됩니다. FeatherDuster는 일반적인 인코딩을 자동으로 인식하고 디코딩할 수 있으므로, 파일에 인코딩된 샘플이 포함되어 있어도 괜찮습니다.
FeatherDuster 콘솔이 시작된 후에는 다른 방법으로도 암호문을 가져올 수 있습니다. 특히, 줄바꿈으로 구분된 샘플이 들어 있는 파일을 가져오면 각 줄이 별도의 샘플로 처리됩니다. 예를 들면 다음과 같습니다.
68657920636f6f6c
796f752072656164
74686520726561646d65
또한 FeatherDuster 명령줄 입력을 통해 단일 암호문을 지정할 수도 있습니다. 이 입력은 줄바꿈에서 종료되므로, 샘플에 줄바꿈이 포함된 경우를 대비해 어떤 형태의 인코딩을 사용하는 것이 좋습니다.
Cryptanalib는 FeatherDuster와 별도로 사용하여 Python 기반의 암호 공격 도구를 만들 수 있습니다. cryptanalib 함수에 대한 문서는 Python의 help() 함수를 통해 확인할 수 있습니다:
>>> 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
FeatherDuster에서 사용하는 Cryptanalib의 분석 엔진은 인코딩을 자동으로 감지하고 샘플을 디코딩할 수 있습니다. 엔진은 모든 샘플이 동일한 과정(예: base64encode(aes_encrypt(datum)))으로 생성되었다고 가정하지만, 혼합된 샘플도 어느 정도 처리할 수 있습니다. 현재 Cryptanalib는 다음 인코딩 방식을 감지하고 디코딩할 수 있습니다:
Cryptanalib의 분석 엔진은 분석 단계에서 다음과 같은 여러 속성도 감지할 수 있습니다: