ファイルハッシュとは
ハッシュ(Hash)は、任意の長さのデータを固定長の文字列に変換するアルゴリズムです。ファイルハッシュはファイルの「指紋」であり、同じファイルは常に同じハッシュ値を生成し、1バイトでも変更すると完全に異なるハッシュ値になります。
一般的な用途:
- ファイル整合性の確認(ダウンロードが完全か)
- 改ざん防止(ファイルが変更されていないか)
- 重複排除(2つのファイルが同じか)
- パスワード保存(平文ではなくハッシュを保存)
一般的なハッシュアルゴリズム
MD5
- 出力:128ビット(32文字の16進数文字列)
- 高速
- 既に破解されており、衝突が存在(異なるファイルが同じハッシュ)
- セキュリティ用途には不適切
- 整合性チェック(非セキュリティ)では依然として使用可能
SHA-1
- 出力:160ビット(40文字の16進数文字列)
- 中程度の速度
- 既に破解されており、衝突が存在
- セキュリティ用途には推奨されない
- Gitは当初SHA-1を使用していたが、SHA-256に移行中
SHA-256
- 出力:256ビット(64文字の16進数文字列)
- やや低速
- 安全、現在衝突なし
- セキュリティ用途に推奨
- ブロックチェーンやHTTPS証明書で使用
SHA-512
- 出力:512ビット(128文字の16進数文字列)
- 低速
- SHA-256より高いセキュリティ
- 高セキュリティ用途に適する
選択の目安
- 整合性チェック(非セキュリティ):MD5で十分(高速)
- セキュリティ用途:SHA-256(セキュリティと速度のバランス)
- 高セキュリティ用途:SHA-512
- 非推奨:SHA-1(破解済み)
ハッシュ検証の原理
ハッシュの生成
- ファイルの全内容を読み取る
- ハッシュアルゴリズムで計算
- 固定長の文字列を出力
検証プロセス
- ダウンロード時に公式ハッシュ値を取得
- ローカルでファイルのハッシュ値を計算
- 2つのハッシュ値を比較
- 一致 = ファイルは完全、不一致 = 破損または改ざん
整合性を検証できる理由
ハッシュアルゴリズムの特性:
- 同じ入力は常に同じ出力を生成
- 異なる入力が同じ出力になることはほぼない(衝突確率は極めて低い)
- 1バイトの変更で出力が完全に変わる(アバランシェ効果)
そのため、ファイルが1バイトでも変わるとハッシュ値も完全に異なります。
利用シーン
ダウンロードの検証
大きなファイル(システムイメージ、ソフトウェアインストーラー)をダウンロードする際、公式がハッシュ値を提供します。ダウンロード後にローカルでハッシュを計算して比較し、ダウンロードが完全で破損していないことを確認します。
改ざん防止
重要なファイル(契約書、証拠)のハッシュを生成して保存します。後日、ファイルが変更されていないかを検証します。
ファイル重複排除
2つのファイルのハッシュが同じであれば、内容は同じです(衝突確率は極めて低い)。ハッシュで重複を判定する方が、バイト単位の比較より高速です。
パスワード保存
ウェブサイトはユーザーパスワードの平文ではなくハッシュ値を保存します。ログイン時に入力されたパスワードのハッシュを計算して比較します。データベースが漏洩しても、攻撃者は平文パスワードを取得できません。
デジタル署名
デジタル証明書はハッシュと暗号化を組み合わせて、ファイルの出所と整合性を検証します。
ファイルハッシュの検証方法
DocsAllで検証
- ファイルをアップロード
- ツールがMD5、SHA-1、SHA-256を計算
- ハッシュ値を表示
- 公式ハッシュと比較
ブラウザ内で計算、ファイルはアップロードされません。
Windowsコマンドライン
certutil -hashfile ファイル名 SHA256
Mac/Linuxコマンドライン
shasum -a 256 ファイル名
md5 ファイル名
ハッシュの比較
- 公式ハッシュ値をコピー
- 比較欄に貼り付け
- ツールが自動比較
- または手動で1文字ずつ比較
よくある質問
ハッシュ値が一致しない
- ダウンロードが不完全:再ダウンロード
- ファイルが改ざんされている:信頼できるソースから再ダウンロード
- ハッシュアルゴリズムが異なる:同じアルゴリズムで比較しているか確認
MD5はまだ使えますか
- 整合性チェック(非セキュリティ):使用可能
- セキュリティ用途(改ざん防止、パスワード):非推奨、SHA-256を使用
- 衝突リスク:同じMD5を持つ異なるファイルを構成可能
ハッシュから原文を逆算できますか
できません。ハッシュは一方向関数です。ハッシュ値から原文を復元することはできません。そのためパスワードハッシュの保存は安全です(漏洩しても平文を取得できません)。
大きなファイルのハッシュ計算が遅い
- ハッシュ計算はファイル全体を読み取る必要がある
- 大きなファイル(数GB)の計算には時間がかかる
- 正常な動作です、お待ちください
ハッシュ値の大文字・小文字
ハッシュ値は16進数文字列であり、大文字・小文字は関係ありません(a と A は等価)。比較時は大文字・小文字を無視してください。
セキュリティのポイント
信頼できるソースのハッシュ値を使用
公式ウェブサイトや信頼できるチャネルからハッシュ値を取得してください。出所不明のハッシュ値で検証しないでください。攻撃者によって差し替えられている可能性があります。
強力なハッシュアルゴリズムを使用
セキュリティ用途にはSHA-256以上を使用してください。MD5とSHA-1は安全ではありません。
ハッシュは暗号化ではない
ハッシュは一方向で、復号できません。暗号化は双方向で、復号できます。ハッシュを暗号化として使用しないでください。
ソルト付きハッシュ
パスワード保存時はソルト付きハッシュ(salt + passwordをハッシュ)を使用し、レインボーテーブル攻撃を防ぎます。
DocsAllでハッシュを計算
- ファイルをアップロード
- MD5、SHA-1、SHA-256、SHA-512を自動計算
- すべてのハッシュ値を表示
- 必要なハッシュ値をコピー
- 公式値と比較
ブラウザ内で計算、ファイルはサーバーにアップロードされません。
まとめ
ファイルハッシュはファイルの指紋であり、整合性検証と改ざん防止に使用されます。MD5は高速ですが破解済み、SHA-256は安全で推奨されます。検証時は信頼できるソースからハッシュ値を取得し、同じアルゴリズムで比較してください。DocsAllファイルハッシュツールはブラウザ内で実行され、ファイルを外部に送信しません。