ソフトウェア

DiscordやTwitchの年齢確認ツール「k-id」はどのように不正を回避しているのか?


コミュニケーションアプリのDiscordや、ゲーム特化の配信サイトであるTwitchで、低年齢のユーザーを保護するための年齢確認仕様が追加されました。これにより、DiscordやTwitchではカメラを使った顔認証が行なわれるようになったのですが、この顔認証を担うツール「k-id」について、k-idの開発を担ったエヴァさんとDziurwaさんが解説しています。

discord/twitch/kick/snapchat age verifier
https://age-verifier.kibty.town/


2026年2月、Discordはデフォルトで未成年者向けの設定を有効にすると発表しました。これにより、ユーザーは成人向けコンテンツなどにアクセスするには、カメラを用いた年齢確認を行わなければいけなくなっています。

Discordがアカウントのデフォルト設定を未成年者向けにすると発表、成年認定には顔のカメラ撮影や身分証明書スキャンによる年齢確認が必要に - GIGAZINE


そんなDiscordで年齢確認を行なうツールが「k-id」です。k-idはDiscordだけでなく、TwitchやKick、Quoraといったサービスでも使われており、カメラで顔を撮影して年齢を確認します。

他の競合ツールではユーザーの顔を撮影した画像や動画をサーバーに送信することがありますが、k-idはカメラで撮影した内容をサーバーに送信せず保存することもありません。その代わりに、ユーザーの顔に関するメタデータと、一般的なプロセスの詳細を送信しています。これまではメタデータが正当なものか確認することは簡単でしたが、k-idの顔認証プロセスをバイパス(迂回)するツール「amplitudesxd」が登場したことによって、プロバイダー側がサーバーに送信されるメタデータが正当なものかどうかを判断することが一時的に困難になったとのこと。


不正ツールを撲滅するべく開発陣が正当なリクエストペイロードと生成された偽のペイロードを比較したところ、古い実装では「encrypted_payload」「auth_tag」「timestamp」といった要素がないことに気づいたそうです。コードを見ると、これらは単純なAES-GCM暗号のようで、HMACメッセージ認証コードに基づくシンプルな鍵導出関数である「HKDF(sha256)」を使用して生成されたものであることがわかりました。これは簡単に再現でき、生成した出力に不足しているパラメーターも作成することができる模様。

しかし、暗号化を完全に再現しても、検証は成功しなかったそうです。そのため、実際のペイロード内容についてより詳しくチェックを行ない、パッチを作成。「recordedOpennessStreak」「recordedSpeeds」「failedOpennessReadings」「failedOpennessSpeeds」「failedOpennessIntervals」といった要素が有効かどうかをサーバー側で相互参照し、値同士の整合性をチェックすることで、メタデータが正当なものかどうかをチェックすることができるようになりました。

なお、k-idはオープンソースで開発されており、GitHub上で公開されています。

GitHub - xyzeva/k-id-age-verifier: automatically verify your age on discord, twitch, kick, quora and more (k-id)
https://github.com/xyzeva/k-id-age-verifier

この記事のタイトルとURLをコピーする

・関連記事
Discordがアカウントのデフォルト設定を未成年者向けにすると発表、成年認定には顔のカメラ撮影や身分証明書スキャンによる年齢確認が必要に - GIGAZINE

Googleがついに強制的に年齢確認を開始 - GIGAZINE

年齢確認を義務化する法律には十分な効果がなく無駄な負担ばかり増えているという分析結果 - GIGAZINE

in ソフトウェア, Posted by logu_ii

You can read the machine translated English article How does Discord and Twitch's age ve….