「パスワードを2つも持つなんて危険では?」
そう思われるかもしれません。
しかし、第2パスワードを通常時は利用できず、信頼済みブラウザだけ利用可能に限定すれば、覗き見対策として利用価値があるかもしれません。
今回は、IndexedDBを利用した「第2パスワード方式」を考えてみました。
IndexedDB部分は信頼済みブラウザの判定として簡易的に使っているため、デバイストークンを用いた仕組みを使える人は、そちらのほうが良いです。
・HttpOnly Cookie
・Secure Cookie
・SameSite Cookie
あたりが使える人はそちらをご利用ください。
今回はパスキーは採用しませんでした。パスキーは非常に優れた仕組みですが、サービスや利用環境によっては導入・利用のハードルがあると感じたためです。優れたAPIが多い印象なので、特に利用面です。また、デバイス認証についても有力な選択肢ですが、「どこまでを同一端末として扱うか」や、ブラウザデータの削除・移行時の扱いなど、運用面で考えることが多いと感じました。
仕様
通常は今まで通りのパスワードでログインします。
ただし、以下の条件を満たした場合のみ、第2パスワードでもログインできます。
- IndexedDBに認証情報が保存されている
- 過去のログイン成功時にサーバーから取得したランダム値が保存されている
- サーバー側のランダム値と一致する
- 利用者が「第2パスワードを有効にする」をONにしている
ログイン画面には
「このブラウザでは第2パスワードが利用できます」
と表示します。
初回ログイン
初回アクセス時は次のような流れになります。
- ログイン成功したらサーバーがIndexedDB保存用のn文字(Base62)を返却する(この記事では、仮に6文字とします。多い方が安全です)
- ブラウザはそれをIndexedDBへ保存する
- 次回以降、IndexedDBに値がある場合のみ、第2パスワードが利用可能になる。フォーム送信時は、サーバー側でその個人とIndexedDBの値が合っているか判定し、誤っている場合はリジェクトする
サーバー側で保持するもの
サーバー側では、
- 通常パスワードのハッシュ
- 第2パスワードのハッシュ
- ランダムな6文字(Base62)
のみ保持します。
第2パスワードとは
第2パスワードは通常パスワードとは別に設定するパスワードです。
例えば、
通常パスワード
MyPassword123
第2パスワード
BlueCat987
のように、全く別の文字列にできます。
第2パスワードでログインした様子を見られても第1パスワードの中身が分からない
事がメリットです。
ログインには「第1パスワード」か「第2パスワード+何文字か分からないIndexeddbの文字列」のいずれかが必要になるのです。
覗き見だけではこれら2つのいずれも満たせません。
通常ブラウザでは通常パスワードのみ利用でき、
信頼済みブラウザではどちらでもログインできます。
3文字省略方式との比較
メリット
- サーバーに省略後ハッシュを複数保存しなくてよい
- 第2パスワードは完全に独立した文字列にできる
- 「3文字だけ推測すればよい」という状態にならない
デメリット
- 第2パスワードを覚える必要がある
- パスワードを2つ管理することになる
- 認証できるパスワードが2種類になる
最大のメリット
例えば、
- 電車内でログインしている様子を録画された
- 後ろからキーボード入力を見られた
- 記憶力の良い人に入力内容を覚えられた
という状況でも、第2パスワードでログインした場合に再現するのは、かなり困難です。
セキュリティ面
この方式も、
認証強度そのものを高める技術ではありません。
認証可能な入力パターンが増えるため、
IndexedDBが取得されるような攻撃では、
通常パスワードしか存在しない場合より不利になります。
3文字省略方式との比較
| 項目 | 3文字省略 | 第2パスワード |
|---|---|---|
| 分かりやすさ | ◎ 「先頭3文字まで省略できます」と表示するだけ | ○ 「第2パスワードが利用できます」と表示 |
| 入力の手間 | ◎ 少ない | △ パスワードを2つ覚える必要がある |
| 覗き見対策 | ○ パスワードの一部が見えない | ◎ 第2パスワードでログインした場合はログイン困難 |
| IndexedDB流出時 | △ 4通り試せる | △ 第2パスワードも候補になる |
まとめ
この方式も、
パスキーや多要素認証を置き換えるものではありません。
パスキーや多要素認証が利用できる状況であれば、そちらを優先する方が望ましいでしょう。
一方で、
- 先頭3文字省略方式
- 第2パスワード方式
はどちらも、
信頼済みブラウザ限定で、覗き見対策や入力負担を工夫するための独自アプローチ
としては面白いと感じました。
どちらを採用するかは、
- 覚える情報を増やしたくないなら「3文字省略」
- 覗き見対策に特化するには第2パスワード
という考え方で選択できると思います。