|
|
  |
Алгоритм шифрования для AVR |
|
|
|
Feb 21 2012, 11:36
|
практикующий тех. волшебник
    
Группа: Участник
Сообщений: 1 190
Регистрация: 9-09-05
Пользователь №: 8 417

|
Цитата(_Артём_ @ Feb 20 2012, 21:39)  ...применить в бутлоадере АВР.... я немного в другую сторону вам скажу... а зачем серъёзное шифрование? ведь на вход нельзя подать нечто НЕ ваше. значит методов для изучения - ну очень мало. т.е. если Вы обеспечите каждый раз уникальность передаваемых данных - то понять что вы там нахимичили с декодировкой - утопия. тем более если прошивки будут меняться не каждый понедельник... надеюсь понятна моя мысль не глубокая?  (Раневская) (круглый) ЗЫ Помните как в том фильме про "энигму"? Пока не просекли что первым делом посылается координаты цели - т.е. сопоставили ихсодные данные и конечный получаемый шифр, взломать не возможно было. Т.е. если Вы каждый раз будете нечто новое слать - взломать ан реал...
Сообщение отредактировал kolobok0 - Feb 21 2012, 11:45
|
|
|
|
|
Feb 21 2012, 11:46
|
Гуру
     
Группа: Свой
Сообщений: 2 128
Регистрация: 21-05-06
Пользователь №: 17 322

|
Цитата(kolobok0 @ Feb 21 2012, 13:36)  а зачем серъёзное шифрование? Чтобы гарантировано исключить возможность копирования. Цитата(kolobok0 @ Feb 21 2012, 13:36)  ведь на вход нельзя подать нечто НЕ ваше. значит методов для изучения - ну очень мало Мало, да. Но учитывая малый размер boot-области, моё должно быть понятно и просто, и повторить его несложно. Цитата(kolobok0 @ Feb 21 2012, 13:36)  то понять что вы там нахимичили с декодировкой - утопия Если зашифровать - точно утопия. Цитата(kolobok0 @ Feb 21 2012, 13:36)  надеюсь понятна моя мысль не глубокая?  (Раневская) (круглый) Идеи нам близки
|
|
|
|
|
Feb 21 2012, 12:01
|
практикующий тех. волшебник
    
Группа: Участник
Сообщений: 1 190
Регистрация: 9-09-05
Пользователь №: 8 417

|
Цитата(_Артём_ @ Feb 21 2012, 15:46)  Чтобы гарантировано исключить возможность копирования....Но учитывая малый размер boot-области, моё должно быть понятно и просто, и повторить его несложно.... не совсем понятно зачем бут загрузчик можно повторять и должен быть понятен - хз. возможно потом вы его кому то подарите - я не в курсе...но если по теме... пример... если Вы возьмёте ваши данные поблочно переставите биты в блоке по алгоритму шахматного коня(к примеру), потом наложите ксор состоящий из 30 байт и запишите сначала все чётные потом нечётные байты. как вы думаете можно такое понять? при условии что кодировщик вы спрячите под подушкой, и обеспечите передаваемые данные таким образом, чтоб статичные данные было нельзя отловить на уровне логики??? (круглый) ЗЫ Я тут подошёл к человечку (ранее работал в известной конторе по данной проблеме - защите-взлому), он подтвердил (с оговорками конечно же  ), что ан-реал. так что применять супер-пупер алгоритмы - мягко говоря может и не имеет смысла в данных условиях... ЗЫ ЗЫ я так же недавно реализовывал то же самое в тех же железных рамках. правда понавороченнее +uart(универсал)+modbus(универсал и моя надстройка над стандартом)+прошивальщик в безотказном варианте работы+контроль работоспособности прошивки+вяские мелочи... на азме в половину не вошёл...к сожалению... но почти...может ышо ужмусь  )) . кодировщик написан на сях. на выходе каждый раз новый массив байт.
Сообщение отредактировал kolobok0 - Feb 21 2012, 12:09
|
|
|
|
|
Feb 21 2012, 12:14
|
Гуру
     
Группа: Свой
Сообщений: 2 128
Регистрация: 21-05-06
Пользователь №: 17 322

