2022年にAppleがPasskeysを発表し、パスワードレス認証(パスワードレスログイン)に注目が集まっています。
名前としては何となく聞いたことがあるかも知れませんが、本記事ではパスワードレス認証について詳しく紹介します。
また、利用側としてだけでなく、開発サイドとしてパスワードレス認証にどう取り組めば良いかも解説します。
認証とは?
そもそも認証とは何でしょうか?
それは利用者を特定することで、その人しかアクセスできない情報や操作を提供する機能になります。
一般的にはユーザーが決めた(または運営側が決めた)ユーザーIDとパスワード、またはメールアドレスとパスワードを用いて認証を行います。
この従来の認証における問題点は以下のようになるでしょう。
パスワードを忘れてしまう
設定したパスワードを忘れてしまうと、サービスやアプリが利用できなくなります。
パスワードリマインダーでメールアドレスを入力し、再設定を行った経験は誰もがあるはずです。サービスによってはパスワードを郵送で、といったものまであります。これはユーザーにとって、大きなストレスです。
パスワードが漏洩するリスク
パスワードは、一般的に暗号化されてデータベースに保存されます。この時、パスワード自体は復号化できる必要はないので、ハッシュ化して保存されます。ログイン時に入力されたパスワードをデータベースに保存する時と同じアルゴリズムでハッシュ化し、その一致を見れば良いという仕組みです。こうすることで、万一データベースのデータが盗まれたとしても、パスワード自体は分からない状態にできます。
しかし、これにも問題はあります。安易なアルゴリズムを使っていると、総アタック方式で元パスワードが分かってしまう可能性があります。
パスワードを使い回す
上記の問題などがあり、忘れないパスワードにしようと各種サービスで共通したパスワードを使ってしまうことがあります。
しかし、それは大きなセキュリティリスクがあります。サービスAは堅牢であっても、サービスBがパスワードを漏洩した場合、サービスAにもログインされてしまう可能性があります。
そのため、パスワード管理ソフトウェアなどを用いて、パスワードを使い回さない工夫が必要となっています。
外部サービスを用いた認証
認証情報を保有することは、サービス運営側にとってリスクになります。
そこで外部サービスを用いた認証を利用している開発者の方も多いでしょう。
例えば、Twitter/Facebook/Google/GitHub/Appleなどです。これらの外部サービスを用いることで、パスワード漏洩リスクがなくなります。
ただし、外部サービス側で漏洩するリスクは一定量存在します。もちろん海外の巨大なサービスはセキュリティも堅牢なので、まず問題はないでしょう。しかし、パスワードが漏洩するかも知れないリスクがなくなる訳ではありません。
多要素認証
現在、多くのサービスで利用されているのが多要素認証です。
例えば、SMSやメールを用いたり、専用のワンタイムコードを生成します。SMSが受け取れるのはあらかじめ登録した携帯電話番号だけであり、そのデバイスを持っているという本人であるという証明になります。
ワンタイムコードも同様に、専用のアプリを用いることで保有者を保証します。さらに時間ごとに変わるコードを用いることで、万一パスワードが漏洩したとしても認証を突破できないようにします。
この多要素認証の考え方を発展させたのが、パスワードレス認証になります。
パスワードレス認証とは?
パスワードレスというのはその名の通り、パスワードを用いない認証方式になります。
従来の多要素認証では、まず通常の認証があった上で多要素認証によるコード確認というフローでした。
パスワードレス認証の場合はIDのみを指定して、その後の認証はデバイス側で行います。パスワードがないので、そもそも漏洩する情報がないというのが大きな特徴になります。
パスワードレス認証として有名なのがWebAuthnになります。
WebAuthnの仕組み
WebAuthnで用いるのは鍵(公開鍵・秘密鍵)になります。
秘密鍵はブラウザ内部にあり、外部サービスに公開鍵を保存します。
そして、認証時にはその秘密鍵、公開鍵を用います。秘密鍵を持っているのは、そのブラウザだけになりますので利用者を特定できるという訳です。
流れは以下のようになります。Face IDを使うことで、入力すらなく認証が完了します。
デバイス
登録時、認証時には以下のようなデバイスを用いるのが一般的です。
- ハードウェアキー
- 生体認証
- PIN
ハードウェアキーというのはYubiKeyに代表されるような認証用デバイスになります。YubiKeyでは指紋センサーが組み込まれたものもあり、ハードウェア+生体認証というケースもあります。
生体認証は、指紋や顔認証などです。
こちらはスマートフォンに元々存在する仕組みであり、それらを使って秘密鍵を安全に保管します。PINは4桁程度の数字をあらかじめ決めておいて、それが合っている場合に認証を開始するものです。セキュリティ的に弱いと思われるかも知れませんが、PINはあくまでもローカルにしか存在しない情報になります。
Passkeysについて
AppleがWWDCで発表したPasskeysもWebAuthnをベースに開発されています。
利用者は登録時にユーザー名やメールアドレスを登録し、後はFace IDを用いて情報がキーチェーンに保存されます。
認証する際にはFace IDを通すだけで、ログイン処理が完了します。パスワードを登録することもないので、漏洩する危険性はなくなります。
Monacaアプリにおけるパスワードレス認証
2023年01月の執筆時点では、Passkeysに対応したCordovaプラグインはないようです。生体認証を使って、情報を保存したり取得したりするプラグインcordova-plugin-keychain-touch-idはあります。なお、このプラグインは文字列をセキュアに保存するもの(パスワードなど)なので、パスワードレス認証には利用できないでしょう。
指紋認証プラグインcordova-plugin-keychain-touch-idを使ってパスワードをセキュアに保存しよう – モナカプレス
WebAuthnについては、AndroidとiOSともにサポートしています。iOSの場合、wkWebViewでも利用できます。ただし、WebAuthnは外部ドメインで利用する技術になりますので、Monacaアプリでそのまま利用することはできないでしょう。
現時点では、Passkeysに対応したCordovaプラグインを開発する、または開発されるのを待つということになりそうです。
まとめ
パスワードの管理や変更などでストレスを感じた経験は誰もがあるはずです。そうした面倒さをユーザーに感じさせてしまうと、アプリの利用すら避けてしまうかも知れません。そんなことにならないためにも、パスワードレス認証は取り入れたい機能になります。
セキュリティ周りの動きは速く、各ブラウザベンダーやスマートフォンベンダーも足早に取りかかっています。アプリ開発者としても、この流れを見逃さずにキャッチアップしていきましょう。