レッスン 1

ハッシュとは何か

一方向ダイジェストと、開発者がハッシュを使う場面を学びます。

ハッシュ関数は任意サイズの入力データを受け取り、固定サイズの ダイジェスト を出力します。多くの場合 16 進数テキストとして表示されます。同じ入力とアルゴリズムなら、常に同じダイジェストが得られます。入力が 1 文字変わるだけでも、ダイジェストは通常まったく別の値になります。

ハッシュは一方向

データからハッシュは計算できますが、ハッシュから元の入力を確実に復元することはできません。そのためハッシュは指紋として使われ、秘密を取り出す手段ではありません。

ハッシュは決定的

Hello というバイト列を SHA-256 で 2 回ハッシュすると、両方とも同じ結果になります。この性質が比較に役立ちます。

  • ダウンロードしたファイルは公開チェックサムと一致するか?
  • この設定は昨日から変わったか?
  • 2 つの API payload はバイト単位で同一か?

開発者がハッシュを見る場所

よくある例:

  • パッケージマネージャの lockfile の整合性フィールド
  • Git のコミット ID(SHA-1 ベース、Git 固有の形式)
  • HTTP の ETag ヘッダーとキャッシュキー
  • 適切な鍵ストレッチと組み合わせたパスワード保存(平文 MD5 単体は不可)
  • ブロックチェーンや証明書のフィンガープリント(通常はより強いアルゴリズム)

ハッシュは変更を検出するが、意図は示さない

ハッシュは、選んだアルゴリズムの下で 2 つのバイト列が一致するかを示します。誰がデータを作ったか、実行して安全か、第三者が改ざんしたかまでは、参照ハッシュの出所をすでに信頼している場合を除き、ハッシュだけでは分かりません。

実践したいときは関連する DevCove ツールを使えます。任意であり、このレッスンの必須部分ではありません。

関連ツールを開く

コース概要へ戻る