Апаратний менеджер паролів або як перестати вводити паролі і почати жити

Апаратний менеджер паролів або як перестати вводити паролі і почати жити +53

  • 10.02.16 10:52 •
  • dmitry502 •
  • # 276967 •
  • Хабрахабр •
  • З пісочниці •
  • 143 •
  • 45900

- такий же як Forbes, тільки краще.

Мене звуть% username%, мені n років і я параноїк. І кожен день інформаційний світ ускладнює мені життя. Технологій стає більше, поріг входження в IT знижується, і ми отримуємо дійсність, де грубі помилки в безпеці це нормально. А ще і потужність обчислювальної техніки зростає з кожним роком. У підсумку наші паролі, збережені як вийде, стають надбанням громадськості.

Безпека не мертвий, але Інкапсульована і агонізує. І з кожним роком стукіт по кришці чорного ящика все тихіше, а здавлені крики і зовсім більше не чути. Аж надто багато абстракцій поверх.

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

Тому ми придумали свій хакерський підхід до зберігання та введення паролів.

Апаратний менеджер паролів або як перестати вводити паролі і почати жити

PSD НЕ є заміною криптографічним токені. Це абсолютно різні області. Тут йдеться тільки про символьних паролі, які будуть вводитися автоматично через емуляцію клавіатури.

Яку проблему я вирішую


Символьні паролі є спадщиною, яке буде використовуватися великою кількістю сервісів досить тривалий час. Я не буду зараз навіть починати про те, що далеко не всі люді_которие_программіруют використовують правильні техніки зберігання паролів на сервері.

Приклад більш безпечного способу зберігання пароля


Здебільшого я вирішую проблему зручності введення пароля. І це важливіше, ніж здається.

Користувачів ICloud легко обчислити по їх паролів, так як вони часто мають великої першу або останню букву. Часто використовуються ім'я і дата народження / вік

Як проблему вирішували до мене


Деякі менеджери паролів дозволяють заповнювати деякі поля автоматично. Але жоден програмний менеджер не буде працювати без завантаженої, що дозволяє виконувати чужі Бінар, операційної системи. Мало того, неможливо зібрати код менеджера під всі існуючі ОС. Що призводить до проблеми неможливості автоматизованого введення паролів у великій кількості юзкейсов.

Ось деякі з них:

PSD з точки зору користувача

трохи докладніше


Система складається з трьох пристроїв.

Домашнього комп'ютера (MAIN_PC) з програмою на ньому:

Апаратний менеджер паролів або як перестати вводити паролі і почати жити

Апаратний менеджер паролів або як перестати вводити паролі і почати жити

Спеціального девайса (PSD):

Апаратний менеджер паролів або як перестати вводити паролі і почати жити

PSD розшифровується як Paranoia Satisfaction Device

Як внести паролі в систему:

Як цим всім користуватися:

PSD з точки зору безпеки


А тепер дійсно цікава частина. Треба зробити це все безпечним. Звичайно, не можна зробити невзламиваемую систему, але можна максимально скоротити кількість векторів атак, ніж ми і займемося.

Цілі, які я ставлю для системи:


Почнемо з бази на комп'ютері. Це перше що створює користувач і в ній все банально. Це всього-лише зашифровані JSON. Шифрування - AES256 / CBC / PKCS7Padding. Незабаром плануємо перейти на формат KeePass.

Не варто забувати, що з будь-якого пристрою можна вважати пам'ять. Тому зберігати паролі у відкритому вигляді на PSD можна ні в якому разі. Але і шифрування слабо допоможе, так як тоді пароль буде зберігатися в тій же пам'яті. Тому було вибрано рішення не зберігати повноцінні паролі взагалі (крім запасний бази на MAIN_PC).

Алгоритм зберігання паролів дуже простий:

  1. Записуємо в password_part_1 128 рандомних байт
  2. Робимо XOR пароля користувача з password_part_1 і отримуємо password_part_2

В результаті отримаємо для кожного пароля по 2 частини (password_part_1, password_part_2), XOR яких дасть нам вихідний пароль (з паддінгом з \ 0 в кінці). Так як паролів у нас багато, то password це масив. Відповідно, ми будемо мати по масиву частин паролів на кожному пристрої.
password_part_1 [i]. password_part_2 [i] == password [i]

Апаратний менеджер паролів або як перестати вводити паролі і почати жити

шифрування трафіку


Але що якщо хакер вирішить перехопити трафік і вкрасти PSD. Він все ще зможе прочитати пам'ять з EEPROM і отримати паролі, частини яких він дістав з трафіку. Значить трафік треба шифрувати (не особливо оригінально, так).

Трафік треба зашифрувати так, щоб при втраті PSD можна було розшифрувати пакети. Проблема в тому, що хакер знає все, що знає PSD. Якщо PSD вміє розшифровувати трафік за рахунок інформації на ньому, то і хакер зможе розшифрувати трафік. Ми будемо використовувати одноразові ключі, які оновлюються з кожним новим пакетом. PSD матиме ключ тільки для наступного пакета, але не для отриманого раніше. Спочатку однакові ключі задаються комп'ютером (MAIN_PC) при записи баз.

BtKey і HBtKey - ключі для шифрування і перевірки цілісності пакету. Вони обидва змінюються з кожним повідомленням. Для перевірки цілісності застосовується HMAC на основі SHA256. Ключем для нього є HBtKey [i]. Для шифрування самого пакету застосовується AES256 / CBC / PKCS7Padding. У пакеті передається password_part_1 і PassId. Так само в пакеті є і ключі для дешифрування наступного пакета (HBtKey [i + 1], BtKey [i + 1]).

Апаратний менеджер паролів або як перестати вводити паролі і почати жити

Апаратний менеджер паролів або як перестати вводити паролі і почати жити

Апаратний менеджер паролів або як перестати вводити паролі і почати жити

Більше списків богу списків:

висновок


Вийшла досить зручна, цікава і безпечна штука.

А девайс буде мати можливість запуску кастомних прошивок, щоб реалізовувати будь-який функціонал, який буде потрібно (наприклад, bluetooth usb-клавіатура). І там є теж декілька цікавих речей в підходах до дотримання безпеки.

Зараз у нас є робочий прототип пристрою, прошивки на пристрій, програма на Android і дві програми (gui і консольна) на комп'ютер.

Програми для комп'ютера написані на .net і добре працює під mono. Але під Linux системами бібліотека, яку я використовую для зв'язку з PSD, не бачить девайсів, але я планую це виправити.

У планах у нас таке:

Пошук вразливостей


До речі, в описаному протоколі є таки логічна вразливість. Її неможливо експлуатувати віддалено (простіше поставити кейлоггер) і вона виправляється без милиць. Ви можете спробувати свої сили в пошуку цієї уразливості (вразливість логічна, а не на рівні коду) і першій людині, яка її знайде, ми обіцяємо подарувати готовий девайс (в разі якщо ми почнемо масове виробництво).

Природно, в разі релізу, ця вразливість буде закрита.

Хеш відповіді: 28dbc42aa86100dc5e325c4bea80c67c980cfd26

Тільки зареєстровані користувачі можуть брати участь в опитуванні. Увійдіть. будь ласка.