Skip to content
Latchkey

MD5 ハッシュとは?解説

MD5 は 128 ビットのフィンガープリントを生成するレガシーな暗号学的ハッシュ関数で、今日ではセキュリティ的に破られたと見なされていますが、高速なチェックサムとして今も見かけます。

MD5 はかつてデータのフィンガープリントを取る標準的な方法であり、その短い 16 進ダイジェストは今もいたるところで見かけます。しかし MD5 はセキュリティ目的では何年も破られており、攻撃者は同じハッシュを持つ 2 つの異なる入力を生成できます。MD5 がいつ無害でいつ危険かを理解することは、CI やセキュリティのツールをレビューする人にとって重要です。

MD5 とは何か

MD5(Message Digest 5)は任意の入力を受け取り、固定の 128 ビット値を生成するハッシュ関数で、通常は 16 進 32 文字で表示されます。すべてのハッシュと同様に決定論的であり、同じ入力は常に同じダイジェストを生み、入力のわずかな変更が出力全体をかき混ぜます。

MD5 がセキュリティ的に破られている理由

MD5 は衝突攻撃に対して脆弱です。攻撃者は同じダイジェストを生成する 2 つの異なる入力を意図的に作り出せます。これは、MD5 がデータが敵対者によって改ざんされていないことをもはや証明できないことを意味します。署名、証明書、または信頼できないダウンロードの検証には MD5 を使ってはなりません。

MD5 が今も許容される場面

敵対者のいない目的では、つまり偶発的な破損の検出、ファイルの重複排除、セキュリティが目的でないクイックなキャッシュキーの生成では、MD5 は今も高速で問題ありません。境界線は攻撃者が衝突から利益を得られるかどうかです。もしそうなら、代わりに SHA-256 を使ってください。

CI における MD5

古いツールや一部のパッケージメタデータで MD5 ダイジェストに出くわします。CI では、サードパーティのダウンロードを検証するために使われる MD5 は不十分と扱い、SHA-256 の sum を優先してください。セキュリティスキャナは、コード内の MD5 の使用を置き換える価値のある弱点として警告することがあります。

Choosing SHA-256 over MD5
# Prefer SHA-256 over MD5 for verifying a download
steps:
  - run: |
      sha256sum -c tool.sha256   # good
      # md5sum -c tool.md5       # avoid for security

結論

MD5 はセキュリティ以外のチェックサムとしては問題ありませんが、攻撃者が範囲に入るあらゆる場所では安全ではありません。パイプラインで迷ったら SHA-256 を選んでください。ほぼ同じくらい便利であり、破られていません。

重要なポイント

  • MD5 は 128 ビット(16 進 32 文字)のダイジェストを生成するレガシーなハッシュです。
  • 攻撃者が衝突を作り出せるためセキュリティ的には破られています。信頼できないデータの検証には使わないでください。
  • MD5 は敵対者のいないチェックサムには今も許容されますが、CI は整合性のために SHA-256 を優先すべきです。

関連ガイド