Вопрос собственно в теме: как считать signature в коде программы? Надо сделать доступ к устройству запаролленым. А что лучше всего подойдет для пароля чем сигнатура при условии, что у каждого контроллера пароль должен быть свой. Нашел библиотечку avr/signature.h, но как при ее помощи выудить эту информацию не знаю. Это возможно? Как сделать?
Автоматическая генерация пароля на стадии прошивки
Привет всем!
Вопрос собственно в теме: как считать signature в коде программы? Надо сделать доступ к устройству запаролленым. А что лучше всего подойдет для пароля чем сигнатура при условии, что у каждого контроллера пароль должен быть свой. Нашел библиотечку avr/signature.h, но как при ее помощи выудить эту информацию не знаю. Это возможно? Как сделать?
Вопрос собственно в теме: как считать signature в коде программы? Надо сделать доступ к устройству запаролленым. А что лучше всего подойдет для пароля чем сигнатура при условии, что у каждого контроллера пароль должен быть свой. Нашел библиотечку avr/signature.h, но как при ее помощи выудить эту информацию не знаю. Это возможно? Как сделать?
- Реклама
- Сообщения: 1802
- Зарегистрирован: Ср сен 07, 2011 21:40:30
http://www.nongnu.org/avr-libc/user-man ... ature.html
там написано, что библиотека просто добавляет байты сигнатуры. Сигнатура читается только программатором. Да и она абсолютно одинакова для одного типа микроконтроллера. Поэтому нужно просто присваивать серийники процессорам в коде
там написано, что библиотека просто добавляет байты сигнатуры. Сигнатура читается только программатором. Да и она абсолютно одинакова для одного типа микроконтроллера. Поэтому нужно просто присваивать серийники процессорам в коде
Какие есть мысли для генерации ключей автоматически? Не хочется руками прописывать для каждого кристалла.
а в какой момент нужно генерировать? на момент заливки прошивки на заводе или в момент первого включения?
Ставим плюсы: )
- Сообщения: 1802
- Зарегистрирован: Ср сен 07, 2011 21:40:30
Для этого нужно знать объемы производства, его этапы. Ответы будут разными.
- Реклама
на заводе
это пока громко сказано. прошивается ручками, но партиями по 100-200 штук. Пароль, пользователь получает вместо с устройством (к примеру, наклеен на коробке, но пользователь может легко отодрать эту надпись).
Хотя идея генерации пароля при первом включении тоже ничего, но все равно первое включение, для проверки, я делаю. При первом включении можно использовать, к примеру, функцию rand().
Хотя идея генерации пароля при первом включении тоже ничего, но все равно первое включение, для проверки, я делаю. При первом включении можно использовать, к примеру, функцию rand().
Заведи это как отдельный инклуд, в нем используя препроцессорные IF-ы объявляй константу с паролем в завсимости от выбранного для проекта микроконтроллера.
Используй этот инклудник во всех проектах, и не надо будет беспокоится о паролях.
Используй этот инклудник во всех проектах, и не надо будет беспокоится о паролях.
Нет, нельзя. Она будет строго детерминирована. в крааайнем случае, нужно брать в качестве инициализации случайного числа контрольную сумму всего содержимого памяти программ. Но по правилам нужен источник случайностей - например длительность нажатия на кнопку включения пользователем.При первом включении можно использовать, к примеру, функцию rand().
- Сообщения: 804
- Зарегистрирован: Чт мар 12, 2009 16:31:05
А как это будет выглядеть?
Пользователь включает девайс и вводит пароль указанный на упаковке?
Пользователь включает девайс и вводит пароль указанный на упаковке?
Согласен. Тупонул.Alexeyslav писал(а):При первом включении можно использовать, к примеру, функцию rand().
Нет, нельзя. Она будет строго детерминирована.
Если коротко. Есть пульты, на которых видно все доступные устройства (беспроводная связь). Эти хреновины сдаются в аренду. Поскольку дело в пределах одного здания, то человек не должен иметь возможность управлять устройством соседа, которое он видит. Ему дают пульт, устройство и говорят его имя и пароль. Пытаясь подключиться он его вводит, а дальше работает.
в некоторых программаторах (программа для ПК), например asisp_programmer есть возможность записывать по определенному адресу во флеш номер устройства одновременно с заливкой основной прошивки, причем этот номер автоинкрементируется при каждой последующей заливке.
это можно использовать.
например если пароль будет вычисляться внутри МК по какой-то формуле с использованием этого номера. для того чтобы выдать пароль пользователю нужно считать этот номер из прошивки и вычислить по известной только вам формуле пароль.
при введении пароля со стороны пользователя, микроконтроллер тоже вычисляет этот пароль и сверяет то, что он получил с тем, что пользователь ввел.
все вышесказанное как простой вариант.
также можно сделать свою программу прошивальщик (или надстройку над AVR dude) которая будет сразу сама генерировать этот пароль во время прошивки и,например, одновременно выдавать на печать, чтобы стикер приклеить)
это можно использовать.
например если пароль будет вычисляться внутри МК по какой-то формуле с использованием этого номера. для того чтобы выдать пароль пользователю нужно считать этот номер из прошивки и вычислить по известной только вам формуле пароль.
при введении пароля со стороны пользователя, микроконтроллер тоже вычисляет этот пароль и сверяет то, что он получил с тем, что пользователь ввел.
все вышесказанное как простой вариант.
также можно сделать свою программу прошивальщик (или надстройку над AVR dude) которая будет сразу сама генерировать этот пароль во время прошивки и,например, одновременно выдавать на печать, чтобы стикер приклеить)
Ставим плюсы: )
Мысль пришла. Пароль - это 2-х байтное число в контроллере.
Пользователь получает пароль из 6 цифр. Например, 123235.
Пульт это соберет в 123 и 235. Пользователь может подбирать пароль очень долго, комбинаций валом, а он то реально короткий.
Вряд ли догадаются, что больше 255 быть не может. А если поменять первую и вторую цифры местами? 525. Хрен вообще разберешь
Пользователь получает пароль из 6 цифр. Например, 123235.
Пульт это соберет в 123 и 235. Пользователь может подбирать пароль очень долго, комбинаций валом, а он то реально короткий.
Вряд ли догадаются, что больше 255 быть не может. А если поменять первую и вторую цифры местами? 525. Хрен вообще разберешь
Пароль записывать в EEPROM, его можно прошивать отдельным от прошивки файлом - а значить их можно сгенерировать индивидуально - хоть блокнотом или программой на бейсике/паскале/делфи.
Можно как сделать: Каждую итерацию программой перед прошивкой генерируется EEPROM-файл для прошивки с очередной строкой из текстового файла, программатор всегда прошивает один и тот же файл но каждый раз EEPPROM имеет новое значение, причем в порядке занесенном в файл. Тот же файл распечатанный на самоклейке можно тут же построчно клеить на очередное устройство.
в той же AVR-studio можно выполнять командный файл перед каждой прошивкой, либо воспользоваться программой которая способна прошить из командной строки. Вариантов масса...
ChipBlaster умеет каждую прошивку сперва перечитать файлы прошивки с диска, остается только рядом запускать самописную программу или скрипт перед каждой прошивкой.
Можно как сделать: Каждую итерацию программой перед прошивкой генерируется EEPROM-файл для прошивки с очередной строкой из текстового файла, программатор всегда прошивает один и тот же файл но каждый раз EEPPROM имеет новое значение, причем в порядке занесенном в файл. Тот же файл распечатанный на самоклейке можно тут же построчно клеить на очередное устройство.
в той же AVR-studio можно выполнять командный файл перед каждой прошивкой, либо воспользоваться программой которая способна прошить из командной строки. Вариантов масса...
ChipBlaster умеет каждую прошивку сперва перечитать файлы прошивки с диска, остается только рядом запускать самописную программу или скрипт перед каждой прошивкой.
но для этого надо писать надстройку? готового ничего нет?Alexeyslav писал(а):Можно как сделать: Каждую итерацию программой перед прошивкой генерируется EEPROM-файл для прошивки с очередной строкой из текстового файла, программатор всегда прошивает один и тот же файл но каждый раз EEPPROM имеет новое значение, причем в порядке занесенном в файл. Тот же файл распечатанный на самоклейке можно тут же построчно клеить на очередное устройство
- Сообщения: 804
- Зарегистрирован: Чт мар 12, 2009 16:31:05
В качестве пароля-ключа можно приспособить iBooton.В заключительной стадии изготовления прописываешь key, в смысле это делает подпрограмма.И ключ в коробку.
- Сообщения: 804
- Зарегистрирован: Чт мар 12, 2009 16:31:05
Я не знаю чего подробней.Ну,например,создаётся какое-то условие (при комбинации нажатий кнопок, или нажатие одной кнопки с различным "меандром" или напряжение на АЦП или компараторе) вызывается подпрограмма считывания по 1-Wire 64 битного кода iBooton и записью его в eeprom.Повторное вхождение в эту подпрограмму можно заблокировать.Потом человек при начале использования девайса при запросе пароля подносит ключ,он идентифицируется с переменной в eeprom ,и если совпадает,устройство разблокируется.
Может, подправить название темы? Как я понимаю, вам нужно каким-то образом массово сгенерить пароли и залить их в МК? Сигнатура вроде уже ни при чём...
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Если не сложно, я был бы благодарен. К примеру "Автоматическая генерация пароля на стадии прошивки". Или как-то иначе.
Это, по-моему, вообще не проблема. Имеем исходный, "базовый" HEX - код. Простенькой прогой ( как по мне, так Дельфийской
) рассчитываем по любой сложности алгоритму пароль и записываем уже индивидуальный HEX для конкретного экземпляра МК, давая ему индивидуальный номер, который и будет прошиваться в конкретный МК. Попутно ведём логи: в каком хексе какой пароль. Держим их под замком в сейфе, где спирт
Можно чуть сложнее. Если прошит бут-лодырь, при первом диалоге с МК передать ему пароль, и он его запишет в условное место флеши. Если писать в EEPROM, то лодер не нужен, но этот вариант, по-моему, менее надёжен. Вероятность, что ЕЕРRОМ "слетит" при неблагоприятных обстоятельствах, намного выше.
Можно чуть сложнее. Если прошит бут-лодырь, при первом диалоге с МК передать ему пароль, и он его запишет в условное место флеши. Если писать в EEPROM, то лодер не нужен, но этот вариант, по-моему, менее надёжен. Вероятность, что ЕЕРRОМ "слетит" при неблагоприятных обстоятельствах, намного выше.


