LINUX.ORG.RU

Чем заменить Yubikey?

 , ,


2

1

По неизвестным мне причинам сейчас все коммерческие поставки Yubikey разворачиваются на таможне, у российских реселлеров на складах шаром покати. Соответственно, хочется найти заменитель юбикеев.

Что нужно от заменителя: USB HID устройство, умеющее генерировать одноразовые пароли; не требует для прошивки и проверки пароля ПО на винде (привет Аладдину, ага).

ЛОР, хочу историй успеха. Кто что использует в качестве генераторов одноразовых паролей?

Уточнение: варианта «съездить самому за бугор и привезти чемодан этих юбиков» нет, потому что это нужно для компании, а не для личного использования.

★★★★★

Кто сказал «контрабас»?

Deleted ()

варианта «съездить самому за бугор и привезти чемодан этих юбиков» нет, потому что это нужно для компании, а не для личного использования.

Сделай ИП, заключи с компанией договор поставки, провози по одному.

imul ★★★★★ ()

Я делал самопальные клоны yubikey на атмеге 8/328p. Бонусом программируемый RGB диод. Печатные платы остались, могу отсыпать. Паять будешь сам!

Из минусов, надо поднимать yubikey сервер, который на пыхе и от кода изрядно смердит. Штатные OTP, которые есть в nextcloud я туда не запихнул, но по хорошему надо бы.

P.S. Сейчас от OTP отказался из-за того, что логинюсь только с линуксовых машин, и отсутствует способ безкостыльной централизованной интеграции OTP в LDAP, который держу для того, чтобы была единая аутентификация для почты/nextcloud/gitlab

ncrmnt ★★★★★ ()
Последнее исправление: ncrmnt (всего исправлений: 1)
Ответ на: комментарий от ncrmnt

А вы исходники не выложите в открытый доступ ? Я вот в свободное время тоже понемногу пилю эмулятор OpenPGP карты для атмеги 328 - и пока только сплошные проблемы с нехваткой ресурсов у атмеги: слишком мало eeprom'а что-бы хранить хотя-бы пару больших ключей, слишком мало ОЗУ что-бы получать plain-text для подписи без использования message-chaining (как рекомендуется в стандарте OpenPGP), производительность атмеги для использования алгоритма RSA с большими ключами - мягко говоря недостаточная.

Как вы решили данные проблемы ? (хотя-бы с хранением ключей, и нехватки ОЗУ для операций хеширования\шифрования)

DawnCaster ()
Ответ на: комментарий от ncrmnt

Или вы делали только алгоритмы OTP, а поддержку RSA и OpenSC или GnuPG не добавляли ?

DawnCaster ()
Последнее исправление: DawnCaster (всего исправлений: 1)
Ответ на: комментарий от DawnCaster

Только otp. Ну и ясное дело без ардуйны, у меня все в 6к влезает, где-то полтора километра на USB стек

ncrmnt ★★★★★ ()
Ответ на: комментарий от ncrmnt

Спасибо! Будет интересно посмотреть

Ну и ясное дело без ардуйны, у меня все в 6к влезает

Ну, я, как раз пишу на ардуине, т.к не так уж он много жрёт, а экономия времени разработки - значительная. Всё-равно в моём случае проблемы с нехваткой памяти и производительности - глобальные, отказ от ардуины это не исправит. Нужно будет либо докупать отдельный SPI-Ram модуль, либо вообще другой контроллер (смотрю в сторону ESP, что-нибудь вроде wemos d1-mini).

DawnCaster ()
Ответ на: комментарий от ncrmnt

Выложу на след неделе, как буду дома

Впрочем, если будет напряжно, можете не запариваться с выкладыванием, я почитал википедию на предмет алгоритмов OTP, там вроде ничего особо сложного не предвидится с реализацией.

DawnCaster ()
Ответ на: комментарий от DawnCaster

Ну, я, как раз пишу на ардуине,

потому памяти и не хватает.

экономия времени разработки - значительная.

Не соглашусь. Все разы, когда я из-за лени решал взять дуриновские библиотеки или портированные с дурины, это все выливалось в дичайший секс и поиск косяков в коде, написанном левой лапой гоблинами под тяжелыми грибами. Последний раз неделю назад почти полдня убил на esp32, пытаясь понять почему либа для tft дисплея, портированная с дурины не декодирует jpeg. Оказалось, что в функции декодирования jpeg (которая намертво вшита в либу tft дисплея есть еще и поиск конца http заголовка, и если оно не найдет \r\n\r\n оно и не начнет декодировать. имхо это НЕ норма ;)

Всё-равно в моём случае проблемы с нехваткой памяти и производительности - глобальные, отказ от ардуины это не исправит

Смотря что ты хочешь получить. Если тебе крипту, смотри камни с криптоакселераторами. stm32, nordic'и есть с аппаратным AES что очень выручает.

ncrmnt ★★★★★ ()
Ответ на: комментарий от ncrmnt

потому памяти и не хватает.

Ну вот смотрите, ключ 4096 бит весит 512 байт. И это только модуль ключа, а там еще есть несколько параметров, и это всё не считая дополнительной текстовой информации. То есть в eeprom размером 1K, я могу впихнуть не более 1 ключа размером 4096 бит.

Далее, для реализации протокола карты OpenPGP - требуется буфер размером не менее 2048 байт, либо колдовство с message chaining. При этом где-то в ОЗУ надо хранить исходный plain-text, результирующий cipher-text и ещё сколько-то потребуется на сам алгоритм RSA (и на алгоритмы SHA* тоже). Размеры этих наборов данных очень плохо вписываются в ОЗУ контроллера Atmega 328P с объемом в 2 килобайта.

В общем, отказ от ардуины тут вообще никак не спасает. При таких объемах рабочих данных - мне вообще никакой разницы нет, будет мне доступно на пару сотен байт ОЗУ больше или меньше. Объем flash памяти - для меня уже не так критичен, ведь его уже 32К.

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

И такое тоже бывает. Всё сильно зависит от библиотек. Но их наличие куда лучше их отсутствия. Мне вот вообще не впёрлось писать с нуля поддержку какому-нибудь дисплею, или сетевому Ethernet модулю. А библиотеки всё-таки кое как можно и подправить. Ну и наверное, может не стоит использовать ардуиновские библиотеки отдельно от ардуины, особенно, если они на ардуиновское ядро завязаны ?

DawnCaster ()
Последнее исправление: DawnCaster (всего исправлений: 4)
Ответ на: комментарий от ncrmnt

Смотря что ты хочешь получить. Если тебе крипту, смотри камни с криптоакселераторами. stm32, nordic'и есть с аппаратным AES что очень выручает.

Спасибо за наводку, хотя, думаю, AES мне не понадобится.

DawnCaster ()
Ответ на: комментарий от DawnCaster

Ну, я, как раз пишу на ардуине, т.к не так уж он много жрёт

Жрёт ардуина немеряно, особенно функция digitalwrite. Я интереса ради повторял опыт с прогоном в цикле поднятия и опускания ног на AVR libc и на ардуине. У меня глаза на лоб полезли от того, насколько сильно ардуина тормозит процессор. А ввод-вывод - это самое основное, что от микроконтроллера требуется. И это не говоря о том, насколько жирнющая прошивка получается на выходе.

Quasar ★★★★★ ()
Ответ на: комментарий от DawnCaster

В общем, отказ от ардуины тут вообще никак не спасает. При таких объемах рабочих данных - мне вообще никакой разницы нет, будет мне доступно на пару сотен байт ОЗУ больше или меньше. Объем flash памяти - для меня уже не так критичен, ведь его уже 32К.

Тогда возьми STM32 и RTOS какую-нибудь. Сможешь даже легко пристроить SD-карточку и возможности расширить.

А библиотеки всё-таки кое как можно и подправить.

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

Quasar ★★★★★ ()
Последнее исправление: Quasar (всего исправлений: 1)
Ответ на: комментарий от Quasar

А ввод-вывод - это самое основное, что от микроконтроллера требуется. И это не говоря о том, насколько жирнющая прошивка получается на выходе.

Я в курсе. Но в моём случае - это не так важно, в сравнении с упрощением разработки. Ну вот реально пофиг, будет прошивка весить 10 или 20 килобайт. А по поводу digitalwrite - да, намудрили они с ним. Всегда когда важна скорость - тереблю выводы напрямую с помощью digitalPinToPort/portOutputRegister. А в остальных случаях - как правило, неважно, что с digitalwrite вывод поднимется на пару микросекунд позже чем напрямую.

