原理と現実

question:1203251805

「暗号化」というものの理解の難しさ。

「暗号化」が実際に使われる場面で、「通信に対する暗号化」と「保存されているデータの暗号化」の2つがあって、通信を丸ごと暗号化するのが、一般に「SSL」や「TLS」と呼ばれる暗号化。さらに、通信中にやりとりされるパスワードのみを暗号化(厳密に言うと、暗号化とはちょっと違うけど)のが、APOP(や CRAM-MD5 や DIGEST-MD5 も最近は聞くようになったかな)。で、メールデータそのものを暗号化してしまうのが、PGP や S-MIME。

これらをひとまとめして「暗号化しているから大丈夫」といった言い方をするけど、どの部分が暗号化されているかを理解していないと、何に対して安全になっているか分からない。

SSL や TLS の暗号化は「通信の暗号化」であって、通信中以外は暗号化されていない。たとえるならば、電話で話していて、こちらの受話器から相手の受話器までは暗号化されているので、電話線に盗聴器を付けられていても大丈夫、というもの。もし盗聴器が受話器そのものに隠しマイクが付けられていたら、やっぱり盗聴される。同じ事は SSL や TLS でも言えて、相手のサーバや手元の PC の「盗聴器」に当たるソフトが仕掛けられていたら、やっぱり盗聴される。

メールでの暗号化で強力なのは PGP や S-MIME だけど、これなら、SSL/TLS で暗号化されていなくても、メールの中身は分からない。ただ、暗号化されているのは、メールの「中身」であって、通信内容にはメールサーバへのアカウント情報、パスワードもあって、これらを守るのは PGP や S-MIME の仕事ではない。

無線 LAN の暗号化も、通信の暗号化のひとつだけど、先の SSL/TLS とは「区間」が違い、WEP や WPA が担当しているのは、無線 LAN 端末とアクセスポイントの間だけ。アクセスポイントから先の通信は、暗号化されていない。

回答の中に、「WPA は桁数が増えただけ」というのがあったけど、まぁ、細かいところを省いて「桁数が...」というのは良いとして、「桁数が増える」ことがどのくらい重要なことかが知られていない感じがする。同じ事はパスワードの長さにも言える。

パスワードに使える文字が大小英数字に限られているとした場合、使える文字は 62 文字。ということは、パスワードの長さが1文字増えるたびに、パスワードのバリエーションは 62 倍になる、ということ。

  • 1文字....62通り
  • 2文字....3384通り
  • 3文字....238328通り
  • 4文字....14776336通り

文字数が分かっていれば、すべてのバリエーションを試せば、いつかは見つかる。しかし、1文字長くなれば試す必要があるパスワードは 62 倍になる。今、4文字のすべてのパターンを試すのに1時間かかるコンピュータがあったとする。パスワードが5文字になれば、2日半以上かかる。仮にコンピュータの能力が 10 倍になっても、6時間以上かかる。違いはたった1文字である。

もちろん、情報の機密性が高い場合は、たとえ一部の情報が解読できても、全部が解読されないように、頻繁に鍵を変える、など、運用面もあるが、「単に鍵の長さが長くなっただけ」というのは馬鹿にできない。鍵の長さが 64 bit から 128 bit になった、と言われると、一瞬、手間が2倍になっただけ、のように思われるが、実際には、2 の 64 乗倍(18446744073709551616 倍)になっている。64 bit の鍵が、仮に1秒で見つけられたとしても、128 bit になれば 584942417355 年になる。

.......と解説してみても、なかなか分かりづらいよねぇ....。