|
Я написал загрузчик, Немного похвастаюсь |
|
|
3 страниц
1 2 3 >
|
 |
Ответов
(1 - 32)
|
Mar 7 2006, 20:29
|

Частый гость
 
Группа: Свой
Сообщений: 175
Регистрация: 26-01-06
Из: Sevastopol
Пользователь №: 13 664

|
Цитата(Firer @ Mar 7 2006, 21:39)  ... Ко всему прочему добавим избыточность со случайными числами для повышения криптозащиты. Раз уж речь пошла про интим с нескромными вопросами  , я тоже хочу задать такой же нескромный вопрос: Чем написанный загрузчик функционально отличается от двух давно существующих Application Notes от Atmel, реализующих всё в точности то же самое, включая случайные nonsense records, за исключением того, что в них используется DES, 3DES и AES, а не гостовский алгоритм? Всё остальное в точности идентично, включая объем. PS. Вопрос не случаен, так как я тоже написал загрузчик той же функциональности, но использующий USB для любой меги, начиная с 32 (критичен размер бут-блока - еле-еле удалось втиснуться в 4 килобайта, драйверов PC не надо - это HID устройство). Правда, я его еще и расширил функционально в некотором смысле, введя дополнительные возможности, отсутствующие в AppNotes. Может, есть что-то ещё, что можно туда вставить?
|
|
|
|
|
Mar 7 2006, 21:10
|

Частый гость
 
Группа: Свой
Сообщений: 175
Регистрация: 26-01-06
Из: Sevastopol
Пользователь №: 13 664

|
Цитата(Firer @ Mar 7 2006, 22:54)  А как ты мегу к USB подключаешь? Через какую микруху? Напрямую через 3 резистора (при трехвольтовом питании), либо через 4 резистора и два стабилитрона (при пятивольтовом). USB реализуется программно, см. эту тему. Вот пример схемы с сайта разработчика драйвера (эта штука работает, как стандартная клавиатура):  Цитата Любопытно. HID - т.е. как накопитель на FLASH-карте для компа? HID - это Human Interface Devices, один из стандартных USB классов. Накопители - это Mass Storage Devices, тоже стандартный класс, но не HID. HID не поддерживает USB bulk transfer type, необходимый для Mass Storage, и не обеспечивает таких скоростей обмена в силу своего предназначения. С точки же зрения удобства написания устройств в формате HID это действительно удобно для низкоскоростного обмена, так как не требуется писать драйвер для PC - работает стандартный от Microsoft (на Win98, 2000 и выше). Также работает под Unix/Linux. Работа из приложений реализуется через стандартный HID API (функции HidD_*), либо просто через CreateFile/ReadFile/WriteFile/Close. И, что особенно приятно, аппаратные затраты минимальны. Код драйвера занимает меньше 2-х килобайт и отлично документирован. Ограничения известны и некритичны. Самое существенное - это кварц на 12 MHz и необходимость запрещать прерывания не более, чем на 20 циклов. Всё обрабатывается в коде прерывания, за исключением пользовательских функций. Цитата(Evgeny_CD @ Mar 7 2006, 22:52)  Цитата(Firer @ Mar 7 2006, 22:39)  Ко всему прочему добавим избыточность со случайными числами для повышения криптозащиты. А сколь "случаен" сей генератор? Чем проверялось? Как правило, на свойствах таких "генераторов" и строят атаки.... В указанном контексте случайные числа - это просто цифровой "шум", вставляемый между значимыми блоками данных для затруднения подбора ключей. Реально важны числа при генерации ключей алгоритма шифрования, а там используется rand() из стандартной библиотеки C. Думаю, что эта функция написана не дилетантами и многократно проверена специалистами по криптографии.
Сообщение отредактировал osnwt - Mar 7 2006, 21:17
|
|
|
|
|
Mar 7 2006, 21:46
|

Гуру
     
Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244

