Open toshirot opened 6 months ago
Google AuthentcatorなどのTOTP問題点
ワンタイムパスワード (OTP)をchatと同じサーバー側で生成すると、サーバー側の人間に覗かれる可能性がある。
それは、SMSでも同様。
ここは割り切り事項とするか別の方法があるか?
一般的にセッションはサーバー側で維持されるから相手を特定可能ではある。 セッションレスで、かつユーザー情報を秘匿してログイン状態を維持できるか?
匿名認証
匿名認証とは、ユーザー名・パスワードを入力せずに〇〇〇の会員登録を実施するものです。 いちどログアウトしたあとで再び匿名認証を実施すると別ユーザーとして登録されてしまうため、アプリを使い始めてもらうまでの仮ユーザーとして利用するといった用途があります。
まぁ使い捨てなら良いのかな
例 匿名認証 サーバーが一時的な識別子を生成 ユーザーがログインするときに、個々の識別情報や個人を特定する情報を一切提供せずに、一時的な識別子を生成します。この識別子はセッションに関連付けられ、サーバーはこの識別子を使用してユーザーを識別します。これにより、サーバーはユーザーの個々の情報を保持せずに、ログイン状態を維持できます。
匿名トークン サーバーが一意の匿名トークンを生成 ユーザーがログインすると、サーバーはユーザーに対して一意の匿名トークンを生成し、そのトークンをクライアントに返します。このトークンはユーザーを識別するために使用されますが、その内部情報はサーバーに秘匿されます。トークンの有効期限が切れた場合や、ユーザーがログアウトした場合には、トークンは無効化されます。
Pseudonymous identifiers(疑似匿名識別子) ユーザーが疑似匿名識別子を生成しサーバーへ送る ユーザーがサーバーに接続する際に、疑似匿名識別子を生成し、サーバーに送信します。この識別子はユーザーを一意に識別しますが、個々のユーザーの個人情報と直接的に関連付けられることはありません。サーバーはこの識別子を使用してユーザーを識別し、ログイン状態を維持します。
先日、ChatGPTにアドバイスされた、Google AuthenticatorなどのTOTPやSignalプロトコルなどを検討したけど、結局のところ
end-to-end で暗号化するには、口頭含めてchatサーバーとは別の方法で秘密のフレーズを共有さえできれば良いように思える。 ログイン認証もセッションもいらない。
end-to-endで暗号化するなら、AuthenticatorもSMSもむしろ、脆弱性につながると思う。
違うだろうか?
ここでは、TOTP(Time-based One-Time Password)を検討します
Time-based One-time Password Wiki
RFC6238 https://ja.wikipedia.org/wiki/Request_for_Comments
時間ベースのワンタイムパスワードとは?(TOTP) https://www.keepersecurity.com/ja_JP/resources/glossary/what-is-a-time-based-one-time-password/#:~:text=%E6%99%82%E9%96%93%E3%83%99%E3%83%BC%E3%82%B9%E3%81%AE%E3%83%AF%E3%83%B3%E3%82%BF%E3%82%A4%E3%83%A0%E3%83%91%E3%82%B9%E3%83%AF%E3%83%BC%E3%83%89%20(TOTP)%20%E3%81%AF%E3%80%81%E3%82%A2%E3%83%AB%E3%82%B4%E3%83%AA%E3%82%BA%E3%83%A0,%E3%82%B3%E3%83%BC%E3%83%89%E3%82%92%E5%85%A5%E5%8A%9B%E3%81%97%E3%81%BE%E3%81%99%E3%80%82