【入門編】 モバイル網における暗号化とセキュリティ:NAS層およびAS層のセキュリティキー生成 – 家庭用ネットワーク・IoT・モバイル通信実践ガイド

こんにちは!ネットワークの裏側を覗き見するのが大好きなガジェットライターです。

カフェのテラス席で、あるいは通勤電車の揺れの中で、私たちは当たり前のようにスマホを取り出し、高速な5GやLTE回線を通じて動画を見たり、大切なメッセージをやり取りしたりしていますよね。でも、ちょっと立ち止まって考えてみてください。空中にビュンビュン飛び交っている目に見えない電波を、いったいどうやって「盗聴」や「なりすまし」から守っているのでしょうか?

「パスワードを入れてるから安全なんでしょ?」と思っているそこのあなた。実は、私たちが普段意識することのないスマホの心臓部――あの小さなUSIMカードと通信キャリアの基地局・コアネットワークの間では、映画の暗号解読シーン顔負けの、非常に緻密でドラマチックな「鍵の生成と受け渡し」の儀式が毎秒のように繰り広げられているのです。

今回は、インフラの世界に一歩踏み出したばかりのエンジニアや初学者の方向けに、このモバイル網におけるセキュリティの根幹、「NAS層およびAS層のセキュリティキー生成」の仕組みを、身近な例えを交えながら優しく紐解いていきたいと思います。一歩ずつ、リラックスして理解していきましょう!

—

1. 秘密の「合言葉」はどこから?USIMとコアネットワークの絆

まずは、すべての出発点となる根幹のお話から始めましょう。

スマホの中に入っている小さなICカード、あれを「USIMカード(またはeSIM)」と呼びますよね。このUSIMカードの中には、世界中であなた専用のスマホだけが知っている、絶対に外部に漏れない究極の秘密の根幹鍵(これを技術の世界では K と呼びます)が書き込まれています。

もちろん、通信キャリアの広大なコアネットワーク(裏側の心臓部)にある「HSS/UDM」と呼ばれる巨大な金庫サーバーにも、あなたの K と全く同じコピーが安全に保管されています。

郵便配達の例えで考えてみる

これを現実世界で例えるなら、「あなたと、実家のお母さんだけが知っている特別な幼少期の秘密の合言葉(K)」のようなものです。この合言葉そのものは、絶対に手紙(電波)に書いて外に放り投げることはしません。危険すぎるからです。

その代わり、この合言葉(K)をベースにして、「今週はこの手紙のやり取りに使う使い捨ての合鍵を作ろうね」と、お互いの手元で計算して同じ鍵を作り出すのです。この一連の仕組みを、モバイル通信の世界では「AKA(Authentication and Key Agreement)認証」と呼んでいます。

—

2. 2つの守りの要:NAS層とAS層ってなに?

さて、無事に基地局やコアネットワークとお互いの身元を確認し合ったスマホは、いよいよ安全な通信トンネルを作り上げます。ここで登場するのが、今回の主役である「NAS(Non-Access Stratum)」と「AS(Access Stratum)」という2つのレイヤー(階層)です。

難しそうな英語が出てきましたが、怖がらなくて大丈夫です!次のようにイメージしてください。

  • NAS層(Non-Access Stratum / 非アクセス層)
  • 役割: スマホ(正確にはOSやアプリなど)と、通信キャリアの心臓部(コアネットワーク)をダイレクトにつなぐ「VIP専用の秘密の廊下」です。基地局が間に挟まっていても、基地局の中身には見られないようにエンドツーエンドでガチガチに暗号化されます。
  • AS層(Access Stratum / アクセス層)
  • 役割: スマホからすぐ目の前にある電波塔(基地局)までの区間を守る「最前線の警備体制」です。空中に電波として飛び交う区間を、物理的・無線的に守り抜きます。

モバイル通信では、この2つの層(NASとAS)でそれぞれ専用の「暗号鍵(Confidentiality Key)」と「完全性保護鍵(Integrity Key)」という、複数の鍵を計算して使い分けています。

—

3. 根幹鍵(K)から実際のセキュリティキーが生まれるプロセス

では、あの小さなUSIMの中にある根幹鍵 K から、どのようにしてNASやASで使う具体的な鍵たちが生まれるのでしょうか?

パケットの細かいビット数や難解な数式は脇に置いて、その大まかな流れを追ってみましょう。

1. ランダムな挑戦状(RAND)の到着

  • ネットワーク側からスマホに対して、「今日のランダムな数字はこれです。あなたの秘密の合言葉を使って計算しなさい」という挑戦状(RAND)が届きます。

2. USIMカード内での厳重な計算(KDFの実行)

  • スマホ内のUSIMカードは、手元にある秘密の根幹鍵 K と受け取った RAND を組み合わせて、KDF(Key Derivation Function:鍵導出関数)と呼ばれる厳密な数学的ミキサーにかけます。