|
Цитата(osnwt @ Mar 7 2006, 23:10)  Реально важны числа при генерации ключей алгоритма шифрования, а там используется rand() из стандартной библиотеки C. Думаю, что эта функция написана не дилетантами и многократно проверена специалистами по криптографии. :-) Они пишутся максимально просто. В лучшем случае используются достаточно правильные коэффициенты типа Миллера и подобных для получения более-менее приличного периода повторения. Типичный генератор вызлядит так: #define MULTIPLIER 0x015a4e35L #define INCREMENT 1 static long Seed = 1; /*---------------------------------------------------------------------* Name rand - random number generator Usage int rand(void); Related functions usage void srand(unsigned seed); Prototype in stdlib.h Description rand uses a multiplicative congruential random number generator with period 2^32 to return successive pseudo- random numbers in the range from 0 to 2^15 - 1. The generator is reinitialized by calling srand with an argument value of 1. It can be set to a new starting point by calling srand with a given seed number. *---------------------------------------------------------------------*/ int rand(void) { Seed = MULTIPLIER * Seed + INCREMENT; return((int)(Seed >> 16) & 0x7fff); } Впечатляет?
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
Mar 7 2006, 22:05
|

Частый гость
 
Группа: Свой
Сообщений: 175
Регистрация: 26-01-06
Из: Sevastopol
Пользователь №: 13 664

|
Цитата(zltigo @ Mar 7 2006, 23:46)  Впечатляет? Не очень, поскольку эта формула для RAND мне знакома года примерно с 1984, когда я видел ее в дизассемблированном мной интерпретаторе BASIC для МикроЭВМ "Электроника Д3-28" (если кто помнит такую машинку). Правда, там использовалась плавающая арифметика (ибо, была реализована микропрограммно), но сути дела это не меняет. Вопрос правильного подбора коэффициентов, период повторения и количество уникальных значений - это все понятно. Вопрос лишь в том: "Точно ли такой алгоритм используется, скажем, в стандартной библиотеке C"? Спорить не буду, так как не специалист по криптографии и не ковырял библиотечные функции. Но замечу, что это - не в "лучшем случае". В лучшем кое-где используются отдельные датчики случайных чисел, основанные на физических принципах (шумы p-n перехода, к примеру). Вряд ли в бытовых PC, конечно. Но можно было бы наверняка придумать что-то получше. Читал интересный рассказ на эту тему. Один товарищ решил реализовать супер-классный алгоритм генерации случайных чисел. Взял несколько разных алгоритмов и завел выход одного на вход другого, и т.п. Каково же было его удивление, когда его алгоритм при первом же запуске зациклился примерно на пятом "случайном" числе
|
|
|
|
|
Mar 7 2006, 23:01
|

Частый гость
 
Группа: Свой
Сообщений: 175
Регистрация: 26-01-06
Из: Sevastopol
Пользователь №: 13 664

|
Цитата(Firer @ Mar 8 2006, 00:44)  osnwt: потрясающе красивое решение! Удивительнее то, что работающее, и работающее прилично. Эксперименты с программным USB (как и с программным сетевым адаптером для витой пары) проводились давно. Для AVR USB первым написал Igor Cesko. То был код на ассемблере, не очень удобный для повторения или развития. Но он был первым. Сейчас это - Appnote на сайте Atmel. А Christian Starkjohann написал свой вариант, который, во первых, более оптимален с точки зрения приложения (много чего выполняет непосредственно "на лету" - интересная заметка на эту тему есть на сайте автора). Во вторых, он документирован. Известны его API, особенности и ограничения. Его стало можно использовать в собственных разработках. И, кроме того, с автором исключительно приятно работать. Мы с ним успевали порой по 5-6 пар писем в день (точнее, вечер) обменяться в ходе работ над IAR портом. В результате была выловлена одна особенность, связанная с обработкой процесса установки соединения. Автор доработал его, попутно сократив в объеме (!), но я, бессовестный, уже сутки не могу добраться и проверить на железе работу этого исправления. Всё, бросаю писанину и продолжаю собирать свой очередной макет для проверки кое-каких идей. Тогда и драйвер проверю.
|
|
|
|
|
Mar 8 2006, 05:29
|

Гуру
     
Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244

