silveran
15.04.2006, 17:55
mC36
Вступление
Данной статьей я хочу приоткрыть занавес таинственности над процессом создания SIM-карт.
Вы увидете весь процесс персонализации, с детальным описанием и приведением примеров APDU на каждом ее шаге.
SIM карта - это просто!
Фазы GSM-смарт карт
Прежде, чем перейти к описанию процесса персонализации SIM-карт, хочется кратко вспомнить эволюцию связи GSM, поскольку это имеет непосредственное отношение к содержимому симки.
Всего на сегодня зафиксировано три технологические фазы развития связи GSM.
Фаза 1
Реализация начата в 1991 году и полностью завершена в 1993 году. SIM-карта 8 Кбайт.
Функции - входящие и исходящие звонки, переадресация вызова, запрет вызова, ожидание вызова, блокировка карточки, выбор сети PLMN (ф-ция роуминга), SMS (только прием), ускоренный набор номеров, отправка и прием факсимильных сообщений, запрет работы в сетях без роумингового соглашения - FPLMN.
Фаза 2
Реализация начата в 1994 году и полностью завершена в 1997 году. SIM-карта 8 Кбайт.
Поддержка всех функций фазы 1 плюс дополнительные - PIN2 (защита полей данных), "совет по оплате", фиксированный набор номеров, SMS (добавлена возможность отправки), статус SMS, автонабор последнего номера, выбор языка меню, персонализация сообщений, поддержка нескольких номеров (голосовая, цифровая, факсимильная связь), повтор последнего набранного номера, длинные номера (более 20 цифр), отображение провайдера услуг, АОН, антиАОН, групповой вызов, создание закрытой группы до 10 абонентов, голосовые сообщения.
Фаза 2+
Спецификации на реализацию этой фазы до сих пор нет. Новые услуги внедряются сразу после утверждения в ETSI. На сегодня количество таких услуг перевалило отметку в полсотни. Среди них (наиболее интересные и перспективные) - SIM Application Toolkit, Enhanced Full Rate, а также взаимодействие GSM и DECT.
SIM-карта с пониженным напряжением питания 3 В, емкостью от 16 Кбайт и поддержкой Java.
Файловая система
Вначале несколько слов о том, что же такое GSM SIM-карта.
GSM SIM-карта представляет собой обычную смарт карту, соответствующую стандарту ISO7816 (1-4), функциональность которой расширена GSM-специфичной функциональностью, как к примеру наличие криптоалгоритмов A3, A5 и A8.
Теперь о файловой системе GSM-карты.
Сразу оговорюсь, что Вам в руки может попасться как карточка-болванка, с уже сгенерированной файловой системой GSM, так и вовсе пустая карта, все файлы на которой нужно создавать. Последний вариант неприятен, но вполне осуществим, если Вы любите своего оператора ;-).
Итак, карточка-болванка.
Предоставляемые сетью GSM услуги жестко привязаны к содержимому карточки. Каждая услуга отображается на карте одним или несколькима файлами, содержимое которых несет необходимую информацию для получения этой услуги. Если не понятно, перечитайте еще раз ;-).
Ниже будут рассмотрены только те файлы, содержимое которых необходимо создать, перед тем как использовать SIM-карту для подключения к сети. Эта процедура называется персонализация карты.
Остальные файлы (не упомянутые здесь) могут быть изменены с помощью клавиатуры Вашего телефона или самой сетью (естественно посредством Вашего же телефона) без ведома владельца телефона.
Я рассчитываю, что у Вас есть карта-болванка, посему перечислю только минимально необходимый набор файлов, которые необходимы для того, чтобы получить функционирюющий модуль.
Начнем с корня - 3F00. В корневом каталоге у нас находятся файлы 0011 (админовские ключи, которые известны априори), 0000 (CHV1), 0100 (CHV2), а также некоторые другие, которые нам не понадобятся.
Поддиректория GSM - 7F20. Файлы - 0001 (тот самый Ki ;-)), 6F07 (IMSI), 6F05 (Language Preference), 6F20 (Kc), 6F31 (HPLMN), 6FAD (Administrative Data), 6F38 (Service table), 6F74 (Broadcast Control Channels).
Поддиректория Telecom - 7F10. Файл - 6F42 (SMS parameters).
GSM команды
Что касается GSM команд, то это набор ISO7816 команд для работы с файлами плюс специфичные для GSM SIM-карт команды. Здесь следует сделать небольшую но существенную оговорку - класс команд GSM карточек A0, обратите на это внимание!
Ниже приведены APDU некоторых команд GSM SIM-карты. Часть из приведенных в таблице команд в дальнейшем будут использованы в примерах.
Command Cla Ins P1 P2 P3
Verify Key
A0
2A
00
key num
Len
Verify CHV
A0
20
00
key num
08
Select File
A0
A4
00
00
02
Get Response
A0
C0
00
00
Len
Status
A0
F2
00
00
Len
Read Binary
A0
B0
Offset High
Offset Low
Len
Read Record
A0
B2
Record nb
Mode
Len
Update Binary
A0
D6
Offset High
Offset Low
Len
Update Record
A0
DC
Record nb
Mode
Len
Run GSM Alg.
A0
00
00
00
10
Terminal Profile
A0
10
00
00
Len
Fetch
A0
12
00
00
Len
Terminal Response
A0
14
00
00
Len
Обратите внимание, что последние три команды предназначены для работы с SIM Application Toolkit и имеют место быть только на карточках фазы 2+.
Необходимый минимум
Предполагаем, что у нас есть файловая система GSM (это чертовски облегчает жизнь). Посему незамедлительно приступим к персонализацтт (заполнению на нашей карте файлов, перечисленных в разделе Файловая система).
Для наглядности примера примем за исходные данные такие значения:
НАЧАЛЬНЫЕ ЗНАЧЕНИЯ
ADM0 = ADM1 (Hex) 00 00 00 00 00 00 00 00
PIN1 = PIN2 (Hex) 31 31 31 31 FF FF FF FF
(ASCII) "1111"
PUK1 = PUK2 (Hex) 31 32 33 34 35 36 37 38
(ASCII) "12345678"
Итак, вставив карточку в ридер, подав на нее питание и получив ATR (Answer To Reset - ответ карточки на подачу питания или команду СБРОС/RESET), выполняем по шагам ...
Шаг 1. Предъявляем админовские пароли.
Cla Ins P1 P2 P3/Lc Le Data In
A0
2A
00
00
08
00 00 00 00 00 00 00 00
Чисто случайно получаем ответ 90 00 и невозмутимо продолжаем -
Cla Ins P1 P2 P3/Lc Le Data In
A0
2A
00
01
08
00 00 00 00 00 00 00 00
Не путайте пароли администратора с PIN и PUK-кодами, которыми Вы пользуетесь в процессе эксплуатации своего телефона.
Чтобы исключить возможную путаницу понятий в дальнейшем, разграничим понятия PIN-кодов и паролей администратора.
Пароли администратора позволяют получить неограниченный доступ к содержимому карточки, в то время, как PIN и PUK-коды это всего лишь определенные в файловой системе GSM файлы (CHV1 и CHV2), содержащие эти самые коды, плюс сопутствующая информация.
Эти файлы (CHV1 и CHV2) используются Вашим телефоном для запроса ввода PIN и PUK кодов. Верификация кодов происходит путем сверки введенного с содержимым файла. Предъявление PIN/PUK кодов ни в коей мере не позволит Вам вносить изменения на карте, как то - создание, запись или удаление файла.
А вот пароли администратора позволяют подобные манипуляции. К примеру, ели вы заблокировали Вашу карту, в том числе и PUK-код, то зная пароли администратора, просто перезапишите определенные области в файле CHV1 (или CHV2, первый или второй PIN/PUK коды соответственно).
Шаг 2. Записываем PIN'ы и PUK'и.
Начинаем с CHV1 -
Cla Ins P1 P2 P3/Lc Le Data In
A0
A4
00
00
02
00 00
Теоретически получаем 90 00. Обновляем содержимое (всего файла) -
Cla Ins P1 P2 P3/Lc Le Data In
A0
D6
00
00
17
01 00 00 31 31 31 31 FF FF FF FF 03 03 31 32 33 34 35 36 37 38 0A 0A
Здесь сделаю краткое отступление с целью объяснить формат содержимого CHV файла:
Byte Parameter/Description Mandatory-Optional Length
1
Байт активации
- 00 - не используется
- 01 - нужно предъявлять при включении трубки
1
2-3
RFU, заполняется нулями
2
4-11
PIN (ASCII коды символов в HEX; значения FF - нет символов).
Пин-код в нашем случае: 1111
8
12
Предустановленное к-во попыток ввода пин-кода
1
13
Оставшееся к-во попыток ввода пин-кода
1
14-21
PUK (ASCII коды символов разблокировки пина в HEX).
PUK в нашем случае: 12345678
8
22
Предустановленное к-во попыток ввода кода разблокирования
1
23
Оставшееся к-во попыток ввода кода разблокирования
1
В данном примере пин-код, это четыре единицы - "1111" с ограничением количества попыток неправильного ввода равного трем, а PUK - "12345678" с соответствующим количеством попыток равным десяти.
Аналогичным образом записываем CHV2 -
Cla Ins P1 P2 P3/Lc Le Data In
A0
A4
00
00
02
01 00
Должны получить 90 00. Обновляем содержимое (делаем пин и пак-коды одинаковыми) -
Cla Ins P1 P2 P3/Lc Le Data In
A0
D6
00
00
17
01 00 00 31 31 31 31 FF FF FF FF 03 03 31 32 33 34 35 36 37 38 0A 0A
Проверить корректность записи пин-кодов можно командой -
Cla Ins P1 P2 P3/Lc Le Data In
A0
20
00
01
08
31 31 31 31 FF FF FF FF
Это обычная проверка пин-кода. Именно такой APDU формируется Вашим телефоном и отсылается карточке, когда, после включения телефона, вводится пин-код. Результат должен быть 90 00.
Шаг 3. IMSI или Ваш персональный логин в сеть.
IMSI (International Mobile Subscriber Identity) - это глобально уникальный идентификатор абонента. Формируется из 3 частей: код страны + код сети оператора GSM + внутрисетевой код абонента. Сопоставляется в биллинговой и коммуникационной системе оператора с выделенным абоненту телефонным номером, собственно поэтому IMSI и выполняет роль логина в сеть ;-).
Формат IMSI, который используется оператором, отличается от хранимого на SIM-карте. Допустим, к примеру, что оператор видит IMSI как - 123456789012345 (15 цифр). Тогда на карточку нужно заносить IMSI в виде - 08 19 32 54 76 98 10 32 54. Правило преобразования следующее:
к IMSI а-ля оператор приписываем 809 слева, в результате чего получаем - 809123456789012345 (18 цифр);
считаем, что полученное на предыдущем этапе число в BCD формате (т.е. каждые две цифры представляют один байт). Переставляем старший и младший ниблы каждого байта местами. В результате должны получить что-то подобное этому - 081932547698103254. Первый байт отражает количество значащих байт (исключая байт длины - себя), необходимых для IMSI.
Длина IMSI не может превышать 8 байт. Но иногда иператоры могут использовать укороченную нотацию, когда IMSI меньше 15 цифр. В таком случае, необходимо IMSI от оператора дополнить справа шестнадцатеричными F до длины в 15 цифр и подвергнуть описанному выше преобразованию. Естественно, не забудте скорректировать первый байт, там уже не будет 8, а цифра поменьше.
Запишем наш IMSI.
Перейдем в директорию GSM -
Cla Ins P1 P2 P3/Lc Le Data In
A0
A4
00
00
02
7F 20
Вступление
Данной статьей я хочу приоткрыть занавес таинственности над процессом создания SIM-карт.
Вы увидете весь процесс персонализации, с детальным описанием и приведением примеров APDU на каждом ее шаге.
SIM карта - это просто!
Фазы GSM-смарт карт
Прежде, чем перейти к описанию процесса персонализации SIM-карт, хочется кратко вспомнить эволюцию связи GSM, поскольку это имеет непосредственное отношение к содержимому симки.
Всего на сегодня зафиксировано три технологические фазы развития связи GSM.
Фаза 1
Реализация начата в 1991 году и полностью завершена в 1993 году. SIM-карта 8 Кбайт.
Функции - входящие и исходящие звонки, переадресация вызова, запрет вызова, ожидание вызова, блокировка карточки, выбор сети PLMN (ф-ция роуминга), SMS (только прием), ускоренный набор номеров, отправка и прием факсимильных сообщений, запрет работы в сетях без роумингового соглашения - FPLMN.
Фаза 2
Реализация начата в 1994 году и полностью завершена в 1997 году. SIM-карта 8 Кбайт.
Поддержка всех функций фазы 1 плюс дополнительные - PIN2 (защита полей данных), "совет по оплате", фиксированный набор номеров, SMS (добавлена возможность отправки), статус SMS, автонабор последнего номера, выбор языка меню, персонализация сообщений, поддержка нескольких номеров (голосовая, цифровая, факсимильная связь), повтор последнего набранного номера, длинные номера (более 20 цифр), отображение провайдера услуг, АОН, антиАОН, групповой вызов, создание закрытой группы до 10 абонентов, голосовые сообщения.
Фаза 2+
Спецификации на реализацию этой фазы до сих пор нет. Новые услуги внедряются сразу после утверждения в ETSI. На сегодня количество таких услуг перевалило отметку в полсотни. Среди них (наиболее интересные и перспективные) - SIM Application Toolkit, Enhanced Full Rate, а также взаимодействие GSM и DECT.
SIM-карта с пониженным напряжением питания 3 В, емкостью от 16 Кбайт и поддержкой Java.
Файловая система
Вначале несколько слов о том, что же такое GSM SIM-карта.
GSM SIM-карта представляет собой обычную смарт карту, соответствующую стандарту ISO7816 (1-4), функциональность которой расширена GSM-специфичной функциональностью, как к примеру наличие криптоалгоритмов A3, A5 и A8.
Теперь о файловой системе GSM-карты.
Сразу оговорюсь, что Вам в руки может попасться как карточка-болванка, с уже сгенерированной файловой системой GSM, так и вовсе пустая карта, все файлы на которой нужно создавать. Последний вариант неприятен, но вполне осуществим, если Вы любите своего оператора ;-).
Итак, карточка-болванка.
Предоставляемые сетью GSM услуги жестко привязаны к содержимому карточки. Каждая услуга отображается на карте одним или несколькима файлами, содержимое которых несет необходимую информацию для получения этой услуги. Если не понятно, перечитайте еще раз ;-).
Ниже будут рассмотрены только те файлы, содержимое которых необходимо создать, перед тем как использовать SIM-карту для подключения к сети. Эта процедура называется персонализация карты.
Остальные файлы (не упомянутые здесь) могут быть изменены с помощью клавиатуры Вашего телефона или самой сетью (естественно посредством Вашего же телефона) без ведома владельца телефона.
Я рассчитываю, что у Вас есть карта-болванка, посему перечислю только минимально необходимый набор файлов, которые необходимы для того, чтобы получить функционирюющий модуль.
Начнем с корня - 3F00. В корневом каталоге у нас находятся файлы 0011 (админовские ключи, которые известны априори), 0000 (CHV1), 0100 (CHV2), а также некоторые другие, которые нам не понадобятся.
Поддиректория GSM - 7F20. Файлы - 0001 (тот самый Ki ;-)), 6F07 (IMSI), 6F05 (Language Preference), 6F20 (Kc), 6F31 (HPLMN), 6FAD (Administrative Data), 6F38 (Service table), 6F74 (Broadcast Control Channels).
Поддиректория Telecom - 7F10. Файл - 6F42 (SMS parameters).
GSM команды
Что касается GSM команд, то это набор ISO7816 команд для работы с файлами плюс специфичные для GSM SIM-карт команды. Здесь следует сделать небольшую но существенную оговорку - класс команд GSM карточек A0, обратите на это внимание!
Ниже приведены APDU некоторых команд GSM SIM-карты. Часть из приведенных в таблице команд в дальнейшем будут использованы в примерах.
Command Cla Ins P1 P2 P3
Verify Key
A0
2A
00
key num
Len
Verify CHV
A0
20
00
key num
08
Select File
A0
A4
00
00
02
Get Response
A0
C0
00
00
Len
Status
A0
F2
00
00
Len
Read Binary
A0
B0
Offset High
Offset Low
Len
Read Record
A0
B2
Record nb
Mode
Len
Update Binary
A0
D6
Offset High
Offset Low
Len
Update Record
A0
DC
Record nb
Mode
Len
Run GSM Alg.
A0
00
00
00
10
Terminal Profile
A0
10
00
00
Len
Fetch
A0
12
00
00
Len
Terminal Response
A0
14
00
00
Len
Обратите внимание, что последние три команды предназначены для работы с SIM Application Toolkit и имеют место быть только на карточках фазы 2+.
Необходимый минимум
Предполагаем, что у нас есть файловая система GSM (это чертовски облегчает жизнь). Посему незамедлительно приступим к персонализацтт (заполнению на нашей карте файлов, перечисленных в разделе Файловая система).
Для наглядности примера примем за исходные данные такие значения:
НАЧАЛЬНЫЕ ЗНАЧЕНИЯ
ADM0 = ADM1 (Hex) 00 00 00 00 00 00 00 00
PIN1 = PIN2 (Hex) 31 31 31 31 FF FF FF FF
(ASCII) "1111"
PUK1 = PUK2 (Hex) 31 32 33 34 35 36 37 38
(ASCII) "12345678"
Итак, вставив карточку в ридер, подав на нее питание и получив ATR (Answer To Reset - ответ карточки на подачу питания или команду СБРОС/RESET), выполняем по шагам ...
Шаг 1. Предъявляем админовские пароли.
Cla Ins P1 P2 P3/Lc Le Data In
A0
2A
00
00
08
00 00 00 00 00 00 00 00
Чисто случайно получаем ответ 90 00 и невозмутимо продолжаем -
Cla Ins P1 P2 P3/Lc Le Data In
A0
2A
00
01
08
00 00 00 00 00 00 00 00
Не путайте пароли администратора с PIN и PUK-кодами, которыми Вы пользуетесь в процессе эксплуатации своего телефона.
Чтобы исключить возможную путаницу понятий в дальнейшем, разграничим понятия PIN-кодов и паролей администратора.
Пароли администратора позволяют получить неограниченный доступ к содержимому карточки, в то время, как PIN и PUK-коды это всего лишь определенные в файловой системе GSM файлы (CHV1 и CHV2), содержащие эти самые коды, плюс сопутствующая информация.
Эти файлы (CHV1 и CHV2) используются Вашим телефоном для запроса ввода PIN и PUK кодов. Верификация кодов происходит путем сверки введенного с содержимым файла. Предъявление PIN/PUK кодов ни в коей мере не позволит Вам вносить изменения на карте, как то - создание, запись или удаление файла.
А вот пароли администратора позволяют подобные манипуляции. К примеру, ели вы заблокировали Вашу карту, в том числе и PUK-код, то зная пароли администратора, просто перезапишите определенные области в файле CHV1 (или CHV2, первый или второй PIN/PUK коды соответственно).
Шаг 2. Записываем PIN'ы и PUK'и.
Начинаем с CHV1 -
Cla Ins P1 P2 P3/Lc Le Data In
A0
A4
00
00
02
00 00
Теоретически получаем 90 00. Обновляем содержимое (всего файла) -
Cla Ins P1 P2 P3/Lc Le Data In
A0
D6
00
00
17
01 00 00 31 31 31 31 FF FF FF FF 03 03 31 32 33 34 35 36 37 38 0A 0A
Здесь сделаю краткое отступление с целью объяснить формат содержимого CHV файла:
Byte Parameter/Description Mandatory-Optional Length
1
Байт активации
- 00 - не используется
- 01 - нужно предъявлять при включении трубки
1
2-3
RFU, заполняется нулями
2
4-11
PIN (ASCII коды символов в HEX; значения FF - нет символов).
Пин-код в нашем случае: 1111
8
12
Предустановленное к-во попыток ввода пин-кода
1
13
Оставшееся к-во попыток ввода пин-кода
1
14-21
PUK (ASCII коды символов разблокировки пина в HEX).
PUK в нашем случае: 12345678
8
22
Предустановленное к-во попыток ввода кода разблокирования
1
23
Оставшееся к-во попыток ввода кода разблокирования
1
В данном примере пин-код, это четыре единицы - "1111" с ограничением количества попыток неправильного ввода равного трем, а PUK - "12345678" с соответствующим количеством попыток равным десяти.
Аналогичным образом записываем CHV2 -
Cla Ins P1 P2 P3/Lc Le Data In
A0
A4
00
00
02
01 00
Должны получить 90 00. Обновляем содержимое (делаем пин и пак-коды одинаковыми) -
Cla Ins P1 P2 P3/Lc Le Data In
A0
D6
00
00
17
01 00 00 31 31 31 31 FF FF FF FF 03 03 31 32 33 34 35 36 37 38 0A 0A
Проверить корректность записи пин-кодов можно командой -
Cla Ins P1 P2 P3/Lc Le Data In
A0
20
00
01
08
31 31 31 31 FF FF FF FF
Это обычная проверка пин-кода. Именно такой APDU формируется Вашим телефоном и отсылается карточке, когда, после включения телефона, вводится пин-код. Результат должен быть 90 00.
Шаг 3. IMSI или Ваш персональный логин в сеть.
IMSI (International Mobile Subscriber Identity) - это глобально уникальный идентификатор абонента. Формируется из 3 частей: код страны + код сети оператора GSM + внутрисетевой код абонента. Сопоставляется в биллинговой и коммуникационной системе оператора с выделенным абоненту телефонным номером, собственно поэтому IMSI и выполняет роль логина в сеть ;-).
Формат IMSI, который используется оператором, отличается от хранимого на SIM-карте. Допустим, к примеру, что оператор видит IMSI как - 123456789012345 (15 цифр). Тогда на карточку нужно заносить IMSI в виде - 08 19 32 54 76 98 10 32 54. Правило преобразования следующее:
к IMSI а-ля оператор приписываем 809 слева, в результате чего получаем - 809123456789012345 (18 цифр);
считаем, что полученное на предыдущем этапе число в BCD формате (т.е. каждые две цифры представляют один байт). Переставляем старший и младший ниблы каждого байта местами. В результате должны получить что-то подобное этому - 081932547698103254. Первый байт отражает количество значащих байт (исключая байт длины - себя), необходимых для IMSI.
Длина IMSI не может превышать 8 байт. Но иногда иператоры могут использовать укороченную нотацию, когда IMSI меньше 15 цифр. В таком случае, необходимо IMSI от оператора дополнить справа шестнадцатеричными F до длины в 15 цифр и подвергнуть описанному выше преобразованию. Естественно, не забудте скорректировать первый байт, там уже не будет 8, а цифра поменьше.
Запишем наш IMSI.
Перейдем в директорию GSM -
Cla Ins P1 P2 P3/Lc Le Data In
A0
A4
00
00
02
7F 20