web-dev-qa-db-ja.com

キーファイルで暗号化されたファイルを総当たりにすることは可能ですか?

誰かがキーファイル(4092ビットのエントロピー)を使用してファイルを暗号化し、Hashcatでブルートフォースした場合、Hashcatは暗号化されたファイルを解読するためにキーファイルのblobデータを推測する必要がありますか?

$ dd if=/dev/urandom of=keyfile.key bs=4092 count=1 

$ openssl enc -aes-256-cbc -a -A -in filename.txt -pass file:keyfile.key -out filename.txt.enc

$ cat keyfile.key

@<��B�M�����Yj�TO
               @    d��_G���ݘ`k�M�?�բ�Ƃ��-�b��f(a�Bѩ=> Ξ�U
�uE��s��k���$�N�����/ĢI�HK�N���`�������Js�3�zX>F=�Xy�t˵ǜ�NK�ZA7ݺrˤ��>��0R�n�k�T8gbX�����8��� ��v�
                                                                                                    �~6�    ,���;�*{U{�+]�%N]������Y��(�JT�@��������
�~p@�p��R�rU�_�(��3��9- k�Ɛ��v-}7���\o_��pJ�@�<jc���$S
�rwi�2�6��������R4ȓ�B鶒o�7����}���MВcBU0�t_^9�@�d)
��{Gg|@m~8�g΅��<�
*3ByPHvO�%

                                              ��D�YXR&�7}k���L�u�Bj���44yj��j�w选a��R��@���NO����q  �
1
user190181

まず、ハッシュキャットはハッシュをクラックしますが、AESはブロック暗号です。 hashcatがAESを実行できると確信していますか? hashcat manpage にリストされていません。

それが可能であると仮定して、クラッキング速度として、単一のGTX1080で このhashcatベンチマーク 250MH/sを採用します。 24096 1秒あたり2億5000万回の推測で割ったキー= 1x101206 x宇宙の年齢[ source:wolfram alpha ]。

(また、一体どこから4096ビットのAESキーを取得しましたか?AES-256を使用している場合、おそらくキーファイルの最初の256ビットのみを使用しています。2256/250MH/sはわずか1x10に低下51 x宇宙の年齢。)

次に、「hashcatは正しいキーをいつ取得するかをどうやって知るのか」という問題に直面します。そのためには、暗号化されたファイルに表示されると予想されるプレーンテキストについて何かを知っている必要があります。


TL; DR:これは可能、ただしA)ハッシュキャットがブロック暗号をサポートしている、B)何か知っているあなたが期待している平文について、C)あなたは1x10を待つ用意があります51 それが完了するための宇宙の年齢。

0
Mike Ounsworth

最初に、Hashcatがその仕事に適したツールではないことを指摘する必要があります。 Hashcatはハッシュで機能し、OpenSSLはキーのハッシュを保存しません。代わりに、既知のプレーンテキストの少なくとも1つのブロックが必要です。その後、ブルートフォースキーを試行して、そのプレーンテキストがファイルに表示される暗号化テキストに暗号化されるようにすることができます。これを行うことができる他のツールがあります。

しかし、私はあなたが指定したコマンドが実際にどのように機能するかを誤解していると思います。残念ながら、OpenSSLはキーファイルを取りません。ファイルの形式でパスワードを指定すると、最初の行のみがパスワードとして使用されます。この行は、passを介して渡した場合とまったく同じように処理されます。つまり、SHA-256で1回ハッシュされ、AESのキーに使用される256ビット値を形成します。使用しているファイルはバイナリなので、改行文字(0x0a)が最初のバイトの1つである可能性が非常に高くなります。

改行バイトが最初の8バイト程度の範囲内にある場合、結果として生成される暗号化されたファイルをブルートフォースすることが絶対に可能です。任意のバイトが改行である確率は1/256です。改行が最初の8バイトに存在する可能性は、わずか1/32です。これは、バイナリファイルをキーとして渡すことにより、不適切に暗号化したファイルをブルートフォースで攻撃できないという保証がないことを意味します。


それで、あなたはこれをどのように行いますか正しく?自分でキーファイルをハッシュし、そのハッシュをキーとしてOpenSSLコマンドに渡します。これは一般的なユーティリティを使用して簡単に行うことができます:

pass=$(sha256sum keyfile.key | awk {'print $1'})

次に、-pass pass:$passを使用して、このキーをOpenSSLに渡すことができます。これにより、キーのエントロピーが、指定したキーファイルのエントロピー以上になることが保証されます。 4092ビットのキーファイルの場合、SHA-256でハッシュすると256ビットのキーになります。最大2を通過する必要があるブルートフォース256 もちろん、4092ビットのキーファイルが真にランダムであると仮定すると、他の回答で述べられているように、ユニバース自体が終了する前に完了することができない暗号操作。

1
forest