|
Цитата(osnwt @ Mar 8 2006, 00:05)  Вопрос лишь в том: "Точно ли такой алгоритм используется, скажем, в стандартной библиотеке C"? ... В лучшем кое-где используются отдельные датчики случайных чисел, основанные на физических принципах (шумы p-n перехода, к примеру). Вряд ли в бытовых PC, конечно. Но можно было бы наверняка придумать что-то получше. Алгоритм не стандартизирован никак. Более того, никак не гарантирована его псевдослучайность для повторения. Предыдущий пример взят из реальной жизни - это Borland. Ниже вариант 'послиднее', это IAR. Можете продолжить исследования - на более доступных в исходных текстах библиотеках. Код #define TSIZ 32 /* must be power of two */ #define TMSK (TSIZ - 1) #define XRND(x) (x) * 1664525L + 1013904223L
_TLS_DATA_DEF(_IMPLICIT_EXTERN, char, _Randinit, 0); _TLS_DATA_DEF(_IMPLICIT_EXTERN, unsigned long, _Randseed, 1); _TLS_DATA_DEF(static, unsigned long, idx, 0); _TLS_ARR_DEF(static, unsigned long, rv, TSIZ);
int (rand)(void) { /* compute pseudo-random value */ char *pinit = _TLS_DATA_PTR(_Randinit); unsigned long *pseed = _TLS_DATA_PTR(_Randseed); unsigned long *pidx = _TLS_DATA_PTR(idx); unsigned long *prv = _TLS_ARR(rv); int j;
if (*pinit == 0) { /* warm up, then initialize shuffle table */ for (j = 0; j < 8; ++j) *pseed = XRND(*pseed); for (j = 0; j < TSIZ; ++j) prv[j] = (*pseed = XRND(*pseed)); *pidx = prv[TSIZ - 1]; *pinit = 1; } *pseed = XRND(*pseed); j = *pidx & TMSK; *pidx = prv[j]; prv[j] = *pseed; #if _ILONG return (*pidx & RAND_MAX); #else /* _ILONG */ return ((*pidx >> 16) & RAND_MAX); #endif /* _ILONG */ } Цитата(osnwt @ Mar 8 2006, 00:05)  В лучшем кое-где используются отдельные датчики случайных чисел, основанные на физических принципах (шумы p-n перехода, к примеру). Вряд ли в бытовых PC, конечно. Но можно было бы наверняка придумать что-то получше. Я в курсе. Осталось решить вопрос, как Вы сможете повторить сию последовательность для расшифровки :-))). Ну а 'получше' уже придуманы, только для сишного rand они не используются.
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
Mar 8 2006, 11:18
|

Частый гость
 
Группа: Свой
Сообщений: 175
Регистрация: 26-01-06
Из: Sevastopol
Пользователь №: 13 664

|
Цитата(zltigo @ Mar 8 2006, 07:29)  Цитата(osnwt @ Mar 8 2006, 00:05)  Вопрос лишь в том: "Точно ли такой алгоритм используется, скажем, в стандартной библиотеке C"?
Алгоритм не стандартизирован никак. Более того, никак не гарантирована его псевдослучайность для повторения. Предыдущий пример взят из реальной жизни - это Borland. Да я это всё понимаю. Делать аппаратные датчики в ширпотребовских PC никто не станет. Цитата Можете продолжить исследования - на более доступных в исходных текстах библиотеках. Да нет, спасибо  Я же говорил, что не являюсь специалистом по криптографии. Цитата Осталось решить вопрос, как Вы сможете повторить сию последовательность для расшифровки :-))). Ну, это вопрос не ко мне. В текущих аппноутах это используется лишь как шум, а не как средство защиты. Основная защита тут - огромное количество переборов, если исключить выделяющиеся паттерны и т.п. Но вообще-то, такие вещи классически ломаются совсем иначе. Догадываясь, что могло потенциально использоваться для написания такого бута, можно сконцентрировать атаку совсем на другом направлении. Например, на потенциальном переполнении входного буфера, что в исходниках от Atmel представляет вполне очевидную дыру. Правда, получится ли ей воспользоваться - еще вопрос. Но сформировать входной фрейм так, чтобы загрузчик улетел в определенном направлении (на определенный адрес) можно вполне. И какое при этом будет его состояние - неизвестно. Потому я предпочел поправить такие вот места, чем ломать голову над правильностью ключей. Уж мои-то самоделки явно ломать никто не станет - дешевле купить готовое или разработать самому :-) Цитата Ну а 'получше' уже придуманы, только для сишного rand они не используются. Когда-то и 3DES был запрещен, поскольку госагенства не имели ресурсов для его вскрытия. Сейчас с этим проще. Может, и продвинутые алгоритмы и в стандартные библиотеки когда-нибудь попадут.
|
|
|
|
|
Mar 8 2006, 11:41
|
Участник

