用語まとめ~暗号化とハッシュ化、時々エンコード~
あれ、オカンとボクと、時々、オトン風な記事名、
前も使ったような…
それにしても休日終わるの早杉内。
今日も元気にジマテーションです。
今日は家で鳥くん達とお絵かきしてました。
せっかくなので、わたしの絵と鳥(カツ)コラボしました。
キュウべぇならぬ、カツべぇです…
ンガワイイ!!!!(親ばか)
既に契約済みのまどっちに声をかけています!
アホガワイイ!!!!
雑談はこのくらいにして、
今日は暗号化とハッシュ化の違いについて
ちょちょっとまとめるでござる。
違いも何も、暗号化とハッシュ化って全然別物やん!
何言うてんのこのこは!
と、思った方はそっと退出をお願いします…
わたしついこの間まで
「暗号化」と「ハッシュ化」って同義語だと思ってました。
業務中に、暗号化するメソッドを作ったり、
ハッシュ化するメソッドを作ったことはあったんだけど、
2つの単語についてちゃんと調べたことがなくて、
「パッと見ただけでは理解する事が出来ない形に変えること」
と、感覚的に思い込んでいました。
がしかし、両者には決定的な違いがありました。
・暗号化
可逆な存在
=複合することができる
=変換方式が決まっているため、だれでも復元(decode)できる。
・ハッシュ関数化
不可逆な存在
=複合することが出来ない
可逆な存在といえば「Base64」
エンコード(暗号化)も出来るし、デコード(複合化)もできる。
(でもね、厳密には暗号化=エンコードとは言えないんだよ…)
(詳しくはもう少し下で…)
逆に、不可逆な存在といえば「SHA-1」
こっちは複合化することが出来ない。
複合できないってことは、たとえば
ウェブアプリケーションAからウェブアプリケーションBに
パスワードを送る場合、
もし通信途中に誰かがパスワードを盗み見ても
パスワードの内容を知られることはない!ってことだ!
おお~!セキュリティ!
ちなみに、ハッシュ化した値を確認したい場合は、
「ハッシュが同じ値になる」ことでしか
一致かどうかを確認することが出来ないのだ~
(いい言い回しが思い浮かばない)
ちなみに、さっき上で少し触れた、
「Base64エンコード」は「暗号化」するとは言えない件について…
「暗号化する」も「エンコードする」も
"データを変換する"という意味では同じなんだけど、
IT業界では、
「暗号化する」は、
第3者にバレないように変換する。(当事者しか復元できない)
「エンコードする」は、誰でも復元できる。
っていう観点から、「暗号化」と「エンコード」は
全く別の意味を持つ単語っていう解釈が一般的なんだって。
「エンコードする」は「記号化する」って解釈すべきなんだって。
ほむほむ。
むずかしいな!
ちなみに今日の記事の内容、
先日投稿した記事の中で
「暗号化」と「ハッシュ化」を同義語として扱っていた私に、
大阪の小栗先生がわざわざスカイプで
両者の違い(+アルファ)について特別授業を開いてくれたんですが、
その内容をまとめたものです。
小栗先生、本当にありがとうございました。
あ、あとこれもこれも。
小栗先生が送ってくれたスカイプの内容そのままのっけるけど、
「余談ですが、
Base64は、インターネットと関連してるのよ。
たとえば、メールの通信規格だと、テキストデータしか扱えないんです。
なのに、画像ファイルや音楽ファイルをバイナリデータを添付できるよね。
なぜ?
http://e-words.jp/w/BASE64.html」
はい、わたしこの「なぜ?」に答えていませんでした。
答えは添付してくれたURLに載ってるんだけど、
これをまとめると、
「送信時に一定のルール(=Base64)に従ってデータを文字(テキスト)に置換し、
受信後に元のデータに復元(デコード)する、という手法が取られているから。」
普段生活してる中で、常にめちゃくちゃお世話になってたんだね…
Base64、あにがとう…
小栗先生、また特別授業お願いします。
つぎの記事いくぞ~