見出し画像

PINとパスワードの違いを説明できるITエンジニアは少ない

7payのニュースで「2段階認証」が話題になったことは記憶に新しい。といっても、もう去年の話になってしまった。

「2段階認証」とは、認証行為を1回で終わらせるのではなく、2回行うことを言う。言うまでもなく、「1回より2回の方が強度が高い」からではある。だが、例えば、
1回目)ID/パスワードを入力して認証
2回目)秘密の質問の答えを入力して認証
これでセキュリティ強度は高いと言えるだろうか。

答えはNoである。(1回目だけで終わるよりはマシ、というのはその通りだが)

なぜか?それは、どちらも知識要素の認証だからである。

知識要素を説明する前に、そもそも認証とは何か?ということを考えたい。

認証とは、対象の正当性や真正性を確かめる行為のことである。
ことITの領域においては、「正当なアクセス権がある本人であることを、認証要素を確認することで、ログインを許可すること」とほぼ同義となる。

では次に、認証を行う上で重要な「認証要素」とは何だろうか。それは下記の3つである。

1.知識
2.所有
3.生体

1の知識要素とは、認証する人が「知っていること、記憶していること」のことである。この代表的なものが、パスワードやPINとなる。
2の所有要素とは、認証する人が「持っているもの、受け取ったもの」となる。ICカードやスマホなどのデバイスがわかりやすいが、例えばSMS等で送られてくるワンタイムパスワードもこれにあたる。SMSで送られてくるメッセージの送信先は、個人の記憶ではなく、デバイスに紐付いているからである。
3の生体要素は文字通りで、「自分の体」のことである。指紋、虹彩、指静脈、声紋など、様々だ。これが最も強力な認証要素と言われている。

ここまで読んだならもうおわかりかと思うが、先程の問題、
「1回目)ID/パスワードを入力して認証
 2回目)秘密の質問の答えを入力して認証
これでセキュリティ強度は高いと言えるだろうか。」
この答えがNoなのは、パスワードと秘密の質問という、「個人が知っている情報」つまり、知識要素のみで認証行為が行われているからである。この場合、悪意ある第三者が、ID/パスワードと、秘密の質問を総当りで見つけ出せば簡単に認証を突破されてしまう。(最低でも、入力値(ID/パスワード、秘密の質問)の入力回数を制限しておく、といった対応が必要となる)

さて、それではどうセキュリティ強度を上げればよいのか?その答えの一つが、2要素認証である。2要素認証とは、先に述べた「認証要素」のうち、異なる認証要素を2つ組み合わせた認証のことである。

最もわかりやすい身近な例が、ATMである。暗証番号という知識要素に加え、キャッシュカードという所有要素を使って認証する。どちらか一方だけ盗まれても、もう一方を守れば認証は突破されない。
最近は暗証番号ではなく、生体認証を使うATMが多い。知識要素の「忘れやすい」「漏れる恐れがある」という弱点に対して、生体要素は反対の特徴があるからであることは明白だ。(ちなみに、ほとんどのATMなどで使われている認証は、指紋認証ではなく「指静脈認証(静脈の形状パターン)」である)

ITシステムで例えると、あるサイトにID/パスワードを入力して認証(1)を行う。すると、事前に登録済みのスマホにSMSで認証コード(ワンタイムパスワード)が送られる。この認証コードをサイトに入力して認証(2)することで、はじめてサイトにログイン可能となる。ここではどの要素が使われただろうか。
(1)は、覚えていれば良いものであり、知識要素による認証となる。
(2)は、パスワードだから知識要素かと思うかもしれないが、所有要素である。スマホという所持品を使わないと認証できない(知識要素を盗んだだけでは成りすましができない)ことがセキュリティ強度を上げているわけだ。

では、この認証コードを、SMSではなく、サイトに登録したメールアドレスに送る場合はどうだろうか?
この場合、メールアドレスとメールサーバにアクセスするパスワードのセットを盗聴できれば、スマホが無くとも認証は可能になってしまう。すなわち、知識要素のみの認証であり、これは2要素認証ではない。
(なお、この「メールアドレス」を第三者でもパスワード再発行時の宛先として任意に設定できるようになっていたのが7payである)

さて、ここまで、事例を引き合いに、「2」段階認証と「2」要素認証というわかりやすい対比で話を進めてきたが、セキュリティを考えた際にこの対比は適切ではない。そもそも2段階認証などいう用語は、セキュリティ的にはほとんど意味をなさない。
比較をするなら、

単一要素認証多要素認証

という対比が適切だろう。これはシステムのセキュリティ強度のチェックとしても意味がある。(ただ、最も重要なのは「何から何を守るのか」「守るべきもののためにかけるコストはどのくらいが妥当か」という問いであり、資産価値に応じたセキュリティ対策をとることが肝要である)

だいぶ前置きが長くなったが、タイトルの
「パスワードとPINの違いとは何か?」
に触れる。

まず、PINの正式名称をご存知だろうか。
PINとは、「Personal Identification Number」であり、「個人を識別するための番号」と訳せる。通常は数字で構成されることがほとんどで、「パスコード」や「暗証番号」とも言われる。場合によって英数字が用いられることもある。
それでは、これはパスワードとどう違うのだろうか。

PINがパスワードと異なる明確な理由は2つある。

1つ目は、PIN はデバイスと密接に関連付けられているということだ。

PINは通常4~6桁ほどの数字で、8桁も10桁もある英数字+記号のパスワードより強度は低そうに見えるが、そうではない。PINだけ盗まれても、紐付いたデバイスが無いとそのPINは有効にならない。つまり、PIN自体が2要素認証の概念を含んでいると言える。

2つ目は、PIN はローカルなものである、という点だ。

通常、パスワードはクライアントで入力され、暗号化されサーバに送信される。一方、PINはネットワーク上で転送されることを想定していない。デバイスにPIN を入力すると、認証キーのロックが解除され、サーバに対して認証情報が送信される。

ということで、ここで論じたいのは、パスワードとPINの定義の違いを知っているか?などという単純な問いではない。
パスワードとPINの違いを知っているということは、適切にセキュリティ設計ができるか、ということである。

我々ITエンジニアは、正しい知識を持ってITシステムの設計を行うことが大切だと肝に銘じたい。

・・・というところで、一応綺麗にまとまっているのだが、ここで論じたいことが実はもう一つある。

それは、デジタル社会の中で、いかにして自分を自分と認めてもらうか?という命題である。

ディープラーニングの社会実装によりAIが発展し、人間とコンピュータの存在が近づきつつある。また、VR/ARの実現によって、仮想現実と現実の境界が曖昧になっている。
物理的な移動コストは年々高くなる一方で、インターネットを代表とする仮想空間に触れるコストは下がり、そちらが生活の大半を占め始めている。仮想空間はデジタル空間であり、個人を特定する難しさは物理空間のそれと比較にならない。

すなわち、これからの時代において、自分が自分であることを証明することの重要性が高まっていくことは間違いない。

そして、この問題にプロとして解決策をもたらす、我々ITエンジニアの価値も、ますます高まっていくと考えている。

この記事が気に入ったらサポートをしてみませんか?