代表的な面接トピック

システム設計:プライバシーを保護する年齢確認サービスをどのように構築しますか?

システム設計難しい
Offer.cc 編集チーム公開日 更新日

質問

複数のウェブサイト向けの年齢確認サービスを設計してください:生年月日、氏名、クロスサイトトラッキング用識別子を公開することなく、年齢閾値の証明を行ってください。

プロンプトとコンテキスト

ゲーム、コンテンツ、オンライン薬局などのサイトでは、ユーザーが13歳、16歳、または18歳であるかを確認する必要があります。ユーザーは政府または信頼できる発行者からの資格情報を保持しています。サービスは複数の発行者、オフラインリカバリ、失効、および不正調査をサポートしなければなりません。

面接官がテストしていること

資格情報のライフサイクル、データ最小化、トラストアンカー、リプレイ耐性、可用性、規制監査のトレードオフをテストしています。W3C VC 2.0は発行者(issuer)、保持者(holder)、検証者(verifier)を定義しています。Digital Credentials APIにより、ユーザーエージェントが提示を仲介できます。

確認すべき質問

閾値、管轄区域、資格情報ソース、匿名証明、失敗時のUX、データ保持について質問してください。サイトが正確な年齢を必要としているのか、それとも真偽値(boolean)の結果のみでよいのか、高リスクのケースで手動レビューが必要かどうかを確認してください。

30秒の回答

「発行者が年齢情報を含む検証可能な資格情報を作成し、ウォレットが生年月日や氏名ではなく閾値の証明のみを提示します。リクエストごとに検証者がnonceとaudienceを作成し、署名、有効期限、ステータス、および目的のバインディングをチェックします。サービスには最小限の監査イベントのみを保存します。まずは1つの管轄区域と閾値から開始し、成功率、リプレイ拒否、誤拒否、情報漏洩を測定した上で、発行者とオフラインフローを拡大します。」

ステップごとの詳細解説

参加者とトラストアンカーの定義

発行者は事実を証明し、保持者のウォレットは開示を制御し、検証者サイトは1回限りのリクエストを行います。プラットフォームは、自ら本人確認を再実行することなく、信頼できる発行者のメタデータと鍵のローテーションを維持します。

最小限の開示の設計

生年月日、氏名、安定した識別子ではなく、派生した「18歳以上」のアサーション、資格情報の種類、有効期限を返します。ログに追加のフィールドが入らないよう、管轄区域と閾値ごとにスキーマを定義します。

リプレイと相関の防止

すべての提示をnonce、audience、コールバックオリジン、短い有効期限にバインドします。再利用されたnonceは拒否し、再利用可能な相関識別子を避けて、必要に応じて検証者固有の仮名を発行します。

署名とステータスの検証

資格情報チェーン、アルゴリズム、発行者の信頼性、有効期限、失効または停止ステータスを確認します。ステータスのレスポンスは鮮度制限付きでのみキャッシュ可能です。ルックアップが失敗した場合は、リスクに応じてフェイルクローズするかレビューを要求する必要があります。

オフラインとリカバリの処理

オフライン検証では、署名されたマテリアルと有効期限付きの最新ステータススナップショットを使用し、無期限の信頼は決して行いません。ウォレットを紛失した場合は、閾値を下げることなく、新しいデバイスでの再バインドまたは再発行が必要になります。

監査とデータの境界の設定

未加工の資格情報や生年月日ではなく、リクエスタ、ポリシーバージョン、結果、検証時刻を監査します。不正調査用の制御された相関トークンは、分離されたストレージ、暗号化、アクセス制御によって保護します。

模範回答

発行者、保持者、検証者をモデル化します。発行者は年齢情報を含むVCを発行し、ウォレットは閾値の結果のみを提示します。サイトはリクエストごとにnonceとaudienceを作成し、署名、信頼ディレクトリ、有効期限、ステータスを検証し、リプレイを拒否します。サービスにはポリシーバージョン、結果、時刻のみを保存し、生年月日や未加工の資格情報は保存しません。オフラインモードでは鮮度制限付きのステータススナップショットを使用し、リカバリでは再バインドまたは再発行を行います。1つの管轄区域でパイロット運用を行い、成功率、誤拒否、リプレイ拒否、プライバシー監査を測定してから拡大します。

よくある間違い

完全な身分証明書文書の収集

これは最小化の原則に違反し、漏洩やクロスサイトトラッキングを増加させます。通常は年齢の判定結果だけで十分です。

署名のみのチェック

有効な署名であっても、有効期限内であること、失効していないこと、正しいaudienceであることは証明されません。ステータスと目的をチェックする必要があります。

グローバルなユーザー識別子の再利用

グローバルな識別子を使用すると、サイト間でユーザーを関連付けることができてしまいます。検証者固有の仮名または1回限りのアサーションを使用してください。

古いオフラインステータスを恒久的に信頼する

失効や鍵のローテーションにより、古い状態は無効になります。オフラインのマテリアルには有効期限とアップグレードパスが必要です。

フォローアップの質問

未成年ユーザーが資格情報を持っていない場合はどうしますか?

再発行、規制に準拠した手動レビュー、または明確な拒否パスを提供します。プラットフォームに完全な身分証明書文書をアップロードさせることは避けてください。

悪意のあるサイトが資格情報をリプレイした場合はどのように対処しますか?

提示を検証者、nonce、短いTTLにバインドします。重複したnonceや異常なオリジンを監視し、必要に応じて信頼設定を取り消します。

管轄区域ごとにルールが異なる場合はどうしますか?

ポリシーバージョン、閾値、発行者ディレクトリを設定可能にします。単一のグローバルルールをハードコーディングするのではなく、結果に管轄区域とポリシーバージョンを含めます。

プライバシー保護をどのように証明しますか?

エンドツーエンドのテストによって、ログ、分析、エラーに生年月日や安定した識別子が含まれていないことを確認する必要があります。開示されたフィールドとステータスルックアップを定期的に監査します。

公開情報ソース

関連する質問

関連面接ツール

システム設計の回答には「回答する」を使用

まず要件を明確にし、スケール、アーキテクチャ、コンポーネント選定、トレードオフの順に進めます。

ツールを見る