はじめに
この記事は BBSakura Networksアドベントカレンダー2025 の17日目の記事です。
こんにちは、BBSakura Networks株式会社でエンジニアをしている平山です。
一般的な SIM カードには、加入者識別番号(IMSI)や、認証で利用される Ki や OPc などの情報が保存されています。これらの情報は MNO やフル MVNO といった SIM 発行者によって設定され、通信事業者は HSSを用いて SIM の認証を行い、ネットワークへのアクセス可否を判断します。
通常、市販されている SIM カードの IMSI・Ki・OPc は書き換えることができません。しかし、sysmocom 社が提供する sysmoISIM-SJA5 のような書き換え可能な SIM を利用すると、モバイルネットワークの開発や検証が非常に効率的になります。例えば、ネットワーク側に登録した加入者情報と一致する SIM を自分で作成できるため、テスト用の加入者を好きなだけ用意したり、正常系・異常系の認証動作を自由に検証したりできます。
本記事では、sysmocom 社が提供する SIM カード「sysmoISIM-SJA5」を macOS 上で書き換える方法について紹介します。
用語解説(IMSI / Ki / OPc)
IMSI
契約者を一意に識別する番号。端末がネットワークにアクセスする際に最初に送信され、どの加入者かを特定するために利用される。
Ki
- 加入者ごとに固有の 128ビットの秘密鍵
- SIM 内部と通信事業者側のみが保持
- AKA 認証で実行される暗号計算の基盤となり、SIM の正当性を証明する
- 「ネットワーク接続用の秘密のパスワード」のような役割
OP / OPc
- OP:通信事業者が内部的に持つ“演算用の共通キー”
- しかし OP をそのまま使うと 全 SIM が同じキーで認証されるため、セキュリティ上問題がある
- そこで Ki と OP から生成される個別の値が OPc
- OPc は AKA 認証で用いられる実際の演算鍵
sysmoISIM-SJA5 について
sysmoISIM-SJA5 は、IMSI や Ki、OPc などの認証情報を書き換えることが可能な検証用 SIM カードです。以下の特徴から、Private LTE/5G の開発・検証に広く利用されています。
- ADM keys 付きモデルでは IMSI / Ki / OPc の書き換えが可能
- 2G / 3G / 4G / 5G の AKA 認証に対応
- Private LTE/5G 検証の デファクトスタンダード
macOS での環境構築手順
$ python3 -m venv .venv $ source .venv/bin/activate $ git clone https://github.com/osmocom/pysim.git $ cd pysim $ pip install -r requirements.txt $ git clone https://github.com/sysmocom/sysmo-usim-tool.git
認証情報の確認
sysmoISIM-SJA5 を購入すると、メールで SIM カードのパラメータが送付されます。そこに記載されている ADM キーを用意しておきます。
- /sysmo-usim-tool.sjs1.pyのオプションは以下
- -i 現在のIMSIの出力
- -k 現在のKi値の出力
- -o 現在のOPC値の出力
$ ./sysmo-usim-tool/sysmo-isim-tool.sja5.py --adm1 ******** -k -o ... * Detected Card IMSI: 00101********** ... ... Reading Key value... * Initializing... * Reading... * Current Key setting: 2g: Key: 4140******************************** 3g: Key: 4140******************************** 4g5g: Key: 44140******************************** Reading OP/c value... * Initializing... * Reading... * Current OP/OPc setting: 2g: OPc: 885c******************************** 3g: OPc: 8885c******************************** 4g5g: OPc: 885c********************************
- 読み出された認証情報
- IMSI:00101**********
- Ki値:4140********************************
- OPC値:885c********************************
認証情報(IMSI / Ki / OPc)の書き換え
今回は下記の情報に書き換えてみます。
- IMSI:00202**********
- Ki値:d773********************************
- OPC値:af9a********************************
$ NEW_IMSI="00202**********" $ NEW_KI="d773******************************** " $ NEW_OPC="af9a********************************" $ ./pysim/pySim-prog.py -p0 -t sysmoISIM-SJA5 -a "********" \ -i "$NEW_IMSI" \ -s "8949***************" \ #ICCIDは変更しないが、設定しないとエラーになるので現在の値を設定 -k "$NEW_KI" \ -o "$NEW_OPC" ... IMSI : 00202********** > Ki : d773**************************** > OPC : af9a**************************** > ... ...
書き換え後の確認
$ ./sysmo-usim-tool/sysmo-isim-tool.sja5.py --adm1 ******** -k -o ... * Detected Card IMSI: 00202********** ... ... Reading Key value... * Initializing... * Reading... * Current Key setting: 2g: Key: d773**************************** 3g: Key: d773**************************** 4g5g: Key: d773**************************** Reading OP/c value... * Initializing... * Reading... * Current OP/OPc setting: 2g: OPc: af9a**************************** 3g: OPc: af9a**************************** 4g5g: OPc: af9a****************************
正しく書き換えられた内容
- IMSI:00202**********
- Ki値:d773********************************
- OPC値:af9a********************************
まとめ
本記事では sysmoISIM-SJA5 を用いた SIM 認証情報の書き換え方法について紹介しました。 Private LTE / 5G ネットワークの開発や検証を行う際に、sysmoISIM は非常に便利なツールです。
皆さんの SIM やモバイルネットワークの研究・検証に役立てば幸いです。