Страница 1 из 2
Автоматическая генерация пароля на стадии прошивки
Добавлено: Пн сен 02, 2013 12:34:36
eess9
Привет всем!
Вопрос собственно в теме: как считать signature в коде программы? Надо сделать доступ к устройству запаролленым. А что лучше всего подойдет для пароля чем сигнатура при условии, что у каждого контроллера пароль должен быть свой. Нашел библиотечку avr/signature.h, но как при ее помощи выудить эту информацию не знаю. Это возможно? Как сделать?
Re: как считать signature в коде программы
Добавлено: Пн сен 02, 2013 12:45:19
Flasher
http://www.nongnu.org/avr-libc/user-man ... ature.html
там написано, что библиотека просто добавляет байты сигнатуры. Сигнатура читается только программатором. Да и она абсолютно одинакова для одного типа микроконтроллера. Поэтому нужно просто присваивать серийники процессорам в коде
Re: как считать signature в коде программы
Добавлено: Пн сен 02, 2013 13:15:23
eess9
Какие есть мысли для генерации ключей автоматически? Не хочется руками прописывать для каждого кристалла.
Re: как считать signature в коде программы
Добавлено: Пн сен 02, 2013 13:32:25
ibiza11
а в какой момент нужно генерировать? на момент заливки прошивки на заводе или в момент первого включения?
Re: как считать signature в коде программы
Добавлено: Пн сен 02, 2013 13:53:53
Flasher
Для этого нужно знать объемы производства, его этапы. Ответы будут разными.
Re: как считать signature в коде программы
Добавлено: Пн сен 02, 2013 14:15:34
eess9
на заводе

это пока громко сказано. прошивается ручками, но партиями по 100-200 штук. Пароль, пользователь получает вместо с устройством (к примеру, наклеен на коробке, но пользователь может легко отодрать эту надпись).
Хотя идея генерации пароля при первом включении тоже ничего, но все равно первое включение, для проверки, я делаю. При первом включении можно использовать, к примеру, функцию rand().
Re: как считать signature в коде программы
Добавлено: Пн сен 02, 2013 14:18:16
Alexeyslav
Заведи это как отдельный инклуд, в нем используя препроцессорные IF-ы объявляй константу с паролем в завсимости от выбранного для проекта микроконтроллера.
Используй этот инклудник во всех проектах, и не надо будет беспокоится о паролях.
При первом включении можно использовать, к примеру, функцию rand().
Нет, нельзя. Она будет строго детерминирована. в крааайнем случае, нужно брать в качестве инициализации случайного числа контрольную сумму всего содержимого памяти программ. Но по правилам нужен источник случайностей - например длительность нажатия на кнопку включения пользователем.
Re: как считать signature в коде программы
Добавлено: Пн сен 02, 2013 14:36:14
Vov123
А как это будет выглядеть?
Пользователь включает девайс и вводит пароль указанный на упаковке?
Re: как считать signature в коде программы
Добавлено: Пн сен 02, 2013 14:56:52
eess9
Alexeyslav писал(а):При первом включении можно использовать, к примеру, функцию rand().
Нет, нельзя. Она будет строго детерминирована.
Согласен. Тупонул.
Если коротко. Есть пульты, на которых видно все доступные устройства (беспроводная связь). Эти хреновины сдаются в аренду. Поскольку дело в пределах одного здания, то человек не должен иметь возможность управлять устройством соседа, которое он видит. Ему дают пульт, устройство и говорят его имя и пароль. Пытаясь подключиться он его вводит, а дальше работает.
Re: как считать signature в коде программы
Добавлено: Пн сен 02, 2013 15:18:39
ibiza11
в некоторых программаторах (программа для ПК), например asisp_programmer есть возможность записывать по определенному адресу во флеш номер устройства одновременно с заливкой основной прошивки, причем этот номер автоинкрементируется при каждой последующей заливке.
это можно использовать.
например если пароль будет вычисляться внутри МК по какой-то формуле с использованием этого номера. для того чтобы выдать пароль пользователю нужно считать этот номер из прошивки и вычислить по известной только вам формуле пароль.
при введении пароля со стороны пользователя, микроконтроллер тоже вычисляет этот пароль и сверяет то, что он получил с тем, что пользователь ввел.
все вышесказанное как простой вариант.
также можно сделать свою программу прошивальщик (или надстройку над AVR dude) которая будет сразу сама генерировать этот пароль во время прошивки и,например, одновременно выдавать на печать, чтобы стикер приклеить)
Re: как считать signature в коде программы
Добавлено: Пн сен 02, 2013 15:37:32
eess9
Мысль пришла. Пароль - это 2-х байтное число в контроллере.
Пользователь получает пароль из 6 цифр. Например, 123235.
Пульт это соберет в 123 и 235. Пользователь может подбирать пароль очень долго, комбинаций валом, а он то реально короткий.
Вряд ли догадаются, что больше 255 быть не может. А если поменять первую и вторую цифры местами? 525. Хрен вообще разберешь

