にしし ふぁくとりー(西村文宏 個人サイト)

Presented by Nishishi via Movable Type. Last Updated: 2015/09/22. 13:18:50.

暗号化したパスワードは、復号化する必要はない

データを暗号化して保存した場合は、当然、閲覧するときには復号化する必要があります。
なので、通常は、暗号化できるなら復号化もできないと困ります。
(※暗号化された文字列を元に戻す処理が「復号化」。)

「ABCDE」という文字列を暗号化して「3#5b$」という文字列に変換した場合、
「3#5b$」という文字列を復号化して「ABCDE」に戻せないと困るわけです。
当たり前ですよね。

ABCDE→(暗号化)→3#5b$ / ABCDE←(復号化)←3#5b$
なので、復号化もできる方法で暗号化します。

パスワードは最初に暗号化したら、二度と復号化する必要はない

でも、「パスワードの正しさを確認する」目的に限っては、暗号化すれば十分で、復号化する必要はありません。

例えば、「ABCDE」という5文字をパスワードとして使う場合を考えます。
最初にパスワードを作成するときに、「ABCDE」という文字列を暗号化関数を使って暗号化します。その結果、「3#5b$」という文字列が得られたとします。システムには、この暗号化後の文字列「3#5b$」だけを保存しておきます。

ABCDE→(暗号化関数で変換)→3#5b$

次に、ユーザがログインしようとしてパスワードを入力した際には、(保存してある「3#5b$」を復号化する必要は無く)「ユーザが入力した文字列」を、『同じ暗号化関数』を使って暗号化してみれば良いだけです。
例えば、以下のような感じです。

■入力したパスワードが間違っている場合:
ユーザが入力した何らかの文字列を暗号化してみたところ、「%5q8!」になったとします。
このとき、保存されている「3#5b$」とを比較すれば、「入力されたパスワードは間違っている」ことが分かります。
(ユーザが何と入力したかは知る必要がありませんし、元のパスワードが何なのかも知る必要はありません。)

  1. ?????→(暗号化関数で変換)→%5q8!
  2. %5q8! と 3#5b$ は異なるので「不一致」
  3. 結果、「パスワードが違う」と分かる。

■入力したパスワードが正しい場合:
ユーザが入力した何らかの文字列を暗号化してみたところ「3#5b$」になったとします。
ここで、保存されている「3#5b$」とを比較すると、「入力されたパスワードは正しい」ことが分かります。
(ユーザが何と入力したかは知る必要がありませんし、元のパスワードが何なのかも知る必要はありません。)

  1. ?????→(暗号化関数で変換)→3#5b$
  2. 3#5b$ と 3#5b$ は同じなので「一致」
  3. 結果、「パスワードは正しい」と分かる。

つまり、

  • 保存してある(暗号化済みの)パスワード
  • ユーザが入力した文字列を(同じ暗号化関数を使って)暗号化した結果の文字列

の一致を確認すれば済みますから、保存されている「3#5b$」をわざわざ復号化して「ABCDE」に戻してから比較する必要はありません。
パスワードは一旦暗号化したら、復号化することなく正しさを確認できるわけです。

パスワードの暗号化には、復号化できない方法を使う

なので、パスワードの暗号化には、元に戻せない方法(復号化できない方法)を使います。
それによって、たとえ「暗号化された状態のパスワード」が外に漏れたとしても、「元のパスワードそのもの」は誰にも分からない仕組みにできます。

例えそのシステムの管理者であっても、覗けるのは「暗号化された状態のパスワード」だけであって、ユーザが実際にどんな文字列をパスワードとして使っているのかは分かりません。
「復号化できない」からこそ、管理者ですらユーザのパスワードが何なのかは分からないので、安全が保たれます。

ABCDE→(暗号化)→3#5b$ / ×不可←(復号化)←3#5b$

※暗号化された文字列「3#5b$」から、元の文字列「ABCDE」に戻す方法がないのなら、「3#5b$」自体が漏れても不正にログインされたりはしません。

パスワードを忘れたときに、「再発行される」か「教えてくれる」か?

あるシステムが、パスワードをどのように取り扱っているかは、ユーザがパスワードを忘れたときのために用意されている仕組みを見ると推測できます。

例えば、「あなたのパスワードは XXX ですよ」と教えてくれちゃうシステムの場合、保存されているパスワードは暗号化されていないか、もしくは復号化可能な方法で暗号化されています。
この場合、パスワードが漏洩したら、本当に自分が使っているパスワードがバレてしまう可能性があります。

「パスワードを再設定させてくれる」場合や、「パスワードを(システム側が新たに決めた文字列で)再発行する」場合は、システム側でもユーザのパスワードが何なのかは分からない仕様になっているということでしょう(少なくともその可能性があります)。その場合、パスワードは(たぶん)復号化できない方法で暗号化されてます。
この場合、パスワードが漏洩しても、元に戻せない状態で暗号化されているので、大きな問題にはなりません。

「パスワードが漏洩」というニュースが出たときは、元の文字列がバレたのか、それとも(復号化できない状態の)暗号化された文字列が漏れたのかで、影響がかなり異なります。

……という話を

某所でするためにちょっと書いたんだけど、結構長い……。(^_^;;;
もうちょっと簡潔に説明できんものかな……と思ったり思わなかったり。
どんなもんかな……?

コメント

 PC-VANでは、PWを忘れた場合会員証のコピーを郵送して初期化するということをしていましたよね。

投稿者 ONLY : 2013年03月09日 19:44

ああ、そんなことになっていたんですか。
忘れるということがなかったので、知りませんでした。^^;
まあたしかに、パソコン通信時代だと、たいていはネットワークに接続する手段がそれ1つしかないでしょうから、そのパスワードを忘れちゃったら郵送くらいしか手段がないですよねえ。(^_^;;;

投稿者 にしし : 2013年03月10日 00:05

コメント数: 2件

コメント投稿欄 この日記に対するコメント投稿を歓迎します。

保存しますか?



※本文中にURLは書けません。(書くと投稿が拒否されますのでご注意下さい。)

※投稿内容は、実際にページ上に掲載される前に、管理者によって確認される設定にしている場合があります。その場合は、投稿後にその旨が表示されます。たいてい1~2日以内には表示されるはずですので、気長にお待ち願います。m(_ _)m

トラックバック

このエントリーへのトラックバックURLを表示するにはここをクリック
※スパム防止のため、トラックバックURLは別ウインドウで表示します。(JavaScriptが有効でないと表示されません。)

--- 当サイト内を検索 ---