- 複数のプラットフォームで、年齢認証手続きを自動で成人として通過させるスクリプト
- Discordのコンソールにコードを貼り付けて実行すると、自動で
/age-verification/verify APIリクエストを送り、認証完了ページへ移動
- Twitch、Kick、Snapchatなど他のプラットフォームでも、QRコードのURLを入力して同じ方式で認証可能
- このツールは、k-idシステムの顔データ処理構造を悪用し、実際の顔がなくても正当なメタデータを生成する
- AES-GCM暗号化と予測データ構造を複製して検証手続きを通過する方式で、グローバルな年齢認証拡大に合わせて作られた
Discordでの認証手続き
- Discordウェブアプリの**開発者コンソール(F12)**に特定のスクリプトを貼り付けて実行する方式
- スクリプトはDiscordのwebpackモジュールキャッシュを抽出し、内部APIクライアントを見つけて
/age-verification/verifyエンドポイントにリクエストを送る
- リクエスト結果として受け取った
verification_webview_urlをage-verifier.kibty.townへリダイレクトする
- ユーザーはCAPTCHAを解いた後、ページが「success」と表示するまで待機すれば認証完了
- この過程によって、Discordアカウントが成人認証済みの状態として表示される
他のプラットフォーム(Twitch、Kick、Snapchatなど)での認証方法
- 各プラットフォームの年齢認証ページで「selfie」オプションを選択し、表示されたQRコードのURLをコピー
- そのURLを
age-verifier.kibty.townの入力欄に貼り付け、「verify」ボタンをクリック
- その後、自動で認証手続きが進行し、成功メッセージが表示される
動作原理
- Discordが使用するk-id年齢認証システムは、顔映像をサーバーへ送信せず、顔関連のメタデータとプロセス詳細だけを送信する
- この構造により、正当なものに見えるメタデータを改変して送信すれば、実際の顔がなくても認証を通過できる
- 過去にamplitudesのk-id verifierが公開された後、パートナー企業faceassureが検証を強化したが、今回のツールは新しい方法でこれを回避する
技術的な詳細ステップ
- 1段階: 暗号化パラメータの複製
- 正当なリクエストと比較した際に欠けていた
encrypted_payload、auth_tag、timestamp、ivを確認
- AES-GCM暗号化で、キーは
nonce + timestamp + transaction_idを**HKDF(SHA-256)**で導出して生成
- 同一の構造を再現して欠落したパラメータを生成する
- 2段階: 予測データの改変
- 暗号化を完全に複製しても失敗したため、検証が「prediction arrays」(outputs, primaryOutputs, raws)に依存していることを確認
rawsデータを基にz-scoreを使って外れ値を除去し、outputsとprimaryOutputsを生成
- さらに次の条件も検証される
xScaledShiftAmt、yScaledShiftAmtの値は2通りのうちいずれかのみ可能
- メディア名(カメラ)が実際のデバイス一覧と一致していなければならない
- 状態完了時刻がタイムラインと一致していなければならない
- これらすべての過程を実装したオープンソースコードが公開されており、誰でも確認できる
公開と制作背景
- 制作者はxyzeva、Dziurwa、そして以前に関連作業を行ったamplitudesへ謝意を示している
- Discordがグローバル年齢認証を3月に全面実施する予定であるため、それに合わせて新しい検証回避手法を探求したと説明されている
1件のコメント
Hacker Newsのコメント
本当に堅牢な方法は、実際のWebカメラの代わりに人工的な映像入力を生成することだと思う
これを防げるプラットフォームはないはず
たとえプラットフォームがスマートフォンのようななりすまししにくいカメラ入力を要求しても、高解像度ディスプレイの前にカメラを置けば終わり
こうしたいたちごっこは長続きしないだろう
不完全な動画セルフィーベースの年齢認証は、むしろ誰にとっても得になる
常識的な人は運転免許証やパスポートをアップロードしなくて済み、プラットフォームはユーザー維持がしやすくなる
ポルノサイトはユーザーアカウントを作らせて追跡や広告収益を増やせる
政治家は「年齢制限ポリシーを導入した」と発表でき、親は子どもがポルノを見ていないと安心する
結局みんなが得をする構図だ
こうした検証方式も結局はその方向に進む気がする
おそらくGoogleがPlay Store専用アプリを推してきた理由の一つも、この種の検証可能なソフトウェアチェーンを作るためだったのだろう
結局はスイッチを一つ切り替えるだけの問題だ
3Dマッピングと組み合わせれば、単に画面を映すだけのトリックは通用しない
問題は、Discordのような年齢認証サービスが本気で取り組んでいないことだ
自分はそのゲームに参加せず、プラットフォームの利用をやめるだけだ
この方法には3つの問題がある
これはリバースエンジニアリングの優れた事例であり、プライバシーを侵害せずに検証することがどれほど難しいかを示している
コードは公開されているので、任意コード実行の問題(#3)は当てはまらない
もし企業がより侵襲的な方法(#2)で対応するなら、ユーザーはいつでも別のプラットフォームへ移れる
かなり巧妙なアイデアだと思う
Discordは、規制当局に「子どもを守る対策をしている」と言える程度にだけ年齢認証を緩めているようだ
だが政府が本気で監視するなら、こうしたアプローチは長くはもたない
すでに一部の国ではより強力な生体認証を求めており、一部のサービスはモバイルアプリベースの認証へ移行している
単純なJavaScriptベースのトリックはますます通用しなくなるだろう
コードを実行する際は即時実行関数(IIFE)でラップすることを勧める
macOS Safariではtop-level awaitがサポートされていないので動作しない
関連情報は caniuse.com/wf-top-level-await を参照
すでに5年は遅れている
試してみたら https://age-verifier.kibty.town/webview?url=null にリダイレクトされ、
{"error":"error parsing webview url"}というメッセージが出た自分のDiscordアカウントはA/Bテスト中で、別の認証事業者であるPersonaを使っているようだ
検索すればもっと情報が見つかる
実際に動いた
Discordから「成人グループに分類されました」というメッセージを受け取った
(ナレーション)そしてその瞬間、アカウントがハッキングされたことに気づく ;)
11年もののアカウントに問題が起きないといいが、顔やIDの提示を求められるなら、もう退会するつもりだ
なぜ若い世代が、自分たちに敵対しているサービスにそこまでしがみつくのか理解できない
嫌いなプラットフォームに残る利便性のほうが、代替を探す手間より大きいのだろうか?
今の若い世代は、ターミナルやファイルパスの概念すらなじみが薄い
検索はできても、代替を自分でセットアップするのは別問題だ
何より、代替が存在しうるという認識そのものが乏しい
Matrixのようなオープンプラットフォームはまだ機能不足で、Discordがいちばんましな選択肢という状況だ
友人たちがそこにいるから、自分もそこにいる
プラットフォームを移るたびにメンバーが減って共同体が崩れる
「軽い努力」は実際にはコミュニティを壊すことになる
別のプラットフォームを使っても自分だけが取り残されるからだ
全員を同時に移行させるのはほぼ不可能だ
DiscordでCAPTCHAは通過したが、
{"error":"failed to execute k-id privately action (status=404)"}というエラーが出た自分は間違いなく成人なのに、こんな手続きはばかげている
ブロックされても構わない
関連ニュースまとめ
デジタル年齢認証のいたちごっこは莫大な規制負担だ
これほど簡単に回避できるなら、プラットフォームは単に規制対応のチェックボックスを埋めているだけで、
実際の信頼基盤は非常に脆弱だ
だが企業は認証済みの成人ユーザーデータを確保できないので好まない
関連内容は GoogleのAge Assurance Europeブログ を参照
こうしたシステムの目的は完全な遮断ではなく、一般大衆が簡単には回避できないよう摩擦を加えることだ