4 ポイント 投稿者 GN⁺ 2024-01-01 | 1件のコメント | WhatsAppで共有
  • システム内部の長期的なアカウントIDを作る際、OIDCがメールアドレスを返すという理由だけで 永続ID として使うと、変更と再利用の問題を同時に抱え込むことになる
  • メールアドレスは同じ組織内でも名前やログインと同様に変わり得るため、アカウントの基準値 とするには安定していない
  • 以前のアドレスへのメールアクセスや転送が残っていたとしても、そのアドレスがOIDC認証のような メール以外の用途 でも引き続き機能する保証はない
  • アカウント復旧にはメールアドレスが必要な場合があるが、認証システムが別の固有かつ永続的なIDを提供するなら、内部ID にはその値を使うべき
  • ユーザーに見えない値であっても、アカウント内部の識別子は 意味のないID にしておくほうが、長期運用とセキュリティの面で単純になる

メールアドレスを永続IDとして使いたくなる理由

変更され得るアドレスは基準値になりにくい

  • 最大の問題は、メールアドレスが 変更され得る こと
    • 同じ組織内でも人のメールアドレスは変わることがある
    • 人の 日常的に使う名前ログイン が変わるのと同種の理由で変更され得る
    • 組織が割り当てたメールアドレスの変更や再発行を拒否することは、多くの場所で法的に長く維持しにくいほど過酷になり得る
  • 以前のメールアドレスが完全に消えないとしても、永続識別子 としては不十分
    • 以前のアドレスへのアクセスや転送が残る場合がある
    • それでも、その以前のアドレスがOIDC認証のようなメール以外の用途で引き続き機能するとは限らない
    • ユーザーは不便になり得る以前のメールアドレスではなく、現在の新しいアドレスを使いたいと考える

再利用と復旧用メールは分けて扱うべき

  • もう1つのやや小さな問題として、組織がメールアドレスを 再利用しない という保証はない
    • 一般的には再利用される可能性がある
    • 特に人気の高いアドレスは、影響力のある人が望んで例外的に再利用または再割り当てされることもあり得る
  • アカウント復旧が登録済みメールアドレスを通じて行われる必要がある場合、メールを保存する必要があるかもしれない
    • しかし、OIDCのように理論上は固有で永続的な内部IDがあるなら、その 内部ID を使うべき
  • アカウント復旧用メールを保存する必要があるとしても、アカウントの内部識別子は 意味のないID であるべき
    • この値がユーザーに公開されなくても、長期的には運用がより単純になる
  • メールアドレスに過度に多くの意味を持たせると、セキュリティ上の問題 も潜んでいる可能性がある