3. マスターキー(CK / IK)の誕生

  • ミキサーの結果として、まず通信用のベースとなる暗号鍵(CK:Cipher Key)と完全性保護鍵(IK:Integrity Key)が生成されます。

4. 各層への鍵の横展開(さらなる派生)

  • さらに、ここからネットワーク側の要求(暗号化アルゴリズムの種類など)に合わせて、「NAS用の鍵($K_{NASenc}, K_{NASint}$)」や、「AS用の鍵($K_{RRCenc}, K_{UPenc}$ など)」が次々と派生(導出)されていきます。

—

4. 【実務の現場から】シミュレーションで見る鍵導出の流れ

インフラエンジニアや通信プロトコルの開発現場では、この鍵の生成や整合性が正しく行われているかを、オープンソースの5Gコアネットワーク(例えば Open5GS や free5GC など)やシミュレーターを使って検証・確認することがよくあります。

ここで、開発現場や検証環境でよく使われる、Python風の擬似コードで「根幹鍵からセキュリティキーが導出されるイメージ」を覗いてみましょう。

# ---------------------------------------------------------------------------
# モバイル網におけるNAS/ASセキュリティキー導出の概念シミュレーション
# ---------------------------------------------------------------------------
import hmac
import hashlib

def key_derivation_function(base_key: bytes, param_input: bytes) -> bytes:
    """
    KDF (Key Derivation Function) の簡易表現
    実際には3GPP規格(TS 33.501等)に基づいたHMAC-SHA-256などが使用されます。
    """
    return hmac.new(base_key, param_input, hashlib.sha256).digest()

# 1. USIMとコアネットワークが共有している根幹鍵 K (128bitまたは256bitの秘密データ)
root_key_k = b'\x00\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f'

# 2. ネットワークから送られてくるランダム値 RAND とネットワーク識別子 (SN)
rand_value = b'\xa1\xb2\xc3\xd4'
network_params = b'5G_PLMN_ID_MCC310_MNC410'

# 3. マスターキー (CK, IK) の生成 (AKA認証のフェーズ)
master_cipher_key = key_derivation_function(root_key_k, rand_value)
print(f"[+] 生成されたマスター暗号鍵 (CK): {master_cipher_key.hex()[:16]}...")

# 4. NAS層専用のセキュリティキー (K_NASenc: 暗号化用) の派生
# 3GPPの仕様に従い、鍵の使用目的を示す「用途フラグ(Tag)」を混ぜ合わせます
nas_tag = b'\x01' # NAS暗号化アルゴリズム用タグ
k_nas_enc = key_derivation_function(master_cipher_key, network_params + nas_tag)
print(f"[INFO] 確立された NAS暗号化キー (K_NASenc): {k_nas_enc.hex()[:16]}...")

# 5. AS層(無線区間)専用のセキュリティキー (K_RRCenc: 無線リソース制御の暗号化) の派生
as_tag = b'\x02' # AS制御プレーン用タグ
k_rrc_enc = key_derivation_function(master_cipher_key, network_params + as_tag)
print(f"[INFO] 確立された AS(RRC)暗号化キー (K_RRCenc): {k_rrc_enc.hex()[:16]}...")

このように、実務の現場でも、大元の秘密(root_key_k)に「どこで、何のために使うか(tag や network_params)」という調味料を加えて、次々と安全な子世代の鍵を生み出していく仕組みがコードの裏側でも実装されているのです。

—

5. まとめ:目に見えない安全の裏にあるドラマ

私たちが普段、何気なくスマホで高画質な動画をストリーミング再生できているのは、空中に飛び交う電波のそのまた何重ものレイヤーで、こうした緻密な「鍵の生成と検証」が1秒の何分の1というスピードで行われているおかげです。

  • すべての基本はUSIMカードとコアネットワークだけが知る秘密の根幹鍵 K。
  • そこから、コアネットワーク直結の「NAS層」と、無線基地局との間の「AS層」へと、それぞれの役割に応じた専用の鍵がスマートに導き出される。
  • パケットや電波を傍受されても、中身のデータや改ざんは決して許さない強固な盾になっている。

ネットワークの世界は、最初は難しい専門用語の壁に圧倒されてしまうかもしれませんが、一つひとつの仕組みを身近な例えに置き換えていくと、エンジニアたちの洗練されたアイデアとロマンに満ち溢れていることに気づかされます。

この記事が、あなたのモバイル通信やセキュリティ技術に対する興味を少しでも広げるきっかけになれば嬉しいです。それでは、また次回のネットワーク探訪でお会いしましょう!

コメント

タイトルとURLをコピーしました