【セキュリティ】ハッシュ / Hash

■ はじめに

ハッシュについてまとめる。

目次

【1】ハッシュ
【2】特徴
【3】用途
【4】使用上の注意
【5】主なハッシュアルゴリズム

【1】ハッシュ

 * あるデータをハッシュ関数という特別な関数を使うと、
 決まった長さのビット列になる、この値を「ハッシュ値」という
 * ハッシュ値の別名として、
 「メッセージ・ダイジェスト (message digest) 」
 「フィンガープリント(指紋)」と呼ぶ場合もある

http://itpro.nikkeibp.co.jp/article/COLUMN/20060628/241960/

【2】特徴

 * 異なるデータから同じハッシュ値が得られることはほとんどない
 * ハッシュ値とハッシュ関数が分かっていても
 元データを算出できない
 => 改ざんされる恐れが減る

【3】用途

* ユーザー認証
* デジタル署名(または電子署名)
* ファイルの整合性
etc...

【4】使用上の注意

 * 以下のURLで言われているが、

http://www.javaroad.jp/bbs/answer.jsp?q_id=20060203152045485

「暗号化」と聞くと元に戻せる、
つまり「複合化」できるイメージを抱いてしまうが、
ハッシュで暗号化すると、基本、元に戻せない
 => ハッシュ関数は、「不可逆的な一方向の関数」とも呼ばれる。
   「一方向」ってことは、元に戻せないってこと。

以下のサイトでは「ハッシュ」と「暗号化」の違いについて書いている。

http://blog.goo.ne.jp/xmldtp/e/b6a697735a597e8e41af460ae2f2875a
http://d.hatena.ne.jp/digisecdog/20101119/1290147066

このブログでは、以下のサイトであるとおり、
「暗号化」を「改ざんされたりされないよう、
決まった規則に従ってデータを変換すること。」と定義し
タイトルを「ハッシュで暗号化」っとしている
(ただ、混同しやすいので意識したほうがいい)

http://e-words.jp/w/E69A97E58FB7E58C96.html

【5】主なハッシュアルゴリズム

# アルゴリズム ビット長 備考
1 MD5 128 脆弱性が判明しているため、非推奨
2 RIPEMD 128, 160, 256, 320 160bit版がビットコインに使われている
3 SHA-1 160 脆弱性が判明しているため、非推奨
4 SHA-2 224, 256, 384, 512 SHA-1の改良版。256bit版がビットコインに使われている
5 SHA-3 (Keccak) 224, 256, 384, 512 SHA-2に代わる新しいアルゴリズム

関連記事

メッセージ認証コード ~ MAC / HMAC ~
https://dk521123.hatenablog.com/entry/2022/10/05/095506
ブロックチェーン ~ 基礎知識編 ~
https://dk521123.hatenablog.com/entry/2020/04/01/000000
Python】ハッシュ
https://dk521123.hatenablog.com/entry/2020/05/03/010502
Java】ハッシュで暗号化する
https://dk521123.hatenablog.com/entry/2014/08/02/234119
Java でEmail を送るには ~ SMTP認証 / DIGEST-MD5 編 ~
https://dk521123.hatenablog.com/entry/2016/12/07/222229
Linux】md5sum ~ MD5ハッシュ値を返す ~
https://dk521123.hatenablog.com/entry/2017/01/30/220600