Програмування SIM карток¶
UMTC використовує два типи програмованих SIM карток: OYEITIMES (білі китайські) та sysmocom (sysmoUSIM-SJA2/SJS1). Обидва типи підтримують повноцінний LTE, але мають різний workflow програмування.
OYEITIMES (білі китайські картки)¶
Програмуються через власний GUI додаток під Windows. Завантажується з сайту виробника разом з USB reader.
Підготовка¶
- Підключи USB reader
- Встав картку контактами вниз
- Запусти OYEITIMES SIM Editor
- Картка має відобразитись у верхній панелі
Workflow програмування¶
Поля які треба заповнити (права сторона — LTE):
| Поле | Приклад | Примітка |
|---|---|---|
| IMSI (15 digits) | 255330000000001 |
15 цифр, PLMN 255/33 |
| KI | 00112233445566778899AABBCCDDEEFF |
32 hex символи |
| OPC | 63BFA50EE6523365FF14C1F45F88737D |
обери OPC radio button, не OP! |
| ACC | 0001 |
залишити за замовчуванням |
Поля які НЕ чіпаємо:
- ICCID — залишити як є (вже прошитий)
- ADM — не змінювати
- Ліва (GSM) колонка — порожня
Порядок дій:
1. Встав значення IMSI15 у відповідне поле
2. Встав KI
3. Вибери radio button "OPC" (не "OP") поруч з полем
4. Встав OPC значення
5. Натисни "Write Card" — і все
sysmocom (sysmoUSIM-SJA2 / SJS1)¶
Програмуються через pySim — Python утиліту від Osmocom. Працює на Linux/macOS/Windows.
Встановлення pySim¶
git clone https://github.com/osmocom/pysim.git
cd pysim
pip install -r requirements.txt
Програмування картки¶
# sysmoUSIM-SJA2
./pySim-prog.py -p 0 \
-t sysmoUSIM-SJA2 \
-a <ADM_KEY> \
--mcc 255 --mnc 33 \
-i 255330000000001 \
-k 00112233445566778899AABBCCDDEEFF \
--opc 63BFA50EE6523365FF14C1F45F88737D
# sysmoUSIM-SJS1 (старіша версія)
./pySim-prog.py -p 0 \
-t sysmoUSIM-SJS1 \
-a <ADM_KEY> \
--mcc 255 --mnc 33 \
-i 255330000000001 \
-k 00112233445566778899AABBCCDDEEFF \
--opc 63BFA50EE6523365FF14C1F45F88737D
Параметри:
- -p 0 — перший USB reader (якщо є кілька — -p 1, -p 2)
- -t — тип картки (важливо вказати правильно)
- --mcc 255 --mnc 33 — PLMN UMTC
- -i — IMSI (15 цифр)
- -k — Ki ключ
- --opc — OPC ключ (не --op!)
Читання картки¶
./pySim-read.py -p 0
Виводить IMSI, ICCID та інші параметри. Корисно для перевірки після запису.
Додавання абонента в Open5GS¶
Після програмування SIM — треба додати абонента в HSS (базу даних Core Network).
Через WebUI¶
- Відкрий
http://10.10.10.1:9999(або адреса VPS) - Subscribers → Add Subscriber
- Заповни:
| Поле | Значення |
|---|---|
| IMSI | 255330000000001 |
| Subscriber Key (K) | 00112233445566778899AABBCCDDEEFF |
| Operator Key (OPc) | 63BFA50EE6523365FF14C1F45F88737D |
| AMF | 8000 (за замовчуванням) |
| APN | internet |
- Натисни Save
Через MongoDB CLI¶
# На VPS де запущений Open5GS
mongosh open5gs
db.subscribers.insertOne({
imsi: "255330000000001",
security: {
k: "00112233445566778899AABBCCDDEEFF",
amf: "8000",
opc: "63BFA50EE6523365FF14C1F45F88737D"
},
ambr: {
downlink: { value: 1, unit: 3 },
uplink: { value: 1, unit: 3 }
},
slice: [{
sst: 1,
default_indicator: true,
session: [{
name: "internet",
type: 3,
ambr: {
downlink: { value: 1, unit: 3 },
uplink: { value: 1, unit: 3 }
},
qos: { index: 9, arp: { priority_level: 8, pre_emption_capability: 1, pre_emption_vulnerability: 1 } }
}]
}]
})
Нумерація IMSI в UMTC¶
PLMN UMTC: MCC 255, MNC 33 (зарезервований діапазон)
Формат IMSI: 255 33 XXXXXXXXX (9 цифр абонента)
Рекомендована схема нумерації:
| Діапазон | Призначення |
|---|---|
255330000000001 – 255330000000099 |
Адміністратори / тести |
255330000000100 – 255330000000199 |
1-й підрозділ |
255330000000200 – 255330000000299 |
2-й підрозділ |
255330000000900 – 255330000000999 |
Резерв / запасні |
Генерація Ki та OPC¶
Для кожної картки потрібні унікальні Ki та OPC. Генеруй криптографічно стійкі значення:
# Генерація Ki (32 hex символи = 128 біт)
openssl rand -hex 16
# Генерація OP (з якого потім отримуємо OPC)
openssl rand -hex 16
OPC з OP:
# Python скрипт для обчислення OPC з OP та Ki
from Crypto.Cipher import AES
def compute_opc(ki_hex, op_hex):
ki = bytes.fromhex(ki_hex)
op = bytes.fromhex(op_hex)
cipher = AES.new(ki, AES.MODE_ECB)
opc = bytes(a ^ b for a, b in zip(cipher.encrypt(op), op))
return opc.hex().upper()
ki = "00112233445566778899AABBCCDDEEFF"
op = "63BFA50EE6523365FF14C1F45F88737D"
print(compute_opc(ki, op))
Таблиця параметрів карток¶
Ведіть облік карток у захищеному документі:
| № | ICCID | IMSI | Ki | OPC | Статус |
|---|---|---|---|---|---|
| 1 | 8938... | 2553300000000001 | 00112... |
63BFA... |
Видана |
| 2 | 8938... | 2553300000000002 | AABB... |
1234... |
Запас |
Troubleshooting¶
Картка не читається:
- Перевір що картка вставлена правильно (контакти вниз в більшості reader-ів)
- Спробуй інший USB порт
- В pySim: спробуй -p 1 або -p 2
OYEITIMES: "Write failed":
- Картка захищена паролем — потрібен ADM ключ (для деяких OYEITIMES карток)
- Спробуй інший reader
Телефон не підключається після програмування:
- Перевір що IMSI в картці збігається з IMSI в Open5GS
- Перевір що KI однаковий в картці і в Open5GS
- OPC vs OP: переконайся що в обох місцях використовується OPC, не OP
- Перевір PLMN: телефон має знайти мережу 255/33
Open5GS логи для діагностики:
# На VPS
tail -f /var/log/open5gs/hss.log | grep "IMSI"
# Успішна автентифікація: "Authentication of IMSI[255330000000001]"
# Помилка: "MAC failure" — невірний Ki або OPC
Пов'язані статті¶
- lte/installation — встановлення LTE стеку
- ran/srs-epc — Open5GS Core Network конфігурація
- lte/bbu — ZTE BBU налаштування
- plmn — що таке PLMN
- imsi — структура IMSI
- ki — ключ автентифікації Ki
Шлях: lte/sim-programming.md