sysmoISIM-SJA5 を使って SIM の認証情報を書き換えてみた

はじめに

この記事は 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 検証の デファクトスタンダード

sysmocom.de

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 やモバイルネットワークの研究・検証に役立てば幸いです。

参考文献

sysmoISIM-SJA5 User Manual