Группа: Свой
Сообщений: 69
Регистрация: 22-10-04
Пользователь №: 956

|
Цитата(osnwt @ Mar 8 2006, 02:01)  А Christian Starkjohann написал свой вариант, который, во первых, более оптимален с точки зрения приложения (много чего выполняет непосредственно "на лету" - интересная заметка на эту тему есть на сайте автора). Во вторых, он документирован. Известны его API, особенности и ограничения. Его стало можно использовать в собственных разработках. И, кроме того, с автором исключительно приятно работать. Мы с ним успевали порой по 5-6 пар писем в день (точнее, вечер) обменяться в ходе работ над IAR портом..... а можно ли выложить порт под IAR?
|
|
|
|
|
Mar 8 2006, 12:12
|

Частый гость
 
Группа: Свой
Сообщений: 175
Регистрация: 26-01-06
Из: Sevastopol
Пользователь №: 13 664

|
Цитата(Grape @ Mar 8 2006, 13:41)  а можно ли выложить порт под IAR? Порт для IAR интегрирован в основной исходный текст драйвера с помощью #ifdef и т.п. Он работоспособен, но есть еще одна проблема (не привязанная к порту IAR, а общая), прокомментированная вот так: - We need a delay between the SET ADDRESS request until the new address becomes active. This delay was handled in usbPoll() until now. Since the spec says that the delay must not exceed 2ms, previous versions required aggressive polling during the enumeration phase. We have now moved the handling of the delay into the interrupt routine. Проблема носит косметический характер в 90% случаев, но для оставшихся немного неудобна, хотя и обходима. Я только что проверил очередную версию - кое-что там еще не то. Я надеюсь, что в ближайшее время эта проблема будет решена или документирована, после чего версия драйвера с возможностью компиляции под IAR появится на официальном сайте.
|
|
|
|
|
Mar 9 2006, 07:24
|
Гуру
     
Группа: СуперМодераторы
Сообщений: 2 065
Регистрация: 11-01-05
Из: Москва
Пользователь №: 1 892

|
Уж коль скоро тут была затронута тема случайных чисел http://www.ozon.ru/context/detail/id/1454378/М. А. Иванов, И. В. Чугунков Теория, применение и оценка качества генераторов псевдослучайных последовательностей. Книга 2 Серия: СКБ - специалисту по компьютерной безопасности Издательство: КУДИЦ-Образ, 2003 г. Мягкая обложка, 240 стр. ISBN 5-93378-056-1, 5-93378-047-2 Тираж: 3000 экз.
|
|
|
|
|
Mar 9 2006, 13:48
|

Частый гость
 
Группа: Свой
Сообщений: 175
Регистрация: 26-01-06
Из: Sevastopol
Пользователь №: 13 664

|
Цитата(Evgeny_CD @ Mar 9 2006, 15:15)  В общем, пионЭров такая защита распугает, профи - едва ли. Ну а не дай бог в руки попадет несколько экземпляров прошивки для девайсов с разными ключами... А я слышал, что есть фирма, специализирующаяся на чтении прошивок PIC, AVR и всяких альтер. Стоит эта услуга около $5000. Насколько это соответствует истине - не знаю, но допустить такую вероятность могу.
|
|
|
|
|
Mar 9 2006, 14:05
|

Частый гость
 
Группа: Свой
Сообщений: 175
Регистрация: 26-01-06
Из: Sevastopol
Пользователь №: 13 664