|
Цитата(kolobok0 @ Feb 21 2012, 14:01)  не совсем понятно зачем бут загрузчик можно повторять и должен быть понятен - хз. возможно потом вы его кому то подарите - я не в курсе...но если по теме... Не подарю. Он должен быть простым, потому что размер boot-области небольшой: сложное не впихнёшь. Цитата(kolobok0 @ Feb 21 2012, 14:01)  пример... если Вы возьмёте ваши данные поблочно переставите биты в блоке по алгоритму шахматного коня(к примеру), потом наложите ксор состоящий из 30 байт и запишите сначала все чётные потом нечётные байты. Ну это всё придумавать и писать надо. И тоже место какое-то займёт в boot (интересно сколько). Цитата(kolobok0 @ Feb 21 2012, 14:01)  как вы думаете можно такое понять? ЗЫ Я тут подошёл к человечку (ранее работал в известной конторе по данной проблеме - защите-взлому), он подтвердил (с оговорками конечно же  ), что ан-реал. Возможно. Цитата(kolobok0 @ Feb 21 2012, 14:01)  так что применять супер-пупер алгоритмы - мягко говоря может и не имеет смысла в данных условиях... О супер-алгоритмах речь не идёт, нужно простое.
|
|
|
|
|
Feb 27 2012, 02:49
|
Местный
  
Группа: Свой
Сообщений: 327
Регистрация: 12-04-05
Из: Новосибирск
Пользователь №: 4 057

|
Цитата(_Артём_ @ Feb 26 2012, 01:57)  Цитата(Zlumd @ Feb 21 2012, 08:43)  Мы юзаем DES-бутлоадер: Занимает почти 4KБайт. 128 байт расшифровывает за 0.5 сек при частоте 16МГц. 128 байт или 128 кБ? 128 байт На заливку 128 кБайт уходит 20 минут.
|
|
|
|
|
Feb 27 2012, 12:26
|
Частый гость
 
Группа: Участник
Сообщений: 97
Регистрация: 24-07-08
Из: Иркутск
Пользователь №: 39 180

