Микроконтролери и електроника
http://mcu-bg.com/mcu_site/

Криптиране: търся прост, надежден, комутативен алгоритъм :)
http://mcu-bg.com/mcu_site/viewtopic.php?f=3&t=15069
Страница 1 от 2

Автор:  NikB [ Сря Фев 15, 2017 12:14 pm ]
Заглавие:  Криптиране: търся прост, надежден, комутативен алгоритъм :)

Извинявам се за дилетантското питане :):

Криптиране: търся прост, надежден, комутативен алгоритъм (харчещ малко ресурси за нископроизводителен ембедед).
Комутативен, в смисъл, да позволява "разместване" на декодиранията :

Данни0 -> кодиране с ключ1 -> Данни01
Данни01 -> кодиране с ключ2 -> Данни012
Данни012 -> декодиране с ключ1 -> Данни02
Данни02 -> декодиране с ключ2 -> Данни0

:)

Благодаря!

Автор:  t_i_t_o [ Сря Фев 15, 2017 3:20 pm ]
Заглавие:  Re: Криптиране: търся прост, надежден, комутативен алгоритъм

XTEA - 64bit data chunk, 128bit key
KeeLoq - 32bit data chunk, 64bit key

Автор:  tolstolob [ Сря Фев 15, 2017 3:43 pm ]
Заглавие:  Re: Криптиране: търся прост, надежден, комутативен алгоритъм

https://en.wikipedia.org/wiki/XXTEA
Key sizes: 128 bits
Block sizes: arbitrary, at least two words (64 bits)

Като скорост: ~3ms за блок от 64 байта, PIC18 @ 64MHz.

Автор:  MYXATA [ Сря Фев 15, 2017 5:41 pm ]
Заглавие:  Re: Криптиране: търся прост, надежден, комутативен алгоритъм

повечето съвременни микроконтролери имат крипто ускорители.
такак че избери си контролер, и ще имаш - най-вероятно AES с повечето модове хардкоднати и SHA
така че си имаш криптопериферия дето може да я ползваш с ДМА и прочие.
другото е да си пишеш алого сам, което не еголама философия, но да се провери имплементацията и по-голямата философия.

Автор:  woody [ Сря Фев 15, 2017 6:06 pm ]
Заглавие:  Re: Криптиране: търся прост, надежден, комутативен алгоритъм

Симетричните алгоритми не покриват условието описано като "комутативност" в заданието.

Автор:  TheWizard [ Сря Фев 15, 2017 6:44 pm ]
Заглавие:  Re: Криптиране: търся прост, надежден, комутативен алгоритъм

може да си го обърнеш на Ц, че не мога да си намеря либ-а

function Encrypt(const InString: string; StartKey, MultKey, AddKey: Integer):string;
var
i: Integer;
begin
Result := '';
for i := 1 to Length(InString) do
begin
Result := Result + CHAR(Byte(InString[i]) xor (StartKey shr 8) xor (Length(InString)+1-i));
StartKey := (Byte(Result[i]) + StartKey) * MultKey + AddKey;
end;
end;

function Decrypt(const InString: string; StartKey, MultKey, AddKey: Integer): string;
var
i: Integer;
begin
Result := '';
for i := 1 to Length(InString) do
begin
Result := Result + CHAR(Byte(InString[i]) xor (StartKey shr 8) xor (Length(InString)+1-i));
StartKey := (Byte(InString[i]) + StartKey) * MultKey + AddKey;
end;
end;

Автор:  ike [ Сря Фев 15, 2017 7:03 pm ]
Заглавие:  Re: Криптиране: търся прост, надежден, комутативен алгоритъм

Това, че криптирането е с "комутативен алгоритъм" малко ме притеснява да не се получи някой тривиален хак.
Данни0 -> кодиране с ключ1 -> Данни01
Данни01 -> кодиране с ключ2 -> Данни012

ХакДанни0 -> кодиране с ключ1 -> ХакДанни01
ХакДанни01 -> кодиране с ключ2 -> ХакДанни012

Данни012 xor ХакДанни012 xor ХакДанни0 = Данни0

Автор:  TheWizard [ Сря Фев 15, 2017 7:43 pm ]
Заглавие:  Re: Криптиране: търся прост, надежден, комутативен алгоритъм

const MultKey, AddKey: PRIVATE
първи в масива START_KEY( RND при криптиране (или Данни:Номер, нещо да се променя) )

const MultKey, AddKey: PRIVATE
при декрипт: get START_KEY...MultKey, AddKey

готин за малки приложения (горе от примера на паскал)... ползвал съм го много пъти - бачка си екстра

Автор:  TheWizard [ Сря Фев 15, 2017 7:56 pm ]
Заглавие:  Re: Криптиране: търся прост, надежден, комутативен алгоритъм

