メールアドレスはアカウントの『永続的な』識別子として不適切
(utcc.utoronto.ca)- システム内部の長期的なアカウントIDを作る際、OIDCがメールアドレスを返すという理由だけで 永続ID として使うと、変更と再利用の問題を同時に抱え込むことになる
- メールアドレスは同じ組織内でも名前やログインと同様に変わり得るため、アカウントの基準値 とするには安定していない
- 以前のアドレスへのメールアクセスや転送が残っていたとしても、そのアドレスがOIDC認証のような メール以外の用途 でも引き続き機能する保証はない
- アカウント復旧にはメールアドレスが必要な場合があるが、認証システムが別の固有かつ永続的なIDを提供するなら、内部ID にはその値を使うべき
- ユーザーに見えない値であっても、アカウント内部の識別子は 意味のないID にしておくほうが、長期運用とセキュリティの面で単純になる
メールアドレスを永続IDとして使いたくなる理由
- アカウントごとの内部識別子を作る際にメールアドレスが候補に上がるのは、OIDCのような認証システムがメールアドレスを含むデータを返すため
- しかし、メールアドレスをアカウントの 永続的な内部識別子 にすると、変更可能性と再利用可能性という2つの問題が生じる
変更され得るアドレスは基準値になりにくい
- 最大の問題は、メールアドレスが 変更され得る こと
- 以前のメールアドレスが完全に消えないとしても、永続識別子 としては不十分
- 以前のアドレスへのアクセスや転送が残る場合がある
- それでも、その以前のアドレスがOIDC認証のようなメール以外の用途で引き続き機能するとは限らない
- ユーザーは不便になり得る以前のメールアドレスではなく、現在の新しいアドレスを使いたいと考える
再利用と復旧用メールは分けて扱うべき
- もう1つのやや小さな問題として、組織がメールアドレスを 再利用しない という保証はない
- 一般的には再利用される可能性がある
- 特に人気の高いアドレスは、影響力のある人が望んで例外的に再利用または再割り当てされることもあり得る
- アカウント復旧が登録済みメールアドレスを通じて行われる必要がある場合、メールを保存する必要があるかもしれない
- しかし、OIDCのように理論上は固有で永続的な内部IDがあるなら、その 内部ID を使うべき
- アカウント復旧用メールを保存する必要があるとしても、アカウントの内部識別子は 意味のないID であるべき
- この値がユーザーに公開されなくても、長期的には運用がより単純になる
- メールアドレスに過度に多くの意味を持たせると、セキュリティ上の問題 も潜んでいる可能性がある
1件のコメント
Hacker Newsのコメント
優れた本人識別子など存在しない
メールアドレスは変わるし、以前のメールへのアクセス権を失うこともある。
ユーザー名も嫌う人が多く、
user53267のような意味のない一意な名前より、一意でない名前を選びたがる。デバイスも紛失するため、Cookieに秘密のUUIDを保存したり、デバイスのパスキーを使ったりするだけでは解決しない。
理想的な解決策はなく、複数の方式を組み合わせる必要がある。ある人にとってはメールアドレスが長く安定していて本人識別子として優れているが、別の人にとってはユーザー名のほうが安定しており、そちらを好む。ただ、数十年どころか数年以上同じメインデバイスを使い続ける人はほとんど見たことがないので、デバイスベースの識別はおそらくうまくいかないだろう。
特に職場のメールアドレス
first.last@company.comでよく表面化する。多くのベンダー製ソフトウェアが Sign in with Google を使い、そのメールアドレスをベンダーアプリ内の識別子として保存する。結婚、離婚、トランジション、文化圏の移動、新しい名前の選択などで名前は変わり、メールアドレスも変わる。
もしかするとOIDCのようなものには、ユーザー名変更の標準APIやメールアドレス変更の標準APIのような新しい拡張が必要なのかもしれない。
公式身分証や社会保障番号のような公的識別子を除けば、これより良くするのは難しそうだ。
subクレームが再割り当てされず一意でなければならないと要求しており、この問題に対処している: https://openid.net/specs/openid-connect-core-1_0.html#IDToke...もちろんこれは、IDトークンの
subにメールアドレスを入れてはいけないという意味だ。正社員に転換されると完全に新しいアカウントを作らなければならない会社を経験したことがあり、シンプルで統合された権限システムがなかったため、転換直後は前日までアクセスしていたシステムの権限を取り戻すのに3週間ほどかかった。
さらに面白いのは、その会社が顧客向けに複雑なアカウント体系を提供する事業を多く手がけており、こうした問題を簡単に処理する外部向けのIDシステムも持っている点だ。ところが、その外部向けIDシステムを保守する内部社員には適用していない。
全員に数字が付いていたので、数字にはあまり意味がなかった。一意のアカウントIDに変わったときは少し残念だったし、なぜ変えたのか今でも気になっている。
個人としてこの問題に対処する最善のアプローチは何だろうか。
GmailはAIアルゴリズムのせいで突然ロックされたりアカウントが禁止されたりする可能性があり、何か問題が起きても救済手段がない。
Yahooは最近ログイン時に、15年間アクセスできていない休眠メールアドレスで認証するよう要求してきたため、アクセスを失った。運よくメールクライアントにはアクセスできたので、重要なアカウントを移行できた。
Yahoo/AOL/Tutanota/Protonmail/その他多数は、十分な頻度でログインしないとアカウントを自動削除する。Protonmailはまだそうしていないが、規約上は許可している。
セルフホスティングも、そもそもすべてのインフラにメールアドレスが必要だ。そのメールへのアクセスを失うと、支払い通知も見逃し、ホスティングアカウントも失いかねない。IMAPをサポートしておらず、ほとんど確認しないメールアドレスに支払い通知が送られたせいで、ドメインを失いかけたことがある。専門のシステム管理者で、保守に十分な時間を割けないなら、ハッキングのリスクも高くなる。
Duoのプッシュ通知は携帯電話が壊れたら終わりだし、SMS認証には携帯電話の破損、料金プランへのアクセス喪失、内部従業員によるコード漏えいといった問題がある。
結局、大学のGmailアドレスを使うことにした。卒業生も引き続き保持できると約束されており、何か問題が起きた場合――おそらく携帯電話の紛失で2段階認証を失う場合だろうが――まともな卒業生サポートセンターがある。
どこかに話せる人間のサポート窓口が絶対に必要だ。それでもこれが最善なのかは確信がなく、Google側のリスクがまだ残っているのか気になっている。
言われているように、ロックされたら「単に」プロバイダーを変えればよく、失うとしても多くて数時間分のメールだけだ。
メールアドレスが永続的な識別子として適していないという点には同意します。ただし、識別の一部として電話番号を使うのはさらに悪いです
自分のドメインでほぼ20年同じメールアドレスを使ってきましたが、同じ期間に電話番号はおそらく12個ほど変わりました。ウェブサイトが昔の番号で二段階認証を有効にしたままだったり、そもそもそのサイトに昔の番号を登録したことを忘れていたりするケースをよく見ます
海外在住中でも、いまだにその番号でログインコードを受け取るサイトがあるため、また番号を捨てると更新を忘れていたり米国番号が必要だったりして変更できない重要なサービスへのアクセスを失うのではないかと心配で、AT&Tに毎月約150ドルの税金を払いながら米国番号を維持しています
後でまたモバイル回線でその番号を使いたくなったら、好きな通信事業者へ再度移せばよいです
可能な二段階認証はGoogle Authenticatorのようなアプリに切り替え、番号はGoogle Voiceに移せば、昔の番号宛てのSMSを無料で受け取れます
Googleをまったく関わらせたくないなら、ほかにも時間ベースの認証アプリはたくさんありますし、SMS用にwww.tossabledigits.comを使うこともできます
通常の携帯電話サービスとして見ても高すぎます。2回線で月100ドルも払っていません
以前引っ越したとき、個人事務所の電話番号が新しい地域では許可されませんでしたが、VoIPアカウントへ移せたので幸運でした
当時はインターネットが遅かったので、しばらくイーサネット電話アダプターを使っていましたが、その後はその番号を受信専用としてだけ使っています。音声通話とファクスはすべてメールに転送されます
20年以上うまく動いています。接続する機器がないので年間費用もかなり低いです
いつか電話機をつないで今どきのインターネットを活用するかもしれませんが、今のやり方が気に入っていますし、特定の場所に縛られない点も良いです
私の経験も同じです。個人的にはランダムなUUIDが最善だと思います
ユーザーの最初のメールアドレスのハッシュでさえ理想的ではありません。ソルトだけでは不十分な場合がありますし、他の人がどんな入力メールアドレスでも安全にハッシュしてよいと仮定してしまう可能性があるためです
実務では常に自動採番の整数か、ランダム文字列/UUIDを主キーに使っています
電話番号、メールアドレス、住民登録番号のような国家ID、名前、指紋のように、人々が気にする現実世界の属性とは何の関係もない必要があります
ランダム文字列はこの条件にぴったりです。連番の整数でも構いませんが、推測しやすいので追加のセキュリティ対策が必要になる場合があります
公開鍵メールアドレスをサポートするのはどうでしょう? たとえば . のようなものと . のようなものをどちらも同等に扱う方式です
片方で登録したあと、もう片方でもログインしたりアカウント復旧したりできるようにします。Googleに禁止されたりHotmailが潰れたりしても、別のサービスに行って秘密鍵で認証し、同じアカウントを開けます
当然、使いやすい名前を使うためのエイリアス手続きは必要でしょうが、メールクライアントがそうしたアドレスをマッピングするか、少なくとも公開鍵と一緒に追跡する必要がありそうです
エンドツーエンド暗号化メールを組み込むきっかけにもなるかもしれません。これは大規模に定着したことがほとんどありません
実際に機能させるには大手事業者の対応が必要でしょうが、ざっと考えるとかなり堅牢に見えます。まだ誰も対応していないという点を除けば
プロバイダーや中央権威に依存せず、自分自身がアイデンティティを所有する形で、ウェブ上で識別しコミュニケーションする新しい方法が作られています
以前のエネルギー供給会社であるBritish Gas(Centrica所有)は、1つのメールアドレスを2つ以上の実住所に使うことを許可していませんでした
引っ越し後にオンラインアカウントを「設定」しようとしたところ、現在の住所の詳細を見るたびにHTTP 500が発生しました
電話で問い合わせると、以前の住所のエネルギーアカウントが閉じられていても「同じメールアドレスを複数の郵便住所に使うことはできない」と言われました
+whateverのトリックを使えます。Gmailならドット.のトリックも可能です今、1つのアカウントに複数の紐づけメールアドレスを許可するようにメールシステムを変更しているところです
主な理由の1つは学生割引を提供しているためです。アカウントに割引を適用する最も簡単な方法は、メールアドレスが教育機関のものかどうかを確認することです。
.edu、.ac.ukのようなものですただ、ほとんどの人は実際にはそのメールアドレスで登録したがらないようです。複数のメールを許可すれば、両方の長所を得られます
最初からこうしておけばよかったと思います
.eduの卒業生向け転送アドレスをもらえる人が多いことを知っておくべきですかなり良いアドレスを1つ持っています。早めに申し込んだので、単に自分の名前だけが入ったアドレスです
ただし、あまり使っていません。初期のころは転送が時々不安定でしたが、今は改善しているだろうと思います
現実的には、私のGmailアドレスはすでに数十年近く安定していて、変わりそうにもありません
いずれにせよ、私のeduアドレスはごく少数の人にしか知らせていません
最もエレガントではなくても、クライアント側の解決策はあります
ドメインを自費で維持すれば、メールエイリアスを100%制御できます
現在のプロバイダーであるGoogleが潰れても、自分でメールをホスティングしてアカウントを復旧し、エイリアスの所有権を維持できます
これはバックエンドの問題だと思う。ユーザーに見えるIDはメールアドレスでもよいが、システムデータ内の主キーがメールアドレスであってはならない。
いまだにこうしているところがあるのだろうか? メールアドレスのようなものを識別子として使うのではなく、本当に一意なID(UUIDやシーケンスベースの自動採番値)にマッピングするルックアップテーブルを用意するのは、ごく基本的なデータベース設計の問題だ。
記事ではこの区別があまり明確にされていないため、ユーザーがこの抽象化を意識すべきだ、というようにも読めてしまう。
永遠のものなどない。人間の一生を通じて安定しているものすら、ほとんどない。
簡単にスキャンできる生体標識でさえ、十分に大きな人口集団では安定して一意ではない。
メールアドレスはかなり長い期間にわたって安定して一意であるため、この用途に選ばれている。
電話番号も以前よりずっと粘着性のある識別子になり、今では有用な識別子としてメールアドレスに近くなっている。
メールアドレスと電話番号はいずれも頻繁に失われ、しばしば同時に失われる。
バックアップ用メールアドレスが答えだ。
GitHubは本人確認の扱いがうまいほうだと思うが、いまだにパスワードを使っている。パスワードはよくない。