С бытовой точки зрения сим-карта — это просто карточка со вшитым номером телефона, но для программиста всё гораздо интереснее. Дело в том, что сим-карта — это на самом деле мини-компьютер со своим процессором и памятью, а значит, его можно запрограммировать.
Сим-карта — это компьютер
Внешне сим-карта выглядит просто: кусок пластика с позолоченными контактами, который вставляется в телефон. Но под этими контактами инженеры разместили настоящий компьютер:
- процессор примерно на 10 мегагерц — по мощности это примерно так же, как у процессора Intel 80286, который стоял в системных блоках в 80-х;
- 256 килобайт памяти;
- несколько килобайт оперативной памяти;
- блок с энергонезависимой памятью для хранения настроек;
- криптографические модули.
Вот как это выглядит изнутри:
Сейчас кажется, что на таком железе нельзя запустить ничего нормально, но на самом деле у сим-карты есть даже своя операционная система и программы.
Мощность такого компьютера не зависит от размера пластиковой части сим-карты. Чтобы компьютер работал, достаточно соблюдать размеры и форму контактов, а сам компьютер намного меньше этой контактной пластины.
На чём пишут софт для сим-карт
Так как возможности железа сильно ограничены, то программы для сим-карт пишут на языке, который использует все ресурсы по максимуму — это C. Технически можно было бы ещё писать на С++, но поддержка ООП съест часть памяти, а это уже критично. Такой подход позволяет вместить всю операционную систему карты в 15–20 килобайт.
С другой стороны, иногда ОС для карт пишут на ассемблере, но по объёму он почти такой же, как оптимизированный код на С.
На сим-карте, кроме ОС, есть ещё свои приложения, например «Меню сим-карты». Многие думают, что это встроенные возможности телефона, но на самом деле меню обрабатывается на сим-карте. Так как железо в симке гораздо медленнее того, что стоит в телефонах, меню сим-карты отображается медленнее, чем все остальные настройки.
Кроме меню и ОС, на сим-карту можно записать любое приложение, которое может делать что угодно в рамках доступных ресурсов. Например, некоторые сим-карты несут в себе приложения Visa или Mastercard — это позволяет пользоваться симкой как банковской картой.
Как карты регистрируются в сети
За регистрацию в сети отвечают два компонента: уникальный идентификатор карты (IMSI) и ключ шифрования (Ki).
IMSI отвечает за регистрацию карты в сети — по нему оператор связи понимает, какая именно это сим-карта. Дальше оператор смотрит в базу данных и определяет, какой номер к ней привязан.
Ключ Ki — самая важная часть карты с точки зрения безопасности. Именно этим ключом шифруются все данные, которые передаются с карты и обратно, поэтому ключ хранится в области памяти, недоступной для чтения. Даже если подключить контакты симки к другому процессору и попробовать получить все данные напрямую, это не сработает.
Что можно хранить на сим-карте
В сим-карте есть своя файловая система, но в упрощённом варианте. Всё, что хранится на карте — это файлы:
- настройки,
- адресная книга,
- СМС-сообщения,
- данные оператора.
При этом для удобства файлы можно хранить в папках, например сообщения или телефоны друзей. Но даже папка здесь — это тоже файл, просто с другой пометкой внутри файловой системы.
Во многих сим-картах под адресную книгу заранее выделено 199 ячеек памяти — это сделано для того, чтобы сообщения, которые тоже могут храниться на картах, не забили собой всю доступную память.
Электронные сим-карты
В современных телефонах появились электронные сим-карты — e-sim. Вместо пластиковой карточки используется файл с прошивкой — он загружается в специальный чип на телефоне и после этого работает как обычная сим-карта. Такая прошивка приходит от оператора связи по интернету — самому прошить такое не получится.
Так как e-sim — это просто файл на телефоне, то работа с такой симкой происходит гораздо быстрее, чем с обычной. С другой стороны, на такой симке уже не получится сохранить контакты, чтобы потом переставить её в другой телефон.
Можно ли скопировать сим-карту
Технически да, но пользоваться клонированной сим-картой — незаконно. У операторов сотовой связи есть свои алгоритмы выявления и блокировки таких клонов. Самый простой из них — привязка к последней геолокации. Если сим-карта появляется в сети очень далеко от места последней регистрации, оператор может заблокировать такую карту.
Ещё один способ защиты карт — сложный подбор Ki-ключа. Этот ключ нельзя считать напрямую из карты, его можно подобрать только перебором. Но после определённого количества неудачных регистраций операторы навсегда блокируют сим-карту.