Аппаратный ключ защиты что это
Аппаратный ключ шифрования за 3$ — возможно ли это?
Итоговый результат — ключ размером с флешку
Повсеместное шифрование и, как следствие, обилие ключей заставляет задуматься об их надежном хранении. Хранение ключей на внешних устройствах, откуда они не могут быть скопированы, уже давно считается хорошей практикой. Я расскажу о том, как за 3$ и 2 часа сделать такой девайс.
Кратко о принципах работы
Криптография дает нам возможность скрывать то, что мы хотим отправить, убедиться в том, что мы общаемся именно с тем, с кем мы думаем и много других интересных вещей. Обычно для того, чтобы все это хорошо работало от нас просят только одно — держать в секрете наши ключи шифрования. Звучит просто, не правда ли? Что ж, давайте посмотрим как же можно припрятать наши ключи:
Необходимые компоненты
Итак, приступим. Собирать наш девайс мы будем на недорогом и достаточно популярном микроконтроллере серии STM32. Конечно, можно самому изготовить печатную плату но мы же хотим управиться за 2 часа? Так что возьмем уже готовое решение — программатор ST-Link v2. Выглядит этот девайс вот так.
Как ни странно, программатор для микроконтроллеров STM32 собран на микроконтроллере STM32. Этот девайс внешне очень напоминает флешку, что нам как нельзя на руку. К тому, же его корпус изготовлен из алюминия, так что можно не переживать что он повредится. Стоит это чудо на алиэкспресс 1.5-3 доллара. Нам потребуется две такие штуки. Одну мы переделаем под ключ, а вторую будем использовать чтобы залить прошивку на первую. Если у Вас уже есть программатор STM32 можно обойтись и одной штукой.
Итого, нам потребуется:
Компилируем прошивку
Итак, начнем с софтварной части — сборке прошивки для нашего ключа. Исходные коды прошивки можно найти в этом репозитории. Я бы посоветовал скачать последнюю стабильную версию(её можно найти во вкладке tags). Можно склонировать репозиторий либо скачать в виде zip архива. Разминаем пальцы, запускаем терминал и переходим в папку с проектом. Переходим в папку src
Для того чтобы скомпилировать и загрузить прошивку нам нужно установить несколько пакетов:
Если Вы сидите на Ubuntu — используйте apt.
Напомню, что мы находимся в папке src проекта.
Запускаем configure скрипт
Запускаем утилиту make и наблюдаем как компилируется наша прошивка.
После компиляции появится папка build, а в ней файл gnuk.elf — он-то нам и нужен.
Загрузка прошивки на устройство
Теперь, когда у нас есть готовый файл с прошивкой нам нужно только загрузить её на устройство. Для этого, нам придется немного поработать паяльником. Не беспокойтесь, особых навыков тут не потребуется, всего-то припаять 4 проводка.
Итак, берем один из программаторов и стягиваем с него корпус. Выбранный программатор и будет нашим донором. Вот что мы найдем внутри
Обратите внимание на 4 контакта на плате. К ним нам нужно будет припаяться. Я рекомендую использовать для этого провода, которые идут в комплекте с ST-Link. Зачищаем провода с одного конца и припаиваем их к контактам. Если нам повезло, то на плате будут обозначения этих контактов.
«
Теперь, второй конец проводов подключаем к оставшемуся целым программатору. Если вам повезло, то просто подключаем провода в соответствии с надписями:
GND к GND
3.3V к 3.3V
SWDIO к SWDIO
SWCLK к SWCLK
Если надписей на плате не оказалось, то прийдется тыкать наугад воспользоваться тестером. С его помощью можно легко найти GND(он соединен с GND на выводах программатора-донора), аналогично 3.3V. Остальные два провода прийдется подключать наугад. Благо, вариантов всего 2. В итоге, получается что-то похожее на это
На этом фото синий девайс — программматор, который мы используем только как программатор. Пусть вас не смущает то, что на фото в начале статьи у итогового девайса синий цвет корпуса. Это не он. Будущий девайс находится справа.
Загружаем прошивку
Мы в шаге от успеха, осталось только загрузить прошивку. Открываем терминал, переходим в папку с нашей прошивкой(gnuk.elf).
Итак, теперь мы залили прошивку на наш девайс. Остался один шаг — запретить чтение памяти микроконтроллера. ВНИМАНИЕ! Это очень важный этап, который не позволит человеку, который украл ваш ключ, вытащить из него секретную информацию.
Для этого запускаем команду:
Собираем все обратно
Теперь, когда все шаги позади, осталось позаботиться о внешнем виде нашего девайса. Отпаиваем провода. Оригинальная панель контактов нам тоже больше не нужна, так что можно смело выпаять её.
Разламываем крепление и выпаиваем контакты по одному.
Теперь надеваем обратно корпус, и заклеиваем заднюю стенку подходящим куском пластика.
Как можно использовать
То, что мы собрали — эмулятор OpenPGP смарт карты. Такая карта может хранить в себе GPG, SSH ключи. Область применения довольно большая, например:
Пример использования для ssh
И под конец, давайте посмотрим как можно использовать этот ключ для хранения ssh-ключей и подключения к удаленному серверу.
Есть два пути — сгенерировать новый ключ или импортировать уже имеющийся ключ на токен.
Посмотрим оба варианта. Вставляем токен в USB. В dmesg можно посмотреть информацию о подключенном устройстве.
Генерация нового ssh ключа
Важно понимать, что ключ генерируется на самом устройстве, а не на вашем компьютере. Так что, такой ключ вообще никогда не покидает пределы устройства.
Открывается интерактивный режим gpg, включаем режим администратора командой admin:
Далее запускаем команду генерации нового ключа:
Далее идет стандартная процедура генерации ключа gpg. Во время которой вам будет предложено сохранить бекап ключа на диск. Разработчики рекомендуют делать бэкапы, но решать вам.
Единственно — аппаратно поддерживается генерация RSA ключей до 2048 бит. Если нужно 4096 — ключ прийдется генерировать на компьютере, а потом уже импортировать на само устройство.
Далее вам потребуются пин-коды. По умолчанию в прошивке зашиты следующие пин-коды:
CARD PIN — 123456
ADMIN PIN — 12345678
В будущем их обязательно нужно поменять.
Ключ может генерироваться немного дольше, чем если бы он генерировался непосредственно на компьютере, поэтому запасаемся терпением.
Импорт уже имеющегося ключа
Теперь посмотрим что делать, если у вас уже есть ssh-ключ, который вы хотели бы использовать.
Для этого импортируем ключ в gpg:
Теперь нам нужно узнать id ключа. Для этого выводим список всех доступных в gpg:
И находим импортированный ключ:
В моем случае id ключа — DFEFF02E226560B7F5A5F2CAB19534F88F8FE4EC
Заходим в интерактивный режим редактирования ключа gpg:
И даем команду на копирование ключа на смарт карту:
Экспорт публичного ключа в ssh формате
Достаем нужный публичный ключ с токена для того, чтобы положить его на сервер:
В моем случае вывод выглядит так:
Тут нас интересует ID-шник ключа, в моем случае 01. Теперь экспортируем публичный ключ:
Копируем публичный ключ в файлик pub.key:
И конвертируем его в ssh-rsa формат:
Получается публичный ключ в нужном формате:
Дальше идет стандартная процедура настройки ssh для входа по заданному ключу — нужно добавить ключ в файлик
/.ssh/authorized_keys на удаленном сервере.
Конфигурирование ssh
Однако, удобнее будет воспользоваться config файлом (
/.ssh/config)
Добавляем в него следующие строки
Теперь вызов ssh стал еще проще:
Как поменять стандартные пин-коды
Не менее важным шагом будет установка собственных пин-кодов. Для начала нужно понять, что тут используется два разных пин-кода:
Теперь приступим. Для этого опять заходим в интерактивный режим GPG:
И вводим команду passwd:
Откроется окно, где можно будет сменить пин-код от токена.
Теперь нужно поменять пин-код администратора. Для этого переходим в режим администратора:
Вводим команду passwd снова:
Однако теперь она работает в расширенном режиме и нам предложат несколько вариантов:
Выбираем change Admin PIN и по стандартной схеме устанавливаем пароль администратора. Напомню, default Admin PIN — 12345678.
О безопасности устройства
Разумеется, за 3$ нельзя достичь секьюрности уровня ключей за 200+ долларов. Однако, собранный девайс можно рассматривать как ключ начального уровня. Насколько мне известно, заводские ключи Nitrokey Start используют такую же прошивку. В любом случае, использование такого устройства поднимет безопасность как минимум на уровень выше. Так что это отличный способ начать использовать аппаратные ключи.
Теперь поговорим немного о том, что будет если Вы потеряете этот ключ. Сам ключ защищен пин-кодом. После нескольких неудачных попыток ключ блокируется. Память самого устройства защищена от чтения, так что считать записанные в него ключи напрямую не получится.
Существуют некоторые виды атак на сам чип(например препарирование и подключение к нему микроэлектородов, что позволит измерять напряжение в любом месте чипа, в том числе и памяти), но они довольно затратные.
Так что, повторюсь еще раз, это отличный вариант начального уровня, и даже с ним безопасность выйдет на принципиально новый уровень.
Ссылки на полезные материалы
В процессе использования устройства наверняка возникнет потребность в дополнительной информации. Я собрал список хороших источников.
Upd. В комментариях подсказали, что есть прошивки, которые позволяют использовать девайс для двухфакторной аутентификации. Код прошивки можно найти тут
Upd. 2 15.02.2020 В комментариях подсказали, что для конкретно этого чипа существует уязвимость, позволяющая слить содержимое памяти. Насколько я понял, пока он еще не опубликована, но о ней заявлено. Так что пока все не однозначно. Там же предложили хорошее решение — залить внутрь корпуса устройства эпоксидную смолу смешанную с порошком алюминия. Такой способ был описан в книге Кевина Митника «Исскуство обмана». Таким образом, для того чтобы получить доступ к чипу нужно будет расковырять клей, что при неосторожном обращении может необратимо повредить чип. Конечно, и этот способ можно обойти, на это повышает стоимость взлома еще больше. Конечно, если будет нужно Моссад сделает свои Моссадовские штучки и это его не остановит, а только задержит.
Upd. 3 В личку прилетело много сообщений о том, что у людей не получается прошить ST-Link. Разобравшись, выяснили, что сейчас китайские производители стали активно экономить на компонентах и использовать чипы с 64Кб памяти на борту. А для прошивки этого недостаточно, ищите с чипом 128Кб на борту. Поэтому, рекомендую при покупке проверять какой чип установлен (если есть возможность), либо уточнять у продавца/в отзывах.
Upd. 4 Оказывается, все-таки можно использовать китайские программаторы с 64 Кб чипом (правда при этом прийдется использовать не самую свежую версию прошивки) — на хабре появилась интересная статья об этом.
Статьи и публикации
Аппаратные ключи защиты
Первоначально аппаратные ключи были созданы как средство борьбы с несанкционированным копированием программных продуктов, но в дальнейшем сфера их применения значительно расширилась.
Большинство компьютерных программ распространяется по принципу владения оговоренным количеством рабочих копий (в простейшем случае — только одной). Естественно, общепринятый в международной практике термин «защита от копирования» достаточно условен, так как практически всегда можно переписать информацию, находящуюся на носителе, и сделать сколько угодно ее резервных копий. Другое дело, что для сохранения коммерческих и авторских прав разработчиков программа все равно должна выполняться только на одном компьютере. Таким образом, фактически защита от копирования для программного обеспечения — это невозможность выполнения программы на большем числе компьютеров, чем разрешено ее разработчиками и распространителями по данному договору. Следовательно, для сохранения прав необходимо наличие средств, дающих возможность защиты от несанкционированного выполнения — чтобы без санкции разработчика или фирмы-распространителя невозможно было получить работоспособный программный продукт.
Наиболее распространенным и надежным способом защиты от несанкционированного запуска стали программно-аппаратные ключи, подключаемые к COM-, LPT- или USB-портам. Почти все коробочные варианты серьезного коммерческого ПО используют программно-аппаратные комплексы защиты, более известные как аппаратные ключи защиты. Такие способы защиты основаны на том, что в компьютер добавляется специальное физическое защитное устройство, к которому при запуске защищаемой программы обращается ее контролирующая часть, проверяя наличие ключа доступа и его параметров. Если ключ не найден (устройства обычно формируют еще и код ответа, который затем анализируется программой), то программа не запустится (или не будет разрешен доступ к данным).
Общий принцип работы компьютера в этом случае следующий. После запроса на выполнение защищаемой программы происходят ее загрузка в оперативную память и инициализация контролирующей части. На физическое устройство защиты, подсоединенное к компьютеру, посылается запрос. В ответ формируется код, посылаемый через микропроцессор в оперативную память для распознавания контролирующей частью программы. В зависимости от правильности кода ответа программа либо прерывается, либо выполняется.
В дальнейшем сфера применения таких ключей значительно расширилась. Сегодня этот ключ используется для идентификации владельца, для хранения его личной электронной подписи, конфиденциальной информации, а также как кредитная смарт-карта или электронные деньги.
Таким образом, мы имеем сегодня недорогое средство для широкомасштабного внедрения смарт-ключей в качестве персональных идентификаторов или в составе так называемых ААА-систем (аутентификация, авторизация и администрирование). До сих пор предлагалось оснащать компьютеры специальными считывателями, что, конечно, нереально. Современные устройства биометрической аутентификации пользователей (столь часто показываемые в голливудских фильмах) типа систем, работающих с отпечатками пальцев или со снимками радужной оболочки глаза, стоят настолько дорого, что не найдут широкого практического применения. При этом в любом случае следует помнить, что абсолютно надежной защиты не существует. Любую защиту можно сломать, поэтому необходимо искать оптимальное соотношение затрат на создание защиты и прогнозируемых затрат на ее взлом, учитывая также ценовое соотношение с самими защищаемыми продуктами.
Наилучшим решением, по мнению экспертов, являются смарт-карты — их невозможно подделать, вероятность сбоя в работе практически исключена, аутентификация пользователя производится на локальной рабочей станции, а не на сервере, то есть исключена возможность перехвата информации в сети и т.д. Единственным недостатком смарт-карты может быть только необходимость специального карт-ридера (устройства считывания), но эту проблему решают устройства, интегрированные со считывателем, которые подключаются напрямую к USB-порту. Эти небольшие высокотехнологичные устройства обеспечивают авторизацию владельца в компьютерных системах, осуществляют безопасное хранение сертификатов, электронных подписей и т.д. и могут использоваться в электронных платежных системах (электронных «кошельках» для Интернета).
Сегодня все острее встает проблема обеспечения безопасности при использовании сетевых технологий и все более насущной становится потребность в решениях по защите мобильных пользователей. Появляются и беспроводные аппаратные ключи защиты приложений, работающие по технологии Bluetooth. Так, тайваньская компания First International Computer продемонстрировала PDA с соответствующим модулем и беспроводной аппаратный ключ защиты приложений BlueGenie, разработанный в сотрудничестве с Silicon Wave.
Одним из наиболее распространенных в России защитных устройств такого типа является устройство HASP (Hardware Against Software Piracy) от компании Aladdin, по сути ставшее стандартом де-факто. Aladdin Software Security R.D. — это российская компания, представитель мирового лидера в области разработки и производства систем аутентификации, защиты информации при работе с Интернетом и защиты программного обеспечения от несанкционированного использования Aladdin Knowledge Systems Ltd.
HASP — это аппаратно-программная инструментальная система, предназначенная для защиты программ и данных от нелегального использования, пиратского тиражирования и несанкционированного доступа к данным, а также для аутентификации пользователей при доступе к защищенным ресурсам. В первых версиях это небольшое устройство подключалось к параллельному порту компьютера. Затем появились USB-HASP-устройства. Иметь маленький USB-ключ значительно удобнее, чем большой 25-штырьковый сквозной разъем, да и часто возникающие проблемы с совместимостью ключей и устройств, работающих через параллельный порт, типа принтеров и ZIP-дисководов изрядно утомляли пользователей. А с USB-устройствами работает автоматическое подключение (рlug-and-рlay), порты USB выносятся на переднюю панель, встраиваются в клавиатуру и монитор. А если даже такого удобного разъема под рукой нет, то в комплекте с этими ключами часто продают удлинители. Существуют несколько разновидностей ключей — с памятью, с часами и т.д.
Основой ключей HASP является специализированная заказная микросхема — ASIC (Application Specific Integrated Circuit), имеющая уникальный для каждого ключа алгоритм работы. Принцип защиты состоит в том, что в процессе выполнения защищенная программа опрашивает подключенный к компьютеру ключ HASP. Если HASP возвращает правильный ответ и работает по требуемому алгоритму, то программа выполняется нормально. В противном случае, по усмотрению разработчика программы, она может завершаться, переключаться в демонстрационный режим или блокировать доступ к каким-либо функциям программы.
Используя память ключа, разработчик может:
У каждого ключа HASP с памятью имеется уникальный опознавательный номер, или идентификатор (ID-number), доступный для считывания защищенными программами и позволяющий различать пользователей. Идентификатор присваивается электронному ключу в процессе изготовления, что делает невозможным его замену, но гарантирует надежную защиту от повтора. С использованием идентификатора можно шифровать содержимое памяти и использовать возможность ее дистанционного перепрограммирования.
Hardlock — это электронный ключ компании Aladdin, предназначенный для защиты приложений и связанных с ними файлов данных, позволяющий программировать ключи защиты и лицензировать авторское программное обеспечение. Механизм работы ключей Hardlock базируется на заказном ASIC-чипе со встроенной EEPROM-памятью.
Чип имеет сложную внутреннюю организацию и нетривиальные алгоритмы работы. Логику работы чипа практически невозможно реализовать с помощью стандартных наборов микросхем, его очень сложно воспроизвести, а содержащийся в его памяти микрокод — считать, расшифровать или эмулировать.
Такие ключи могут устойчиво работает во всех компьютерах (включая ноутбуки), на различных портах, в самых разных режимах, позволяя подключать через них практически любые устройства — принтеры, сканеры, модемы и т.п. А малый ток потребления позволяет каскадировать любое количество ключей.
Hardlock осуществляет защиту 16- и 32-разрядных приложений и связанных с ними файлов данных в прозрачном режиме. При чтении данные автоматически расшифровываются, при записи — зашифровываются с использованием заданного аппаратно-реализованного алгоритма. Эта возможность может использоваться также для хранения и безопасной передачи информации в сети Интернет.
Как уже говорилось, наилучшим решением сегодня в области защиты информации являются смарт-карты, но для их использования необходимы специальные устройства считывания (карт-ридеры). Эту проблему снимают устройства типа eToken — электронные смарт-ключи производства той же компании Aladdin, подключаемые напрямую к USB-порту.
eToken — это полнофункциональный аналог смарт-карты, выполненный в виде брелока. Он напрямую подключается к компьютеру через USB-порт и не требует наличия дорогостоящих карт-ридеров и других дополнительных устройств. Основное назначение eToken — аутентификация пользователя при доступе к защищенным ресурсам сети и безопасное хранение цифровых сертификатов, ключей шифрования, а также любой другой секретной информации.
Каждому брелоку eToken можно присвоить уникальное имя, например имя его владельца. Чтобы узнать имя владельца eToken, достаточно подключить брелок к USB-порту и открыть окно «Свойства». Однако получить доступ к защищенной памяти eToken и воспользоваться этим брелоком без знания специального PIN-кода нельзя.
Кроме того, eToken выполнен в прочном водонепроницаемом корпусе и защищен от воздействия окружающей среды. Он имеет защищенную энергонезависимую память (модели PRO и RIC снабжены микропроцессором). Небольшой размер позволяет носить его на связке с ключами.
Если нужно подключить к компьютеру несколько ключей одновременно, а USB-портов не хватает, то можно воспользоваться концентратором (USB-HUB). Для удобства применения eToken поставляется вместе с удлинителем для USB-порта.
Таким образом, eToken может стать универсальным ключом, легко интегрируемым в различные системы для обеспечения надежной аутентификации. С его помощью можно осуществлять безопасный доступ к защищенным Web-страницам, к сетям, отдельным приложениям и т.д. Универсальность применения, легкость в использовании, удобство для пользователей и администраторов, гарантированное качество делают его прекрасным средством при необходимости использовать цифровые сертификаты и защищенный доступ.
В случае если объем конфиденциальной информации довольно значителен, можно воспользоваться устройством Secret Disk, выполненным с применением технологии eToken. Secret Disk — это разработка компании Aladdin Software Security R.D., предназначенная для защиты конфиденциальной информации на персональном компьютере с ОС Windows 2000/XP.
Принцип защиты данных при помощи системы Secret Disk заключается в создании на компьютере пользователя защищенного ресурса — секретных дисков, предназначенных для безопасного хранения конфиденциальной информации. Доступ к этой информации осуществляется посредством электронного ключа eToken, подсоединяемого к USB-порту компьютера. Доступ к информации, защищенной системой Secret Disk, получают только непосредственный владелец информации и авторизованные им доверенные лица, имеющие электронный ключ eToken и знающие его PIN-код. Для других пользователей защищенный ресурс будет невидим и недоступен. Более того, они даже не догадаются о его наличии.
Устанавливая на компьютере систему Secret Disk, пользователь может быть уверен в сохранности защищаемых данных. Конфиденциальная информация не может быть просмотрена, скопирована, уничтожена или повреждена другими пользователями. Она не может быть использована посторонними при ремонте или краже компьютера, а также при утере съемного зашифрованного диска.
Для защиты корпоративных серверов используется специальная версия — Secret Disk Server. Особенностью системы Secret Disk Server также является отсутствие следов закрытого «контейнера с информацией» в файловой системе. Таким образом, если злоумышленники снимут диск с вашего сервера, то они не только не смогут расшифровать данные — они даже не увидят, где именно находится информация.
Аппаратно-программные средства защиты выпускаются в достаточном количестве (помимо лидера — компании Aladdin и другими производителями, в том числе и российскими). Однако если говорить о программном обеспечении, то, пожалуй, единственным способом надежной защиты является перевод ее разработки из разряда ПО в разряд платформ. Иными словами, достаточно сложный программный комплекс требует при эксплуатации тесного сотрудничества с производителем. Купить продукт легко, гораздо труднее правильно настроить его и поддерживать. Естественно, такой подход легко реализуем для систем корпоративного назначения, но плохо применим к коробочным программам для широкого пользователя. Однако и в этом направлении работы уже давно ведутся (подписка на ПО, мультимедийные программы с онлайновым обращением и пр.), и производитель получает дополнительные возможности для улучшения защиты.
Однако даже индивидуальным пользователям к таким хранилищам стоит относиться с опаской: если специальное устройство хранит все пароли пользователя (в том числе и его private key) и впускает его в систему по аппаратному ключу, то достаточно подобрать к этому устройству один пароль — и все секреты как на ладони…