офтопик: някой знае ли как се нарича алгоритъмa, при който PRIVATE KEY е масив BYTE[256] разбъркани числата от 0 до 255

Автор:  NikB [ Чет Фев 16, 2017 12:09 pm ]
Заглавие:  Re: Криптиране: търся прост, надежден, комутативен алгоритъм

Наложиха ми Diffie–Hellman key exchange.
Моля, препоръчайте ми embeded библиотека :)

Автор:  woody [ Чет Фев 16, 2017 3:21 pm ]
Заглавие:  Re: Криптиране: търся прост, надежден, комутативен алгоритъм

Нещо подобно и аз щях да ти кажа, ама хич не се връзва с условията ти за бавно MCU.

Автор:  MYXATA [ Чет Фев 16, 2017 4:49 pm ]
Заглавие:  Re: Криптиране: търся прост, надежден, комутативен алгоритъм

NikB написа:
Наложиха ми Diffie–Hellman key exchange.
Моля, препоръчайте ми embeded библиотека :)

мхъмм, само им кажи на наложилите Diffie–Hellman key exchange, е малко податливо на men-in-the-middle аттаки.

Автор:  DanielDimov [ Съб Фев 18, 2017 6:20 pm ]
Заглавие:  Re: Криптиране: търся прост, надежден, комутативен алгоритъм

Diffie-Hellman key exchange е каквото казва името му - метод за обмен на ключове. Този метод решава въпроса с получаването на един и същи ключ и при двете страни, които си комуникират по несигурен канал. Имаш обаче още въпроси за решаване: автентикацията и самото криптиране.

За автентикацията:
За да си сигурен, че комуникираш с правилното у-во и то да е сигурно че комуникира с правилния сървър трябва да имаш асиметрични ключове и да ползваш "Static" версията на DH. Ключовете трябва да са заредени в у-вото с микроконтролера и в сървъра предварително! Ако ползваш нормалната версия на DH, която се нарича "Ephemeral" - тя е без автентикация и както колегата преди мен е написал - е податлива на MITM атака.

За криптирането:
След като и двете ти системи имат ключа от предната стъпка - трябва да измислиш как да криптираш... Най-добре ползвай класиката AES-128. Няма голям смисъл от повече битове, а и става прекалено тежко за микроконтролер. За да е читаво криптирането с AES трябва много добре да се измисли "схемата на осоляване", тоест какво и как да добавяш в криптирането за да не може да бъде хванат ключа! На алгоритъма AES се подават две 128-битови числа и той изплюва трето 128-битово число. Ако едното от входящите е ключа от предната стъпка, то второто трябва да е нещо различно за всяко криптирано съобщение (примерно случайно 96-битово число, а останалите 32 бита да са пореден номер на блок). Няма проблем да добавиш променливата част в хедъра на съобщението - то не може да послужи за нищо без да разполагаш с ключа. Самото криптиране на данните се прави с XOR между тях и резултата от AES алгоритъма. Декриптирането от другата страна е по същия начин защото резултата от алгоритъма ще е същия - имаш същия ключ, същото случайно число и правилния номер на блок.

Има една библиотека която се казва libtom - в нея има и DH и AES и още много други крипто-алгоритми - мисля че ще ти свърши идеална работа.

Автор:  NikB [ Съб Фев 18, 2017 7:50 pm ]
Заглавие:  Re: Криптиране: търся прост, надежден, комутативен алгоритъм

Благодаря ти за изчерпателния отговор!
Вече имам AES-256 (заради твоя пост се замислям за 128 :)). Взех от от тук: http://www.literatecode.com/aes256

Имам десетина дни да реша какво и как да правя.
Това с "осоляването" го разбирам като промяна на алгоритъма, за да бъде уникален, и да не влиза в стандартните схеми за декриптиране ли?

Мисля DH да го модифицирам малко: От двете страни (девайса и сървъра) да помня по две таблици с прости числа и вместо обмяна на самите числа (p и q, по популярните означения) , да обменям индексите им.
Това би ли имало смисъл?

ПП
А, да :) : Изискванията са за "средно ниво ма сигурност ":)

Автор:  ike [ Съб Фев 18, 2017 8:04 pm ]
Заглавие:  Re: Криптиране: търся прост, надежден, комутативен алгоритъм

NikB написа:
ПП
А, да :) : Изискванията са за "средно ниво ма сигурност ":)


Явно съм прекалено анален, но не бих могъл да спя спокойно, ако не съм го направил както трябва.
Осносно осоляването, прочети първия резултат от wiki, като напишеш сол и криптиране.

Страница 1 от 2 Часовете са според зоната UTC + 2 часа [ DST ]
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/