Библиотека шифрования для Arduino

9

Я использую Arduino, чтобы прочитать клавиатуру и открыть электрический удар при вводе PIN-кода клавиатуры. Для этого эскиза я хотел использовать какое-то легкое шифрование для хранения ПИН-кодов в EEProm. Кто-нибудь знает о такой библиотеке? Я слышал, что это возможно, используя TwoFish.

mad_z
источник

Ответы:

12

Вы не хотите шифровать пароли (PIN-коды) - вы хотите их хешировать . Когда кто-то вводит пароль, вы его хешируете и сравниваете хеш с сохраненным хешем. Преимущество этого метода (использовавшегося более 30 лет) состоит в том, что даже если кто-то овладеет источником и хешами, он все равно не сможет определить, какие ПИН-коды соответствуют хешам, если вы выберете достаточно сильную хеш-функцию .

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

Вы должны проверить AVR Crypto Library , которая лицензирована с GPLv3. Также есть реализация Skein для AVR .

Крейг Трейдер
источник
1
Upvoted - хороший ресурс, и его следует установить как ответ на вопрос.
Лу
9

Эта ссылка, размещенная Христосом, хотя и может быть полезной, безусловно, не считается «шифрованием». Это действительно только "запутывание".

Правильная криптография, как известно, легко ошибиться даже для тех, кто знает математику.

В ответ на исходное сообщение - какие методы атаки позволили бы кому-либо получить доступ к ПИН-кодам в EEProm? Конечно , если у них есть , что далеко в вашу электронику они просто могут «чик красный провод» и открыть дверь?

Если вы каким - то образом сделать есть система , в которой злоумышленники могли заполучить содержимое ЭСППЗУ без уже имеющих достаточный уровень доступа , чтобы открыть дверь, вы , вероятно , хотите , чтобы перепроектировать его. Вы можете взглянуть на однонаправленные хеш-функции, подобные хешированию паролей Unix - таким образом, EEProm не должен содержать ключ дешифрования - проблема в том, что пространство для поиска ПИН-кодов очень мало - если я могу загрузить хешированную версию ПИН-код, я могу довольно быстро попробовать все 10000 возможных ПИН-кодов, я подозреваю, что любой современный ноутбук запустит их все в течение нескольких секунд.

bigiain
источник
Я согласен (и согласен выше), что однонаправленный хэш был бы полезен, и если вы программируете систему, вы можете делать пин-код столько раз, сколько хотите, например, 8 цифр дают 100 000 000 комбинаций, что должно занять гораздо больше времени.
Амос
1

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

амосс
источник
1

Как вы планируете декодировать зашифрованные PIN-коды, чтобы проверить, ввел ли пользователь действительный PIN-код? Вам нужно будет сохранить ключ дешифрования ... в этот момент, если злоумышленник может прочитать ваш eeprom, он также может прочитать вашу флэш-память, чтобы найти ключ шифрования. По сути, все ваше шифрование совершенно бесполезно. Также, как говорили другие люди, если он уже умеет читать ваш чип, он может просто написать новую программу. Гораздо проще просто открыть дверь, я сомневаюсь, что кто-нибудь когда-нибудь попытается взломать ваш чип.

Davr
источник
1

Вот метод простой записи в C, который можно легко перенести на Arduino. Это кажется самым простым способом шифрования данных с ограниченными ресурсами Arduino.

-EDIT- Чтобы сохранить ключ от вашей программы, вы можете сделать половину PIN-кода ключа. Это означает, что ваша программа берет половину ключевого ПИН-кода для расшифровки зашифрованного 1/2 ПИН-кода, хранящегося в EEProm. Если дешифрованный ключ от EEProm совпадает с той частью булавки, которая не является ключом, дверь откроется. Это будет работать только в ситуации, когда злоумышленники не смогут сломать дверь или перепрограммировать Arduino.

Hristos
источник
Но если у них нет доступа к вашему чипу, вам не нужно шифровать пин-код.
Амос
1

Я ненавижу не отвечать на вопрос, задавая другой, но ...

Есть ли какая-то причина, по которой ваше устройство не защищено от взлома? Я видел кнопочные переключатели в отверстиях для винтов, реализованные «на стенде», чтобы определить вид взлома, который вас беспокоит. Затем ... вот идет ребенок с бутановой микрошаткой, которой удается достать ваш чип, не отвинчивая ничего (или не повредив чип) ... каким-то образом он знал проект вашей системы защиты от несанкционированного доступа, которая (также, мы надеемся) включает обнаружение изменений в окружающий свет и / или звук. Когда крышка снимается, оба становятся совершенно разными .. днем ​​или ночью.

Если это так, то это должна быть система, состоящая из двух частей, где открытые части взаимодействуют с чем-то, где шифрование легче реализовать. Плюс, контрольные суммы (справка) учитывают ребенка с факелом.

Я думаю, что вы просите отвертку быть молотком.

Тим Пост
источник
1

Эти комментарии действительно точные. Нет ничего плохого в попытке экспериментировать, чтобы узнать о шифровании, но это не очень хороший проект для изучения таких вещей. Вы действительно хотите хороший учебник и компьютер, и, как говорит @bigiain, математика, как известно, легко ошибиться.

Для лучшего понимания того, как работает криптография и с чем вы столкнетесь, Руководство по прикладной криптографии превосходен и бесплатен:

Если вы просто хотите защитить свой проект, это неэффективный способ сделать это. Если вы заинтересованы в криптографии, начните с этой книги и компьютера.

Лу
источник
Я понимаю криптографию, читаю Брюса Шнайера и программирую уже более двадцати лет. Я понимаю, что настоящая угроза - это просто сломать дверь и пройти мимо любого контроллера Arduino. Я просто не могу с чистой совестью установить его с открытым текстом PIN-кода в EEProm, если этого можно избежать. Fly
Существует любое количество простых методов обфускации, которые были бы столь же эффективны в этой роли, если вы хотите избежать хранения незашифрованных ПИН-кодов. Ответчики выше только пытались помочь вам понять, что криптография делает и не делает. Вот библиотека AES: hoozi.com/Articles/AESEncryption.htm Я также хотел бы сказать, что если вы программировали 20 лет, это не значит, что вы «понимаете» криптографию. Это совершенно другое поле. 20-летний автомеханик - опытный человек, но я бы не ожидал, что он спроектирует CAN-шину с нуля. Проверьте свое отношение, пожалуйста.
Лу
О боже ... 20 лет кодирования, и вы думаете, что можно шифровать данные во время выполнения ????? Уволиться.
MickLH