パスワード、パスフレーズ、秘密鍵、アクセストークン、二段階認証、ワンタイムパスワードの違い
理解が曖昧だったところもあったので調べた。
パスワード(Password)
言わずもがな、本人認証の常套手段。
パスフレーズ(Pass-phrase)
パスワードの一種で 「フレーズ(わかりやすい言葉)を組み合わせた」「長い」パスワード のこと。
いくつか例を挙げる。
- 例1: yahariorenoseisyunrabukomehamatigatteiru
- お気に入りのフレーズモロ
- 「やはり俺の青春ラブコメはまちがっている」
- 例2: K1ll_tw0_b1rds_w1th_0ne_st0ne
- お気に入りのフレーズ + 換字
- 「一石二鳥の英語 Kill two birds with one stone」
- iを1に、oを0に、スペースを_に置換
- 例3: vim-atom-sublime-emacs-eclipse-vscode
- 好きな単語を並べて区切った(ここではテキストエディタやIDEの名前)
パスフレーズが生まれた背景
- パスワードの設定は正直面倒くさい
- でも短めにしてるとセキュリティ上危うい(クラックされる)
- 強力なパスワードを考えるのは面倒くさいし、覚えるのも大変
- 何か良い方法はない? → 覚えやすいフレーズを並べて長くするのはどう?
パスフレーズの特徴
- 長いのでクラックされない(スパコンでも解読できない)
- フレーズなので覚えやすい
- 長いけどフレーズなので打ちやすい
パスフレーズの問題点
- システムによっては文字数制限にひっかかって設定できない
- 例: 「半角英数8文字以内」
- フレーズの作り方を工夫しないとパターン(傾向や特徴)が出てしまい、クラックされてしまう
- 例: 固有名詞やことわざを片っ端から総当たりすれば上記例1は解読される
- (パソコンはともかく)スマホからは打ちづらい
- そもそもタイピングに習熟してない人にとっては(入力に時間がかかるので)辛い
秘密鍵(アクセストークン)
プログラマやエンジニアにはお馴染みだが、平たく言うと「自分と相手のみが知っているおまじない」のこと。
- クライアントは事前にシステムにログインし、秘密鍵を登録しておく
- クライアントは秘密鍵(アクセストークン)を持っている
- クライアントはログイン時、システムに秘密鍵を提示する
- システムは提示された秘密鍵を調べ、正しいものであるか調べる
- 正しくない → お前誰やねん
- 正しい → ようこそ。ログインを許す。
普通にログインする際は使わず、スクリプトからシステムの機能を利用する(REST APIを叩くなど)といった用途で使う。たとえば REST API を叩く際に、リクエストヘッダにアクセストークンを付与しておくと、システム側でそれをチェックできる。
パスワードと違う点は、ID が必要ないことと、文字列がべらぼうに長くて複雑(数十から数百文字の英数字列)であること。
※この辺りの話は奥が深く、厳密には秘密鍵=アクセストークンではないが、ここではわかりやすさのためイコールにしている。
二段階認証
パスワード入力 +αで何かを入力させて認証させる方式。+αとして「ケータイに送信されたセキュリティコードを更に入力させる」やり方が多い。
Google や Dropbox を始め、主要なサービスは大体実装している。
Q: 二段階認証はなぜ必要?
パスワードは第三者に漏れたらおしまいだが、二段階認証があればおしまいにならない。たとえ第三者に漏れたとしても、そいつは続くセキュリティコードを知る術がない(コードは本人のケータイに送信される)ため先に進めない。
また、本人は「ログインしてないのになんでセキュリティコードが来てんの?誰か不正ログインしたやろ?」と気付けるメリットもある。
Q: でもいちいちコード打つのは面倒じゃない?
煩わしさを省くため、一度二段階認証した端末については以降のコード入力を省くようになっている。それでも他の端末からログインした場合はコード入力が発生するため、セキュリティは担保される。
ワンタイムパスワード
主に銀行で使われてる方式で、その場限り(ワンタイム)のパスワードを専用の装置やアプリによって生成し、それを使ってログインするというもの。ログイン後、そのパスワードは無効になるため、仮に漏れたとしても問題はない。
メリットとして「パスワードを覚える必要がない」ことが挙げられる。ユーザーは装置やアプリ上でボタンを押すだけで良い。それで表示されたパスワードを打てばいい。
もちろんその専用装置・アプリが第三者の手に渡ってしまうと意味がないので、紛失しないよう管理が必要。
Q: その場限りでパスワード作る?そんなのどうやって実現するの?
専門的な話になるが、 「認証」の基礎知識(7):ワンタイムパスワードの方式 – せぐなべ あたりで端的にまとまっている。
平たく言うと、ユーザー側が持ってる「ワンタイムパスワードを生成する装置 or アプリ」の生成アルゴリズムがシステム側でも保持されているので、システム側は「受け取ったパスワード」を復元して「ちゃんと正規の手順で作成したパスワードだよね?」がわかる。
参考
- ワンタイムパスワード | 三菱UFJ銀行
- メールによるワンタイムパスワードについて|ゆうちょダイレクト
- ワンタイムパスワードについて - SQUARE ENIX
- 専用のハードウェア装置
- 「認証」の基礎知識(7):ワンタイムパスワードの方式 – せぐなべ
- 仕組みについてわかりやすい
(おまけ) マジックリンク
初耳だったのでついでに紹介。
ログイン時に ID を入力すると自分のメアドに「ここに書いた URL にアクセスしてね。そしたらログインできるよ」というメールが送られ、そのとおりに URL にアクセスするとログインできる……という認証方法。
チャットツール Slack で導入されている。手順としては、ログイン画面に「マジックリンクを送信」ボタンがあり、これをクリックするだけという感じ。