|
Цитата(_Артём_ @ Feb 21 2012, 20:02)  А есть готовый реализации? CODE ;******************************************************************************* *** ;******************************************************************************* *** ; код TEA128Y ; меняються регистры r4, ..., r25 ;******************************************************************************* *** #ifndef TEA128_INC_ #define TEA128_INC_ .DSEG d_TEA128_DATA: .BYTE 16 d_TEA128_KEY: .BYTE 16 ;******************************************************************************* *** .CSEG .def d0=r4 .def d1=r5 .def d2=r6 .def d3=r7
.def c0=r8 .def c1=r9 .def c2=r10 .def c3=r11
.def b0=r12 .def b1=r13 .def b2=r14 .def b3=r15
.def Tea_cnta=r16 .def Tea_cntb=r17
.def s0=r18 .def s1=r19 .def s2=r20 .def s3=r21
.def a0=r22 .def a1=r23 .def a2=r24 .def a3=r25
;******************************************************************************* *** ;Обмен с памятью, загрузка костант .MACRO MLDI32 ;r3,r2,r1,r0, lab data ldi @0, @4 ldi @1, @5 ldi @2, @6 ldi @3, @7 .ENDMACRO .MACRO MLDD32 ;r3,r2,r1,r0, lab data ldd @3, Y+@4+0 ldd @2, Y+@4+1 ldd @1, Y+@4+2 ldd @0, Y+@4+3 .ENDMACRO .MACRO MLDS32 ;r3,r2,r1,r0, lab data lds @3, @4+0 lds @2, @4+1 lds @1, @4+2 lds @0, @4+3 .ENDMACRO .MACRO MSTD32 ;r3,r2,r1,r0, lab data std Y+@4+3, @0 std Y+@4+2, @1 std Y+@4+1, @2 std Y+@4+0, @3 .ENDMACRO .MACRO MSTS32 ;r3,r2,r1,r0, lab data sts @4+3, @0 sts @4+2, @1 sts @4+1, @2 sts @4+0, @3 .ENDMACRO .MACRO MSUBI32 ;r3,r2,r1,r0, data subi @3, @7 sbci @2, @6 sbci @1, @5 sbci @0, @4 .ENDMACRO .MACRO MCLR32 ;r3,r2,r1,r0 clr @0 clr @1 clr @2 clr @3 .ENDMACRO .MACRO MADD32 add @3, @7 adc @2, @6 adc @1, @5 adc @0, @4 .ENDMACRO .MACRO MSUB32 sub @3, @7 sbc @2, @6 sbc @1, @5 sbc @0, @4 .ENDMACRO .MACRO MLSL32 lsl @3 rol @2 rol @1 rol @0 .ENDMACRO .MACRO MLSR32 lsr @0 ror @1 ror @2 ror @3 .ENDMACRO .MACRO MEOR32 eor @3, @7 eor @2, @6 eor @1, @5 eor @0, @4 .ENDMACRO .MACRO FMEMCPY ldi ZL, low(@1 << 1) ldi ZH, high(@1 << 1) ldi XL, low(@0) ldi XH, high(@0) ldi r16, @2 call STX_LPM_LOOP .ENDMACRO ;******************************************************************************* *** ;******************************************************************************* *** ; кодирование ;******************************************************************************* *** ;******************************************************************************* *** Tea128_enc: ; lds YL, d_TEA128_DATA_L ; lds YH, d_TEA128_DATA_H ldi Tea_cnta,32 MCLR32 s3, s2, s1, s0 ;sum Tea128_enc_while: MSUBI32 s3, s2, s1, s0, 0x61, 0xc8, 0x86, 0x47 ; sum += delta ;******************************************************************************* *** rcall lfunc_y MADD32 a3, a2, a1, a0, d3, d2, d1, d0 MSTD32 a3, a2, a1, a0, 0;d_TEA128_DATA+0 ; Сохранил y ;******************************************************************************* *** rcall lfunc_z MADD32 a3, a2, a1, a0, d3, d2, d1, d0 MSTD32 a3, a2, a1, a0, 4;d_TEA128_DATA+4 ; Сохранил z ;******************************************************************************* *** dec Tea_cnta breq Tea128_enc_end rjmp Tea128_enc_while Tea128_enc_end: ret ;******************************************************************************* *** ;******************************************************************************* *** ; декодирование ;******************************************************************************* *** Tea128_dec: ; lds YL, d_TEA128_DATA_L ; lds YH, d_TEA128_DATA_H ldi Tea_cnta,32 MLDI32 s3, s2, s1, s0, 0xC6, 0xEF, 0x37, 0x20 ;sum Tea128_dec_while: ;******************************************************************************* *** rcall lfunc_z MSUB32 a3, a2, a1, a0, d3, d2, d1, d0 MSTD32 a3, a2, a1, a0, 4;d_TEA128_DATA+4 ; Сохранил z ;******************************************************************************* *** rcall lfunc_y MSUB32 a3, a2, a1, a0, d3, d2, d1, d0 MSTD32 a3, a2, a1, a0, 0;d_TEA128_DATA+0 ; Сохранил y ;******************************************************************************* *** MSUBI32 s3, s2, s1, s0, 0x9E, 0x37, 0x79, 0xB9 ; sum -= delta dec Tea_cnta breq Tea128_dec_end rjmp Tea128_dec_while Tea128_dec_end: ret ;******************************************************************************* *** lfunc: movw d0,a0 movw d2,a2 ldi Tea_cntb,4 lshift4: MLSL32 d3, d2, d1, d0 dec Tea_cntb brne lshift4 MADD32 d3, d2, d1, d0, b3, b2, b1, b0 ;воспользуюсь b0...3 movw b0,a0 movw b2,a2 ldi Tea_cntb,5 rshift5: MLSR32 b3, b2, b1, b0 dec Tea_cntb brne rshift5 MADD32 b3, b2, b1, b0, c3, c2, c1, c0 MEOR32 d3, d2, d1, d0, b3, b2, b1, b0 MADD32 a3, a2, a1, a0, s3, s2, s1, s0 MEOR32 d3, d2, d1, d0, a3, a2, a1, a0 ret ;******************************************************************************* *** lfunc_y: MLDD32 a3, a2, a1, a0, 4;d_TEA128_DATA+4 ; Загрузил z MLDS32 b3, b2, b1, b0, d_TEA128_KEY+0 ; Загрузил k[0] MLDS32 c3, c2, c1, c0, d_TEA128_KEY+4 ; Загрузил k[1] rcall lfunc ; результата d0...3 MLDD32 a3, a2, a1, a0, 0;d_TEA128_DATA+0 ; Загрузил y ret ;******************************************************************************* *** lfunc_z: MLDD32 a3, a2, a1, a0, 0;d_TEA128_DATA+0 ; Загрузил y MLDS32 b3, b2, b1, b0, d_TEA128_KEY+8 ; Загрузил k[2] MLDS32 c3, c2, c1, c0, d_TEA128_KEY+12 ; Загрузил k[3] rcall lfunc ; результата d0...3 MLDD32 a3, a2, a1, a0, 4;d_TEA128_DATA+4 ; Загрузил z ret ;******************************************************************************* *** d_TEA128_KEY_DB: .db 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff TEA128_KEY_INIT: ; ldi YL, low(d_TEA128_DATA) ; ldi YH, high(d_TEA128_DATA) ; sts d_TEA128_DATA_L, YL ; sts d_TEA128_DATA_H, YH FMEMCPY d_TEA128_KEY, d_TEA128_KEY_DB, 16 ret #endif /* TEA128_INC_ */
вот математика на asm, давно делал  RTEA может выйти и покороче.
|
|
|
|
|
Feb 27 2012, 12:49
|
Гуру
     
