
自動化されたモジュール式の暗号解析ツール、すなわち数学破壊兵器(Weapon of Math Destruction)。
FeatherDuster は、主に Daniel "unicornfurnace" Crowley がコミュニティからの貢献とともに執筆した、暗号を破るためのツールです。このツールは、弱い暗号システムの特定と悪用のプロセスをできる限り簡単にすることを目指しています。Cryptanalib は FeatherDuster の背後にある動作部品であり、FeatherDuster とは独立して使用できます。
なぜ「FeatherDuster」なのか? 一部の暗号関係者の間には、暗号を不適切に使ったり、暗号が本来解決すべきでない問題を解決するために使ったりすることを「魔法の暗号妖精の粉を振りかける」と呼ぶ内輪のジョークがあります。FeatherDuster は、その魔法の暗号妖精の粉を掃除するためのものです。
これは FeatherDuster のベータリリースです。壊れている可能性があります。
バグを見つけた場合は、issue を報告してください。プルリクエストを歓迎します。
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 の分析エンジンは、分析フェーズで次のような多くのプロパティも検出できます: