PocketOTP
https://hubzil.la/photo/4917969021679a625ed7528632709313-1.jpeg
Давно возникла идея создать собственный OTP-аутентификатор на базе микросхемы и на новогодних появилось немного времени всё это поковырять
Изначально хотелось сделать полностью автономное устройство для генерации TOTP (HOTP, MOTP) кодов. Затем пришла мысль добавить возможность принимать SMS с кодами — это сделало бы устройство еще более универсальным.
В текущей версии PocketOTP (v0.1) реализована только генерация TOTP-кодов. Пока нет поддержки приема SMS и удобной синхронизации времени.
Вдохновением для дизайна интерфейса послужил andOTP, а его формат бэкапа был взят за основу хранения OTP кодов
1. Центральная плата
NodeMCU (ESP8266) - плата, которая мне нравится, то как она работает
Не устраивает, то что в ней есть WiFi (а так хочется автономности и экономить питание) и размер
С размером можно побадаться и заменить на Wemos D1 mini или ещё лучше ESP32 C3 supermini, но всё тот же WiFi несколько продолжает мешать, хоть он и выключен
2. Дисплей (+кнопки)
OLED дисплей SSD1315
Чисто случайно нашёл на Aliexpress: sl.aliexpress.ru/p?key=IGcTGqk
Тут сразу и экранчик и кнопки, всё нажимается, работает
Немного удручает, что нет версии где пины не припаяны (китайцы ответили, что мол отпаивай сам)
3. Часы реального времени (RTC)
Изначально пробовал с SD1302, это в принципе единственные RTC которые у меня лежали в коробке, поэтому первые заходы были сделаны с ними
Потом прочитал, что они могут отставать и заменил на PCF8563
С ними всё работает стабильно несколько дней, но через некоторое время они теряют время и смысл PocketOTP теряется
Обычно помогает замена батареи, но не должно быть такого, что подобная железка работает несколько дней и необходимо менять батарейку (может конечно батарейки такие) + переписал код, чтобы не так часто опрашивался RTC, возможно поможет
4. Питание
Модуль заряда аккумулятора + повышающий DC-DC преобразователь - J5019 (sl.aliexpress.ru/p?key=q1cTGJG)
И так же порт USB Type-C, чтобы было удобно заряжать (sl.aliexpress.ru/p?key=fNcTGYj)
Аккумулятор - 602530 3.7v 400mAh, выбирал, чтобы была компактная, ёмкая и с защитой
Так же ещё обычный включатель ВКЛ/ВЫКЛ
5. Распределительная коробка 😁
https://hubzil.la/photo/1268768867679a62c64680b766274111-1.jpeg
https://hubzil.la/photo/9519147856679a629e79bc3551565275-1.jpeg
PocketOTP
https://hubzil.la/photo/4917969021679a625ed7528632709313-1.jpeg
Давно возникла идея создать собственный OTP-аутентификатор на базе микросхемы и на новогодних появилось немного времени всё это поковырять
Изначально хотелось сделать полностью автономное устройство для генерации TOTP (HOTP, MOTP) кодов. Затем пришла мысль добавить возможность принимать SMS с кодами — это сделало бы устройство еще более универсальным.
Есть всего 4 кнопки - вверх, вниз, ОК, С (отмена)
https://hubzil.la/photo/2089393154679a63fd221be121261887-1.jpeg
Сразу после загрузки необходимо ввести ПИН-код
Немного сделал заклад на будущее в плане секурности - при вводе новая цифра пин-кода отображается в случайно порядке
То есть если показывается 0, то следующая цифра при выборе не факт, что будет 1, может быть любая, кроме 0
Это позволяет исключить возможность по количеству кликов узнать ПИН-кодов
Сразу попадаем на главный экран выбора сервисов, где кнопками вверх-вниз можно найти необходимый и получить одноразовый код
https://hubzil.la/photo/4691595424679a63ef80b37941173919-1.jpeg
Если нажать
С
, то попадём в меню, в котором можно вернуться обратно к ОТР, либо посмотреть отладочную информацию в Debughttps://hubzil.la/photo/9467520578679a648037a4a451986920-1.jpeg
Как оно должно работать1. На фото видно, есть модуль PN532, который отвечает за взаимодействие по NFC с модулем
Это нужно для того, чтобы
- Синхронизировать время, в случае, если оно сильно отстало (синхронизировать с Android телефона)
- Добавлять новые OTP секреты
После включения NFC случается сущий кошмар и экран начинает постоянно обновляться
Есть ощущение, что такое происходит из-за того, что я всё сажаю на i2c шину
2. Так же планировался модуль SIM800L для работы с GSM, который умеет
- Принимать СМС
Мне так и не удалось заставить полноценно работать модуль SIM800L - время от времени он вместо текста выдаёт какие-то лютые кракозябры
SIM800L существует в двух исполнениях - синем и красном. Пока пробовал только синее, но своего часа ждёт красный
- Так же по запросу, уметь синхронизировать время по GSM, но SIM800L упорно не хотел получать время, поэтому отложил это дело до следующей версии
Вместо тысячи словВидео работы: video.vide.li/w/7nbWfwGWapEs1Y…
Есть всего 4 кнопки - вверх, вниз, ОК, С (отмена)
https://hubzil.la/photo/2089393154679a63fd221be121261887-1.jpeg
Сразу после загрузки необходимо ввести ПИН-код
Немного сделал заклад на будущее в плане секурности - при вводе новая цифра пин-кода отображается в случайно порядке
То есть если показывается 0, то следующая цифра при выборе не факт, что будет 1, может быть любая, кроме 0
Это позволяет исключить возможность по количеству кликов узнать ПИН-кодов
- При заливе прошивки через Arduino IDE берётся текущее время
Я живу в UTC+3, поэтому в коде приходится это учитывать и вычитать каждый раз 10800 (3600 * 3). Не совсем понимаю, как автоматизировать этот процесс и вообще возможно ли это
- Как заставить работать во всей этой схеме PN532?
- Какие существуют платы, без WiFi? Есть Arduino Nano например - весьма компактна, но я никогда не работал с STM и совсем не знаю, насколько отличается от ESP
- Какие существуют модули заряда с возможностью управления? Вся идея в том, чтобы иметь не тумблер, а кнопку, при нажатии на которую PocketOTP будет включаться и по истечении 1 минуты бездействия выключаться (то есть необходима возможность гасить устройство программно)
- Как это всё добро можно оформить на одной плате?
- Какой 3D принтер выбрать для печати корпуса?
- Нужен ли минималистичный режим?
То есть когда выводится 2 столбца - Сервис и код
- При заливе прошивки через Arduino IDE берётся текущее время
Я живу в UTC+3, поэтому в коде приходится это учитывать и вычитать каждый раз 10800 (3600 * 3). Не совсем понимаю, как автоматизировать этот процесс и вообще возможно ли это
- Как заставить работать во всей этой схеме PN532?
- Какие существуют платы, без WiFi? Есть...
Что по планамИсходники проекта: codeberg.org/esin/pocketotp / github.com/esin/pocketotp
Пост будет добавляться комментариями и крайне приветствуется фидбэк и пулл-реквесты в репу
- Переехать на esp32-c3 mini
Она намного меньше размером, есть аппаратный генератор случайных чисел (?)
- Отказаться от PCF8563 и переехать на DS3231M (SN)
- Запилить корпус
- Убрать тумблер и переехать на кнопку включения