Дане пристрій, виконаний у вигляді USB флешки, призначене для генерування і введення символьного пароля в персональний комп’ютер при підключенні його в роз’єм USB. Іншими словами, це свого роду електронний ключ, при підключенні якого в роз’єм USB персонального комп’ютера, наприклад при вході в Windows, автоматично вводиться збережений пароль. Пристрій за командою користувача може згенерувати довільний пароль і зберегти його в незалежній пам’яті.

Пристрій дуже простий і виконано на мікроконтролері Atmel AVR ATtiny85, який, за допомогою програмного коду, емулює USB HID клавіатуру. Згенерований самим мікро і збережений у EEPROM мікроконтролера пароль передається при підключенні пристрою в USB роз’єм. Новий пароль генерується після 4-х кратного натискання на кнопку Caps Lock на штатній клавіатурі: 4 натискання для запуску режиму генерації і потім, одне натискання клавіші Caps Lock для генерування кожного символу пароля (довжина пароля за замовчуванням 10 символів).

Крім мікроконтролера в схемі використовується кілька пасивних компонентів, які обов’язкові при реалізації USB комунікації на мікроконтролері.

Корпус пристрою запозичений від несправного флеш-накопичувача ємністю 512 Мбайт. Конектор USB був узятий від звичайного USB кабелю, він і інші компоненти монтуються на макетну плату відповідного розміру.

Програма мікроконтролера

Програмне забезпечення для мікроконтролера написано з використанням бібліотеки V-USB для AVR мікроконтролерів.

Пристрій визначається комп’ютером як USB HID клавіатура. Для забезпечення комунікації з пристроєм воно виконано у вигляді Boot-сумісної клавіатури, яка може отримувати статус світлодіодів (зокрема, для нашого випадку Caps Lock) змінюваного комп’ютером. Опис HID запозичене з проекту картки USB Business card (Frank Zhao). Також завдяки цьому проекту був вивчений і застосований код для відправки статусу світлодіодів в USB HID пристрій (коротко, комп’ютер посилає 1 байтное повідомлення – бітову маску стану світлодіодів).

Основні параметри, що визначають функціонування пристрою, які ви знайдете в тексті вихідного коду програми мікроконтролера (файл usbsconfig.h і HID-дискриптор):

  • PASS_LENGTH – Довжина генерованого пароля, визначається на початку програми;
  • SEND_ENTER – Значення може бути 1 або 0, визначає чи буде відправлена ​​нашим пристроєм команда Enter після введення збереженого паролю;
  • measuring_message і finish_message – Містять повідомлення, які будуть відображатися при генерації / збереженні нового пароля;
  • buildReport() – Функція, що викликається в основному циклі програми, для відправки символів пароля на ПК один за одним – функція перетворює символи в буфері messageBuffer в USB команди «на льоту»;
  • usbFunctionWrite() – Функція здійснює прийом байта стану світлодіодів від ПК, вона викликає функцію caps_toggle() щоразу при зміні статусу світлодіода;
  • generate_character() – Функція використовуєтьсядля генерування довільного символу, і на даний момент використовуються букви, дефіс і символ підкреслення;
  • caps_toggle() – Функція веде підрахунок натискань кнопки Caps Lock (щодо зміни стану світлодіода Caps Lock) і здійснює генерацію / збереження пароля.

У розділі завантажень для користувачів доступний початковий код з докладними коментарями, принципова схема і make-файл для компіляції. Слід враховувати, що необхідно провести настроювання Fuse-бітів мікроконтролера: CKSEL = 0001, SUT = 10 (молодший байт E1) і встановити BOD на рівень 2.7 В (старший байт DD).

Робота з генератором пароля наочно продемонстрована на відео:

Завантаження

Вихідні коди, схема, make-файл – скачати

codeandlife.com

РадіоЛоцман