- Mini st-link v2
- Инструменты и оборудование
- Использование usb-токена
- Как записать на флешку эцп
- Как использовать эцп для подписания документа с флешки
- Как пользоваться электронной подписью с флешки
- Как работает usb-токен
- Как сделать из флешки электронный ключ аутентификации в linux
- Как установить сертификат эцп на флешку
- Можно ли использовать рутокен как флешку
- Настройка конфигурации железа
- План работ:
- После сборки доработать напильником
- Почти готово
- Применение эцп для электронных торгов
- Сборка
- Шаг второй
- Шаг первый
- Шаг пятый
- Шаг третий
- Шаг четвёртый
Mini st-link v2
Токен на таблетке — это пробник. Если пробы прошли успешно, то можно собрать нормальное устройство для повседневного пользования. Продвинутый эмбеддер нарисует
, изготовит её в JLCPCB, и получит массу удовольствия в виде кучки плат.
Если же нужно собрать пару ключей, то дешевле использовать ST-Link-свисток от наших друзей. На плате есть (почти) всё что нужно. Подойдёт любой контроллер, 103-й оригинал или один из его клонов.
Вот срисовал схему, может кому пригодится:
Замечания по схеме:
- не показаны второстепенные компоненты (блокирующие конденсаторы, стабилизатор 3,3В, разъём USB);
- микросхема DD2 — логический элемент-повторитель с выходом ОК (УГО перерисовывать было лень); его назначение — формировать крутые срезы на линии SWIM; вместо DD2 может быть установлен нолик R1;
- на плате Mini ST-Link одной из старых версий (зелёная ниже по тексту) DD2 не предусмотрена, порт PB11 подключен к PB8, а PB14 наоборот, висит в воздухе;
- цепи UART_RT/UART_TX/TDO/TDI/SWO/NRST/JRST в свистке не подключены; используются в полноценных реализациях ST-Link`а;
- всегда думал, что вход BOOT0 нельзя оставлять неподключенным; однако здесь он почему-то висит в воздухе, и тем не менее всё работает. На зелёной плате (старой версии) установлен резистор 10к.
Вспомнил. В одном проекте на основе STM32F407 (да, тот самый, который видеосигнал делать умеет) висящий BOOT0 отобрал у меня кучу нервов и времени, пока искал причину непонятных спорадических глюков…
Наш донор со снятыми штанами:
Инструменты и оборудование
Без микроскопа и паяльника с тонким жалом здесь делать нечего. Чтобы не ловить бегающую по столу плату, нужен держатель плат. Фен тоже лишним не будет.
Использование usb-токена
Для того чтобы применять ЭЦП с USB-токена, необходим криптопровайдер — специальное программное обеспечение, с помощью которого можно проверить актуальность используемой электронной подписи. При необходимости применения ЭЦП на электронных площадках в интернете используется специальный плагин для браузеров, позволяющий получить доступ к системам электронных торгов и государственных тендеров на аккредитованных виртуальных площадках.
Для работы с электронной подписью необходимо также выполнить некоторые требования, касающиеся версии ПО на стационарном ПК, с которого будет производиться работа. Так, операционная система Windows должна быть как минимум седьмой редакции (Windows 7) или более поздних версий, а документы для подписания должны редактироваться в Microsoft Office версии 2007 или старше.
Допускается использование Microsoft Office версии 2003 года, но в данном случае функционал будет ограничен. В отношении браузеров ограничений практически нет, однако специалисты рекомендуют использовать Google Chrome последней версии или Internet Explorer версии 9.0 или более поздние.
Как записать на флешку эцп
Предупреждение! Держать программные средства ЭЦП на обычной «флешке» опасно. Злоумышленникам не составит труда их похитить. Если доверенное лицо использует вашу ЦП в корыстных целях, возможно, придется обращаться в суд. В процессе разбирательства дела в уполномоченной инстанции убедить суд, что электронной подписью пользовались не вы, будет очень сложно даже хорошему адвокату.
Если вы осознаете риски, но все равно намерены перенести личную информацию на незащищенный носитель, например, для передачи ЦП доверенному лицу, следуйте пошаговому алгоритму, изложенному ниже.
Как перенести электронную подпись из реестра ОС на «флешку»:
- Соединяем устройство с рабочим компьютером.
- Запускаем криптопровайдер.
- Выбираем «Сервис».
- Жмем «Скопировать».
- В окне «Копирование контейнера закрытого ключа» кликаем на «Обзор».
- В списке с контейнерами выделяем необходимый – в левой колонке со считывателями должен быть указан «Реестр».
- «Ok» –> «Далее».
- Откроется форма с электронным полем для ввода PIN-кода. Введите его и нажмите «Ok».
- В адресной строке нового окошка укажите путь и (по желанию) имя нового контейнера – он будет создан на «флешке» (в виде папки).
- Жмите «Готово».
- В окне выбора носителя в левом списке с устройствами выделите латинскую букву, которую ОС присвоила вашей «флешке», в правом – ее имя.
- Щелкните «Ok».
- В окне аутентификации потребуется ввод нового пароля (к каталогу с секретным ключом на «флешке»). Введите его в строку «Новый пароль», а в поле «Повторите ввод» – подтвердите.
Криптопровайдер вернется к основному окну копирования контейнера секретного ключа.
Как записать на флешку ЭЦП – переносим ее с Рутокен / eToken / JaCarta:
- Подключаем устройства к рабочей машине.
- Придерживаемся пп. 2 – 5 – см. инструкцию выше.
- В списке с контейнерами отмечаем необходимый – в левой колонке должен быть указан Рутокен / eToken / JaCarta.
- Следуем пп. 7 – 13.
Примечание. Держите PIN-код в недоступном для других пользователей месте. Если его забыть или потерять, восстановить доступ к каталогу с секретным ключом станет невозможно.
Как использовать эцп для подписания документа с флешки
Если подписание документов производится нечасто, то можно использовать электронную подпись и без установки сертификата на ПК, но наличие актуальной версии криптопровайдера на компьютере при этом все равно обязательно.
Алгоритм действий для подписания документа с рутокена:
- выбрать «Файл», далее — «Защита документа», затем — «Добавить цифровую подпись»;
- в диалоговом окне выбрать необходимый сертификат (в качестве источника выбираем Рутокен);
- завершить шифрование и сохранить подписанный документ на жестком диске ПК.
Как пользоваться электронной подписью с флешки
Работник удостоверяющего центра (далее – УЦ) по обращению заявителя выдает ему средства ЭП. В их перечень входят:
- открытый (публичный) и закрытый (секретный) ключи пользователя;
- свой корневой сертификат (далее – КС);
- (по запросу) защищенный носитель (токен, смарт-карта), на который записываются упомянутые персональные данные.
Возможность приобретения токена/смарт-карты обозначена на сайтах многих УЦ в качестве дополнительной услуги. Почему ее предлагают в качестве выделенной опции, не включая в стандартный пакет, и на какие типы устройств вам могут записать ЦП?
Классический USB-flash-накопитель. В обычный договор о получении ЭП входят только программные средства ее генерации и верификации с последующим их предоставлением заявителю. Аккредитованные УЦ по собственной инициативе не станут переносить персональные данные на носители упомянутого типа – они считаются незащищенными. Сначала заявителя ознакомят с рисками. Только после этого, если клиент будет настаивать, ЦП запишут на его «флешку».
USB-flash-накопитель с безопасным хранилищем. Флешка, «превращенная» в подобие токена. Ее память сегментирована – доступ к участку с личной информацией охраняется PIN-кодом (или паролем). Вы можете создать такое устройство самостоятельно.
Токен/смарт-карта. На момент написания статьи большинство центров сертификации выдают ЭП именно на них.
Таблица 1 – типы защищенных носителей
Характеристики | Модель | |
Рутокен 1.0 | Рутокен 2.0, JaCarta ГОСТ/2 ГОСТ, eToken PRO | |
криптопроцессор | ||
функция генерации открытого ключа ЭП | – (при установке личного сертификата в систему используется секретный ключ) | (публичный ключ пользователя создается на основе закрытого аппаратными средствами устройства |
дополнительная защита | – | личные данные становятся доступны только после ввода PIN-кода |
уровень безопасности | средний | высокий |
Примечание. Сегодня под «флешками» понимают не только обычные USB-flash-накопители, но и токены.
Чтобы начать пользоваться электронной подписью с «флешки», нужно знать, как настроить автоматизированное рабочее место (далее – АРМ). Эксперты рекомендуют владельцам ЦП работать в ОС Windows 7 и выше.
Как работает usb-токен
Принцип работы USB-токенов строится на взаимосвязи открытой и закрытой частей ключа электронной подписи, первая из которых доступна только владельцу сертификата. На самом токене записывается закрытая часть ключа. Доступ к нему возможен только при наличии секретного кода, известного владельцу подписи.
При необходимости завизировать электронный документ в действие вступает специализированное программное обеспечение, предустановленное на персональный компьютер владельца подписи. С помощью данной программы генерируется открытая часть ключа, которая интегрируется в подписываемый документ или прикрепляется к нему в виде отдельного файла.
Копия открытого ключа хранится в удостоверяющем центре, выдавшем сертификат ЭЦП. Это сделано для того, чтобы была возможность разрешить споры, касающиеся подлинности сертификата.
Как сделать из флешки электронный ключ аутентификации в linux
С помощью Pluggable Authentication Modules (далее – PAM-модуль) вы сможете сделать из вашей «флешки» электронный ключ (далее – ЭК).
PAM-модуль представляет собой набор библиотек, которые используются системой Linux для динамического распознавания пользователя в приложениях и/или службах.
Как работает USB-flash-накопитель, «превращенный» посредством PAM-модуля в ЭК:
Рассмотрим подробнее, как сделать из «флешки» электронный ключ и какие действия потребуется совершить, чтобы корректно настроить PAM-модуль.
Во-первых, нужно инсталлировать libpam_usb.so и компоненту координации:
$ sudo apt-get install libpam-usb pamusb-tools
Во-вторых, вставьте накопитель, который вы намерены применять как аутентификационный ключ, в USB-разъем компьютера. Далее требуется выполнить:
$ sudo pamusb-conf –add-device имя
Модуль произведет сбор сведений, дополнит ими базу и сгенерирует 2 Kb рандомных данных. Теперь для обнаружения устройства начнет задействоваться Udisks. Параметр «Имя» – для присвоения устройству произвольного названия. Критически важно, чтобы все прочие периферийные накопители были отключены перед началом процесса настройки.
В-третьих, ассоциируйте «флешку» с конкретной учетной записью (например, Ivan Ivanov):
Как установить сертификат эцп на флешку
Многие участники ЭДО, руководствуясь соображениями безопасности, опасаются прописывать личные сертификаты и, особенно, переносить секретные ключи в реестр ОС, установленной на рабочей машине с корпоративным пользовательским доступом. Тем не менее, у них возникает необходимость использования программных средств ЭП для обмена данными с другими пользователями. Для этого может понадобиться репродукция открытого ключа на «флешку».
Примечание. Как установить личный открытый сертификат ЭЦП в хранилище ОС, мы рассказали в одной из предыдущих статей – в случае с «флешкой» под «установкой» подразумевается процесс копирования файла.
Как просмотреть и репродуцировать открытый сертификат ЭЦП на «флешку» с Рутокен, eToken, JaCarta или из реестра ОС:
- Подключите устройства к рабочему компьютеру.
- Запустите криптопровайдер.
- Откройте вкладку «Сервис».
- Щелкайте пункт «Просмотреть сертификаты в контейнере…».
- В появившемся окошке жмите «Обзор», поле «имя» оставьте пустым.
- Откроется окно со перечнем ключевых носителей. Из правого списка со считывателями выберите «Реестр» / Рутокен / eToken / JaCarta (в зависимости от того, откуда копируется информация), в левом – выделите имя вашего ключевого контейнера.
- Жмите «Ok» –>«Далее».
- Введите PIN-код (по умолчанию к Рутокен: 12345678, eToken: 1234567890) или пароль, который вы задавали ранее, для каталога с секретным ключом в соответствующем разделе ОС.
- Внимательно верифицируйте отображаемые сведения.
- Перейдите в «Свойства».
- Кликайте «Состав» –>«Копировать в файл» –>«Ok».
- Пометьте «флажком» предложение «Нет, не экспортировать закрытый ключ».
- Жмите «Далее».
- Отметьте галкой «Файлы X.509 (.CER) в кодировке DER» –>«Далее».
- Жмите «Обзор». Введите название файла для выгружаемого сертификата, не забудьте проверить, чтобы был указан путь к нему.
- «Далее» –>«Готово».
В окне системного оповещения об окончании операции щелкните «Ok».
Можно ли использовать рутокен как флешку
Да, можно. Правда, получится «флешка» очень маленькой емкости – стандартный объем памяти Рутокен 2.0 составляет всего 4 GB. Другое дело, что под заказ можно приобрести устройство с объемом памяти до 64 GB. По окончании срока действия электронной подписи (как правило, он составляет 1 календарный год), владелец может не захотеть использовать Рутокен 2.0 для повторной записи перевыпущенных сертификатов и ключей ЭЦП.
Токен использует управляемую flash-память – она вполне может быть сегментирована, а доступ к получившимся разделам будет предоставляться только после ввода PIN-кода. На устройстве можно будет хранить не только личные данные, но и дистрибутивы программ и прочие файлы.
Программа Рутокен Диск (информацию о цене и возможности сделать заказ уточняйте на веб-портале разработчика) позволит вам управлять защищенным разделом flash-памяти устройства.Есть, как минимум, два отличных руководства по работе с приложением: «Рутокен Диск. Установка программы» и «Начало работы с программой Рутокен Диск в Windows».
Настройка конфигурации железа
Библиотеке chopstx нужно сказать, какой используется контроллер, как настроить тактирование, к каким портам подключены светодиод и кнопка. Штатно файлы конфигурации хранятся в файлах chopstxboardboard-*.h. Для сборки проекта расположение нужного файла указывается в makefile.
Форк проекта с моими доработками здесь, ветка blue_pill_btn. В makefile добавил конфигурации для указанных выше трёх плат:
- Blue Pill: кнопка к PB8 и на землю; светодиод анодом к питанию, катодом к PC13;
- Black Pill: кнопка к PС13 и на землю; светодиод анодом к питанию, катодом к PB12;
- ST-Link-v2 mini: сенсорная кнопка к PA2 (активный низкий); светодиод анодом к питанию, катодом к PB12.
Проект подготовлен к сборке в Эклипсе.
План работ:
- установить зелёный светодиод (штатные — красный и синий — моветон, да и светят вбок в маленькую дырочку, их плохо видно);
- установить сенсорную кнопку;
- установить разъём для подключения отладчика/программатора (опционально).
Механическая кнопка на практике оказалась неудобной. Нажатие требует неслабого усилия, которое передаётся на USB-разъём и постепенно убивает его. Поэтому сенсорный датчик лучше.
После сборки доработать напильником
Кроме собственно программы, в память микроконтроллера нужно залить сертификат и его приватный ключ. Это всё хранится в памяти Flash начиная с адреса 0x0800F400.
Распределение памяти (STM32F103) следующее:
- 0x08000000-F3FF — код (реально около 28кб);
- 0x0800F400-F7FF — сертификат; в начале страницы размещается структура-указатель attestation_cert (см. файл empty-attestation-cert.c);
- 0x0800F800-FBFF — приватный ключ; 32 байта и для надёжности его хэш, ещё 32 байта;
- 0x0800FС00-FFFF — счётчик аутентификаций.
Сертификат
можно создать собственный, или использовать прилагаемый. Если в строке параметров сборки указать ключ CUSTOM_ATTESTATION_CERT, то будут выполнены скрипты из папки srccert, которые создадут новый сертификат, и закинут его в файл certificates.c. Если ключ CUSTOM_ATTESTATION_CERT не указать, то будет использован дефолтный (пустой) файл empty-attestation-cert.c, а сертификат придётся записать в память микроконтроллера при помощи скрипта certcerttool или программатором.
Поскольку сертификат напрямую не привязан к аппаратному железу, то его можно интегрировать в прошивку. Что я и сделал. Пользуйтесь на здоровье. В прошивки (что в приложении к статье) вставлен сертификат, прилагаемый к оригинальному проекту. Действителен до 2029-03-07, срока годности вполне достаточно.
Приватный ключ. Это секрет (32 байта), который отвечает за «уникальность» ключа и используется в криптографических алгоритмах. Ключ защищается его sha256-отпечатком. Отпечаток проверяется во время инициализации устройства (при подаче питания). Если ошибка — ключ будет создан заново. Заодно обнулится счётчик аутентификаций.
Приватный ключ можно также подготовить вручную и внедрить его в прошивку. Это можно сделать при помощи питонячьего скрипта inject_key.py (достаёт бинарник из u2f.elf) или inject_key_bin.py (работает с бинарником u2f.bin). Однако надо внимательно проверить результат.
Счётчик хранится в верхней странице памяти Flash. Для увеличения ресурса в памяти реализован кольцевой буфер, страница памяти будет очищена после достижения его границы. Теоретический ресурс составит 1024/4*10k = 2560 килоциклов. На наш век хватит.
Кстати, ходят слухи о массовом море ключей JaCarta. Причиной вполне может быть ограниченный ресурс Flash-памяти.
Счётчик обнуляется при создании нового приватного ключа. Если для записи приватного ключа использован скрипт inject_key*.py, то начальное значение счётчика также может быть записано этим скриптом. Если прошивка собрана без опции ENFORCE_DEBUG_LOCK=1, то счётчик можно поправиль вручную при помощи программатора: очистить страницу памяти FC00-FFFF (записать FF), а в начало (по адресу FC00) поместить 4-байтное начальное значение (младший байт первый).
Чтобы поддержать ваше желание собрать безопасный ключ, предлагаю готовые прошивки для трёх приведенных выше аппаратных платформ. Каждая прошивка собрана в двух исполнениях:
- с автоматическим локом, суффикс “_lock”;
- без включения защиты кристалла, суффикс “_nolock”.
Первый вариант прошивки после первого старта включает защиту от чтения. Второй вариант этого не делает, оставляя возможность подключения программатора и чтения памяти. Незалоченный чип позволяет клонировать ключ. Что при желании можно сделать (см. далее).
В прошивку уже встроен сертификат. Приватный ключ отсутствует, он будет создан автоматически при первом включении.
Почти готово
Итак, подключаем программатор, полностью очищаем память микроконтроллера, записываем нашу прошивку. Отключаем программатор. Перезапускаем токен по питанию. При первом включении будет создан секретный ключ и обнулён счётчик. После чего токен готов к работе.
Прошивка -lock при первом включении лочится и зависает. Нужно перезапустить токен по питанию. Также пару раз зависал во время первой аутентификации (возможно не смог очистить страницу памяти со счётчиком). Почему это происходит, не разбирался. В дальнейшем во время эксплуатации проблем не возникало.
Проверить работоспособность ключа можно на демо-сайте Юбикея. Там же можно посмотреть протокол обмена между ключом и сервером.
Во время регистрации ключа Виндовз предложит свои услуги (Windows Hello). Отказаться, два раз нажать ОК, и когда замигает светодиод, нажать юзер-кнопку на ключе.
Подтвердить физическое присутствие можно и заранее. Сначала нажать на юзер-кнопку, а потом в течение 10 сек. успеть выполнить процедуру регистрации/аутентификации.
Применение эцп для электронных торгов
Для работы с электронными торговыми площадками в веб-браузерах необходим специальный плагин. Как правило, при установке плагин интегрируется во все установленные в системе обозреватели, совместимые с ним, но при необходимости устанавливается только для определенного конкретного браузера. После установки плагина браузер должен быть перезагружен, чтобы внесенные изменения вступили в силу.
При работе на электронных площадках ЭЦП нужна для подтверждения заявок на участие в аукционах, оформлении заявок на проведение торгов и заключения сделок. Предустановленный плагин позволяет автоматически заверять электронные пользовательские запросы — сайт, на котором проводится работа, сам обращается к инсталлированному плагину.
Сборка
Сборка прошивки — пожалуй самая трудоёмкая задача для неопытного юзера. В
есть подробная инструкция по сборке на Linux. Как обычно принято в opensourse, только хардкор, через make-файл, с привлечением скриптов на баше и пайтоне. Несколько готовых прошивок предлагается в разделе
Чтобы компилятор не нагружать поиском подходящего файла конфигурации (из списка chopstxboard*.h), перед сборкой проекта создаётся ссылка srcboard.h на нужный файл конфигурации утилитой ln (из комплекта busybox). И компилятор использует именно этот файл-ссылку.
После смены цели (target) ссылку board.h нужно обязательно удалить командой make distclean, чтобы создать новую на актуальный файл конфигурации. В Виндовз ссылку можно создать в файловой системе NTFS. А в FAT32 — нет, проект не соберётся. В последнем случае нужно руками скопировать нужный chopstxboardboard-*.h в src и переименовать его в board.h. И чуть поправить makefile.
Вполне реально собрать проект и в любимой IDE Eclipse GCC-ARM. Дополнительно потребуются утилиты cp/ln/mkdir из комплекта busybox. А также руки из правильного места, и традиционные танцы с бубном.
Шаг второй
Зачистить маску в указанных местах и перерезать две дорожки. Дорожка, которая идёт к выводу 15 (цепь SWCLK), будет использована для подключения емкостного контакта. К контакту 5V будет припаян светодиод.
Шаг первый
Отпаять разъём IDC. Брутальные электронщики выкусывают пластмассу и поочерёдно отпаивают контакты. Но мы используем недеструктивный метод. Зазор между платой и выводами позволяет поочерёдно освободить все контакты разъёма при помощи обычного паяльника и стального лезвия от бритвы. Разъём сохраняется для будущих поделок:
Шаг пятый
Перевернуть плату, припаять перемычку для светодиода и полоску из медной фольги. Площадку 3V3 отрезать от питания. Лепесток загнуть на обратную сторону платы. Это будет емкостной сенсор. Также рекомендуется подрезать выводы кварцевого резонатора, чтобы их не коротнуло на корпус.
В итоге получаем вот такую фитоняшку:
С торца имеем SWD-разъём, сенсор и светодиод. После успешного проведения испытаний свисток можно аккуратно замотать каптоновым скотчем. Для защиты от грази, статики, и чтобы плата не выпадала из корпуса. Или напечатать на 3D-принтере крышку-затычку. Или корпус целиком.
Шаг третий
С обратной стороны снять R11 и R12 (фото ниже). На позицию R12 становить конденсатор 100-1000 пФ. Если чувствительность емкостного датчика окажется слишком высокой, установить на место R11 конденсатор 0-50 пФ (см. даташит TTP223).
Шаг четвёртый
Устанавливаем TTP223, разъём программирования (если нужен), светодиод, паяем провода. Светодиод 0805 или 1206, цвет по своему вкусу. Мне нравится зелёный. Все выводы TTP223 кроме 2 и 5 чуть приподнять. Вывод 4 соединить с 5-м (чтобы задать низкий активный уровень при обнаружении пальца).
Кстати, есть простой способ, как зажать короткий отрезок провода МГТФ. Думаю, о нём все знают. Но на всякий случай оставлю это здесь (чёрная штука — обычный китайский пинцет):
Нужно сделать примерно так:
Разъём программирования опциональный. Если дальнейших экспериментов не планируется, для программирования можно временно подпаяться с обратной стороны.
Для подключения по SWD предпочитаю разъём PBS1.27-5:
- 1 — GND
- 2 — SWDIO
- 3 — SWCLK
- 4 — SWDIO
- 5 — GND
Компактный. Разъём-перевёртыш, не нужно искать ключ. Если при подключении ответную часть чуть наклонить, первым соединяется земля. В серийном изделии разъём можно не устанавливать, для однократного подключения достаточно отверстий. Сплошные плюсы.