Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Шифрование данных в памяти
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > AVR
Stasevuch
Интересует тема шифрования даннх обрабатываемх контроллером и в последствии ханищихся во внешней памти . Сосотав устройства - некий источник ASC кода ( к примеру возьмём последовательный интерфейс ) , данные приходят в микроконтроллер , маркируются и отправляются на хранение в энергонезависимую память. В определённой степени накопитель данных. По запросу данные считываются из памяти , только вот считываться они длжны уже шифроваными. Каковы могут быть алгоритмы шифрования данных по средствам контроллеров семейства AVR. Может есть библиотеки для подобных задач? Или опыт решения подобных технических заданий .
Rst7
Не так давно обсуждали некоторые моменты аналогичного устройства. В основном, все зависит от стоимости данных, сохраняемых на носитель. А технические моменты не очень сложны - вполне по силам и RSA, и AES. Часто хватает XTEA.

Если злоумышленник не имеет возможности подменить само устройство, то возможна организация системы с одноразовым блокнотом - взлом такого не по силам никому, но можно подломить саму организацию системы - например, уже упомянутой подменой самого девайса.

Рассказывайте подробности, будем обсуждать.
Andy Mozzhevilov
Из постановки вопроса не понятно, данные должны храниться зашифрованными во внешней памяти для того, чтобы:
Злоумышленник, физически выдрав энергонезависимую память из платы, не смог считать из нее данные as-is ?
или
Их нужно считать в зашифрованном виде просто для передачи по какому-то открытому каналу, чтобы не тратить время на шифрование при передаче в run-time ?
Или вы имели ввиду что-то еще?
А канал, по которому поступают данные в устройство, не проще будет перехватить?


Цитата(Rst7 @ Apr 3 2009, 00:11) *
Если злоумышленник не имеет возможности подменить само устройство, то возможна организация системы с одноразовым блокнотом

Можно про одноразовый блокнот пояснить, что он из себя представляет, какой алгоритм?
Палыч
Цитата(Andy Mozzhevilov @ Apr 3 2009, 07:38) *
Можно про одноразовый блокнот пояснить, что он из себя представляет, какой алгоритм?
Принцип этого метода шифрования легко находится в интернете. Но, в чистом виде этот метод в данном случае не применим, т.к. поток данных не ограничен, то и ключ будет иметь бесконечную длину.
Rst7
Цитата
Можно про одноразовый блокнот пояснить, что он из себя представляет, какой алгоритм?


http://ru.wikipedia.org/wiki/Шифр_Вернама

А основная идея в регистраторах такая - когда снимается информация, на ее место пишется новый шифроблокнот. Потом, по мере поступления информации, выполняется xor с уже имеющимся шифроблокнотом.

Цитата
т.к. поток данных не ограничен


Ограничен. Размером накопителя smile.gif
Stasevuch
Собственно данные вполне могут храниться в памяти в открытом (не шифрованном виде). А вот их появление из недр памяти в открытый канал как раз таки и должно сопровождаться шифрованием. В роли открытого канала , опять таки выступает тот же последовательный порт. Открытые данные предстваляют собой символьную строку фиксированной длинны.
Rst7
Цитата
А вот их появление из недр памяти в открытый канал как раз таки и должно сопровождаться шифрованием.


Ах так это не совсем регистратор. Тогда любой алгоритм на выбор - например AES (вполне надежно) или XTEA, если не боитесь серьезных противников.
ssvSerge
Цитата(Stasevuch @ Apr 2 2009, 21:42) *
Интересует тема шифрования даннх обрабатываемх контроллером и в последствии ханищихся во внешней памти.
По запросу данные считываются из памяти, только вот считываться они длжны уже шифроваными.

В целом задача достаточно тривиальна.
Вам надо определиться с несколькими вопросами:
1) Насколько велика ценность хранимых данных. Другими словами как много усилий надо
потратить злоумышленнику что бы вы сказали "узнал - ну и бог с тобой"
2) Насколько велика вероятность взлома используемой однокристалки.
Опытные люди понижают(или снимают) напряжение питания через
строго заданный промежуток времени после подачи команды стирания.
В результате стираются биты защиты, а данные во Flash остаются. После
этого дешифрование данных становится тривиальной задачей.
3) Но (1) и (2) это всё мелочи. Проблемы со взломом оборудования
составляют совсем не большой процент по сравнению с отказами самого
оборудования. Вам надо выбирать такой алгоритм шифрования, при котором
потеря одного (или нескольких) блоков данных во внешней памяти не повлияла
на шифрование-расшифровывание остальных.

Собственно без решения этих вопросов определиться с алгоритмом или
библиотекой вам не удасться.
Сразу хотелось бы предостеречь от "самой лучшей" защиты.
От хороших фокусников вы не защититесь.

