Оглавление:

Генератор TOTP Arduino: 3 шага
Генератор TOTP Arduino: 3 шага

Видео: Генератор TOTP Arduino: 3 шага

Видео: Генератор TOTP Arduino: 3 шага
Видео: Вебинар «Железная» аутентификация с помощью Рутокен U2F и OTP» 2024, Июль
Anonim
Генератор TOTP Arduino
Генератор TOTP Arduino
Генератор TOTP Arduino
Генератор TOTP Arduino
Генератор TOTP Arduino
Генератор TOTP Arduino

Вдохновение

Имея друга, интересующегося криптографией и безопасностью, я хотел сделать идеальный подарок на день рождения.

* Это проект, который я сделал в качестве подарка на день рождения и был создан в сжатые сроки (простите за грязную работу)

ПРИМЕЧАНИЕ: Генерация TOTP, которая используется в этом проекте, генерирует и использует 6-значные коды, но из-за моего текущего оборудования я решил сократить последние 2 цифры и отобразить и использовать 4, возможно (но не сильно) уменьшив безопасность.

Общая информация

Этот проект генерирует новый код каждые 30 секунд с использованием предварительно предоставленного ключа и текущего времени (которое отслеживается с помощью модуля часов реального времени) и отображает его на дисплее при нажатии кнопки. Наиболее распространенным вариантом использования будет двухфакторная проверка на основе одноразового пароля на основе времени (TOTP) и одноразового пароля на основе HMAC (HOTP) для аутентификации.

TOTP - это алгоритм, который вычисляет одноразовый пароль из общего секретного ключа и текущего времени. HTOP - это алгоритм, который использует алгоритм HMAC для генерации одноразового пароля.

Такие компании, как Google, Microsoft и Steam, уже используют технологию TOTP для своей двухфакторной аутентификации.

Интересные ссылки

Статья, объясняющая, как Google использует эту технологию для аутентификации пользователей -

Реализация HOTP и TOTP на JavaScript, которая может использоваться при создании программного обеспечения с использованием этого проекта -

Криптографическая библиотека для Arduino, используемая в этом проекте -

Документ TOTP -

Уровень экспертизы

Эта инструкция предназначена для энтузиастов, которые заинтересованы в безопасности и могут захотеть реализовать хороший аппаратный компонент для поколения своих TOTP. Это руководство написано для аудитории, которая уже понимает основы интерпретации электронных схем и элементарного программирования, но если вы планируете просто точно следовать этому руководству, не волнуйтесь, если у вас нет опыта, и не стесняйтесь задавать вопросы в Комментарии! Кроме того, проект может быть интересен и более опытным разработчикам, поскольку конечный продукт - это не только приятный предмет (на мой взгляд), но и большой потенциал для расширения и добавления новых функций без особых хлопот.

Запасы

Материалы:

  1. 1x Arduino Nano (Amazon)
  2. 1x модуль часов реального времени (RTC) DS3231 AT24C32 (Amazon)
  3. 1x SH5461AS с общим катодом, 4 цифры, 7 сегментов (Amazon)
  4. 1x кнопка (Amazon)
  5. 1x резистор 10 кОм (Amazon)
  6. ДОПОЛНИТЕЛЬНО 1x 5x7 см PCB (Amazon)
  7. ДОПОЛНИТЕЛЬНО Провод для пайки на печатную плату
  8. ДОПОЛНИТЕЛЬНО 1x макет для тестирования (Amazon)

Шаг 1. Сборка и тестирование

Сборка и тестирование
Сборка и тестирование
Сборка и тестирование
Сборка и тестирование
Сборка и тестирование
Сборка и тестирование

Соберите все компоненты на макетной плате и подключите их согласно прилагаемой электрической схеме (файл Fritzing находится здесь).

Убедитесь, что у вас установлена IDE Arduino (если ее нет, ее можно найти в Интернете), и установите следующие библиотеки:

github.com/lucadentella/TOTP-Arduino

github.com/adafruit/RTClib

github.com/maniacbug/Cryptosuite

Загрузите прикрепленный эскиз (его также можно найти здесь: https://gist.github.com/shiv213/569f01a54988cb0207966be9a65cc5ab) и откройте его с помощью Arduino IDE. Откройте эту ссылку (https://www.lucadentella.it/OTP/) и введите любое имя в поле имени учетной записи и пользовательский секретный ключ (длиной 10 символов) в следующее поле, не забудьте сохранить оба этих значения. в надежном месте для резервного копирования. Скопируйте содержимое поля «Arduino HEX array:» и переключитесь обратно в редактор Arduino, заменив массив в строке 25 (hmacKey) на тот, который вы скопировали с сайта.

После двойной проверки каждого проводного соединения убедитесь, что в модуле RTC есть монетная ячейка, подключите Arduino к ноутбуку с помощью мини-кабеля USB и загрузите прикрепленный эскиз.

После загрузки при нажатии кнопки на экране должно появиться число. Если вы загрузите приложение Google Authenticator на смартфон и вернетесь на сайт, который использовался для создания массива HEX, отсканировав QR-код или введя «код Google Authenticator» в приложение, вы должны увидеть номер, указанный в приложении. Если все работает правильно, при нажатии кнопки отображаемые 4 цифры должны соответствовать первым 4 из текущего кода, отображаемого в приложении для смартфона. Если это не так, убедитесь, что на компьютере, который используется для загрузки кода Arduino, установлено время UTC, и повторите попытку.

Шаг 2: переход на печатную плату

Перенос на печатную плату
Перенос на печатную плату
Перенос на печатную плату
Перенос на печатную плату

Убедившись, что все в рабочем состоянии, вы можете перенести компоненты на печатную плату и спаять все вместе, как вам кажется. Я приложил схему печатной платы в дополнение к файлу Fritzing (доступному здесь). Обратите внимание, что я разместил все компоненты наверху платы для эстетики, но их также можно установить под ней, а затем заключить в какой-то корпус, чтобы сделать его более чистым. Я вырезал и приклеил горячим клеем палочки для мороженого, окрашенные Sharpie, по бокам печатной платы, чтобы создать импровизированную коробку для устройства. Еще один необязательный шаг - прикрепить 9-вольтовый зажим аккумулятора к контактам VIN и GND Arduino, чтобы он работал от батареи.

Шаг 3: Готово

Законченный!
Законченный!
Законченный!
Законченный!
Законченный!
Законченный!

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

Не забудьте проголосовать за мою Инструкцию для конкурса STEM, если считаете нужным, и оставьте комментарий / любые вопросы, которые могут у вас возникнуть ниже!

Рекомендуемые: