August 15

Как используются данные SIM‑карты в GSM (2G): аутентификация, ключи, IMSI, A3/A8

Всем привет! В GSM (2G) SIM‑карта хранит постоянный секретный ключ абонента Ki и идентификатор IMSI; при регистрации в сети используется механизм «вызов‑ответ»: сеть посылает случайное число RAND, SIM вычисляет подписанный ответ SRES = A3(Ki, RAND) и сеансовый ключ шифрования Kc = A8(Ki, RAND), после чего сеть проверяет SRES и при успехе включает шифрование A5.

Важно: Ki никогда не передаётся по радиоинтерфейсу и не выводится из SIM; вся криптография «вызов‑ответ» выполняется внутри SIM.jucs+2

2. Роли сетевых элементов (кратко)

  • MS (Mobile Station) = ME (телефон) + SIM.
  • BTS/BSC — радиодоступ.
  • MSC/VLR — коммутация и локальное управление сессиями; VLR хранит «триплеты» аутентификации для абонента.
  • HLR — домашний реестр абонентов.
  • AuC (Authentication Center) — генерирует RAND, SRES, Kc (триплеты) на основе IMSI и Ki.

3. Протокол аутентификации GSM (2G): пошагово

Ниже — упрощённая последовательность при регистрации/доступе к услугам.

text[MS/SIM]                         [MSC/VLR]                         [HLR/AuC]
    |                                |                                |
    | 1. Location Update / CM Service Request (IMSI или TMSI)         |
    |--------------------------------------------------------------->|
    |                                | 2. Запрос триплетов для IMSI   |
    |                                |------------------------------>|
    |                                | 3. Возврат N триплетов         |
    |                                | (RAND_i, SRES_i, Kc_i)         |
    |                                |<------------------------------|
    |                                |                                |
    | 4. AUTHENTICATION REQUEST      |                                |
    |    (RAND)                      |                                |
    |<-------------------------------|                                |
    | 5. SIM: SRES' = A3(Ki, RAND)   |                                |
    |     Kc'   = A8(Ki, RAND)       |                                |
    | 6. AUTHENTICATION RESPONSE     |                                |
    |    (SRES')                     |                                |
    |------------------------------>|                                |
    |                                | 7. Проверка: SRES' == SRES?    |
    |                                |    Если да → аутентификация OK |
    | 8. Cipher Mode Command (A5/x)  |                                |
    |<-------------------------------|                                |
    | 9. Включение шифрования A5/x с Kc'                               |
    |<================================================================>|

Ключевые моменты:

  • Сеть заранее получает от AuC «триплеты» (RAND, SRES, Kc) для данного IMSI; при аутентификации она посылает только RAND.
  • SIM вычисляет SRES' и Kc' по тем же формулам; VLR сравнивает SRES' с ожидаемым SRES.
  • После успеха сеть инициирует Cipher Mode Command и далее трафик шифруется A5/x с ключом Kc.

4. Алгоритмы A3 и A8: что именно считается

Формально стандарт GSM не фиксирует одну конкретную реализацию A3/A8; операторы выбирают алгоритм (часто COMP128‑1/2/3, milenage‑подобные варианты в 2G‑совместимых реализациях и др.).

  • A3: SRES = A3(Ki, RAND) → 32‑битный ответ.
  • A8: Kc = A8(Ki, RAND) → 64‑битный сеансовый ключ для A5/x.

На практике A3 и A8 часто реализованы как единая функция, выдающая (SRES, Kc) из (Ki, RAND).

5. Роль IMSI и почему он важен

  • IMSI используется для идентификации абонента в HLR/AuC и получения правильного Ki (и триплетов).
  • При первой регистрации в новой зоне MS обычно передаёт IMSI (если нет валидного TMSI), что делает IMSI видимым для любой базовой станции в радиусе.
  • В дальнейшем сеть старается использовать TMSI вместо IMSI для конфиденциальности, но IMSI всё равно может быть запрошен (например, при сбоях или специальных процедурах).
  • TMSI (Temporary Mobile Subscriber Identity) — это временный идентификатор абонента, который сеть выдаёт мобильному устройству после успешной регистрации, чтобы вместо постоянного IMSI использовать его в радиоканале для повышения конфиденциальности.

6. Риски безопасности GSM (2G), связанные с SIM и аутентификацией

GSM (2G) имеет ряд фундаментальных ограничений, которые напрямую касаются использования данных SIM:

  1. Односторонняя аутентификация
    • Сеть аутентифицирует телефон (MS), но телефон не аутентифицирует сеть.
    • Это позволяет IMSI‑catcher'у (фейковой базовой станции) притворяться «легальной» сетью: телефон отправляет IMSI/TMSI, проходит «аутентификацию» у злоумышленника, а трафик может не шифроваться или шифроваться слабым алгоритмом.
  2. Слабость шифрования A5/1 (и A5/2)
    • A5/1 (64‑битный ключ Kc) уязвим к атакам по заранее вычисленным таблицам (rainbow tables); практическая расшифровка возможна за секунды–минуты на обычном железе.
    • A5/2 ещё слабее и практически не защищает.
    • Злоумышленник может принудительно переключить сессию на A5/0 (без шифрования) или слабый A5/x.
  3. Зависимость от реализации A3/A8
    • Ранние популярные реализации (например, COMP128‑1) имели криптографические слабости, позволяющие при достаточном числе запросов извлекать Ki.
    • Даже при более стойких A3/A8, 32‑битный SRES и 64‑битный Kc ограничивают криптостойкость по современным меркам.
  4. Перехват IMSI
    • Поскольку IMSI передаётся в открытом виде при первой регистрации, IMSI‑catcher может собирать IMSI всех устройств в зоне покрытия.

Эти ограничения — причина, по которой в 3G/4G/5G введена взаимная аутентификация (сеть тоже доказывается абоненту), более длинные ответы (RES вместо SRES), ключи CK/IK и более стойкие алгоритмы (Milenage, AES‑based и др.).

7. Сводная схема «данные SIM → параметры сессии»

textSIM (Ki, IMSI, A3/A8)
       │
       │ IMSI → HLR/AuC → выбор Ki
       │
       └─► AuC: для каждого RAND_i
               SRES_i = A3(Ki, RAND_i)
               Kc_i   = A8(Ki, RAND_i)
               триплет (RAND_i, SRES_i, Kc_i) → VLR

При аутентификации:
  VLR → MS: RAND
  SIM: SRES' = A3(Ki, RAND)
       Kc'   = A8(Ki, RAND)
  MS → VLR: SRES'
  VLR: если SRES' == SRES → OK, шифрование A5/x с Kc'