|
Цитата(at90 @ Mar 9 2006, 15:53)  Работает так пример 01h->таблица->FBh. Таблица сформирована случайно. Как я понял, это простой подстановочный код, где для каждого байта XX в соответствии находится байт YY. Для всех XX будет замена исключительно на YY. Всё равно, что переобозначить буквы в алфавите. В тексте такие подстановочные шифры вскрываются на паре предложений по статистической вероятности встречи разных букв в обычном тексте. Тут, я думаю, тоже начать можно с этого. Реально же это существенной защиты не дает. Интересно, какой смысл изобретать велосипеды? Не проще ли взять готовые математически обоснованные методы, к тому же, с исходниками и т.п. и просто тупо использовать их? Или, если уж хочется по...ся, то тогда попробовать реализовать нечто наподобие системы шифрования с открытым ключом. Есть приватный и публичный ключи. Шифруется публичным, а расшифровывается внутри приватным. Просто публичный ключ выпускать нельзя тоже, ибо, можно будет при отсутствии должных мер просто зашить свою аппликуху и вычитать все остальное, например, ключ дешифровки (если не предусмотрено защиты от LPM бута). IMHO, трата времени - более устойчивого алгоритма, чем созданный профессионалами и математически проверенный DES, 3DES, AES, и т.п. нам, дилентантам в этой области, все равно не создать. Так стоит ли заморачиваться всякими детскими играми в XOR и переставлялки?
|
|
|
|
|
Mar 9 2006, 15:45
|

Частый гость
 
Группа: Свой
Сообщений: 175
Регистрация: 26-01-06
Из: Sevastopol
Пользователь №: 13 664

|
Цитата(Firer @ Mar 7 2006, 20:59)  Для AVR, с шифрованием по ГОСТ28147-89, помещается в блок 2kWord Вопросы: 1) использовалась ли общая структура кода имеющихся атмеловских аппноутов лишь с заменой алгоритмов шифрования? 2) какой объем кода получился у скомпилированного файла алгоритма дешифровки? 3) каким компилятором (Atmel использует IAR)? Просто интересно сравнить размер кода всех трех вариантов (два от атмела и этого). Разумеется, смысл сравнивать будет лишь в случае идентичности или близости подходов. ЗЫ. Только написал про ключи с открытым кодом... Заглянул на предмет гостовского - а это оно и есть :-) ЗЗЫ. 2kWord - это именно 2 килослова (4 килобайта), или 2 килобайта (1 килослово)?
Сообщение отредактировал osnwt - Mar 9 2006, 15:46
|
|
|
|
|
Mar 9 2006, 18:11
|

кекс
     
Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326

|
Цитата(Evgeny_CD @ Mar 9 2006, 18:47)  Цитата(osnwt @ Mar 9 2006, 16:48)  А я слышал, что есть фирма, специализирующаяся на чтении прошивок PIC, AVR и всяких альтер. Стоит эта услуга около $5000. Насколько это соответствует истине - не знаю, но допустить такую вероятность могу. Это к AlexanderY. Они этим серьезно занимается  Чипы на куски режут что ли?  Цитата(osnwt @ Mar 9 2006, 16:05)  IMHO, трата времени - более устойчивого алгоритма, чем созданный профессионалами и математически проверенный DES, 3DES, AES, и т.п. нам, дилентантам в этой области, все равно не создать. не создать, но зато есть еще один фактор в криптозащитах - знание алгоритма шифрования. Без знания алгоритма, ломать становится еще сложнее. Поэтому можно помимо или вместо известных алгоритмов шифрования применять несколько "неизвестных" широкой публике алгоритмов шифрования по какой-то не очень сложной мат. формуле (тот же XOR не повредит).
|
|
|
|
|
Mar 10 2006, 17:11
|

Гуру
     
Группа: Админы
Сообщений: 3 621
Регистрация: 18-10-04
Из: Москва
Пользователь №: 904

