0

私は暗号化を学習しており、OPENSSL を使用して学習しているものを実装しています。最近、割り当て問題の 1 つを見つけ、それを解こうとしています。ほとんどの質問を理解するのに問題はありませんが、これは.

4 タスク 2: 一方向プロパティと衝突のないプロパティ このタスクでは、一般的なハッシュ関数の 2 つのプロパティ (一方向プロパティと衝突のないプロパティ) の違いを調べます。ブルートフォース法を使用して、これらの各プロパティを破るのにかかる時間を確認します。openssl のコマンド ライン ツールを使用する代わりに、独自の C プログラムを記述して、openssl の暗号ライブラリのメッセージ ダイジェスト関数を呼び出す必要があります。ドキュメントは http://www.openssl.org/docs/crypto/EVP_DigestInit.htmlにあります。. Laboratory for Computer Security Education、CMSC 414、Spring 2013 2 ほとんどのハッシュ関数は、これら 2 つのプロパティに対するブルート フォース攻撃に対して非常に強力であるため、ブルート フォース法を使用してそれらを解読するには何年もかかります。タスクを実行可能にするために、このプロジェクト全体でハッシュ値の長さを 24 ビットに減らします。任意の一方向ハッシュ関数を使用できますが、ハッシュ値の最初の 24 ビットのみを使用します。与えられた 24 ビットのハッシュ値に一致するテキスト (小文字の ASCII 文字のみ) を見つけるプログラムを作成してください。プログラムは、1) ランダムなテキストを生成し、2) それをハッシュし、3) 下位 24 ビットを入力と比較することを繰り返す必要があります。プログラム (ソースは task2.c と呼ぶ必要があります) は次のように呼び出されます。

          ./task2 <digest name> <hash value>

たとえば、./task2 sha256 2612c7. . .あなたのプログラムは勝利テキストを task2.out に書き込む必要があります。出力が読み書き可能であることを確認してください。

       open("task2.out", O`enter code here` WRONLY | O CREAT, 0644);

などのコマンド ライン ツールで検証しますopenssl dgst -sha256 task2.out。質問: 特定のハッシュを見つけるために、いくつのテキストをハッシュする必要がありましたか? (3回の試行の平均を与える)

プログラムの書き方がわかりません。どんな入力でも大歓迎です。私は在宅ワークのためにそれを解決していないので。コードではなく、いくつかのポインターを探しています。

4

2 に答える 2