Группа: Свой
Сообщений: 2 128
Регистрация: 21-05-06
Пользователь №: 17 322

|
Цитата(e-serg @ Feb 27 2012, 14:26)  вот математика на asm, давно делал  RTEA может выйти и покороче. Это Цитата только раскодировать уже 276 байт ? Ассемблер IAR или чей?
|
|
|
|
|
Feb 28 2012, 03:05
|
Местный
  
Группа: Свой
Сообщений: 327
Регистрация: 12-04-05
Из: Новосибирск
Пользователь №: 4 057

|
Цитата(_Артём_ @ Feb 27 2012, 19:04)  Чот как-то медленно... Вам так не кажется? Конечно медленно. В DES много битовых перестановок. Быстрее не получается сделать.
|
|
|
|
|
Feb 28 2012, 11:49
|
Частый гость
 
Группа: Участник
Сообщений: 97
Регистрация: 24-07-08
Из: Иркутск
Пользователь №: 39 180

|
Цитата(_Артём_ @ Feb 27 2012, 21:49)  Ассемблер IAR или чей? AvrStudio ASM
|
|
|
|
|
Feb 28 2012, 12:24
|
Гуру
     
Группа: Свой
Сообщений: 2 128
Регистрация: 21-05-06
Пользователь №: 17 322

|
Цитата(Zlumd @ Feb 28 2012, 05:05)  Конечно медленно. В DES много битовых перестановок. Много, не отрицаю. Цитата(Zlumd @ Feb 28 2012, 05:05)  Быстрее не получается сделать. Из appnote Atmel для 16kB: Цитата DES, 115200 Bauds, 16 MHz Target Frequency: 20 Seconds Цитата На заливку 128 кБайт уходит 20 минут. Минут трёх должно хватать. Если Atmel нам не врёт. Цитата(e-serg @ Feb 28 2012, 13:49)  AvrStudio ASM Ясно. На Си не пробовали? Размер намного больше получается?
|
|
|
|
|
Feb 28 2012, 16:50
|

Местный
  
Группа: Участник
Сообщений: 340
Регистрация: 25-11-05
Из: Россия
Пользователь №: 11 361

|
1. "Размер boot-области желательно сделать поменьше - 1 кБ максимум" ... делаю вывод, что ориентируемся на младшие модели ... 2. Если модели "младшие", что можно на них сотворить "такое" - "неповторяемое" в принципе ? 3. Если оно в принципе "повторяемое" - то к чему стремление к Супер защите ? P.S. "В рассуждениях О ... " солидарен с " kolobok0" P.P.S. Цитата На заливку 128 кБайт уходит 20 минут - физиономию пользователя в студию !
--------------------
"... Ищущий вечно, однажды найдя, то, что искал бесконечно, мимо прошёл, совершенно беспечно, с кем-то о вечном шутя ..."
|
|
|
|
|
Feb 28 2012, 16:57
|
Гуру
     
Группа: Свой
Сообщений: 2 128
Регистрация: 21-05-06
Пользователь №: 17 322

|
Цитата(DrGluck @ Feb 28 2012, 18:50)  1. "Размер boot-области желательно сделать поменьше - 1 кБ максимум" ... делаю вывод, что ориентируемся на младшие модели ... Верно. Цитата(DrGluck @ Feb 28 2012, 18:50)  2. Если модели "младшие", что можно на них сотворить "такое" - "неповторяемое" в принципе ? 3. Если оно в принципе "повторяемое" - то к чему стремление к Супер защите ? А что вообще можно "неповторяемое" сделать? Всё повторяемое и в принципе и в кожухе. Всё повторить можно, но это не повод от защиты отказываться. Цитата(DrGluck @ Feb 28 2012, 18:50)  Супер защите ? Что там "Супер"? Обычное шифрование. Цитата(DrGluck @ Feb 28 2012, 18:50)  P.P.S. - физиономию пользователя в студию ! Ногами всёж не бейте его.
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|