|
Цитата(Petka @ Mar 9 2006, 18:16)  Ответ автору топика: выражаю огромный респект, что бы ни говорили шифрование по ГОСТ более криптоустойчиво, нежели DES и прочие аналоги, ибо ГОСТ строится на теории элиптических кривых, да и сами профессионалы криптоанализа не видят в DES будущего... Где Вы видели ГОСТ на алгоритм криптографического преобразования данных, который бы использовал эллиптические кривые?
--------------------
BR, Makc В недуге рождены, вскормлены тленом, подлежим распаду. (с) У.Фолкнер.
|
|
|
|
|
Mar 10 2006, 17:21
|
Гуру
     
Группа: СуперМодераторы
Сообщений: 2 065
Регистрация: 11-01-05
Из: Москва
Пользователь №: 1 892

|
Цитата(defunct @ Mar 9 2006, 21:11)  не создать, но зато есть еще один фактор в криптозащитах - знание алгоритма шифрования. Без знания алгоритма, ломать становится еще сложнее. Поэтому можно помимо или вместо известных алгоритмов шифрования применять несколько "неизвестных" широкой публике алгоритмов шифрования по какой-то не очень сложной мат. формуле (тот же XOR не повредит). Вопрос давно выяснен. Стойкость алгоритма шифрования, где основным "секретом" является сам алгоритм, равна времени, за которое можно мотивировать профессионала Т.е. либо Вам надо изучать науку и самому становиться профессионалом, либо это игра в рулетку. Т.е. конечно, есть шанс, что Вы придумаете нечто оригинально и стойкое, и войдете в историю криптографии, но шанс выиграть в казино машину больше
|
|
|
|
|
Mar 11 2006, 12:50
|
Профессионал
    
Группа: Свой
Сообщений: 1 453
Регистрация: 23-08-05
Пользователь №: 7 886

|
Цитата(makc @ Mar 10 2006, 20:11)  Цитата(Petka @ Mar 9 2006, 18:16)  Ответ автору топика: выражаю огромный респект, что бы ни говорили шифрование по ГОСТ более криптоустойчиво, нежели DES и прочие аналоги, ибо ГОСТ строится на теории элиптических кривых, да и сами профессионалы криптоанализа не видят в DES будущего... Где Вы видели ГОСТ на алгоритм криптографического преобразования данных, который бы использовал эллиптические кривые?  Выше названный ГОСТ таким и является. Обычно бывает полезно читать не только КОНКРЕТНЫЕ алгоритмы, которые описаны в каком-либо стандарте, НО и на основе чего эти алгоритмы строятся. Вот видите, словосочетание "теория эллиптических кривых" обычных инженеров сбивает с толку, поэтому в стандарте содержится всего-лишь инструкции по использованию, без обоснований и доказательств эффективности. а DES? DES был придуман для использования внутри одной фирмы... по СЛУЧАЮ он оказался очень даже удачным и разошёлся бешеной популярностью, т.к. соответствующие органы не успели его "взять под свой контроль". DES очень удачный алгоритм, НО он не был построен на основе КРУТОГО математического аппарата, в результате при неумелом использовании он например может давать "слабые ключи". существуют нехилые оптимизации по его "грубому взлому". и пр. В околокриптографических кругах иностранные эксперты облизываются на ГОСТ =)
|
|
|
|
|
Mar 12 2006, 03:26
|
Частый гость
 
Группа: Свой
Сообщений: 165
Регистрация: 27-08-04
Из: Moscow
Пользователь №: 554

|
Рановато Вы восхваляете алгоритм, основанный на эллиптических кривых. Этот алгоритм еще не выдержал проверку временем, в отношении такого класса алгоритмов пока не проведено такого количества исследований, как на основе дискретного логарифмирования, к примеру. Косвенным подтверждением этого факта может служить то, что никто не бросился резко переходить с алгоритма DSA на алгоритм ECDSA. Причины же смены стандарта (перехода на эллиптику) у нас в России лежат не в математической плоскости, поверьте.
Понаблюдайте за PKCS#13. Когда он появится в более или менее стабильной редакции - мне кажется, что можно думать о эллиптике более практично.
Однако мы перемещаемся в зону offtop, поэтому если есть интерес продолжать дискуссию - просьба перейти в PM.
С уважением, lvitaly
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|