通信会社はどうやってSIMを認証しているのか?
目次
はじめに
普段、スマホでデータ通信を行う際、Webサービスのようにログインをすることはありません。
しかし、通信会社は私たちが「どのプランに加入しているのか」を識別して、使用量を管理しています。
バックグラウンドでは 5G AKA (Authentication and Key Agreement) という強力な認証プロトコルが存在しています。
自分の学習アウトプットを兼ねて、SIMカードがネットワークからどう認証されているのか、その仕組みを解説できればなと思います。
登場人物(コンポーネント)の紹介
5Gの認証には、主に以下の5つの要素が登場します。
| 略称 | 正式名称 | 役割 |
|---|---|---|
| UE | User Equipment | スマホ(SIMカード搭載端末) |
| RAN | Radio Access Network | 基地局(アンテナ) |
| AMF | Access and Mobility Management Function | 認証の窓口 |
| AUSF | Authentication Server Function | 認証サーバーの司令塔 |
| UDM/ARPF | Unified Data Management / ARPF | 加入者データ(秘密鍵)を保管するDB |
5G AKAによる認証フロー
5Gでは、4Gまでの課題だった 「IDの平文送信(IMSIキャッチャー問題)」 を防ぐ工夫がなされています。
1. 接続開始とIDの暗号化(SUCI)
UEがネットワークに接続する際、自分のIDを送信します。
- SUPI: SIMに書き込まれた、ユニークID
- SUCI: SUPIを公開鍵で暗号化したもの
5Gでは、空中に流れるIDが常に SUCI(暗号化済み) であるため、第三者が通信を傍受しても「誰が接続したか」を特定できないようになっています。
2. ネットワーク識別子の付加
RAN(基地局)は、UEから受け取った情報をAMFへ転送します。
このとき、現在接続しているネットワークを示す SNID (Serving Network ID) を付加します。
これにより、ローミング中(海外利用時など)でも「どこのネットワーク経由のアクセスか」を判別します。
3. 認証ベクトルの生成
AMFからリクエストを受けた UDM/ARPF は、データベースからそのSIMに対応する秘密鍵 (K) を取り出し、以下の計算を行います。
- ランダムな値 (RAND) を生成
- 秘密鍵 (K) と (RAND) を用いて、期待される応答値 (XRES^*)(Expected Response)を計算
この (XRES^*) は、後ほどUEが計算する値と照合するための「正解データ」になります。
4. チャレンジ&レスポンスによる検証
-
AMFへ転送:
AUSFはAMFに対して (HXRES^*)((XRES^*) をさらにハッシュ化したもの)を渡します。 -
UEへの転送:
AMFはUEに対して (RAND) を送り、計算を行うようにリクエストを送ります。 -
UE側の計算:
UE(SIM内部)は、持っている秘密鍵 $K$ と届いた $RAND$ を使って、自らレスポンスを計算します。
\text{Hash}(RAND \parallel RES^*) \stackrel{?}{=} HXRES^*
-
AMFでの照合:
UEから返ってきた $RES^$ をAMFがハッシュ化し、事前に持っていた $HXRES^$ と比較します。
一致すれば「UEは正しい秘密鍵 $K$ を持っている(=正当な契約者である)」ことが証明されます。
最後に
正直なところ、5Gの認証構造を細かく追ってみて一番強く残った感想は、 「これを作り上げた開発者、マジで凄すぎる…」 という圧倒的なリスペクトでした。
巨大なシステムの一部を理解するのが精一杯ですが、こうした「裏側の凄み」を解像度高く語れるような、変態的(褒め言葉)なITオタクを目指してこれからも学習を続けていこうと思います!
参考
https://www.techplayon.com/5g-authentication-and-key-management-aka-procedure/
