Вопрос:
- “Сим-карта может содержать какую-то програмку, которая появляется в меню моего телефона и может выполняться, если я с бодуна в нее ткну. Меню развлечений какое-то или еще что-то в этом роде. Так вот вопрос. В каких кодах разработана эта програмка, что она спокойно готова выполняться как на смартфоне нокия под SymbianOS, так и под тупой мабилой от мотороллы на совсем другом процессоре, например? Я подозреваю что там какой то аналог RPC – команда с параметами скармливается по шине, и получается результат, нет?”
ОК, углубимся в детали того, что бывает в потрохах SIM-карты и как она взаимодействует с телефоном.
Как я уже говорил, SIM-карта представляет собой мелкий компьютер с ограниченой функциональностью и строго специфицированным внешним интерфейсом. Через этот интерфейс SIM-карту “дергает” телефон, который является для SIM-карты единственным окном во внешний мир.
Интерфейс между телефоном (ME) и SIM-картой действительно представляет собой что-то вроде RPC с ограниченым набором функций. Если быть точным, то в базовом API SIM-карты GSM Phase 1 их (функций) всего 17 штук (раздел 8 стандарта GSM 11.11). Большая их часть отвечает за навигацию по памяти SIM-карты и модификацию значений EF (elementary files). Кроме этого есть еще функция “RUN GSM ALGORITHM” (выполнение пресловутых алгоритмов A3/A8) и функция “SLEEP”, которая не используется в GSM Phase 2 :)
Естественно, что GSM-операторы очень быстро сообразили, что было бы очень неплохо иметь SIM-карты “не такие, как у всех”. Это, типа, дает конкурентное преимущество и все такое. Опять же, таким образом можно облегчать глупым пользователям доступ к value-added сервисам. Теперь не прийдется запоминать, что секс по телефону живет по номеру XYZ - в меню телефона будет пункт “секс по телефону”, который будет инициировать дозвон “куда надо”.
И вот где-то в начале девяностых спецификация на интерфейс между SIM и ME была расширена и туда были добавлены функции, обеспечивающие работу того, что обычно называют термином “SIM Toolkit”.
По-просту говоря, SIM Toolkit - это приложение (-ия), работающее на SIM-карте и взаимодействующие с ME по интерфейсу, описанному в GSM 11.14.
Такие приложения могут:
- показывать текст на экране ME
- инициировать посылку SMS/звонок/USSD-посылку на номер телефона, хранящийся на SIM-карте
- пискнуть в динамик
- вести диалог с пользователем (“Are you sure (Y/N)?”)
- получать информацию извне с помощью SMS или Cell Broadcast и сохранять ее на SIM-карте
- предоставлять дополнительные меню, отображаемые ME
- модифицировать номера исходящих звонков или запрещать определенные звонки.
Учитывая, что специфицирован и стандартизирован только интерфейс SIM-ME, а сами приложения выполняются внутри SIM-карты, не имеет никакого значения, как именно и на чем они написаны.
Первые SIM-карты с STK содержали “статический” набор приложений, изменить которые можно было только поменяв саму SIM-карту. Понятное дело, что аппетит приходит во время еды, и очень скоро операторы поняли, что возможность менять STK “на ходу” - это наше всё. Но для реализации этой возможности надо было “открыть” процесс написания софта для SIM-карт и дать возможность независимым поставщикам писать приложения для SIM-карт, что явно было не по нраву производителям SIMок.
Решением стало появление SIM-карт, способных выполнять сильно обрезанную JVM (Java Virtual Machine) и создание спецификации JavaCard, позволившее третьим фирмам писать applet-ы для таких SIM-карт. В настоящий момент на рынке уже существует несколько моделей SIM-карт с немерянными объемами свободнй памяти - 32K или 64К, что позволяет разместить на них 2-3-4-5 апплетов.
PS А для окончательного расширения горизонтов сознания поищите в Google-е слова “How to turn SIM card into Web Server” :)
Литература:
- Короткое описание с картинками того, что такое Sim Toolkit (en)
- GSM 11.11, “Specification of the SIM-ME interface” (en)
- GSM 11.14, “SIM Toolkit and SIM-ME interface for SIM Toolkit” (en)
- JavaCard portal (en)