ハッシュと暗号化の違いは?
暗号化は正しい鍵で復号できますが、ハッシュは一方向で元データを復元できません。「ハッシュを解読する」ことは原理上不可能です。
MD5・SHA-1・SHA-256・SHA-512ハッシュ生成
セキュリティ目的(パスワード、認証)には使えません。ただし重複ファイルの検出やキャッシュキーの生成など、衝突が許容される非セキュリティ用途では依然として適しています。
暗号化は正しい鍵で復号できますが、ハッシュは一方向で元データを復元できません。「ハッシュを解読する」ことは原理上不可能です。
はい、ハッシュ関数は決定論的(同一入力→同一出力)です。スペース1つや大小文字の違いで完全に異なるハッシュ値が生成されます(アバランシェ効果)。
ハッシュ関数は任意長のデータを固定長の文字列(ダイジェスト)に変換する一方向関数です。MD5(128ビット)、SHA-1(160ビット)、SHA-256(256ビット)、SHA-512(512ビット)が代表的なアルゴリズムです。同一入力は常に同一出力を生成し、出力から入力を逆算することは計算上不可能です。
MD5とSHA-1には衝突攻撃(異なる入力から同じハッシュを生成する攻撃)が実証されており、セキュリティ目的には推奨されません。SHA-256とSHA-512は現在も安全で、パスワードハッシュ・ファイル整合性検証・デジタル署名に利用されます。ただしパスワードハッシュには、意図的に低速設計されたbcryptやArgon2の使用が推奨されます。
ダウンロードしたファイルのSHA-256チェックサムを公式に提供された値と比較することで、ファイルが改ざんされていないことを確認できます。Linux ISOやソフトウェアインストーラーでよく使われています。「アバランシェ効果」により、1ビットの変化でも完全に異なるハッシュ値になります。
SHA-256は高速すぎることが問題で、現代のGPUは毎秒数十億のハッシュを計算できます。bcrypt・Argon2は意図的に低速で高メモリを要求するよう設計されています。また、ソルト(各パスワードに追加するランダム値)を組み合わせることで、同じパスワードでも異なるハッシュが生成されます。
ビットコインのプルーフ・オブ・ワークでは、SHA-256の二重ハッシュの先頭に一定数のゼロが並ぶようなナンスを見つけることが要求されます。各ブロックには前ブロックのハッシュが含まれるため、過去のブロックを改ざんすると全ての後続ブロックのハッシュが変わり、即座に検出されます。