Як влаштована смарт-картка
Довгий час працюючи зі смарт-картами, я сам мав не дуже чітке уявлення про їх нутрощі. Ось отримавши якийсь документ, що описує структуру та схему роботи смарт-карти, ділюся цією інформацією.
Смарт-карту з USB контролером, або USB-ключ можна представити у вигляді схеми (за великим рахунком USB-ключ відрізняється від смарт-карти лише наявністю/відсутністю контролера шини USB):
- Системна пам'ять – містить файлову систему та операційну систему. В ній зберігаються дані необхідні для перевірки правильності PIN-кодів, що вводяться, і паролів адміністратора.
- Відкрита пам'ять – містить дані, які можна прочитати без PIN-коду. Назва смарт-карти, ідентифікатор смарт-карти та інші.
- Закрита пам'ять – містить дані доступ до яких можливий лише за PIN-кодом.
p align="justify"> Для роботи з процесором на низькому рівні використовуються APDU (Application Protocol Data Unit) команди. З використанням команд APDU можна навіть отримати доступ до файлової системи смарт-карти, хоча це робити категорично не рекомендується.
- Зберігання інформації у внутрішньому сховищі смарт-картки. Причому слід зазначити, що інформацію з цього сховища витягти неможливо. Чіп смарт-карти не містить команда із вилучення даних зі сховища. У цьому сховищі знаходяться закриті ключі цифрових сертифікатів (дещо неписьменна фраза, але суть сподівається зрозуміла).
- Генерація ключової пари. У чіпі смарт-карти міститься датчик випадкових чисел (не знаю, чому у вітчизняній літературі це називається датчиком, я зі школи звик називати генератором випадкових чисел).Після генерації ключової пари закритий ключ потрапляє у сховище чіпа смарт-карти і ніколи не виходить за межі чіпа смарт-карти, відкритий ключ передається процесору, який генерує запит на сертифікат і надсилає його за межі смарт-картки (до центру видачі цифрових сертифікатів).
- Апаратну реалізацію симетричних алгоритмів шифрування. Однак через обмеженість ресурсів, симетричне шифрування в чіпі смарт карти процес дуже довгий. У зв'язку з цим не рекомендується симетричне шифрування великих об'ємів інформації засобами чіпа смарт-карти.
- Апаратну реалізацію алгоритмів хешування.
- Апаратну реалізацію асиметричних алгоритмів.
- Процесор отримує із зовнішнього середовища команду генерації ключової пари.
- Процесор транслює цю команду на чіп смарт-картки.
- У чіпі смарт картки датчик випадкових чисел генерує ключову пару, закритий ключ якої міститься в сховищі чіпа смарт-карти, а відкритий ключ передається процесору.
- Процесор генерує запит на сертифікат(у форматі PKCS#10), у якому міститься відкритий ключ згенерованої ключової пари.
- Процесор передає згенерований запит у зовнішнє середовище. Цей запит потрапляє до центру видачі сертифікатів і на підставі цього запиту видає сертифікат, який повертається до смарт-картки.
- Отримавши сертифікат, процесор записує його в закриту область пам'яті.
P.S. Цей топік був написаний на основі матеріалів компанії Aladdin. Якщо у когось є технічний опис апаратної складової ключів інших виробників, поділіться, будь ласка, дуже вдячний.
Смарт-карти. Частина 1. Принципи роботи
Всі ми користуємося різними видами смарт-карток у повсякденному житті.Найбільш яскравими прикладами смарт-карток є: SIM-картки, кредитні картки, електронні документи і т.д.
По суті, смарт-картка – це оптимізований для криптографії мікроконтролер із підвищеним рівнем безпеки. Що це означає? На відміну від стандартного мікроконтролера, доступ до пам'яті смарт-карти суворо контролюється процесором. Таким чином, читання даних з картки їх написання на ній регулюються ПЗ самої карти. Більш того, виробники чіпів вживають заходів щодо запобігання несанкціонованому доступу (копіювання всієї пам'яті, перепрограмування) до карти на електронному та фізичному рівні.
Застосування смарт-картки
Смарт-карта використовується у випадках, коли необхідно засвідчити справжність її власника. Прикладом цього є SIM-картка. Її головною роллю є довести оператору, що телефон, що підключився до мережі, належить конкретному абоненту. Після подібної перевірки оператор зможе спрямовувати комунікацію з номера і номер абонента саме тому телефону, а також реєструвати платіжний баланс абонента.
- Збереження ідентифікаційних даних власника картки (найчастіше ID-номера, а не контактні дані власника).
- Збереження та перевірка PIN-кодів для здійснення двофакторної аутентифікації.
- Генерація та збереження криптографічних ключів та сертифікатів. Зазвичай ці ключі використовуються виключно для виконання інших функцій усередині картки і не підлягають читанню.
- Генерація цифрового підпису.
- Аутентифікація за схемою «Виклик-відповідь».
- Інші специфічні функції, властиві тому чи іншому виду картки.
Робота смарт-картки
Карти не працюють автономно, а лише у зв'язці з так званим терміналом (телефон, банкомат, інший дротовий чи бездротовий електронний читач).Читач забезпечує карту електрикою та посилає команди. Карта ніколи не ініціює комунікацію, а завжди обов'язково відповідає на будь-які надіслані їй терміналом команди. У разі відсутності відповіді карта вважатиметься «MUTED», тобто. не працює. У подібній ситуації термінал або не реагує на помилку, або намагається відновити спілкування з картою після здійснення RESET.
На логічному рівні комунікація між терміналом та картою відбувається у форматі APDU, описаному стандартом ISO7816-4. Що ж до фізичного рівня, вище згадане спілкування регулюється не якимось одним певним стандартом, які безліччю. Наприклад, існують стандарти для контактного (ISO7816-3 T=0 і T=1, USB тощо) та безконтактного (ISO14443, NFC/SWP) спілкування.
- Ініціалізація фізичного каналу (Cold reset, ATR тощо)
- Вибір за допомогою команди SELECT бажаної програми. Цей крок є опціональним. Якщо він не виконується, то спілкування здійснюватиметься з програмою, обраною за умовчанням при ініціалізації каналу
- Подальше спілкування для реалізації конкретних завдань
Карти Native та Javacard
Деякі смарт-карти виходять у виробництво з уже заздалегідь встановленими на них і не підлягають зміні, доповненню або видаленню однією або більше програмами, призначеними для виконання конкретних функцій (SIM і USIM, EMV і т.д.). Подібні карти, що мають назву Native, є привабливими завдяки їх низькій ціні (при оптових закупівлях) і відносній простоті коду, що використовується для їх програмування, що зменшує ймовірність проблем з безпекою карти.Однак найцікавішими, на мій погляд, картами є карти на основі JavaCard та Global Platform, в яких ОС картки - це платформа, на якій можна встановити різні програми. Програми, написані для JavaCard, з використанням стандартних API, можна буде завантажити на всі карти, що підтримують сумісну версію платформи, незалежно від виробника картки. Що стосується Global Platform, то це набір специфікацій, що регулює безпечну адміністрацію карти, у тому числі встановлення, блокування або видалення тих чи інших програм, а також керування життєвим циклом (Life Cycle) картки.
Маленька примітка щодо адміністрації карти. Користувач картки, як правило, не є власником та адміністратором картки. Наприклад, адміністратором SIM-картки є оператор мобільного зв'язку, а не абонент. Тільки оператор має право встановлювати або видаляти програми на/з картки. Проте існує також можливість придбати «порожні» карти для власної розробки додатків.
Таким чином, у цій частині статті я торкнувся базису роботи смарт-карти, як на зовнішньому, так і на внутрішньому рівні, а також дав коротке визначення поняття смарт-карти. Наступні частини статті я хотів би присвятити:
- короткому опису формату APDU за стандартом ISO7816-4
- опису формату BER-TLV
- поняття та сутності JavaCard
- різним аспектам Global Platform