私の仕事では、私が顧客のために行った仕事の結果となる特定のファイルを顧客に提供する必要があります。
私が行った作業の整合性を保護し、変更されていないことを保証するために、ファイルとともに提供されるドキュメントにチェックサムを追加するつもりです。
MD5とSHA-1は長い間安全ではないので、この目的でまだ使用しているか、同じ仕事をすることができるがより安全なアルゴリズムがあるかどうか疑問に思っていました。
信頼できる最高のソリューションを探しています。 100%の証明は不可能であることは承知していますが、MD5がこの目的のためにまだ「良い」と評価されているのか、それとも本当に安全なツールがあるのか疑問に思っていました。
SHA-256またはSHA-512を使用: SHA-2 ファミリーの2つの「メイン」メンバーのいずれか。 SHA-2はSHA-1の後継であり、安全と見なされています。他に選択する正当な理由がない限り、それは選択するハッシュです。あなたの場合、SHA-256とSHA-512の間の選択は無関心です。 SHA-3はありますが、まだ広くサポートされておらず、SHA-2よりも安全ではありません(または安全性が低くなります)。それは単なる設計の違いです。
MD5やSHA-1は使用しないでください。これらは明らかにシナリオに不適切ではありませんが、少し余分な作業を行うことで悪用される可能性があります。さらに、これらのアルゴリズムはすでに部分的に壊れているため、時間の経過とともにさらに壊れるリスクが高くなります。
より正確には、これらの両方のハッシュについて、衝突を見つけることが可能です。MD5(D1)= MD5(D2)(またはSHA-1(D1)= SHA-1()となる2つのドキュメントD1およびD2を見つけることが可能です。 D2))、およびD1とD2がそれぞれ計算する必要のある小さなビットとオプションで共通に選択されたサフィックスで終わるようにします。計算する必要のあるビットはゴミのように見えますが、コメント、ページ外にシフトされた画像などで非表示にすることができます。このような衝突は、PCではMD5で簡単に実行できますが、SHA- 1(2つのPDFファイルが必要な場合を除き、この場合 研究者はすでに1つを見つけてそれを公開するために計算にお金を費やしています )。
あなたのシナリオでは、D1を生成するので、衝突はほとんど気にしません。あなたはこのビットを真ん中に作るつもりはありません。ただし、たとえば、ドキュメントに含める画像を提供するなどして、誰かがあなたをだましてこのビットを挿入させるリスクがある。そのように衝突を達成することはかなり難しいでしょうが、それは原則的に実行可能です。
MD5を使用することにはリスクがあり、SHA-256を使用する場合に比べて利点がないため、SHA-256を使用してください。
SHA-256のような壊れていない暗号化ハッシュを使用すると、2つのファイルが同じハッシュを持っている場合、それらは同一であることを知っています。逆に、これは、2つのファイルのハッシュが異なる場合、それらは異なることを意味します。つまり、ハッシュの信頼できるコピーを保持している場合(たとえば、印刷して保存するか、公証する場合)、後で「はい、表示しているこのファイルは同じファイルです」または「いいえ、表示しているこのファイルは異なります。」.
ファイルのハッシュを知っていることは、あなたがそれを書いたことを証明するものではありません。著者であることを証明するための暗号化の方法はありません。あなたができる最善のことは、あなたがそれを証明することができる誰よりも早くあなたがファイルを持っていることを証明することです。ハッシュを示した日付を正しく覚えていると誰もが信頼している第三者にハッシュを通知することにより、ファイルを公開せずにそれを行うことができます。このサードパーティは、公証人、またはインデックスを作成するWebページにハッシュを配置する場合はウェイバックマシンになる可能性があります。 (ハッシュを公開する場合、理論的には誰かがハッシュからファイルを見つけ出すことができますが、正しいファイルが見つかるまですべてのもっともらしいファイルを試すよりも、そのための最良の方法はありません。これについて懸念がある場合は、署名を使用してください。ハッシュの代わりにファイルを使用し、署名と公開鍵を公証しますが、秘密鍵は自分で保管してください。)
ハッシュの良い例:顧客はサポートを望んでいるが、変更された製品ではなく、元の製品のみをサポートする準備ができている。だからあなたは彼らにあなたが彼らにあなたがサポートして欲しいもののハッシュを計算させる。ハッシュ値が提供したものと異なる場合、サポートの提供を拒否します。製品のハッシュを計算するには顧客を信頼する必要があることに注意してください。オリジナルのコピーのハッシュを計算したり、配送伝票から読み取ったりする必要はありません。
ハッシュが不適切な例:他の誰かが自分がドキュメントの作成者であると主張しています。あなたは「いや、見て、私はそのハッシュを知っている、それは1234だ…」と言う。それは役に立ちません:誰でもハッシュを計算できます。
ハッシュが適切に使用される場合に適している例:他の誰かが、自分がドキュメントを書いたと主張します。あなたは「いいえ、見て、私は昨年ハッシュ6を公証したので、先週それを書くことができなかった」と言います。
ハッシュが良くない例:誰かがドキュメントを少し修正します。その後、別のハッシュになります。あなたが言うことができるのは、ドキュメントが今は異なっているということですが、それはそれらがどれほど異なっているかについての情報を伝えていません。完全に異なるドキュメントのハッシュは、タイプミスが修正されたバージョン、または異なる方法でエンコードされたバージョンのハッシュと同じように異なります。
作業成果物が変更されていないことを確認するには、MD5も妥当です。
たとえば、実行可能ファイルを生成する可能性がある場合、攻撃者が衝突を操作する能力は危険です。その実行可能ファイルは500 Kb何か悪いことをするのにかかり、さらに50,000 Kb衝突を取得するためだけに未使用のビットをスピンアウトする必要があります。それらのビットが未使用;正しいハッシュの実行可能ファイルを表示するだけで、だまされます。
MD5ハッシュに一致する衝突を設計することと、信頼できないほど正しくないドキュメントを表すことは、実行できません。 「Take the plug and take it into the $#WG%ga 940 [2aj2'rj09 [3j59g; qa1j; socket "-これを見ると、ドキュメントが改ざんされていることがわかります。シェイクスピアのサルの段階的な配列でさえ、まだドキュメントのように見えるMD5衝突をスピンすることはできません。
もっと詳しく見ると、あなたが保護している文書ではないことがわかります。 「私が彼らのためにした仕事の結果となる特定のファイル」のハッシュを含めます。繰り返しますが、そのファイルが実行可能であることを知りませんか?ソースコード? -彼らがあなたが彼らに与えたものであると信頼できると主張し、同時にハッシュ衝突を設計するような方法で彼らがそれを修正することは、計算上実行不可能です。
参照 Crypto.SEのこの回答 要約:
MD5は現在、暗号ハッシュとして機能するには弱すぎると考えられています。ただし、従来のすべての(つまり、暗号化されていない)ハッシュの場合、MD5を使用することで、多くの場合完全に問題がなくなります。
ハッシュの暗号化の使用を検討しているわけではないので、MD5が適しています。それはあなたがそれらを提供した作業成果物の変更されたまたは信頼できる偽造の交換の交換を防ぎます。