Обложка статьи «Делаем аппаратный менеджер паролей на базе Arduino»

Делаем аппаратный менеджер паролей на базе Arduino

В этой статье расскажем о том, как работает аппаратный менеджер паролей и что нужно, чтобы самому собрать такой же.

Многие люди до сих пор хранят данные для авторизации в бумажном виде. Очевидно, если кто-то украдёт ваш блокнот, то он получит доступ ко всем вашим аккаунтам — хуже не придумаешь. Ещё одна проблема — человеческий фактор, который не позволяет в полной мере придумывать действительно сложные пароли, которые нельзя будет взломать брут форсом или перебором по словарю. Пользователь seawarrior181 собрал аппаратный менеджер паролей, который решает эти проблемы. Данные всех аккаунтов хранятся внутри устройства, а встроенный генератор поможет создать пароль, который нельзя будет подобрать перебором слов.

Устройство называется PasswordPump. Оно может хранить в себе до 254 учётных записей (название учётной записи + логин + пароль). Данные хранятся на двух съёмных микросхемах памяти в зашифрованном виде, благодаря шифрованию военного уровня AES128.

При желании можно сделать бэкап в текстовый файл или на резервные микросхемы памяти (не зря они съёмные).

Аппаратный менеджер паролей — как он работает?

Это устройство подключается к ПК через USB кабель. Чтобы получить доступ к устройству (ко всем сохранённым аккаунтам в нём), нужно ввести мастер-пароль. После этого в списке вы должны выбрать нужную учётную запись, а на компьютере поставить курсор в форму ввода. Менеджер паролей сам введёт в ПК данные для авторизации.

Добавлять учётные записи в устройство можно нативно или через монитор последовательного порта на ПК.

Сборка устройства

PasswordPump базируется на плате Arduino Pro Micro. Единственный элемент ввода в устройстве — энкодер. Он позволяет считывать повороты ручки и нажатия на неё (прямо как в колёсике мышки). Информация выводится на небольшой OLED дисплей с разрешением 128×32 пикселей. Ещё понадобится RGB-светодиод (он будет показывать текущее состояние устройства), две микросхемы EEPROM-памяти, печатная плата и некоторый обвес. Вот все необходимые детали:

Все компоненты, необходимые для сборки

Вот так выглядит схема устройства и его прототип, собранный на макетной плате:

Схема сборки устройства на макетной плате

Устройство, собранное на макетной плате

Автор выбрал модель Arduino Micro, потому что она базируется на чипе ATmega32u4 с аппаратной поддержкой USB-соединения. Это значит, что микроконтроллер можно использовать как HID-устройство. В данном случае — это клавиатура. Устройство имитирует нажатие клавиш, тем самым вводя данные для авторизации.

Исходный код для микроконтроллера можно найти здесь.

После распайки всех элементов на плате, микроконтроллер нужно подключить к ПК и прошить через Arduino IDE. Но автор советует перепрошивать МК отдельно через программатор, так как в таком случае будет перезаписан и загрузчик, из-за чего в памяти освободится немного места, которого очень мало для этого скетча.

Возможности менеджера паролей

Про базовые возможности уже было рассказано выше — в менеджере паролей можно защищённо хранить данные учётных записей и передавать их на ПК. Но это далеко не все возможности PasswordPump:

  • автоматическая очистка памяти и возврат к заводским настройкам после 10 неудачных попыток ввода мастер-пароля;
  • учётные данные шифруются с помощью AES128, а мастер-пароль хэшируется с помощью SHA256;
  • зашифрованные учётные записи и мастер-пароль посолены;
  • устройство не уязвимо для стандартных атак на пароли;
  • все данные учётных записей могут быть выгружены в текстовый документ для создания резервной копии в виде файла;
  • автоматическая блокировка устройства после 1 часа бездействия (нужно будет повторно ввести мастер-пароль);
  • генерация пароля из случайных букв, цифр и символов;
  • добавление учётных записей через монитор последовательного порта или на самом устройстве с помощью поворотного энкодера;
  • редактирование и удаление существующих учётных записей через ПК или само устройство;

Можно помочь автору в фиксе багов и добавлении новых возможностей в репозитории проекта.