Для любого инструмента есть своя область применения. Ардуина - это простота и универсальность. А если хотите выжать из контроллера максимум - то, конечно, придется брать что-нибудь другое, и, вероятно, придётся частично отказаться от переносимости между МК.

DawnCaster ()
Последнее исправление: DawnCaster (всего исправлений: 1)
Ответ на: комментарий от Quasar

так как с тем говнокодом неизвестно, что поломаешь при исправлении.

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

DawnCaster ()
Последнее исправление: DawnCaster (всего исправлений: 1)
Ответ на: комментарий от Difrex

Nitrokey

А где бы его в РФ купить? Есть подозрение, что при покупке у производителя (в Германии) посылку точно так же развернут на таможне.

tiandrey ★★★★★ ()
Ответ на: комментарий от DawnCaster

Ардуина - это простота и универсальность.

Простота и универсальность - это AVR libc. Для AVR и без ардуины гора библиотек есть.

Quasar ★★★★★ ()
Ответ на: комментарий от Quasar

Простота и универсальность - это AVR libc.

А на ESP (и других) контроллерах эта ваша голая AVR libc тоже работает ? А вот ардуина работает (или по крайней мере должна), и если проекты грамотно писать - то и код менять не нужно. У ардуины другое предназначение, ИМХО.

DawnCaster ()
Ответ на: комментарий от DawnCaster

То есть в eeprom размером 1K, я могу впихнуть не более 1 ключа размером 4096 бит.

Во-первых, даже если ты юзаешь avr, ты можешь откусить кусок flash для хранения ключей, и даже перезаписывать их в рантайме. man pgmspace. Во-вторых, если надо больше памяти - просто подбери мк с бОльшим количеством памяти.

Размеры этих наборов данных очень плохо вписываются в ОЗУ контроллера Atmega 328P с объемом в 2 килобайта.

Бери контроллер где больше памяти. Вообще stm32, например stm32f103 серия под это отлично подойдет.

И такое тоже бывает. Всё сильно зависит от библиотек. Но их наличие куда лучше их отсутствия. Мне вот вообще не впёрлось писать с нуля поддержку какому-нибудь дисплею, или сетевому Ethernet модулю. А библиотеки всё-таки кое как можно и подправить.

Все разы когда я с ними сталкивался, проще было спустить это гогно в унитаз и либо откопать реализацию на чистом C, либо заюзать либы от вендора (ST periph libs, например). Они часто тоже дико стремные, но такого ада как в типичной дурине не было даже в первых версиях SDK для ESP8266.

Ну и наверное, может не стоит использовать ардуиновские библиотеки отдельно от ардуины, особенно, если они на ардуиновское ядро завязаны ?

Тут похрен, с ядром дурины или без ядра. Если у тебя одна единственная функция ищет конец http заголовка, декодирует jpeg, выводит его на дисплей, при этом сам jpeg берет из буфера, сокета или файла в зависимости от значения аргументов, это вопрос уже даже не к ардуине, а к санитарам ;)

Я не боюсь об ардуину испачкаться, в принципе прошивку дурины можно нормально cmake'ом собрать, а среду и прочее отправить на свалку где им и место, но я предпочитаю так делать только когда никаких других вариантов нет в принципе, но все разы когда так приходилось делать я потом об этом жалел.

ncrmnt ★★★★★ ()
Ответ на: комментарий от DawnCaster

по поводу digitalwrite - да, намудрили они с ним.

Не намудрили. Просто фанбои java решили что они могут в микроконтроллеры и плюсы, вот и наколбасили. Ядро в принципе работает, но не быстро, из-за абстракций там, где их не должно быть по причине производительности. А вот комьюнити, которое пишет 90% библиотек не умеет ни в джаву, ни в С, ни в плюсы. Результат немного предсказуем.

ncrmnt ★★★★★ ()
Ответ на: комментарий от DawnCaster

А на ESP (и других) контроллерах эта ваша голая AVR libc тоже работает ?

