Вступление
В кармане у тебя, скорее всего, лежит компьютер. Не телефон — карта. В золотистом квадратике на банковской карте спрятан настоящий маленький компьютер: процессор, память и программа. Он хранит секрет и сам решает, что ответить терминалу. В этом наборе ты соберёшь такой компьютер из транзисторов — и в конце свернёшь его в один чип с восемью ногами, как контактная площадка на карте.
Внутри:
- свой процессор — 8 бит, 16 команд, одна команда за такт;
- ПЗУ с программой — микросхема; а как программа написана на ассемблере — разберём в уроке 7;
- ОЗУ на защёлках — 8 ячеек по 8 бит, из транзисторов;
- личные данные карты — номер счёта, ПИН и секретный ключ — матрица транзисторов, как в «Знакогенераторе»;
- один провод данных — как у настоящих карт: карта и терминал говорят по очереди;
- тестер карт — тумблеры, кнопка «послать» и табло: так проверяют карты разработчики.
Сколько это
Карта — 6 495 транзисторов и 8 резисторов, тестер — ещё 1 729 и резистор. Больше половины карты — процессор и ОЗУ: 64 защёлки памяти — самая длинная часть сборки, повторяющиеся строки удобно вставлять готовыми (Cmd+I).
В уроках есть врезки ⚠ Частая ошибка — это ошибки, которые случились на самом деле при сборке этой карты. Ни одна не видна сразу: карта отвечает, но не то. Поэтому после каждого урока — проверка по таблице, шаг за шагом.
Это модель, а не настоящая карта
Мы собираем принцип: как устроен компьютер в карте, как он говорит с терминалом по одному проводу, как проверяет ПИН и доказывает, что он настоящий. Всё работает в симуляторе — но размеры и стойкость у нас учебные, чтобы схему можно было собрать руками и увидеть насквозь. Чем наша карта отличается от настоящей:
| Что | Настоящая карта | Наша карта |
|---|---|---|
| процессор | 8–32 бита + криптосопроцессор | 8 бит, 16 команд |
| где ПИН | EEPROM: меняется в банкомате командой банка, подписанной его ключом | прошит в матрице транзисторов — поменять можно только перепаяв |
| секретный ключ | 128 бит и больше (3DES, AES) | 32 бита |
| шифр | стойкий: 3DES, AES; подписи RSA/ECC | учебный: 4 раунда «+, XOR, поворот» |
| вызов / ответ | 4 байта / 8 байт | 2 байта / 2 байта |
| провод данных | стандарт ISO 7816, от ~1000 байт/с | свой кадр, 16 тактов на бит |
| кто проверяет ответ | банк, ключи — в защищённом сейфе (HSM) | мы сами, по таблице проверки |
Наш 32-битный ключ с учебным шифром подбирается перебором за секунды — настоящий не подобрать за всё время существования Вселенной. Но идея та же: ключ не выходит из карты, а ответ зависит и от вызова, и от ключа.
Что нужно
Вентили NOT, NAND, NOR, AND, OR, XOR: уже есть в библиотеке — бери; хочешь собрать с нуля из транзисторов — урок 0; сразу к делу — вставка урока 0. Остальное собираем здесь.
Что получится
Восемь уроков: калькулятор на тумблерах → огоньки по программе → память → циклы → провод и тестер → ПИН-код → вызов-ответ → карта-чип. В конце на столе две карты, одинаковые снаружи. Одна принимает ПИН 1234, другая — 4321, и на один и тот же вызов отвечают по-разному. Разница — несколько десятков транзисторов из шести с половиной тысяч.