| Микроконтролери и електроника 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 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 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: Криптиране: търся прост, надежден, комутативен алгоритъм | |||||||||
мхъмм, само им кажи на наложилите 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 Имам десетина дни да реша какво и как да правя. Това с "осоляването" го разбирам като промяна на алгоритъма, за да бъде уникален, и да не влиза в стандартните схеми за декриптиране ли? Мисля DH да го модифицирам малко: От двете страни (девайса и сървъра) да помня по две таблици с прости числа и вместо обмяна на самите числа (p и q, по популярните означения) , да обменям индексите им. Това би ли имало смисъл? ПП А, да |
|
| Автор: | ike [ Съб Фев 18, 2017 8:04 pm ] | |||||||||
| Заглавие: | Re: Криптиране: търся прост, надежден, комутативен алгоритъм | |||||||||
Явно съм прекалено анален, но не бих могъл да спя спокойно, ако не съм го направил както трябва. Осносно осоляването, прочети първия резултат от wiki, като напишеш сол и криптиране. |
||||||||||
| Страница 1 от 2 | Часовете са според зоната UTC + 2 часа [ DST ] |
| Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |
|