Немало заметок и обсуждений посвящены непростому вопросу безопасного хранения паролей, тема интересная и, похоже, актуальной будет ещё долго. Существуют различные программные решения для хранения паролей, о них довольно часто пишут на Хабре (например тут и вот тут), однако многим из них, как нам кажется, в той или иной степени свойственны следующие недостатки:
- закрытый код снижает доверие и вероятность оперативного устранения уязвимостей
- для автозаполнения нужно ставить дополнительный софт
- после ввода мастер-пароля вся база открыта и доступна, в том числе для вредоносного ПО, что особенно актуально на недоверенных устройствах
- использование мобильных приложений для хранения паролей все равно подразумевает ручной ввод с клавиатуры, например когда требуется залогиниться на стационарном ПК
- автозаполнение невозможно в некоторых случаях (в bios, консоли)
Мы пришли к выводу, что наиболее удобным решением будет простой и недорогой девайс, позволяющий аппаратно хранить и вводить логины/пароли на любые устройства, без установки какого-либо ПО.
![Pastilda — open source аппаратный USB менеджер паролей](https://habrastorage.org/files/db2/7d4/d55/db27d4d558ed4af786106bbd57421cf7.png)
Для начала мы, конечно же, прочитали весь интернет, чтобы понять, кому еще приходила в голову идея хранить и вводить пароли аппаратно, и как она была реализована. Найденные варианты можно условно разделить на следующие категории:
- шифрованные накопители, по сути — просто флешки с паролем (например, такая). Можно безопасно хранить документы, но об автоматическом вводе паролей речь не идет
- устройства с биометрической идентификацией (пример). Биометрическая идентификация выглядит привлекательно, однако она менее универсальна, чем символьный пароль (например, если надо удаленно предоставить кому-то доступ к устройству, передача отпечатка пальца станет настоящей проблемой), к тому же дополнительные датчики увеличивают стоимость изделия. В случае компроментации сложно быстро сменить отпечатки
- программные менеджеры паролей с аппаратным ключом-токеном, который дает доступ в базу (например) обладают теми же недостатками, что и программные менеджеры без ключа-токена
- устройства для ввода 1-4 паролей и их генерации (пример, пример). Наиболее близкие решения. Из недостатков следует отметить ограниченное количество хранимых паролей а также управление исключительно кнопками на устройстве, что далеко не всегда удобно.
Ни одно из найденных устройств в полной мере не соответствовало нашей задумке. Мы обрадовались — и давай думать дальше.
Идея
Не так давно для корпоративных задач хранения паролей вместо бумажек, браузеров и биологической памяти мы стали использовать KeePass. Вполне довольные удобством и универсальностью этого продукта, мы решили приспособить его для задач аппаратного хранения паролей, портировав на микроконтроллер.
Однако, осталось огромное количество вопросов. Каким образом выбирать нужную запись в базе на устройстве? Как показать пользователю, какая запись выбрана? Стоит ли размещать на корпусе устройства кнопки? Экран? Как вообще оно должно подключаться к компьютеру? К планшету? К телефону?
От экрана отказались сразу. Если уж у пользователя возникла необходимость вводить пароль — скорее всего, экран у него уже есть. Что касается способов подключения, то мы решили не рассматривать беспроводные интерфейсы, ввиду потенциальной их уязвимости для перехвата.
![Pastilda, использование с клавиатурой](https://habrastorage.org/files/b68/33b/c29/b6833bc295db4c38b599f1b33630509e.jpg)
Для управления мы будем использовать стандартную клавиатуру, а для непосредственного ввода сохраненных паролей в формы — эмулировать клавиатурные команды. “Перехват” управления будет происходить при вводе специальной комбинации клавиш. По умолчанию мы выбрали сочетание Ctrl + Shift + ~, потому что оно удобно для нажатия и практически нигде не используется. Проект получил название “Pastilda” (от password, tilda), у нас оно ассоциируется с чем-то вкусным и сладким, а также помогает не забыть главное сочетание клавиш для работы с устройством.
Находясь в пассивном режиме Пастильда транслирует все сообщения от клавиатуры к ПК без изменений, ожидая нажатия специальной комбинации. После ввода комбинации устройство входит в активный режим. Если в этот момент курсор находится в поле для ввода текста — это может быть поле “Логин”, или любое другое текстовое поле — в нем появляется одно-строчное текстовое меню.
![Pastilda, ввод пароля](https://habrastorage.org/files/b3a/db7/259/b3adb72598714007ba4ea43ecabf3e1a.gif)
Для работы с базой KeePass, хранящейся в памяти Пастильды, пользователь вводит мастер-пароль, а затем при помощи навигационных клавиш выбирает название интересующего его аккаунта и нажимает ввод. Пастильда вводит нужные логин и пароль в соответствующие поля. При этом расшифровка базы происходит на устройстве, и целевая система не получает доступа к мастер-паролю и ко всей базе. Выход из активного режима происходит либо автоматически, после ввода пароля, либо после повторного нажатия комбинации “Shift + Ctrl + ~”. Да, кстати, комбинации можно придумать свои.
Реализация 0.1
Как всегда много чего хочется реализовать, а начать решили с малого. Ревизия 0.1 предназначена для проверки идей, удобства использования и всяческого баловства. В текущей версии запланирован следующий минимум функций:
- составное USB устройство (HID+Mass Storage)
- USB host
- работа с одной базой KeePass
- однострочное меню
- FAT16.
Схема
![](https://habrastorage.org/files/71d/4b5/8f5/71d4b58f57d84163ba99520f3f56a342.png)
Тут всё просто — контроллер Stm32f405, два разъема и флешка на SPI. Так же немного защиты, разъем SWD и, конечно же, RGB светодиод. Выбор компонентов не вызвал затруднений — STM мы просто любим
Плата
![](https://habrastorage.org/files/88b/c42/401/88bc42401a754b5da64a8efe5230d2b2.jpg)
Все компоненты в обычных корпусах, чтобы плата была дешевая и быстрая в производстве. Размер 40х17 мм, 4 слоя. Текущая версия платы выглядит вот так:
![](https://habrastorage.org/files/4d4/570/b2b/4d4570b2b173447a9adac2af703ed8fa.png)
![](https://habrastorage.org/files/868/04e/232/86804e232bc645e0972aeaf4bf008a9c.png)
Софт
На данный момент реализовано:
- USB host, для того чтобы распознавать подключенную к устройству клавиатуру и прокидывать сообщения от нее дальше в ПК
- составное USB устройство (msd + hid): в режиме Pastilda устройство должно уметь быть клавиатурой, кроме того, быть всегда доступным как внешний диск, для удобного добавления и удаления паролей (Попутно @anaLazareva решила проблему с usb_msc libopencm3.
Ждет своей участи:
- FAT для чтения данных, записанных во флеш память, чтобы мы могли ходить по директориям и брать нужный пароль
- KeePass расшифровка, работа с записями
- меню.
О своих суровых буднях программисты напишут в отдельных статьях.
Что дальше?
Дальше — больше. Хочется реализовать работу с любыми устройствами, понимающими внешнюю клавиатуру. Мы уже протестировали работу нашего прототипа с Android-смартфоном через USB OTG, всё работает прекрасно. Для удобства навигации по меню при использовании Пастильды с мобильными устройствами сделаем отдельный USB-модуль с колесом-кнопкой.
![](https://habrastorage.org/files/63d/0d8/b92/63d0d8b92df041a6ac1f64d727f9712e.jpg)
Ещё одна идея — маленькая гибко-жесткая печатная плата, которая заправляется прямо в разъем USB, оказываясь между контактами host и device. Жесткий кусочек платы с компонентами наклеивается на корпус штекера device. Таким образом устройство будет довольно сложно обнаружить. Впрочем, зачем бы нам это? Просто идея.
![](https://habrastorage.org/files/ff8/0ba/c77/ff80bac77cb84534b02c8a67032c347e.png)
Встроенную память Пастильды можно использовать для хранения данных (если скорость не особо важна), и тут возможны варианты: просто USB накопитель, который виден всегда, когда устройство подключено, либо шифрованный накопитель. Базы KeePass, файлы ключей и т.п. предполагается хранить на этом пространстве.
Open all
Код выложен на github, вместе с железом. Лицензия GNU GPL. Естественно, можно пилить что-то свое на основе этого проекта, нам в голову пришли такие идеи:
- эмуляция kbd+mouse для гейм-читинга
- потоковое аппаратное шифрование USB-флеш.
Главная цель этой статьи — услышать ваше мнение, не стесняйтесь в комментариях!
Комментарии (151)
x893
14.07.2016 14:27Вот теперь я понял коментарий от пред. поста :)
Сделал себе такой www.themooltipass.com но не очень удобно.
Посмотрю Ваш. Спасибо за github!
hamnsk
14.07.2016 14:27+2Есть один минус, как быть обладателям планшетов и ноутбуков? Опять же можно попробовать манипуляции с драйвером клавы и в итоге перехватить пароль. Поправьте если не прав.
unalacuna
14.07.2016 14:53Мы тестировали Пастильду с Android-смартфоном через USB OTG, работает отлично. В одной из следующих версий добавим органы управления (колесико/джойстик/тач-сенсор) для навигации по меню без использования клавиатуры.
ProLimit
14.07.2016 17:38Как в таком случае вводить мастер-пароль? Через клавиатуру ноутбука? но тогда система будет неустойчива к кейлоггерам.
unalacuna
14.07.2016 18:49Один из вариантов — при помощи органов управления на девайсе вводить короткий пин-код, с лимитом количества попыток. После превышения лимита стирать базу.
Ordinatus
14.07.2016 15:03Всё становится лучше, если в нем есть bluetooth.
Тогда уже придется писать софт по мобильные оси.Free_ze
14.07.2016 16:14Всё становится лучше, если в нем есть bluetooth.
Про беспроводные интерфейсы в статье упоминается. В данном случае — это неконтролируемая среда и лишняя возможность для перехвата информации.MichaelBorisov
19.07.2016 21:08Не стоит бояться радиоканала. При надлежащей реализации протоколов зашифрованного обмена ничего там не перехватят.
SyrexS
14.07.2016 15:04В дополнение:
Учитывая, что многие сейчас если и не используют Ноутбук, то у большего числа пользователей стал наблюдать беспроводные девайсы.
Как быть в таком случае?Akson87
14.07.2016 20:06На самом деле с беспроводными девайсами все не так плохо. Перехватить можно только если быть рядом, но девайс все равно спасет от зловреда на целевой системе, так что профит есть все равно.
paxa_pil
14.07.2016 15:17+1При ввод пароля любым способом есть вероятность перехвата. Преимущество данного девайса, что перехватывается только используемый пароль. Мастер-пароль от базы в компьютер вообще не попадает.
PavelMSTU
14.07.2016 14:31Очень оригинально! Как я понимаю — стартап? Успехов вашей команде!
Несколько вопросов:
- В перспективе какова будет стоимость не OpenSource решения «в розницу»?
- будут «демпинговые» варианты продукта для «поиграть со студентами»?
- вы продаете устройство? Или устройство + софт?
- не рассматривали ли вариант «встраивания» в клавиатуру?
- рассматриваете ли иностранные рынки?
Ioanlarionov
14.07.2016 15:53Спасибо за оценку.
- Думаю, в районе 30$, может, меньше — пока не ясны масштабы
- Давайте свяжемся, обсудим конкретные потребности
- Софт и железо открытое, мы можем продавать готовые устройства. Вообще, мы занимаемся контрактной разработкой электроники.
- У нас был опыт разработки корабельной (qwerty + специальный блок) клавиатуры, массовую клавиатуру самостоятельно делать не планируем
- Мы открыты любым предложениям
zoonman
14.07.2016 20:51Вам надо на KickStarter, соберите средства на небольшую партию. За $20 я бы купил. $30 немного дороговато. Отличная идея!
unalacuna
15.07.2016 10:05Спасибо! Мы рассматриваем выход на краудфандинг как одно из направлений дальнейшего развития проекта и обязательно сообщим, когда Пастильду можно будет купить.
LonFas
14.07.2016 15:03Судя по статье оно работает с базой KeePass (*.kdb), т.е. устройство представляет собой низкоскоростную флешку с аппаратной версией KeePassX. Cовместимо ли оно с базой KeePass2 (*.kdb2)?
LonFas
14.07.2016 15:10Дополнение:
У меня в текущей версии KeePassX2 более 250 учетных записей с разбивкой на группы, щёлкать стрелками при таком раскладе не очень удобно, возможна ли реализация какого-то поиска?Ioanlarionov
14.07.2016 15:59Пока пилим первую версию, вторая на очереди. Там .kbdx, вроде бы.
Придумали давать возможность ввода имени записи, с подсказкойil--ya
19.07.2016 12:45Я почему-то сначала именно о таком способе подумал.Ctrl+Shift+~, «master password», «account alias», Ctrl+Shift+~, и вся эта колбаса подменяется на нужный пароль. И даже никаких подсказок не надо. Часто используемые алиасы запомнятся, редко используемые можно «записать на бумажку».
icoz
19.07.2016 23:07редко используемые можно «записать на бумажку».
Вместе с паролем, чтобы не забыть… :)
GeMir
14.07.2016 15:04Если будет доставка в Европу и выглядеть устройство будет не так ужасно как тот же Mooltipass (и это при стоимости в 153 €), я бы купил.
DeeZ
14.07.2016 15:06+5Идея отличная. Удачи в реализации девайса.
VaalKIA
14.07.2016 22:23Ни в статье ни в комментах не увидел упоминание этого девайса: Цифровой Страж Key_P1 MultiClet
Из характеристик:
«Сейф для паролей»
«Быстрое криптопреобразование»
Я далёк от идей использования подобных девайсов, но как по мне, так это именно тема этой статьи.mickvav
18.07.2016 09:43+2Нет! Эта штука на порядок неудобнее и стрёмнее, чем задумка топикстартера.
- Необходимость отдельного ПО на машине
- Закрытый код
- Здоровенная
- «Сертификация ФСБ»
mpetrunin
14.07.2016 15:26+1Во-первых, с открытыми исходниками и т.п. — прямая дорога в краудфандинг. Но тут, я думаю, вы и сами уже догадались.
Во-вторых, вопрос: можно ли совместить использование этой одной базы на Пастильде с базами на другом устройстве? К примеру, удобно было бы работать с пастильдой на ноутбуке или компьютере, но переставлять в телефон — не очень. Было бы круто иметь возможность синхронизации.
Sap_ru
14.07.2016 15:36Добавить BlueTooth и управление с телефона. Уже долго думаю над подобной идеей, но нет времени и денег.
Вставил свисток в USB, достал телепон, ввёл PIN, выбрал учётную запись, и, о чудо! свисток набрал пароль через HID устройство.
А ещё можно сделать загрузку Linux сервера с USB-пепяки со сквозным шифрованием, аппаратным ключом и подтверждением через телефон. 100% защита от маски-шоу. И секретный пароль для уничтожения мастер-ключа, как защита от маски-шоу,DeeZ
14.07.2016 15:58точно! хотел написать фичареквест с переносным хранилищем (а не ретранслятором клавиатуры), но подумал что страдает кросплатформенность и лишние костыли появятся. А если авторизация и управление будет через BT — сам девайс останется простой «клавиатурой».
тем более что многие сайты видят что вы воодите в поля, так что вводить на сайт (даже без отрпавки) свой главный пароль — не секурно.Ioanlarionov
14.07.2016 16:02Дело в том, что с Пастильдой вы никогда не вводите мастер-пароль куда-либо, кроме неё. Поле ввода получит какое-то количество символов, чтобы вам показать, что пароль вводится. Ведь устройство само решает, что транслировать, а что — нет.
BT это беспроводной интерфейс, многие переживают, что он недостаточно защищен.Sap_ru
14.07.2016 19:27Ну, как бы сделать секурный канал между телефоном и девайсом на фоне всего остального — примитивная задача. Очевидно, что не нужно передавать пароль открытым текстом. Например, можно шифровать пароль смесью сессионного ключа, ключа устройства и случайного номера транзакции. Даже серьёзного шифрования не нужно — на таких объёмах и на таком канале даже простенькие шифры дадут более чем достаточную стойкость.
elliadan
14.07.2016 16:52Задумка очень интересная! Но кое-что не понятно:
Для работы с базой KeePass, хранящейся в памяти Пастильды, пользователь вводит мастер-пароль, а затем при помощи навигационных клавиш выбирает название интересующего его аккаунта и нажимает ввод.
Если в моей базе keepass около 400 записей и они рассортированы по папкам, то как бы происходил выбор нужной записи в моем случае?
Или здесь подразумевается гораздо меньшее кол-во записей и отсутствие вложенных папок для них?Ioanlarionov
14.07.2016 16:54Придумали давать возможность ввода имени записи, с подсказкой
Можно сделать сначала выбор папки потом выбор записи, всё с подсказками во время ввода
sumanai
14.07.2016 17:06Было бы удобнее, как в мобильном KeePass2Android- функция быстрой разблокировки, когда недавно открытую базу можно разблокировать вводом последних 3 символов пароля (настраивается), и при первом неверном вводе блокируется полностью и требует полный пароль.
А то у меня пароль в 50+ знаков, устану каждый раз вводить ))
Ну и клавиатура у меня PS/2.Ioanlarionov
14.07.2016 17:08Спасибо, идея интересная! Для вас специально выпускают переходники PS/2-USB.
deemru
14.07.2016 17:16Есть большая дыра в безопасности, которая зияет так, что пользоваться вашим устройством в текущей реализации нельзя.
Сами сайты, а особенно прикрученная аналитика (Яндекс.Метрика точно умеет), записывают всё, что делает пользователь.
Ввели мастер-пароль — прощай мастер-пароль.
mickvav
14.07.2016 19:40Нет, оно же сайту уже "---------" отдаст какое-нибудь вместо пароля. Так что — только длина и время между нажатиями клавиш улетит.
deemru
14.07.2016 23:08Спасибо за ещё один вектор атаки на устройство.
mickvav
15.07.2016 11:23Ну, вот как раз этот вектор прикрыть авторы могут относительно просто — если железка сама помнит интервалы, она может внести в них незаметный пользователю хаос и/или сделать их более-менее одинаковыми. Да и задача расшифровки пароля по интервалам между нажатиями клавиш — весьма нетривиальна (хотя и решаема, особенно, если вы можете заставить пользователя повводить у вас на сайте многабукафф, по крайней мере в виде «сузить перебор для 10-значного пароля с (24+10)^10 до что-нибудь порядка нескольких сотен топовых комбинаций»).
Ioanlarionov
14.07.2016 17:17+3Выше я писал:
Дело в том, что с Пастильдой вы никогда не вводите мастер-пароль куда-либо, кроме неё. Поле ввода получит какое-то количество символов, чтобы вам показать, что пароль вводится. Ведь устройство само решает, что транслировать, а что — нет.
deemru
14.07.2016 17:26Хорошо, пользователь (и сайт) увидит звёздочки, мастер-пароль всё ещё у нас.
Но всё остальное, что видит пользователь, потенциально видит и враг. По названиям записей вас могут, например, идентифицировать.
Идея с вводом данных в поле без дополнительных организационных мер (например отключение скриптов на сайте) пока слабовата.Ioanlarionov
14.07.2016 21:14Мы выводим имена записей, они могут не содержать полезной информации.
Вводить логин и пароль к конкретному сайту вам всё равно придется, с устройством или без, так что тут потери безопасности нет.deemru
14.07.2016 23:05Так точно, конкретному сайту должны быть предоставлены только две сущности, логин и пароль. Так делают все менеджеры паролей.
Вы же признаёте, что предоставляете в открытом виде то, что должно быть защищено, и никому кроме прошедшего аутентификацию неизвестно. Это дыра в защите. Вектор для построения атаки на ваше устройство.
Аппаратное шифрование, как правило, требуется для обеспечения защиты высокого класса. Ваша концепция, в текущем виде, выглядит как гаджет поиграться.Ioanlarionov
14.07.2016 23:11я не понимаю, как атакующему поможет факт наличия у меня в базе пароля с названием записи yandex, google, bank и т.д. Поясните, пожалуйста.
deemru
14.07.2016 23:43+2Я атакующий.
На мой honeypot приходит пользователь с аккаунтами sberbank, bankofchina, JPMorgan_Chase, citibank и т.д.
Берём пользователя в оборот!
monah_tuk
15.07.2016 06:15Можно сделать менее портабельное решение, когда по хоткею всплывает окно — интерфейс к донглу, причём такое, что оно не имеет отношения к сайту и браузеру вообще, там можно и выбор в более удобной форме сделать и ввод мастер-пароля. Главное, что бы управление могло с клавиатуры полностью осуществляться. После выбора, окно закрывается, получает фокус то окно, в котором была нажата комбинация, после чего "клавиатура" генерирует последовательность, которая туда и вставляется. Только подумать как отличать пароль и логин.
Ioanlarionov
15.07.2016 12:39да, можно запускать, например, блокнот, запуская его стандартным набором команд, спасибо!
Stalker_RED
15.07.2016 14:02+1Правда блокнот есть не во всех операционных системах, но я думаю почти везде найдется какой-то вменяемый текстовый редактор.
Еще можно выводить в блокнот простенький текстовый интерфейс. К примеру пользователь пишет в блокноте «help», нажимает пастильдовский хоткей, и получает подробную справку о хоткеях и текстовых командах.nmk2002
15.07.2016 15:09По моему, интересная идея.
Можно действительно использовать любой текстовый редактор, чтобы реализовать удобный интерфейс. Открываешь редактор, нажимаешь хоткей и в блокноте быстро печатается интерфейс Пастильды с блэкджеком и псевдографикой. На несколько строчек со структурой, подсказками и пр.
ComodoHacker
15.07.2016 12:20По-моему это очень ненадежно. Как пользователь может быть уверен, что в момент ввода мастер-пароля устройство находится в нужном режиме? Вероятность случайной утечки очень высока, до неприемлемой.
Tim0n
15.07.2016 12:35Если при нажатии на хоткей курсор находится в поле ввода — можно в него что-то написать, показывая режим. А потом уже, при наличии такого сообщения, вводить мастер-пароль.
evnuh
14.07.2016 17:46Из идей:
1) сделать поиск логинов по уже введёному префиксу (вроде как это уже вы сами предложили)
2) подставлять при выборе не просто открытый логин, а логин + домен, на котором он сохранён (если есть). А то как быть с кучей сайтов, где логин = емейл, а он у людей чаще всего один, а пароли разные.
3) как уже заметили выше, немного запикивать то, что подставляется, чтобы скрипты на страницах и вправду не видели весь ваши список логинов пока вы по нему бежите.
4) сделать тайм-аут на ввод мастер-пароля. Пока тайм-аут не наступил, спрашивать что-то более короткое (пин-код, например)
5) сделать какое-нибудь меню, прямо внутри инпута., чтобы быстро прыгать по папкам и логинам (например, зажимая шифт прыгать по папкам, нажав ctrl переходить в режим поиска по домену сайта, и т.д.) И как-нибудь это индицировать на экране, ASCII-символами типа
shinkei
14.07.2016 17:46То есть чтобы угнать пароль, достаточно запилить форму, которая имитирует ресурс и ввести логин? а дальше уже дело за POST?
Stalker_RED
14.07.2016 18:21Да, если мастер-пароль уже введен и база разблокирована, и вы полдучили доступ к устройству, то можно угнать пароль. Но такая схема с любым менеджером паролей работает. Поможет только переход на ключи, но ресурс к которому вы подключаетесь должен это поддерживать.
inkelyad
14.07.2016 18:08А можно все-таки интеграцию с KeePass на смартофоне сделать? Чтобы работало в режиме 'подключил устройство к смарту и компьютеру. Выбрал в смартовом KeePass пароль. Пароль ввелся на компьютере'.
Теоретически, такое возможно сделать совсем без дополнительного устройства. Но заставить работать смарт HID клавиатурой — достаточно сложно.
Иными словами, реализовать то, что уже сейчас андроидовский KeePass со своим плагином к InputStick умеет делать. Но InputStick — безпроводная. Хочется проводное устройство.paxa_pil
14.07.2016 18:51Идеи правильные, но совсем не про пастильду. Мы прячем базу в устройство, избегая кучи уязвимостей софтверных решений, а вы предлагаете устройсво -дополнение к софту.
Мы пообсуждаем интересно ли нам такое делать, сложностей я не вижу.
Urn
14.07.2016 18:27Это очень круто! Я б купил.
Konachan700
14.07.2016 18:40+1Одинаковые идеи приходят в голову разным людям. Не так давно я публиковал статью https://geektimes.ru/post/276900/ с похожей штукой. На днях закончил и отправил в производство вторую тестовую модель уже, по которой и буду делать страничку.
Почему, кстати, взяли 405, а не 417/437 контроллер? На 417 есть аппаратная криптография же, что вместе с флешкой и вводом кода с клавиатуры даст отличный защищенный накопитель небольшого размера для той же базы KeePass.paxa_pil
14.07.2016 19:07Ссылка на похожее устройсво на кикстартере есть в статье. Контроллер конечно должен быть 415. Спасибо за замечание.
Semisonic
14.07.2016 19:01Я, наверное, тупой, но как вы собираетесь модифицировать интерфейс устройства, с которым работаете (я про «однострочное меню» и иже с ним), не устанавливая при этом вообще никакого софта на оное?
Или однострочное меню — не более чем красивое название для реагирования на горячие клавиши и отсылки в поле редактирования текста, имитирующего навигацию по списку?unalacuna
14.07.2016 19:05Пастильда умеет быть клавиатурой и вводить имя текущего пункта меню в любое доступное текстовое поле. А при нажатии стрелки вниз (например) — стирать его, и вводить имя следующего пункта.
segment
14.07.2016 19:08А какой VID/PID для USB используется?
unalacuna
14.07.2016 19:22транслируем те, что у подключенной клавиатуры
lorc
14.07.2016 19:34И все дескрипторы тоже? Что будет, если в клаве есть USB-хаб или встроенный тачпад?
Konachan700
14.07.2016 19:57Да, тем более многие клавы — это 2 hid-устройства, одно с флагом boot в дескрипторе, другое без, но с мультимедийными клавишами и расширенным функционалом. Это надо бы отслеживать, иначе будут глюки.
ana_lazareva
14.07.2016 20:13Реализация 0.1 является тестовой, типо proof of concept и все такое. В рамках данной реализации, мы пока не используем media клавиатуры, и клавиатуры с USB хабами и т. д. Мы обязательно займемся этим на следующем этапе развития проекта, но на данной стадии это избыточно.
mickvav
14.07.2016 19:42А что делать с ssh/linux console, которые не печатают на экран ничего при вводе пароля? Или интерфейс в поле логина будет?
Ioanlarionov
14.07.2016 19:45да, причем было обсуждение о том, что для таких записей переход между логином и паролем не tab, а enter
mickvav
15.07.2016 11:26Вероятно, нужно две «пусковых» комбинации — одна для tab-варианта, другая — для enter-а.
Stalker_RED
15.07.2016 12:37В некоторых интерфейсах одного таба может быть недостаточно. когда верстальщики располагают всякие чекбоксы «запомнить меня» и ссылки «я забыл пароль» рядом с полями логина/пароля, но tabindex нормально прописать ленятся.
mickvav
15.07.2016 15:54Тогда осмысленно запоминать не просто логин-пароль а именно последовательность нажатий. Тогда и табы можно, и выбрать какую-нибудь ересь из списка, да что угодно
Meklon
14.07.2016 20:10+1А что с ФСБ и лицензией на разработку криптоПО и железа?
Ioanlarionov
14.07.2016 20:18уже пора идти в ФСБ?
GDApsy
14.07.2016 23:18Не думаю, но теоретически при выходе из альфы Вашего интересного устройства вы будете продавать же и в самом деле средство криптографии. А насколько мне известно у нас сейчас для криптоинструментов ужесточили законодательство, так что поинтересоваться законами о гражданской криптографии имеет смысл.
Ioanlarionov
14.07.2016 23:22Спасибо. На самом деле, мы сразу задумались на эту тему. Нашли документ Приказ ФСБ РФ от 9 февраля 2005 г. N 66. Пока глубже не прорабатывали.
Konachan700
14.07.2016 20:37Уже задавали этот вопрос. Разработки систем шифрования тут нет, контроллеры, в которых криптография содержится, разрешены к продаже на территории РФ, значит разрешены и все поделки на них. Писать же свою криптографию никто в здравом уме не будет.
Akson87
14.07.2016 20:13Отличная идея!
Добавить сканер для пальцев и разблокировать базу одноразово по прикосновению? Поставил пользователь курсор в поле для пароля контактика, замигала лампочка на девайсе, дотронулся пользователь и ввелся пароль. Фактически то, что сейчас есть на андроиде для некоторых приложений, только более универсальное.
После этого добавить блютуз и делать вид, что это беспроводная клавиатура с колесиком как уже думаете. Это мгновенно станет полезно для мобильных девайсов.
Каким-то образом сообщать девайсу о том, для чего пароль сейчас требуется (софт на целевой машине нужен дополнительный, который будет как раз нажимать заветную комбинацию автоматически и выбирать нужный пароль). Сделать открытый API для этого взаимодействия с девайсом и у вас появятся плагины для всего.
Ivan_83
14.07.2016 21:05Как пользовался текстовым файлом для хранения паролей так и дальше буду пользоваться.
На доверенных терминалах самое оно, в остальных случаях ничего не поможет.
UnamedRus
14.07.2016 21:08После того поста от 6 июня тоже задумался о создании такого устройства.
Управление, после ввода мастер-пароля, (до пк никакая информация о вводе не долетела, правильность ввода-моргание индикаторы на клавиатуре) через перехват нум-пада. Паролям в базе назначались теги с цифровым номером и вводом этого номера на нум-паде+энтер или * вводится пароль+ логин или просто пароль.
Так же там можно было бы создавать пароли по трем алгоритмам(маскам сохраненные в базе keepass) индикация — лампочки на клавиатуре, правда в том устройстве база хранилась на micro-sd + еще один USB-хост для keyfile на флешке в зашифрованном виде, мб для расшифровки использовались серийный номер флешки и sd-карты.Ioanlarionov
14.07.2016 21:16Классно, присоединяйтесь!
UnamedRus
15.07.2016 15:21В таком случае неужели отдельное USB устройство ради 3 кнопок (колечко для смартфона) необходимо, мб стоит разместить площадку из 3 сенсорных кнопок (вверх вниз и выбор двойным тапом по центральной). В время отличное от прокручивания списка логинов они могут например задавать режимы работы.
И если пошла речь о потоковом шифрование флешки, то какие там USB? 2.0 или 1.1
doctorw
15.07.2016 12:20>Паролям в базе назначались теги с цифровым номером и вводом этого номера на нум-паде+энтер
Только запоминать числовые теги будет не очень удобно, имхо, либо я неверно понял Вашу идею.
У KeePass в записях бд есть строковое поле Notes и поле URL, по крайней мере в kbdx. Можно было бы сделать так, что после ввода мастер пароля, пользователь вводил бы, прямо в текущем текстовом поле, строковый тег записи или URL, а уже после нажатия enter Пастильда бы искала в базе соответствующую запись.vlivyur
15.07.2016 12:59Когда-то давным-давно на телефонах Моторола (C350, C650 и аналогичных) можно было контактам устанавливать короткий номер (я так полагаю просто запись шла в ячейку с этим номером). Вызов такого контакта был, кажется, номер+#. Многим людям я звонил именно таким способом, а не листал телефонную книгу. Ведь можно же самостоятельно назначить этот короткий номер (памяти там было на 250 что ль контактов), ну или запомнить популярные.
doctorw
15.07.2016 14:36Не спорю, для часто используемых паролей такой способ действительно удобен, но что если база keepass будет содержать 250 и более записей с паролями?
Я именно об этом. Запомнить слова гораздо легче, или прямо использовать имя ресурса, на котором данный пароль используется, гораздо удобнее.UnamedRus
15.07.2016 15:24Да конечно запоминать все коды паролей не имеет смысла, речь шла о десятке(самых часто используемых), может больше(хотя например это было бы удобным если бы у нас было много машин с уже присвоенным им номером), как правильно написал человек выше это аналог быстрого набора на телефоне.
vlivyur
18.07.2016 09:32Там и фишка была в том, что не возбраняется в принципе и не ограничивается десятком кнопок. Например, у меня товарищ был на долгую 3 (быстрый набор, но можно было и 3#), а его мама была на 33#. Тут же можно к серверам по младшему разряду IP обращаться — наверняка ты его помнишь.
webdiez
14.07.2016 21:09Интересная задумка, но есть но… Как быть с этим ключем в корпоратмивном сегменте? Это же надо при каждом выходе с кабинета выдергивать устройство, которое находится в стистемном блоке. Могу предположить изготовление клавиатуры с usb портом на лицевой стороне.
Тут уже не будет проблем с извлечением.Ioanlarionov
14.07.2016 21:10просто втыкаете её между клавиатурой и системником и забудьте там, не надо ничего выдергивать
sumanai
14.07.2016 21:16Наверное он об админах, которые ходят и настраивают пользовательские ПК.
Ioanlarionov
14.07.2016 21:43можно ходить со своей клавой вместе с Пастильдой на разъеме
nmk2002
15.07.2016 13:26Не рассматриваете вариант сделать свою клавиатуру с встроенной Пастильдой? Чуть более доверенный девайс получится.
gaki
21.07.2016 05:38По-моему, скорее о том, что нельзя оставлять ключ доступа воткнутым в компьютер, когда сам уходишь.
Сделать опциональный шнур, типа USB-удлиннитель. Одной стороной втыкаем в компьютер. На другой стороне, вместо одного USB-разъёма, в который можно воткнуть клавиатура, два разъёма — к примеру, с торца и сбоку. Этот двойной разъём кладём перед собой на стол. В торцовый разъём втыкаем клавиатуру, в боковой — девайс с паролями. Когда девайс с паролями не воткнут — всё оставшееся хозяйство работает, как простой удлиннитель, без затей. Когда воткнут — подключается дополнительная функциональность, описываемая в статье. Заодно решается проблема «системник под столом». Девайс на виду и под рукой, хочешь — лампочки смотри, хочешь — колёсико крути. Можно докупить дополнительно таких «удлиннителей» и повтыкать в несколько компьютеров, между которыми ходишь. Можно будет легко носить свой «аппаратный ключ» между ними. По-моему, такой вариант будет гораздо лучше изготовления кастомной клавиатуры, т. к. дешев, можно использовать с любой клавиатурой — хоть эргономичной, хоть китайской, хоть Optimus Gluteus Maximus. И таскать меньше.
Как вариант для бедных, просто взять удлиннитель, вообще любой. Но придётся действовать в два этапа: выдернуть клавиатуру из ключа, выдернуть ключ из удлиннителя, вставить клавиатуру в удлиннитель. Возможно, в некоторых ситуациях клавиатура в процессе может и отвалиться.
Dark_Purple
14.07.2016 22:36STM, похоже, единственный, кто реализовал два аппаратных USB в микроконтроллере
Это ведь чушь, а так статья хорошая.
crompton
14.07.2016 23:12А почему от экрана отказались? Ну понятно что большой экран есть и вроде это решение универсальное, но почему бы не сделать экран в три строчки с показом текущего выбора, показывать каталог и ходить по нему стрелками… Для особо параноидальных личностей, чтобы в поле ничего кроме логина/пароля не транслировалось.
Правильно ли я понимаю, что устройство использует готовую загруженную в него базу keepass, не предусмотрено ввода паролей непосредственно в устройство?Ioanlarionov
14.07.2016 23:14Похожие штуки уже были, а мы такие оригиналы…
Пока мы только думали о таком сценарии. Было предложение по специальному сочетанию, либо через меню входить в режим добавления записи, потом вводить логин и пароль как обычно, а устройство всё это пишет в базу.Tim0n
15.07.2016 12:20Такой сценарий необходим, т.к. иначе мастер-пароль всё равно будет попадать в компьютер при редактировании базы keepass.
megasua
15.07.2016 00:32-1Мне кажется нужно сразу нацеливаться на USB Type-C. Еще было бы неплохо сделать его транзитным, чтобы в него можно было вставлять следующие usb устройства.
monah_tuk
15.07.2016 06:33+1Если на целевой платформе Type-C only — возьмите переходник.
В данном устройстве, к примеру, пропускной способности больше USB 2.0 (да даже 1.1) не нужно — вы просто с клавиатуры такой траффик не создадите, а делать его, при этом, Type-C, это стрельба из пушки по воробьям, если внутрь впихнуть USB 3.1, либо просто глупость, так как на большей части хостов сейчас Type-C редкость, тогда как Type-A в огромных количествах.
Если же делать образец для потокового шифрования дисков… Ну тогда ещё может быть.
А вообще, до сих пор ещё USB 3.0 хосты что с сырым железом, что с сырыми дровами, Win10 вообще временами отжигает, наиболее адекватна работа только контроллеров Intel. Боюсь представить, что сейчас с 3.1 :-( Мы очень много отгребли на UVC проекте когда начинали хотеть максимума производительности (4K 30 FPS, I420/NV12 или FullHD 60 FPS, YUY2). Причём на ядрах после 4.0 в Linux адекватность работы USB 3.0 значительно выше, нежели в Windows (если сравнивать с 8.0, 8.1 и, особенно, 10). Может получится после выпуска очередного продукта попросить добро на публикацию сравнения производительности стриминга на разных сочетаниях хост-контроллеров и операционных систем. Правда используемый чип тоже не без косяков — Cypress FX3 /ARM926E-JS внутри/.
UnamedRus
15.07.2016 15:32Если я не ошибаюсь через type-c можно подключить видеокарту, может когда нибудь в будущем пастильда сможет рисовать небольшой оверлей в углу с управлением базой поверх картинки на мониторе.
monah_tuk
18.07.2016 02:20Видеокарта — оконечное устройство. Т.е. в НЕЁ вы выведете оверлей, или вы задумались о технологии вроде Optimus? ;-) В любом случае — это очень сильно ограничит круг потенциальных пользователей.
old_bear
15.07.2016 00:35IMHO, колёсико-кнопка на теле, а не в дополнительном адаптере, и небольшой символьный экранчик там же, избавят от проблем навигации по большой базе а также упростят вопрос интерфейса. Можно на этом же экранчике визуализировать процесс ввода мастер-ключа и вообще все взаимоотношения пользователя и устройства, которые нет резона светить дальше по проводу. Ну т.е. всё кроме выдачи логина/пароля. :)
Как вариант, сделать внутреннее меню (у нас же есть колёсико и экранчик!) в котором можно переключаться между вариантами полностью аппаратного общения с устройством — т.е. на внешней клавиатуре набирать только мастер, а наружу выдавать только выбранный логин и пароль (или вообще только пароль) — и того варианта который описан в статье. Можно ещё промежуточную версию сделать — навигация по базе средствами клавиатуры, а отображение только на встроенном экранчике.
Только сразу закладывайтесь на надёжный вариант этого колёсика (может просто три кнопки?), который легко поменять — доступность альтернатив того-же типоразмера, большие контактные площадки, которые не оторвутся от платы, и вот это всё.
P.S. Сори за много букв.
mr_dein0s
15.07.2016 01:47Я так понимаю, в настоящий момент планируется поддержка ввода значений ключей USERNAME и PASSWORD? Или же кастомными значениями тоже можно будет оперировать? Кастомные аттачменты?
Да, я понимаю, что сильно раскатываю губу, но ведь за спрос не бьют?
Если на второй вопрос ответ будет утвердительным, то что по поводу последовательностей автоматического ввода — можно ли и их будет использовать или ручками придется скакать по полям?
Уже на протяжении длительного времени использую на постоянной основе KeePass (правда второй версии, который с kdbx) на нескольких девайсах с синком через облако. Не отказался бы и от надежного хардового варианта :)
Pilat
15.07.2016 01:53У меня база KeePass с тысячами паролями, так что простая навигация, как Вы предложили, не подойдёт.
Может быть, сделать устройство с возможностью подключить какой-то внешний монитор для выбора пароля. Кому монитор не нужен — будет работать как Вы описали. Заодно решится проблема подключения его же к смартфону или планшету, где выбор пароля Вашим способом может быть затруднён.Ioanlarionov
15.07.2016 12:40предложили ещё поиск добавить, помощник ввода, не поможет?
Pilat
15.07.2016 15:39А как он поможет? В KeePass постепенно скапливается куча дубликатов, найти нужное надо по комментариям. Нет, конечно, в крайнем случае можно и аккуратность развить. Но чисто из практики — у меня половина записей в keepass импортировано из FireFox, а там и дубликаты, и непонятности. Понятно что дополнительный экран сильно усложнит систему. Но сколько таких парольных гаджетов сделано — а ни один популярным не стал. Может быть, стоит не гнаться за миниатюрностью. Сделать модульный кирпич, заодно можно встроить свисток чтобы не терялся :)
unwrecker
15.07.2016 10:00+1Шикарная идея! И название действительно вкусное :)
Но у меня тоже сомнения в способе выбора учётки: форма ввода логина порой валидируется скриптами на допустимые символы и длину. Может стоить приделать горячие клавиши для ввода «вслепую».
izyk
15.07.2016 11:57Для работы с базой KeePass, хранящейся в памяти Пастильды, пользователь вводит мастер-пароль, а затем при помощи навигационных клавиш выбирает название интересующего его аккаунта и нажимает ввод. Пастильда вводит нужные логин и пароль в соответствующие поля. При этом расшифровка базы происходит на устройстве, и целевая система не получает доступа к мастер-паролю и ко всей базе. Выход из активного режима происходит либо автоматически, после ввода пароля, либо после повторного нажатия комбинации “Shift + Ctrl + ~”. Да, кстати, комбинации можно придумать свои.
1. Выбираем логин. Вот тут, можно не только навигационные клавиши использовать, но и обычные, чтобы сузить поиск. Выводить логины начинающиеся только с уже введенных клавиш. Введенные клавиши можно подсвечивать.
2. Фиксировать окончание ввода логина также по комбинации клавиш. Что бы была возможность перейти на поле пароля.
3. Ввод пароля по комбинации клавиш. И зразу после этого, перевод в неактивное состояние.
После выдачи пароля, переход в неактивное состояние, обязателен, иначе зло вред всю базу сольет, зная алгоритм работы устройства.
С одной кнопочкой. И тремя лампочками, устройство будет понадежней и практичней в эксплуатации. Кнопочка будет дублировать комбинацию клавиш(вдруг на клаве нет “Shift + Ctrl + ~”). Лампочки отражать состояние.
PS. Повторное нажатие “Shift + Ctrl + ~” передает эту комбинацию, как бы маскирует само себя.
Успехов.
Ioanlarionov
15.07.2016 12:44Спасибо!
У устройства нельзя попросить пароль иначе, как с клавиатуры или подключенной туда же кнопки. Так что не поможет никакой софт.
Лампочки есть на клавиатуре- для индикации хотим задействовать CapsLock, NumLock и ScrollLockizyk
15.07.2016 13:03для индикации хотим задействовать CapsLock, NumLock и ScrollLock
А как вы будете возвращать их состояние до использования вашего устройства? Разве клавиатура выдает состояние этих лампочек в данный момент? Это где то в драйвере клавиатуры хранится, разве нет? Будете отслеживать их состояние с начала включения ПК?Ioanlarionov
15.07.2016 14:13Попробуйте вытащить и вставить клавиатуру, вы увидите, что она зажжёт именно те индиваторы, которые горели до этого.
Кстати, выяснилось, что на ноутах бывает только индикатор капслок, будем выдавать морзянкой…izyk
15.07.2016 14:26Попробуйте вытащить и вставить клавиатуру, вы увидите, что она зажжёт именно те индиваторы, которые горели до этого.
Ну так правильно. Значение ОС сохранила. И она(ОС) зажжет. Или вы думаете что эти значения хранятся в клавиатуре? ;)
А вы что будете эмулировать отключение клавиатуры, при возврате в пассивный режим?
На ноутах в любом случае только с внешней можно работать, а что там на ноуте вам не все ли, равно?
Ioanlarionov
15.07.2016 14:54вы спрашивали,
А как вы будете возвращать их состояние до использования вашего устройства?
я вам на примере ответил, что любое утройство, представившееся клавиатурой, будет знать, какие индикаторы сейчас активны, и может ими управлять.izyk
15.07.2016 15:07Ваше устройство, вроде прозрачно для системы. Таким образом, что бы запомнить состояние светодиодов на клаве, оно будет отслеживать команды ОС, BIOS(в общем случае ПК) «лампочка зажгись» для клавиатуры с момента включения?
Может у меня не правильное представление о обмене командами с клавиатурой, вы уж меня простите. И клавиатура умеет отдавать состояние своих лампочек по команде? В этом и вопрос.ana_lazareva
15.07.2016 16:32+1Наше устройство для системы является клавиатурой. Когда Пастильда принимает сообщение от ПК на включение светодиодов, то т. к. по отношению к реальной клавиатуре она является хостом, то просто перенаправляет сообщение от ПК в клавиатуру и запоминает, какие светодиоды задействованы. Когда происходит переход в режим ввода логина и пароля, Пастильда как хост, может управлять светодиодами, а как девайс может выводить сообщения. После выхода их этого режима, восстанавливается состояние светодиодов, которое было до перехода в режим.
qnick
18.07.2016 04:38Вот у нас в датацентре тысяча серваков, у каждого свой рутовый пароль на два десятка символов. В случае чего его приходится вводить руками либо через квм, либо прямо в консоли, бо буфер обмена ни там, ни там не работает.
Ваше устройство, по идее, должно помогать в таких ситуациях, но чето я не представляю, каким образом я буду «при помощи навигационных клавиш выбирать название интересующего аккаунта» из тысячи возможных, при условии, что вводимые символы на экране не отображаются.Ioanlarionov
18.07.2016 10:57Например, вы вводите его номер-оно является названием записи. Смотреть и не нужно
qnick
18.07.2016 15:04то есть алгоритм такой: я ввожу ктрл+шифт+тильда, потом вслепую мастер пароль и некий порядковый номер.
В принципе, может прокатить, надо попробовать.
il--ya
19.07.2016 13:00+1Сообщите, когда начнёте продавать
Ioanlarionov
19.07.2016 21:45Сообщим, скоро сделаем страницу предзаказа. Здесь будут интересные статьи по ходу реализации, подписывайтесь на блог!
BalinTomsk
20.07.2016 19:07хотелось бы следуюшее:
на одной стороне 10 кнопок — выбор цифр
на другой стороне 10 кнопок — выбор букв
Например: B0 — первый банковский пароль
это позволит создать до 100 комбинаций пaролей
на торцевой стороне 4 кнопки
— использовать старый пароль
— использовать новый пароль
— сгенерить новый, при этом старый новый пароль перейдет в «старый»
— принять с клавиатуры новый пароль, при этом старый новый пароль перейдет в «старый»
(это нужно там где навязывают пароль или есть ограничение на размер пароля или маску)
Мне кажется это бы покрыло все жизненные случаи.
Если добавить однострочный LCD можно добавить функцию назначения/показа текста к комбинации клавишь, типа B0 — Sberbank, B1 — Promstrojbanksumanai
20.07.2016 19:42+2ИМХО, интерфейс для роботов, а не для людей.
BalinTomsk
20.07.2016 20:47Когда не хватает памяти сохранить в голове пароли на все случаи — можно иметь подсказку на бумаге
к7 — пароль к Хабру
Это и секьюрно и просто. 5-6 паролей что набираешь в день можно и без подсказки запомнить.
Konachan700
23.07.2016 16:3510 кнопок это солидная такая плата выйдет, иначе нажимать будет неудобно. А это устройство, чтобы оно стало популярным, должно быть размером где-то со среднюю флешку, не больше. Оно же таскается в кармане, где у среднего человека уже лежат как минимум смартфон и ключи. Еще одну штуку размером со смартфон никто таскать с собой не будет, кроме маленькой кучки гиков.
gaki
21.07.2016 06:03Вариант для случая с много тысяч аккаунтов: нажали комбинацию клавиш, загорелась, допустим, красная лампочка — типа, прибор перестал пропускать нажатия клавиш на компьютер. Начали набирать название записи в кипассе. Если набранное вообще мимо, т. е. даже близко такого нет — горит красная, нажатая до этого последовательность клавиш игнорируется. Если что-то нашлось в базе, но есть несколько возможных вариантов — к примеру, жёлтая лампочка, типа, надо продолжать набирать. Загорелась зелёная лампочка — уникальное совпадение, т. е. нашли нужную запись. После этого по Ctrl-U отправляется юзернейм, по Ctrl-P — пароль, ну и для сброса тоже какую-нибудь комбинацию. Должно работать даже в консолях и биосах, где не сделаешь однострочное меню в поле ввода, а авто-переход между полями — не лучшая идея, т. к. непонятно, как делается.
Ioanlarionov
24.07.2016 19:11Норм, только надо тогда удлинитель-пастильда-клавиатура, чтобы индикация была перед глазами. Цвета можно поменять на помигивания Caps Lock, например.
a1ien_n3t
Еще в качестве варианта, есть lpc43xx(и вроде в lpc18xx также) там тоже два USB. Один полноценный 2.0 второй без доп обвязки 1.1. Или через ULPI можно получить также usb2.0
И плюс в LPC нормальный usb стек. Там обычный EHCI.
paxa_pil
Stm нам ближе. Обязательно проверим и сравним с контроллерами NXP. Спасибо за наводку.