この記事は BBSakura Networksアドベントカレンダー2025 の18日目の記事です
はじめに
こんにちは、BBSakura Networksでモバイルコアの開発・運用をしている清水です。
SIMカードは、モバイル通信においてユーザーの認証などを行う重要な役割を持ち、BBSakuraが提供しているモバイル回線サービス、OCX Mobile AccessにおいてももちろんSIMカードは利用されています。
ところで、皆さんはスマートフォンに入っているSIMカードの実物を見たことはあると思いますが、その中身が実際にどのような構造になっているかについては、あまり意識する機会がないのではないでしょうか。
私はサービス運用の中でSIMカードについて調べる機会があり、その過程でSIMカードの内部構造やデータの構成が思った以上に体系立っていることを知りました。 本記事では、その内容を整理しながら、SIMカードのデータ構造について解説していきます。
SIMカードの仕様
そもそも、SIMカードの仕様はどこで決められているのでしょうか。 これには2つの側面があります。 1つは、ICカードとしての仕様、もう1つはSIMカードとしての仕様です。
ICカードとしての仕様
SIMカードは、スマートフォンに入れる際には、nanoSIMという小さいサイズに切り出して使用しますが、実態はその他のICカードと同様のチップとなっており、物理的・論理的な構造はICカード共通の仕様としてISO/IEC 7816*1にて定義されています。
ここでは、
- カードの形状
- 金属端子の接点の配置・役割
- 電気的特性(動作電圧、ノイズ耐性など)
- データ構造
- ICカードとリーダー間の通信プロトコル(APDU)
などが規定されています。
上記の仕様はICカード全体で同じ、つまりクレジットカードやマイナンバーカードとも共通の仕様になっています
SIMカードとしての仕様
実際にモバイル通信を実現するためには、ICカード共通の仕様に加えて、 SIMカードとしてどのようなファイルやデータが必要なのかを定める必要があります。 (例:電話番号は何桁で、どのファイルに格納されるのか、など)
このような SIM カード特有の仕様は、 3GPP*2によって規定されています。 SIMカードに関する仕様は、複数の仕様書に分かれて書かれており、主に以下の Technical Specification(TS)で定義されています。
- TS 31.101:SIMカードの物理的・論理的仕様
- TS 31.102:USIM と呼ばれるアプリケーションの仕様
- TS 31.103:ISIM と呼ばれるアプリケーションの仕様
- その他(3G以前のSIMカードの仕様など)
略語が多くて分かりにくいですが、ICカードに、USIM や ISIM といったアプリケーション(加入者の認証情報や識別情報を保持するもの)を搭載することで、一般に「SIMカード」と呼ばれる形になります。
SIMカードのデータ構造
先述の通り、データ構造についてはICカード共通の仕様としてISO/IEC 7816で規定されています。 ICカード内のファイルはMF, DF, EFという3種類のファイルが存在し、階層的な構造を持っています。
- MF(Master File)は、ICカード内に1つだけ存在するファイルで、いわゆるルートディレクトリに相当します。
- DF(Dedicated File)は、ディレクトリやフォルダに近い概念で、アプリケーションの起点となるDFはADF(Application DF)と呼ばれます。
- EF(Elementary File)は、実際にデータを格納するファイルで、電話番号のような具体的な情報はこのEFにバイト列の形式で格納されています。
SIMカードにおけるファイル構造を図示すると、このようになります。

ICCIDのように、カード自体の識別情報を表すファイルは、MFの直下に配置されており、MFの下にぶら下がる形でUSIM・ISIMのようなアプリケーションが配置されています(図中でADFと書かれているものに相当)。 図中のEFDIRは、カード内に入っているアプリケーションの一覧が入っている特殊なEFで、このEFDIRの情報を頼りに各アプリケーションへのアクセスを行っています。
EFファイルを見てみる
USIMの中には、100種類以上にわたる様々なEFが存在しています。 今回は、EFの中でも、機能・内容的に比較的シンプルなEFSPNというファイルについて、中身を見てみたいと思います。
EFSPN (Service Provider Name)は、名前の通りサービスプロバイダの名称が記録されているファイルで、スマートフォンなどでSIMの情報を開いた際の事業者名の表示などにも利用されています。
EFSPNの仕様については3GPPの TS 31.102 にて記載があり、下図のように仕様が決められています。

この表の各項目の詳細については、またの機会に解説したいと思いますが、ファイルの中身を読むうえで重要なのは、
- 各バイトがそれぞれどのような意味を持つのか
- 各コンテンツがどのようにバイト列として設定されているのか
の2点です。
ここからは、EFSPNの中身の一例として、
024F4358FFFFFFFFFFFFFFFFFFFFFFFFFF
上記のようなバイト列と仕様書とを照らし合わせながら、中身を読んでいきたいと思います。
実際に仕様書を見たい方は、こちらから確認出来ます!
各バイトの意味を把握する
まずは、バイト列中の各バイトがそれぞれどんな意味を持つのか把握します。仕様書の表によると、
- 1バイト目: Display Condition
- 2 ~ 17バイト目: Service Provider Name
となっており、2種類のコンテンツが存在していることが分かります。

各コンテンツの意味を把握する
Display Condition
まずは、 1バイト目のDisplay Conditionについて見ていきます。 このコンテンツは、サービスプロバイダ名の表示に関する設定項目になっており、バイト列を更にビット列に分解したうえで、各bitの値によって、設定の有効 / 無効を決定しています。 また、設定項目があるのは下位2ビットのみで上位6ビットはRFU(Reserved for Future Use)と記載されており、現在は使用されていないことが分かります。

実際に1バイト目の 0x02 をビット列に分解すると、下記のようになることが分かります。

(設定項目の具体的な内容の解説は省略します)
Service Provider Name
続いて、2バイト目以降のService Provider Nameについて見ていきます。

こちらは、記載内容を見ると、GSM 7-bit 文字コード(ASCII に近い形式)または UCS2 で格納され、使われていないバイトは 0xFF で埋められる、ということが分かります。
このルールに従い、バイト列を文字列に変換すると…

Service Provider Nameは、アルファベット3文字で OCX であることが分かりました。
終わりに
本記事では、SIMカードのデータ構造と、実際のファイルの読み方について解説しました。 SIMカードには、その他にも数多くのファイル(EF)が存在していますが、仕様書と照らし合わせながら解読していくことで、同じように各ファイルの中身を把握することが出来ます。
実際にSIMカードに入っている値について調べてみたい方は、sysmocom SIMのような読み書き可能なSIMカードを用意すると様々なファイルについて観察することが出来ます。 興味のある方は、sysmocomのSIMのファイルを書き換える方法について、昨日の記事で紹介されているので、ぜひ合わせてご覧ください!