Немало заметок и обсуждений посвящены непростому вопросу безопасного хранения паролей, тема интересная и, похоже, актуальной будет ещё долго. Существуют различные программные решения для хранения паролей, о них довольно часто пишут на Хабре (например тут и вот тут), однако многим из них, как нам кажется, в той или иной степени свойственны следующие недостатки:
- закрытый код снижает доверие и вероятность оперативного устранения уязвимостей
- для автозаполнения нужно ставить дополнительный софт
- после ввода мастер-пароля вся база открыта и доступна, в том числе для вредоносного ПО, что особенно актуально на недоверенных устройствах
- использование мобильных приложений для хранения паролей все равно подразумевает ручной ввод с клавиатуры, например когда требуется залогиниться на стационарном ПК
- автозаполнение невозможно в некоторых случаях (в bios, консоли)
Мы пришли к выводу, что наиболее удобным решением будет простой и недорогой девайс, позволяющий аппаратно хранить и вводить логины/пароли на любые устройства, без установки какого-либо ПО.
Для начала мы, конечно же, прочитали весь интернет, чтобы понять, кому еще приходила в голову идея хранить и вводить пароли аппаратно, и как она была реализована. Найденные варианты можно условно разделить на следующие категории:
- шифрованные накопители, по сути — просто флешки с паролем (например, такая). Можно безопасно хранить документы, но об автоматическом вводе паролей речь не идет
- устройства с биометрической идентификацией (пример). Биометрическая идентификация выглядит привлекательно, однако она менее универсальна, чем символьный пароль (например, если надо удаленно предоставить кому-то доступ к устройству, передача отпечатка пальца станет настоящей проблемой), к тому же дополнительные датчики увеличивают стоимость изделия. В случае компроментации сложно быстро сменить отпечатки
- программные менеджеры паролей с аппаратным ключом-токеном, который дает доступ в базу (например) обладают теми же недостатками, что и программные менеджеры без ключа-токена
- устройства для ввода 1-4 паролей и их генерации (пример, пример). Наиболее близкие решения. Из недостатков следует отметить ограниченное количество хранимых паролей а также управление исключительно кнопками на устройстве, что далеко не всегда удобно.
Ни одно из найденных устройств в полной мере не соответствовало нашей задумке. Мы обрадовались — и давай думать дальше.
Идея
Не так давно для корпоративных задач хранения паролей вместо бумажек, браузеров и биологической памяти мы стали использовать KeePass. Вполне довольные удобством и универсальностью этого продукта, мы решили приспособить его для задач аппаратного хранения паролей, портировав на микроконтроллер.
Однако, осталось огромное количество вопросов. Каким образом выбирать нужную запись в базе на устройстве? Как показать пользователю, какая запись выбрана? Стоит ли размещать на корпусе устройства кнопки? Экран? Как вообще оно должно подключаться к компьютеру? К планшету? К телефону?
От экрана отказались сразу. Если уж у пользователя возникла необходимость вводить пароль — скорее всего, экран у него уже есть. Что касается способов подключения, то мы решили не рассматривать беспроводные интерфейсы, ввиду потенциальной их уязвимости для перехвата.
Для управления мы будем использовать стандартную клавиатуру, а для непосредственного ввода сохраненных паролей в формы — эмулировать клавиатурные команды. “Перехват” управления будет происходить при вводе специальной комбинации клавиш. По умолчанию мы выбрали сочетание Ctrl + Shift + ~, потому что оно удобно для нажатия и практически нигде не используется. Проект получил название “Pastilda” (от password, tilda), у нас оно ассоциируется с чем-то вкусным и сладким, а также помогает не забыть главное сочетание клавиш для работы с устройством.
Находясь в пассивном режиме Пастильда транслирует все сообщения от клавиатуры к ПК без изменений, ожидая нажатия специальной комбинации. После ввода комбинации устройство входит в активный режим. Если в этот момент курсор находится в поле для ввода текста — это может быть поле “Логин”, или любое другое текстовое поле — в нем появляется одно-строчное текстовое меню.
Для работы с базой KeePass, хранящейся в памяти Пастильды, пользователь вводит мастер-пароль, а затем при помощи навигационных клавиш выбирает название интересующего его аккаунта и нажимает ввод. Пастильда вводит нужные логин и пароль в соответствующие поля. При этом расшифровка базы происходит на устройстве, и целевая система не получает доступа к мастер-паролю и ко всей базе. Выход из активного режима происходит либо автоматически, после ввода пароля, либо после повторного нажатия комбинации “Shift + Ctrl + ~”. Да, кстати, комбинации можно придумать свои.
Реализация 0.1
Как всегда много чего хочется реализовать, а начать решили с малого. Ревизия 0.1 предназначена для проверки идей, удобства использования и всяческого баловства. В текущей версии запланирован следующий минимум функций:
- составное USB устройство (HID+Mass Storage)
- USB host
- работа с одной базой KeePass
- однострочное меню
- FAT16.
Схема
Тут всё просто — контроллер Stm32f405, два разъема и флешка на SPI. Так же немного защиты, разъем SWD и, конечно же, RGB светодиод. Выбор компонентов не вызвал затруднений — STM мы просто любим
Плата
Все компоненты в обычных корпусах, чтобы плата была дешевая и быстрая в производстве. Размер 40х17 мм, 4 слоя. Текущая версия платы выглядит вот так:
Софт
На данный момент реализовано:
- USB host, для того чтобы распознавать подключенную к устройству клавиатуру и прокидывать сообщения от нее дальше в ПК
- составное USB устройство (msd + hid): в режиме Pastilda устройство должно уметь быть клавиатурой, кроме того, быть всегда доступным как внешний диск, для удобного добавления и удаления паролей (Попутно @anaLazareva решила проблему с usb_msc libopencm3.
Ждет своей участи:
- FAT для чтения данных, записанных во флеш память, чтобы мы могли ходить по директориям и брать нужный пароль
- KeePass расшифровка, работа с записями
- меню.
О своих суровых буднях программисты напишут в отдельных статьях.
Что дальше?
Дальше — больше. Хочется реализовать работу с любыми устройствами, понимающими внешнюю клавиатуру. Мы уже протестировали работу нашего прототипа с Android-смартфоном через USB OTG, всё работает прекрасно. Для удобства навигации по меню при использовании Пастильды с мобильными устройствами сделаем отдельный USB-модуль с колесом-кнопкой.
Ещё одна идея — маленькая гибко-жесткая печатная плата, которая заправляется прямо в разъем USB, оказываясь между контактами host и device. Жесткий кусочек платы с компонентами наклеивается на корпус штекера device. Таким образом устройство будет довольно сложно обнаружить. Впрочем, зачем бы нам это? Просто идея.
Встроенную память Пастильды можно использовать для хранения данных (если скорость не особо важна), и тут возможны варианты: просто 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. Спасибо за наводку.