1. На esp32/esp8266 есть newlib, реализация бибиотеки С. И ВНЕЗАПНО стандартная библиотека С это стандарт, и есть везде, где есть С. В редком случае (sdcc) в урезанной форме, в особо экзотических случаях (dsp) может быть очень странной. Ядро дурины без библиотеки libc не взлетит в принципе.

2. На esp32 есть их IOT SDK со FreeRTOS, который судя по виду - работа Espressif над ошибками 8266 (-Wall -Werror по умолчанию и kconfig на это и намекают).

ncrmnt ★★★★★ ()
Ответ на: комментарий от ncrmnt

кусок flash для хранения ключей, и даже перезаписывать их в рантайме

Для хранения ключей - могу. Но хочется динамически их устанавливать, а не только на этапе компиляции. Динамически перезаписывать область flash-памяти в рантайме, на AVR не так просто: инструкции SPM разрешено работать только из boot-области микросхемы. То есть, нужен специальный загрузчик, который будет содержать нужные мне функции для записи данных, которые я буду в рантайме искать, и вызывать с нужными мне параметрами. Такой себе ROP получается. Я так даже пробовал делать - но это реально тот ещё геморрой, и он не универсален от слова совсем. Вызывать SPM инструкции напрямую из program-memory нельзя.

Бери контроллер где больше памяти.

Я, собственно, так и хочу сделать. У меня валяется какой-то WiFi модуль на ESP контроллере, с 32 метрами Flash и 32К ОЗУ. Вроде ардуиной он поддерживается, с нативным для ESP инструментарием как-то совсем нет времени разбираться. Наверное начну с него.

Тут похрен, с ядром дурины или без ядра. Если у тебя одна единственная функция ищет конец http заголовка, декодирует jpeg, выводит его на дисплей, при этом сам jpeg берет из буфера, сокета или файла в зависимости от значения аргументов, это вопрос уже даже не к ардуине, а к санитарам

Тут даже санитары будут бессильны, нужна особо карательная медицина.

в принципе прошивку дурины можно нормально cmake'ом собрать

Примерно так и делаю. А что, среду разработки Ардуины кто-то всерьез использует ? (ну кроме как пару строчек подправить перед заливкой).

DawnCaster ()
Последнее исправление: DawnCaster (всего исправлений: 2)
Ответ на: комментарий от DawnCaster

Динамически перезаписывать область flash-памяти в рантайме, на AVR не так просто: инструкции SPM разрешено работать только из boot-области микросхемы

Проблему уже сто раз обсосали на всех avr форумах и стековерфлоу. Просто добавляешь к функции, которая будет работать с флешью BOOTLOADER_SECTION в мейкфайле добавляешь --section-start-.bootloader=0xNNNNN чтобы секцию запузырить в часть бутлоадера. Вот и весь трюк.

Если используешь бутлоадер - делаешь функции доступа к флешу глобальными, выдергиваешь из map адреса и вызываешь по указателю. Problem solved.

Я, собственно, так и хочу сделать. У меня валяется какой-то WiFi модуль на ESP контроллере, с 32 метрами Flash и 32К ОЗУ. Вроде ардуиной он поддерживается, с нативным для ESP инструментарием как-то совсем нет времени разбираться. Наверное начну с него.

Не подойдет, у них нет нативного усб, только через мост. Ты не сможешь его представить в виде усб устройства ввода или закосить под конкретный усб класс. И, кстати, учти, что у ардуйны нет усб стека нормального, только платформо-специфичные хаки и виртуальный serial.

Тут даже санитары будут бессильны, нужна особо карательная медицина.

Вот и охота тебе с таким связываться?

Примерно так и делаю. А что, среду разработки Ардуины кто-то всерьез использует ? (ну кроме как пару строчек подправить перед заливкой).

Да, ты не поверишь это мейнстрим у адептов этой шняги. Хотя сейчас идет мода на platform.io. Задумка типа npm мк, но реально весь процесс сборки намертво управляется питоном, библиотеки 99% процентов дуриновские, половина вообще не собирается.

ncrmnt ★★★★★ ()
Ответ на: комментарий от ncrmnt

Не подойдет, у них нет нативного усб, только через мост. Ты не сможешь его представить в виде усб устройства ввода или закосить под конкретный усб класс. И, кстати, учти, что у ардуйны нет усб стека нормального, только платформо-специфичные хаки и виртуальный serial.

