Емулятор таксофонної картки або есе про авторизацію

Подорожуючи по рунету в пошуках будь-якої інформації про емулятори смарт-карт синхронного режиму стандарту ISO7816, помітив цікаву особливість: інформації майже немає, а те, що можна знайти, списано з одного джерела (випуск 48 Phrack Magazine) у різних варіаціях. І жодного слова я не знайшов про авторизацію смарт-карт у таксофоні. Насправді, будь-хто, хто замислювався над створенням емулятора карти, повинен був задуматися про це питання. Давайте розглянемо алгоритм роботи на прикладі таксофона МГТС. Вставимо порожню карту. Таксофон пише, що "Кредит вичерпано". Яким чином відбувається читання карти? Ось приклад роботи таксофона:

Reset
11101000 00110000 11001111 00001001 
00000000 11001010 01001010 10000110 
00000000 00000000 00000000 00000000 
00000000 11111111 01010110 00000100 
(128 bits read)
Reset
11101000 00110000 11001111 00001001 
00000000 11001010 01001010 10000110 
(64 bits read)
Bit written at address 64
00000000 00000000 00000000 00000000 

У наведеному прикладі цифри позначають стан (0 або 1) на контакті карти введення/виведення (I/O), текстові коментарі без дужок - відповідні операції з картою (відповідно до стандарту), коментарі в дужках - підсумкова статистика прочитаної інформації... Поданий лог сформований програмою SCALA (Smart CArd Logic Analizer). Отримати програму та інші розробки і смаколики можна за адресою http://www.gsho.de/phonecard. Там же можна почитати на тему роботи зі смарт-картами в Німеччині та Швейцарії. ;) Отже, повернемося до наших баранів. Що ми бачимо? Із 512 біт карти зчитуються лише перші 128 біт, далі карта скидається, і читаються перші 64 біта, іншими словами, пересувається вказівник на 64 позицію, потім виконується операція Write (див. стандарт) і читаються старші 4 байти восьмеричного лічильника кредиту карти. На основі отриманої інформації робиться висновок про те, що карта пуста, і видається відповідне повідомлення.
Чому в цьому випадку робиться спроба запису 64 біт - мені невідомо. Ймовірно, це одна з найпростіших перевірок на відповідність алгоритму. Якщо у когось є інформація про дійсне призначення цього процесу - напишіть мені, а я поділюся інформацією з нашими читачами. ;)

Тепер, мабуть, перейдемо до найцікавішого. А що відбувається, коли кредит не дорівнює нулю? І тут любителів халяви чекає гірке розчарування. Чому? Зараз поясню. Наводити алгоритм читання карти з кредитом я не буду, він довгий і складний для читання. Спробую розповісти простими словами. Отже, почнемо з подачі живлення на карту. Далі карта скидається, читаються перші 128 біт. Потім знову Reset, читання 64 біти (встановлення адреси), спроба запису 64 біт (навіщо - не знаю, але про це я вже говорив вище), далі читання кредиту карти. (здається, всього 39 біт, але це не важливо). І ось найцікавіше: далі знову Reset, читання 110 біт (встановлення адреси) і запис! (операція Write) по 110 адресі, читання 177 біт і далі відбувається ось що. Карта переходить в режим читання. Таксофон на ніжці I/O виставляє рівні, використовуючи ніжку Clock, продовжує перемикати адресу карти. Всього записується 48 біт. (6 байт) Далі карта повертається в режим видачі інформації. Адреси продовжують змінюватися, а на виході карти з'являється інформація відповіді. Кожні 160 тактів видається рівно один біт інформації. Всього таких бітів буде 16. 6 байт запиту формуються таксофоном випадковим чином, відповідь залежить від багатьох параметрів, наприклад, від серійного номера карти, залишку кредиту (ймовірно), користувацької області..... Таксофон паралельно обчислює за тим же алгоритмом відповідь карти і порівнює два числа. На основі збігу або різниці робиться висновок про валідність карти. Ось так все просто. А тепер про сумне - алгоритм невідомий. Принаймні, мені. ;)

У короткому вигляді алгоритм виглядає наступним чином:

1. Скидання карти (Reset)
2. 110 імпульсів на виході Clock (Встановлення адреси 110)
3. Запис біта за адресою 110 (Write)
4. 177 імпульсів на виході Clock
5. Встановлення першого біта на виході I/O
6. 1 імпульс на виході Clock
7. Повторити пункти 5,6 для запису бітів з 2 по 48
8. 160 імпульсів на виході Clock
9. Прочитати перший біт на виході I/O
10. Повторити пункти 8,9 для читання бітів з 2 по 16

Які висновки можна зробити з усього вищезазначеного? У мене викликають величезні сумніви слова окремих осіб, які стверджують, що їм вдалося створити емулятор таксофонної карти МГТС. Тут можливі два варіанти - або їм відомий алгоритм, або вони трохи перебільшують. ;) Виникає питання - чи можна зламати алгоритм? Можна, але складно. ;) Хочете спробувати? Якщо у вас є що сказати з цього приводу - ласкаво просимо на електронну пошту.

Top