1件のコメント

 
GN⁺ 2024-01-01
Hacker Newsのコメント
  • 優れた本人識別子など存在しない
    メールアドレスは変わるし、以前のメールへのアクセス権を失うこともある。
    ユーザー名も嫌う人が多く、user53267 のような意味のない一意な名前より、一意でない名前を選びたがる。
    デバイスも紛失するため、Cookieに秘密のUUIDを保存したり、デバイスのパスキーを使ったりするだけでは解決しない。
    理想的な解決策はなく、複数の方式を組み合わせる必要がある。ある人にとってはメールアドレスが長く安定していて本人識別子として優れているが、別の人にとってはユーザー名のほうが安定しており、そちらを好む。ただ、数十年どころか数年以上同じメインデバイスを使い続ける人はほとんど見たことがないので、デバイスベースの識別はおそらくうまくいかないだろう。
    特に職場のメールアドレス first.last@company.com でよく表面化する。多くのベンダー製ソフトウェアが Sign in with Google を使い、そのメールアドレスをベンダーアプリ内の識別子として保存する。
    結婚、離婚、トランジション、文化圏の移動、新しい名前の選択などで名前は変わり、メールアドレスも変わる。
    もしかするとOIDCのようなものには、ユーザー名変更の標準APIやメールアドレス変更の標準APIのような新しい拡張が必要なのかもしれない。

    • アクセス可能な最も古いメールアドレスは20年以上前のものだ。今は使っていないが、これまでのどの電話番号や実住所よりも長い。
      公式身分証や社会保障番号のような公的識別子を除けば、これより良くするのは難しそうだ。
    • 人にはすべてを失って新しい人生を始める権利もある。ほんの数十年前までは、実際に可能だったことだ。
    • OIDCはすでに sub クレームが再割り当てされず一意でなければならないと要求しており、この問題に対処している: https://openid.net/specs/openid-connect-core-1_0.html#IDToke...
      もちろんこれは、IDトークンの sub にメールアドレスを入れてはいけないという意味だ。
    • こうしたメールアドレス変更の中で最も「好きな」ケースは、契約社員サフィックスの変更のような自作自演の問題だ。
      正社員に転換されると完全に新しいアカウントを作らなければならない会社を経験したことがあり、シンプルで統合された権限システムがなかったため、転換直後は前日までアクセスしていたシステムの権限を取り戻すのに3週間ほどかかった。
      さらに面白いのは、その会社が顧客向けに複雑なアカウント体系を提供する事業を多く手がけており、こうした問題を簡単に処理する外部向けのIDシステムも持っている点だ。ところが、その外部向けIDシステムを保守する内部社員には適用していない。
    • Discordの以前の方式、つまりメールアドレスと表示名を別にする構造がよかった。
      全員に数字が付いていたので、数字にはあまり意味がなかった。一意のアカウントIDに変わったときは少し残念だったし、なぜ変えたのか今でも気になっている。
  • 個人としてこの問題に対処する最善のアプローチは何だろうか。
    GmailはAIアルゴリズムのせいで突然ロックされたりアカウントが禁止されたりする可能性があり、何か問題が起きても救済手段がない。
    Yahooは最近ログイン時に、15年間アクセスできていない休眠メールアドレスで認証するよう要求してきたため、アクセスを失った。運よくメールクライアントにはアクセスできたので、重要なアカウントを移行できた。
    Yahoo/AOL/Tutanota/Protonmail/その他多数は、十分な頻度でログインしないとアカウントを自動削除する。Protonmailはまだそうしていないが、規約上は許可している。
    セルフホスティングも、そもそもすべてのインフラにメールアドレスが必要だ。そのメールへのアクセスを失うと、支払い通知も見逃し、ホスティングアカウントも失いかねない。IMAPをサポートしておらず、ほとんど確認しないメールアドレスに支払い通知が送られたせいで、ドメインを失いかけたことがある。専門のシステム管理者で、保守に十分な時間を割けないなら、ハッキングのリスクも高くなる。
    Duoのプッシュ通知は携帯電話が壊れたら終わりだし、SMS認証には携帯電話の破損、料金プランへのアクセス喪失、内部従業員によるコード漏えいといった問題がある。
    結局、大学のGmailアドレスを使うことにした。卒業生も引き続き保持できると約束されており、何か問題が起きた場合――おそらく携帯電話の紛失で2段階認証を失う場合だろうが――まともな卒業生サポートセンターがある。
    どこかに話せる人間のサポート窓口が絶対に必要だ。それでもこれが最善なのかは確信がなく、Google側のリスクがまだ残っているのか気になっている。

    • 見落としている最善の解決策は、自分のドメインとGmailのようなホスティングメールを使うことだ。
      言われているように、ロックされたら「単に」プロバイダーを変えればよく、失うとしても多くて数時間分のメールだけだ。
    • iCloudはどうだろうか。理論上はアカウント禁止も可能だろうが、少なくともAppleには概して救済手段があり、人と話せるという感覚がある。
  • メールアドレスが永続的な識別子として適していないという点には同意します。ただし、識別の一部として電話番号を使うのはさらに悪いです
    自分のドメインでほぼ20年同じメールアドレスを使ってきましたが、同じ期間に電話番号はおそらく12個ほど変わりました。ウェブサイトが昔の番号で二段階認証を有効にしたままだったり、そもそもそのサイトに昔の番号を登録したことを忘れていたりするケースをよく見ます
    海外在住中でも、いまだにその番号でログインコードを受け取るサイトがあるため、また番号を捨てると更新を忘れていたり米国番号が必要だったりして変更できない重要なサービスへのアクセスを失うのではないかと心配で、AT&Tに毎月約150ドルの税金を払いながら米国番号を維持しています

    • DIDwwのようなVoIP事業者に番号を移せば、月2.50ドルで維持でき、望めば受信したSMSを受信箱に送ることもできます
      後でまたモバイル回線でその番号を使いたくなったら、好きな通信事業者へ再度移せばよいです
    • 海外で使うために米国番号を維持するのに、そこまで高く払う必要はありません
      可能な二段階認証はGoogle Authenticatorのようなアプリに切り替え、番号はGoogle Voiceに移せば、昔の番号宛てのSMSを無料で受け取れます
      Googleをまったく関わらせたくないなら、ほかにも時間ベースの認証アプリはたくさんありますし、SMS用にwww.tossabledigits.comを使うこともできます
    • なぜそんなに多く払っているのか分かりません。番号をVoIPプロバイダーに移せば、月数ドルで済みます
      通常の携帯電話サービスとして見ても高すぎます。2回線で月100ドルも払っていません
    • VoIPに移してみるべきだという意見に同意します
      以前引っ越したとき、個人事務所の電話番号が新しい地域では許可されませんでしたが、VoIPアカウントへ移せたので幸運でした
      当時はインターネットが遅かったので、しばらくイーサネット電話アダプターを使っていましたが、その後はその番号を受信専用としてだけ使っています。音声通話とファクスはすべてメールに転送されます
      20年以上うまく動いています。接続する機器がないので年間費用もかなり低いです
      いつか電話機をつないで今どきのインターネットを活用するかもしれませんが、今のやり方が気に入っていますし、特定の場所に縛られない点も良いです
    • 通信事業者を変えても電話番号は持っていけます。メールアドレスはそうはいきません
  • 私の経験も同じです。個人的にはランダムなUUIDが最善だと思います
    ユーザーの最初のメールアドレスのハッシュでさえ理想的ではありません。ソルトだけでは不十分な場合がありますし、他の人がどんな入力メールアドレスでも安全にハッシュしてよいと仮定してしまう可能性があるためです

    • データベースの授業で習った自然キーのようなものが妥当な場合はあるのでしょうか?
      実務では常に自動採番の整数か、ランダム文字列/UUIDを主キーに使っています
    • 識別子が「永続的」であることを保証する唯一の方法は、人々がそれを変更する理由がまったくないものを選ぶことです
      電話番号、メールアドレス、住民登録番号のような国家ID、名前、指紋のように、人々が気にする現実世界の属性とは何の関係もない必要があります
      ランダム文字列はこの条件にぴったりです。連番の整数でも構いませんが、推測しやすいので追加のセキュリティ対策が必要になる場合があります
    • UUIDよりは連番UIDのほうが好みですが、要点は同じです
  • 公開鍵メールアドレスをサポートするのはどうでしょう? たとえば . のようなものと . のようなものをどちらも同等に扱う方式です
    片方で登録したあと、もう片方でもログインしたりアカウント復旧したりできるようにします。Googleに禁止されたりHotmailが潰れたりしても、別のサービスに行って秘密鍵で認証し、同じアカウントを開けます
    当然、使いやすい名前を使うためのエイリアス手続きは必要でしょうが、メールクライアントがそうしたアドレスをマッピングするか、少なくとも公開鍵と一緒に追跡する必要がありそうです
    エンドツーエンド暗号化メールを組み込むきっかけにもなるかもしれません。これは大規模に定着したことがほとんどありません
    実際に機能させるには大手事業者の対応が必要でしょうが、ざっと考えるとかなり堅牢に見えます。まだ誰も対応していないという点を除けば

    • このスレッドでDecentralized Identity Foundationがまだ出ていないのは驚きです: https://identity.foundation/
      プロバイダーや中央権威に依存せず、自分自身がアイデンティティを所有する形で、ウェブ上で識別しコミュニケーションする新しい方法が作られています
  • 以前のエネルギー供給会社であるBritish Gas(Centrica所有)は、1つのメールアドレスを2つ以上の実住所に使うことを許可していませんでした
    引っ越し後にオンラインアカウントを「設定」しようとしたところ、現在の住所の詳細を見るたびにHTTP 500が発生しました
    電話で問い合わせると、以前の住所のエネルギーアカウントが閉じられていても「同じメールアドレスを複数の郵便住所に使うことはできない」と言われました

    • +whatever のトリックを使えます。Gmailならドット . のトリックも可能です
    • 悪いやり方ではありますが、メールに自分のドメインを使っていれば実際の問題にはなりません
  • 今、1つのアカウントに複数の紐づけメールアドレスを許可するようにメールシステムを変更しているところです
    主な理由の1つは学生割引を提供しているためです。アカウントに割引を適用する最も簡単な方法は、メールアドレスが教育機関のものかどうかを確認することです。.edu.ac.uk のようなものです
    ただ、ほとんどの人は実際にはそのメールアドレスで登録したがらないようです。複数のメールを許可すれば、両方の長所を得られます
    最初からこうしておけばよかったと思います

    • 米国では、大学卒業後も .edu の卒業生向け転送アドレスをもらえる人が多いことを知っておくべきです
      かなり良いアドレスを1つ持っています。早めに申し込んだので、単に自分の名前だけが入ったアドレスです
      ただし、あまり使っていません。初期のころは転送が時々不安定でしたが、今は改善しているだろうと思います
      現実的には、私のGmailアドレスはすでに数十年近く安定していて、変わりそうにもありません
      いずれにせよ、私のeduアドレスはごく少数の人にしか知らせていません
  • 最もエレガントではなくても、クライアント側の解決策はあります
    ドメインを自費で維持すれば、メールエイリアスを100%制御できます
    現在のプロバイダーであるGoogleが潰れても、自分でメールをホスティングしてアカウントを復旧し、エイリアスの所有権を維持できます

    • ドメインが失効したらどうするのですか?
  • これはバックエンドの問題だと思う。ユーザーに見えるIDはメールアドレスでもよいが、システムデータ内の主キーがメールアドレスであってはならない。
    いまだにこうしているところがあるのだろうか? メールアドレスのようなものを識別子として使うのではなく、本当に一意なID(UUIDやシーケンスベースの自動採番値)にマッピングするルックアップテーブルを用意するのは、ごく基本的なデータベース設計の問題だ。
    記事ではこの区別があまり明確にされていないため、ユーザーがこの抽象化を意識すべきだ、というようにも読めてしまう。

    • その通り。これは高校レベルのデータベース授業の試験問題のようなものだが、思ったより多くの大人の開発者がデータベースについて立ち止まって考えない。
  • 永遠のものなどない。人間の一生を通じて安定しているものすら、ほとんどない。
    簡単にスキャンできる生体標識でさえ、十分に大きな人口集団では安定して一意ではない。
    メールアドレスはかなり長い期間にわたって安定して一意であるため、この用途に選ばれている。
    電話番号も以前よりずっと粘着性のある識別子になり、今では有用な識別子としてメールアドレスに近くなっている。
    メールアドレスと電話番号はいずれも頻繁に失われ、しばしば同時に失われる。
    バックアップ用メールアドレスが答えだ。
    GitHubは本人確認の扱いがうまいほうだと思うが、いまだにパスワードを使っている。パスワードはよくない。