Я и не собираюсь косить под USB\CCID. Протокол обмена данных свой собственный, включая шифрование (если захочу заюзать ESP по беспроводной сети).

Для поддержки венды - я хочу написать юзерспейсный драйвер и управляющую утилиту на примере вот этой шняги: https://www.codeproject.com/Articles/134010/An-UMDF-Driver-for-a-Virtual-Smar....

Под линуксом - ifd-совместимый «драйвер» (на самом деле - плагин) для OpenCT, и соответственно - OpenSC и pcsc-lite. Какой там будет реальный канал для соединения - в принципе, пофиг. UART вполне себе нормально работает (уже проверял).

Так что мне в плане связи контроллера с компом подойдёт абсолютно что угодно. Сейчас отлаживаю на uart'е атмеги 328p через USB-UART конвертер.

Вот и охота тебе с таким связываться

Я уже много лет этим занимаюсь. И работаю как с ардуиной, так и с нативными инструментами под нужные мне контроллеры. И я вот в упор не понимаю, нахрена мне для устройства которое будет, условно, контролировать полив домашних цветочков юзать что-то сложнее Ардуины.

В конце-концов, C\С++ он и в африке C\C++. Код я всё-равно разделяю на универсальный и ардуино-зависимый. Захочу - перенесу на нужный мне инструмент.

Если используешь бутлоадер - делаешь функции доступа к флешу глобальными, выдергиваешь из map адреса и вызываешь по указателю. Problem solved.

И работает только а AVR'е. Я же хочу что-нибудь более универсальное. Тем более что пока ещё и контроллер на котором всё будет крутиться толком не выбрал.

DawnCaster ()
Последнее исправление: DawnCaster (всего исправлений: 1)
Ответ на: комментарий от DawnCaster

И я вот в упор не понимаю, нахрена мне для устройства которое будет, условно, контролировать полив домашних цветочков юзать что-то сложнее Ардуины.

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

В конце-концов, C\С++ он и в африке C\C++. Код я всё-равно разделяю на универсальный и ардуино-зависимый. Захочу - перенесу на нужный мне инструмент.

Вот с этим категорически согласен.

И работает только а AVR'е. Я же хочу что-нибудь более универсальное. Тем более что пока ещё и контроллер на котором всё будет крутиться толком не выбрал.

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

ncrmnt ★★★★★ ()
Ответ на: комментарий от DawnCaster

А на ESP (и других) контроллерах эта ваша голая AVR libc тоже работает ?

На ESP и других архитектура другая.

А вот ардуина работает (или по крайней мере должна), и если проекты грамотно писать - то и код менять не нужно.

Вообще-то нужно. Да и на C можно писать так, чтобы не пришлось много переписывать.

У ардуины другое предназначение, ИМХО.

У ардуины предназначение одно единственное: заполнить рынок труда тупыми хипстерами и обезьянокодерами, так как требуется продвигать манагерский бред под названием Internet of Things. Это ж каким наркоманом надо быть чтобы придумать IoT...

Quasar ★★★★★ ()
Ответ на: комментарий от DawnCaster

И работает только а AVR'е. Я же хочу что-нибудь более универсальное.

Тогда делай абстракцию и в отдельном файлике напиши код соответствующих функций, а потом переноси на те или иные платы. Вот и универсальность, которая реально сэкономит время. Захочется совсем много памяти - хоть по SPI подключишь microSD. Ардуина разве что для одноразовых нужд сгодиться может, а не для серьёзных проектов.

Quasar ★★★★★ ()

А в чём вообще фича этих аппаратных генераторов одноразовых паролей? А то лично мне поднадоело каждый раз вводить.

По теме: а может вам попробовать получить лицензию на ввоз средств шифрования для внутреннего пользователя? Раньше даже фиктивное ИП для этого открывали, чтобы покупать для личных нужд.

te111011010 ()
Ответ на: комментарий от te111011010

А в чём вообще фича этих аппаратных генераторов одноразовых паролей?

Из него закрытый ключ не вытащишь, только новый записать можно. Хороший второй фактор для аутентификации.

tiandrey ★★★★★ ()
Закрыто добавление комментариев для недавно зарегистрированных пользователей (со score < 50)