Re: как считать signature в коде программы
Добавлено: Пн сен 02, 2013 21:01:05
Alexeyslav
Пароль записывать в EEPROM, его можно прошивать отдельным от прошивки файлом - а значить их можно сгенерировать индивидуально - хоть блокнотом или программой на бейсике/паскале/делфи.
Можно как сделать: Каждую итерацию программой перед прошивкой генерируется EEPROM-файл для прошивки с очередной строкой из текстового файла, программатор всегда прошивает один и тот же файл но каждый раз EEPPROM имеет новое значение, причем в порядке занесенном в файл. Тот же файл распечатанный на самоклейке можно тут же построчно клеить на очередное устройство.
в той же AVR-studio можно выполнять командный файл перед каждой прошивкой, либо воспользоваться программой которая способна прошить из командной строки. Вариантов масса...
ChipBlaster умеет каждую прошивку сперва перечитать файлы прошивки с диска, остается только рядом запускать самописную программу или скрипт перед каждой прошивкой.
Re: как считать signature в коде программы
Добавлено: Вт сен 03, 2013 09:01:34
eess9
Alexeyslav писал(а):Можно как сделать: Каждую итерацию программой перед прошивкой генерируется EEPROM-файл для прошивки с очередной строкой из текстового файла, программатор всегда прошивает один и тот же файл но каждый раз EEPPROM имеет новое значение, причем в порядке занесенном в файл. Тот же файл распечатанный на самоклейке можно тут же построчно клеить на очередное устройство
но для этого надо писать надстройку? готового ничего нет?
Re: как считать signature в коде программы
Добавлено: Вт сен 03, 2013 10:40:19
Vov123
В качестве пароля-ключа можно приспособить iBooton.В заключительной стадии изготовления прописываешь key, в смысле это делает подпрограмма.И ключ в коробку.
Re: как считать signature в коде программы
Добавлено: Вт сен 03, 2013 11:12:23
eess9
Vov123 а можно чуточку подробней?
Re: как считать signature в коде программы
Добавлено: Вт сен 03, 2013 11:51:30
Vov123
Я не знаю чего подробней.Ну,например,создаётся какое-то условие (при комбинации нажатий кнопок, или нажатие одной кнопки с различным "меандром" или напряжение на АЦП или компараторе) вызывается подпрограмма считывания по 1-Wire 64 битного кода iBooton и записью его в eeprom.Повторное вхождение в эту подпрограмму можно заблокировать.Потом человек при начале использования девайса при запросе пароля подносит ключ,он идентифицируется с переменной в eeprom ,и если совпадает,устройство разблокируется.
Re: как считать signature в коде программы
Добавлено: Вт сен 03, 2013 12:51:55
eess9
понял, спасибо. надо обмыслить сей вариант
Re: как считать signature в коде программы
Добавлено: Ср сен 04, 2013 10:27:55
Gudd-Head
Может, подправить название темы? Как я понимаю, вам нужно каким-то образом массово сгенерить пароли и залить их в МК? Сигнатура вроде уже ни при чём...
Re: как считать signature в коде программы
Добавлено: Ср сен 04, 2013 13:58:06
eess9
Если не сложно, я был бы благодарен. К примеру "Автоматическая генерация пароля на стадии прошивки". Или как-то иначе.
Re: как считать signature в коде программы
Добавлено: Ср сен 04, 2013 14:08:01
Jack_A
Это, по-моему, вообще не проблема. Имеем исходный, "базовый" HEX - код. Простенькой прогой ( как по мне, так Дельфийской

) рассчитываем по любой сложности алгоритму пароль и записываем уже индивидуальный HEX для конкретного экземпляра МК, давая ему индивидуальный номер, который и будет прошиваться в конкретный МК. Попутно ведём логи: в каком хексе какой пароль. Держим их под замком в сейфе, где спирт
Можно чуть сложнее. Если прошит бут-лодырь, при первом диалоге с МК передать ему пароль, и он его запишет в условное место флеши. Если писать в EEPROM, то лодер не нужен, но этот вариант, по-моему, менее надёжен. Вероятность, что ЕЕРRОМ "слетит" при неблагоприятных обстоятельствах, намного выше.