Озвучьте ваши мысли по этим вопросам, после этого можно будет предложить
что-либо.
dch
никто не видел реализацию gpg для embedded приложений?
Stasevuch
К вопросу об определении ряда факторов влиющих на степень ценности информации и вероятности их взлома на аппаратном уровне.
Предположим что такие пути подхода к информации , как демонтаж микросхемы памяти ,или взлом Flash не рассматриваются. И вполне допустим простой алгоритм криптовки. Проблемма разве что может заключаться в том , что шифрованию подлежат исключительно цифры , а не символы.(ну это на мой неопытный взгляд проблемма , может не всё так уж проблематично). Это может быть некий алгоритм , котрорый прячет полезную информацию в бесполезном "мусоре" знаков . В том то вся и беда , что ранее не сталкивался с подобной задачей.

Нарыл алгоритм TEA. Но его реализация изображена на примере С. Не пинайте , но на бейсик это может кто перевести.

Routine, written in the C language, for encoding with key k[0] - k[3]. Data in
v[0] and v[1].
void code(long* v, long* k) {
unsigned long y=v[0],z=v[1], sum=0, /* set up */
delta=0x9e3779b9, /* a key schedule constant */
n=32 ;
while (n-->0) { /* basic cycle start */
sum += delta ;
y += ((z<<4)+k[0]) ^ (z+sum) ^ ((z>>5)+k[1]) ;
z += ((y<<4)+k[2]) ^ (y+sum) ^ ((y>>5)+k[3]) ;
} /* end cycle */
v[0]=y ; v[1]=z ; }


Decode Routine
void decode(long* v,long* k) {
unsigned long n=32, sum, y=v[0], z=v[1],
delta=0x9e3779b9 ;
sum=delta<<5 ;
/* start cycle */
while (n-->0) {
z-= ((y<<4)+k[2]) ^ (y+sum) ^ ((y>>5)+k[3]) ;
y-= ((z<<4)+k[0]) ^ (z+sum) ^ ((z>>5)+k[1]) ;
sum-=delta ; }
/* end cycle */
v[0]=y ; v[1]=z ; }
Rst7
Цитата
Нарыл алгоритм TEA. Но его реализация изображена на примере С. Не пинайте , но на бейсик это может кто перевести.


Ну, во-первых, возьмите XTEA. Во-вторых - учите Си. В-третьих - покурите что-нибудь типа "Прикладной Криптографии" Б. Шнайдера.
sensor_ua
Цитата
на бейсик это может кто перевести

Для PIC, но якобы на Бейсике
http://www.picbasic.co.uk/forum/showthread.php?p=54888
Привет от google;)
ssvSerge
Цитата(Stasevuch @ Apr 4 2009, 19:15) *
Предположим что такие пути подхода к информации , как демонтаж микросхемы памяти, или взлом Flash не рассматриваются.
И вполне допустим простой алгоритм криптовки.

А вы уверены, что вам вообще нужна шифрование - расшифровывание?
Судя по тому, что вы написали, то "оно" вам не нужно вообще. Ведь вы
даже не предполагаете факт доступа ко внешней памяти.

Ну, а если у вас задача стоит именно так, как вы сказали, то посмотрите
на алгоритм DES. Если вы выберете старый вариант (не 3DES, а простой
DES) то будет всё очень быстро и весьма надёжно. У него есть дополнительные
режимы "ECB", "CBC", "CBF, "OBF". ECB - ваш выбор. Остальные вам не нужны.
Более того - они для вас - зло. Получите весьма хороший "набор знаков".
Реализаций - полно.

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

Сергей.
Stasevuch
Может подход и делетанский в вопросе шифрования , но вот так вот ! Я без понятия что за алгоритм шифрования в итоге получилось следующее :
Берём строку длинной в 48 символов . Её содержание : (цифры + доп знаки) по таблице ASC Dec (48-63)
В этой же строке в конце последние 8 символов - временная метка ЧЧ:ММ:СС
Выделяю из временной метки секунды , прибавляю 32 к значению секунд , что бы при декодировании не влезть в служебные непечатные символы ASC кода . и к ASC коду каждого символа в строке прибался значение временной метки. Потом что что получилось (секунды из временной метки+32+код ASC шифруемого символа+ № позиции в строке шифруемого символа ) переожу вновь в ASC код и отправляю в открытый канал . Да , и значение ключа (секундная метка + 32 ) вписываю в тело шифрованой строки , место ключа в строке , так же меняется. Может такой код и раз-плюнуть взломать, но для моих целей - с головой хватает . И не надо меня пинать за бейсик. Мы в институтах на програмёра не учились .
ssvSerge
Цитата(Stasevuch @ Apr 8 2009, 14:56) *
Я без понятия что за алгоритм шифрования...
Может такой код и раз-плюнуть взломать, но для моих целей - с головой хватает.

Если вас устраивает качество такого шифрования,
то и отлично. Реализуйте и используйте.

Вы только должны чётко понимать, что является
секретом в вашем случае. Это - алгоритм. Секрет
никому раскрывать нельзя по определению
(в том числе и заказчику). Иначе мероприятие теряет
всякий смысл. Да, еще момент - продумайте что надо
будет сделать в случае компрометации секрета.

И, вы правы, не стоит рассчитывать на какую-либо
стойкость вашего решения. Взломать его можно
будет автоматическим способом.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.