Аппаратный менеджер паролей, от идеи до прототипа

Эта мысль давно крутилась в голове… Поскольку основная моя деятельность связана с админством, то паролей у меня реально много. Сложные пароли не запомнить, по крайней мере, у меня точно не получается. Простые легко сбрутить. Использовать один пароль на всё — сервисы в сети ломают один за другим, попадет пароль в словарь и отломят все связанные аккаунты. Бумажки с записями теряются, да и часто трудно понять, что к чему в этих записях…

Хорошим казался keepass, но его нельзя использовать на чужих компьютерах оперативно — надо поставить программу, скачать конфиг, зайти, куда-то залогиниться, после не забыть выйти и удалить конфиг. Для использования на одной машине keepass превосходен, на нескольких — уже есть проблемы.

И тут пришла мысль:, а что если сделать на stm32 hid-клавиатуру размером с флешку и затолкать пароли туда?

56f12d35ae2941a694b8f3b108b42738.jpg
Идея была такова. На этом гаджете 6 кнопок, одна кнопка — режим ввода, 5 — ячейки для паролей. При первом использовании устройство генерирует внутри себя пачку паролей, сложных и длинных, и сохраняет во флеш. Дальше при нажатии кнопки устройство выдает пароль и в конце жмет Enter, в одном режиме цифро-буквенный, поскольку есть сайты, запрещающие в пароле что-то кроме [A-Za-z0–9], в другом еще и включая знаки. Для заполнения форм есть третий режим, в нем не прожимается Enter.

Для испытания был собран прототип из макетки и китайской платы. Найти готовый код для hid-клавиатуры оказалось делом непростым — на гитхабе было всего три проекта, один из которых под виндой собрать нельзя без особых шаманств. Еще два я стал ковырять, остановившись на проекте какого-то китайца. Писать самому весь код обработки usb очень не хотелось, поскольку это очень нудно, код объемный, да и stm32 я знаю крайне поверхностно.

Форкнул этот код, допилил его, запустил на своей плате… Это заработало! Попробовал гонять в разных режимах, действительно удобно.

574cc03441074c869e510846be4f10ee.jpg

Только вот глаз префекциониста не радовала макетная плата, и я решил сделать готовое устройство, тем более, что все запчасти для него были в закромах. Часть, конечно, явно избыточна (питание) или великовата (кварц), но коли все это валялось без дела…

6ec8de325e724a12b2d1d7493ab90493.jpg

Я открыл KiCad, начертил схему, попытался развести плату. И тут меня ждал первый облом — если схемы я раньше чертил, то как разводить платы в KiCad, я категорически не знал. Потыкался, посмотрел пару видеоуроков, вроде начал понимать, а потом плюнул и развел все в Sprint Layout. Сохранил, отдал китайцам на изготовление. Уже потом понял, что накосячил, забыл резисторы на usb, хорошо, что это оказалось легко исправимо. Но на будущее понял, что лучше день потерять, потом за пять минут долететь, чем разводить в Sprint Layout и делать глупые ошибки.

Платы приехали очень быстро, порядка 15 дней.

879fa9bcdeb346838f061f691738464d.jpg

Быстро запаял одну, начал переделывать код. Да, stm32 от atmega отличается довольно сильно, но в целом все вопросы гуглятся очень хорошо. Правда из-за того, что эти МК поддерживает много сред разработки, возникают определенные трудности с кодом, во многих случаях копипаст не работает. Что, наверное, само по себе хорошо.

Устройство вышло очень удобным. Теперь не надо запоминать сложные пароли, все лежит на этой «флешке». Драйверов гаджет не требует, по крайней мере, во всех популярных ОС.

Остался вопрос с бекапом этого дела и с защитой. Ладно, потерять устройство в плане безопасности не страшно, поскольку нашедший не знает, к какому аккаунту эти пароли подходят. Но вот если его утащат со стола или из кармана специально… Думаю, стоит добавить защиту пин-кодом, набираемым с этих же кнопок. Бекап можно сделать средствами того же keepass, но вот стоит ли делать восстановление на новый носитель, я не уверен — при потере, краже или поломке пароли лучше сменить, мало ли что…

Устройство мне лично показалось очень удобным, и сейчас я буду делать второй вариант, на нормальных запчастях (а не из того, что было), чуть меньших размеров.

Исходный код можно глянуть тут.

Файлы платы пока не выкладываю, поскольку там есть ошибки.

© Geektimes