Сейчас на форуме: asfa, Rio (+6 невидимых)

 eXeL@B —› Вопросы новичков —› Асиметричное шифрование
. 1 . 2 . >>
Посл.ответ Сообщение


Ранг: 756.3 (! !), 113thx
Активность: 0.610.05
Статус: Участник
Student

Создано: 22 сентября 2013 22:16 · Поправил: Isaev
· Личное сообщение · #1

Хотелось бы какой-нибудь алго использовать (как защиту от дурака) асиметричный
чтобы была минимальная нагрузка на клиент(быстро работал)
ключ в пределах 64-128бит более чем достаточно(может даже 32)

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

может кто писал что своё простенькое(строк на 10-30 кода), или от моего внимания улизнул стандартный алго, подходящий для этих целей
не хотелось бы пользовать монстров типа aes

-----
z+Dw7uLu5+jqLCDq7vLu8PvpIPHs7uMh





Ранг: 1053.6 (!!!!), 1078thx
Активность: 1.060.81
Статус: Участник

Создано: 22 сентября 2013 22:29
· Личное сообщение · #2

у меня дежавю,
уже были такие темы ищите и найдете!



Ранг: 0.4 (гость)
Активность: 0=0
Статус: Участник

Создано: 22 сентября 2013 22:36
· Личное сообщение · #3

Есть небольшая и медленная реализация AES, в которой ключи шифрования и расшифровки разные.
При шифровании генерируется ключ расшифровки и наоборот.
Ищите "Byte Oriented AES (Low Resource Version)".
http://gladman.plushost.co.uk/oldsite/AES/




Ранг: 1053.6 (!!!!), 1078thx
Активность: 1.060.81
Статус: Участник

Создано: 22 сентября 2013 22:41
· Личное сообщение · #4

да таких аес вагон, с dcrypto у ntldr можете взять) там тоже есть мини

но всеже ближе к теме, такую тему уже на лабе поднимали, и дельные ответы давали,
темы увы не помню




Ранг: 756.3 (! !), 113thx
Активность: 0.610.05
Статус: Участник
Student

Создано: 22 сентября 2013 23:40 · Поправил: Isaev
· Личное сообщение · #5

reversecode пишет:
уже были такие темы ищите и найдете!

вот я что-то не нашел... стал бы я новую создавать

-----
z+Dw7uLu5+jqLCDq7vLu8PvpIPHs7uMh




Ранг: 369.8 (мудрец), 400thx
Активность: 0.390
Статус: Участник

Создано: 23 сентября 2013 08:43
· Личное сообщение · #6

Isaev пишет:
не хотелось бы пользовать монстров типа aes

AES это симмитричный алгоритм, он вам принципиально не подходит.

Isaev пишет:
ключ в пределах 64-128бит

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

Isaev пишет:
простенькое(строк на 10-30 кода)

Простенькое - это только через OpenSSL, CryptoAPI или какую-нибудь другую библиотеку. Иначе даже 100 строк никак не получается.

-----
PGP key <0x1B6A24550F33E44A>


| Сообщение посчитали полезным: Isaev

Ранг: 590.4 (!), 408thx
Активность: 0.360.18
Статус: Модератор

Создано: 23 сентября 2013 10:38
· Личное сообщение · #7

ntldr
Почему бы a^b mod c не уложиться в 100 строк?

-----
старый пень





Ранг: 1053.6 (!!!!), 1078thx
Активность: 1.060.81
Статус: Участник

Создано: 23 сентября 2013 10:52
· Личное сообщение · #8

вот эта похожая тема --> Link <--



Ранг: 369.8 (мудрец), 400thx
Активность: 0.390
Статус: Участник

Создано: 23 сентября 2013 11:18
· Личное сообщение · #9

r_e пишет:
Почему бы a^b mod c не уложиться в 100 строк?

Может потому что либа для работы с большими числами больше 100 строк? Плюс нужен хэш для ЭЦП или симметрик для шифрования. Хотя, может быть можно и ужать. Если делать на готовых либах, то 10 строк без вопросов.

-----
PGP key <0x1B6A24550F33E44A>





Ранг: 1053.6 (!!!!), 1078thx
Активность: 1.060.81
Статус: Участник

Создано: 23 сентября 2013 11:27 · Поправил: reversecode
· Личное сообщение · #10

есть много либ с большими числами на мизерное количество строк
в том же platform_system_core\libmincrypt
да и вообще много где
правда если именно шифрование дешифрование, и ключ уже сгенерен
деление простым не бывает, и все 100 строк займет

докучи
есть еще на с++ с шаблонами
libcage\src\bn.hpp

| Сообщение посчитали полезным: ntldr, Isaev

Ранг: 369.8 (мудрец), 400thx
Активность: 0.390
Статус: Участник

Создано: 23 сентября 2013 11:29
· Личное сообщение · #11

https://android.googlesource.com/platform/system/core/+/master/libmincrypt/rsa_e_f4.c
Действительно очень компактная реализация. Правда к ней еще нужно добавить SHA.

-----
PGP key <0x1B6A24550F33E44A>




Ранг: 162.4 (ветеран), 11thx
Активность: 0.060
Статус: Участник

Создано: 23 сентября 2013 15:01 · Поправил: SWR
· Личное сообщение · #12

под винду свой крупто API есть. Там RSA аппаратно реализуется если есть.

в polarssl неплохая реализация. С асм вставками для аппаратного RSA (если проц поддерживает).


Для коротких ключей лучше на элептических кривых алг найти



Ранг: 590.4 (!), 408thx
Активность: 0.360.18
Статус: Модератор

Создано: 23 сентября 2013 16:21
· Личное сообщение · #13

ntldr
Какие большие числа? Человек спрашивал про алго с 32/64/128-битным ключем. Тут можно вообще не заморачиваться и crc32 как дайджест использовать + m^3 mod n как ассиметрику.

-----
старый пень


| Сообщение посчитали полезным: DimitarSerg


Ранг: 756.3 (! !), 113thx
Активность: 0.610.05
Статус: Участник
Student

Создано: 23 сентября 2013 16:30
· Личное сообщение · #14

r_e пишет:
Какие большие числа? Человек спрашивал про алго с 32/64/128-битным ключем. Тут можно вообще не заморачиваться и crc32 как дайджест использовать + m^3 mod n как ассиметрику.

именно в таком духе и хотелось бы найти
можно даже ещё проще с банальными сдвигами и ксорами
типа такого:
Code:
  1. Function MixByte(B:Byte;H:DWord):Byte;
  2. Var
  3.   A,M,N:Byte;
  4. Begin
  5.   Result:=0;
  6.   For N:=0 To 7 Do
  7.     Begin
  8.       A:=Shr ((7-N) Div 2 Shl 3) Shr (Ord(Not(Odd(N)))*4) And $F;
  9.       M:=And (1 Shl A);
  10.       If N+A<7 Then Result:=Result Or M Shl (7-N-A)
  11.                Else Result:=Result Or M Shr (N+A-7);
  12.     End;
  13. End;
  14.  
  15. MixByte(Byte,$24157063);

но не на столько примитивно

а если существует то, что ты написал, будет вообще отлично

-----
z+Dw7uLu5+jqLCDq7vLu8PvpIPHs7uMh





Ранг: 1053.6 (!!!!), 1078thx
Активность: 1.060.81
Статус: Участник

Создано: 23 сентября 2013 16:33
· Личное сообщение · #15

делай rsa на пальцах) кто мешает, 32 бита хватит



Ранг: 162.4 (ветеран), 11thx
Активность: 0.060
Статус: Участник

Создано: 23 сентября 2013 20:08
· Личное сообщение · #16

ну с таким размером ключа, смысла нет городить.
Проще и надежней кодом запутывать.

Сделать хитрожопную стейт машину.

на вход хеш на выходе другой для сверки.
Использовать разрозненные классы на виртуальных методах чтоб не рипнули быстро.



Ранг: 590.4 (!), 408thx
Активность: 0.360.18
Статус: Модератор

Создано: 23 сентября 2013 20:18
· Личное сообщение · #17

Вот заготовка из гугла.
Code:
  1. template <typename T>
  2. T modpow(T base, T exp, T modulus)
  3. {
  4.     base %= modulus;
  5.     T result = 1;
  6.     while (exp > 0)
  7.     {
  8.         if (exp & 1) result = (result * base) % modulus;
  9.         base = (base * base) % modulus;
  10.         exp >>= 1;
  11.     }
  12.     return result;
  13. }


Я немного не согласен с типизацией, но это можно легко допилить. Внутренний тип результата должен быть вдвое больше типа параметров и результата функции. Так что для T=UINT32 нужен UINT64 для внутренних вычислений.
crc32 еще даст строк 10 кода.

Sign = modpow(crc32(m), PrivateKey, N);
Verify = crc32(m) == modpow(Sign, PublicKey, N);

Шифрованный канал передачи тебе вроде не нужен, но его можно просто сделать через диффи-хелмана + PRNG в качестве гаммы.

-----
старый пень


| Сообщение посчитали полезным: Isaev, OnLyOnE


Ранг: 756.3 (! !), 113thx
Активность: 0.610.05
Статус: Участник
Student

Создано: 23 сентября 2013 21:23 · Поправил: Isaev
· Личное сообщение · #18

SWR пишет:
ну с таким размером ключа, смысла нет городить.
Проще и надежней кодом запутывать.

Сделать хитрожопную стейт машину.

на вход хеш на выходе другой для сверки.
Использовать разрозненные классы на виртуальных методах чтоб не рипнули быстро.

я то сделаю, да на другой стороне не я, ему всё это на php переводить придется))

r_e пишет:
но это можно легко допилить.

во, компактно) пойду гонять и допиливать, посмотрим как оно себя покажет

-----
z+Dw7uLu5+jqLCDq7vLu8PvpIPHs7uMh




Ранг: 71.2 (постоянный), 33thx
Активность: 0.050.12
Статус: Участник

Создано: 23 сентября 2013 21:51 · Поправил: kunix
· Личное сообщение · #19

r_e, Isaev
На PHP у функции modpow будут проблемы из-за переполнения и потери точности (целое сконвертится во float).
Плюс с такой "огромной" длиной ключа вполне доступен прямой перебор приватных ключей, не говоря уже о факторизации модуля, что слегонца сделает даже Wolfram Alpha.

Какой смысл делать асимметрию, если она сломается любым киддисом после недолгого реверсинга? Может тогда уже лучше сделать сложную симметрию?



Ранг: 590.4 (!), 408thx
Активность: 0.360.18
Статус: Модератор

Создано: 23 сентября 2013 23:00
· Личное сообщение · #20

kunix
Смотри постановку задачи. А так, ясен пень, меньше 1024 бит РСА либо меньше 160 бит ЕСС делать смысла нет.

-----
старый пень




Ранг: 71.2 (постоянный), 33thx
Активность: 0.050.12
Статус: Участник

Создано: 23 сентября 2013 23:07
· Личное сообщение · #21

r_e
Я как раз посмотрел задачу. Если асимметрия некриптостойкая, то она ничем не лучше симметрии.
И в этом случае победит алгоритм, который сложнее раздизасмить/выдрать.
А modpow легко раздизасмить.



Ранг: 590.4 (!), 408thx
Активность: 0.360.18
Статус: Модератор

Создано: 24 сентября 2013 00:51
· Личное сообщение · #22

kunix
Она лучше симметрии тем что через нее реализуются подпись/верификация и выработка общих ключей.
Каким образом симметрия вообще применима к предложенной выше задаче? Симметричные алго там вообще не подходят по условию. Разве что white box реализация. Да и то спорно что не сломают.

-----
старый пень




Ранг: 71.2 (постоянный), 33thx
Активность: 0.050.12
Статус: Участник

Создано: 24 сентября 2013 00:56
· Личное сообщение · #23

r_e
Если асимметрия слабая, то дизасма алгоритма и нахождения публичного ключа достаточно для взлома.
В случае и подписи и в случае генерации общих ключей. Согласны?
То есть, алгоритм и публичный ключ должны быть секретными.

Аналогичный случай и с симметрией. Ее можно использовать и для подписи и для передачи общего ключа. Но нужен секретный ключ.

Итак, в обоих случаях злоумышленник не должен получить некий секрет. В чем тогда принципиальная разница?



Ранг: 590.4 (!), 408thx
Активность: 0.360.18
Статус: Модератор

Создано: 24 сентября 2013 01:07 · Поправил: r_e
· Личное сообщение · #24

kunix
Принципиальная разница в том что ассиметрия не требует никаких секретов на стороне клиента и легко масштабируется. Для симметричного варианта прийдется сплясать с бубном чтобы достичь той же гибкости.
В защиту симметрии можно только сказать что ее стойкость растет заметно быстрее с ростом длины ключа.
Беда только в том что прийдется ключ на клиенте прятать нетривиально. А если что-то прятать в коде (обфускация и прочее), то проще уже залинковать CryptoPP со стойкой ассиметрией.

-------
Да, кстати, можно даже реализовать стойкую ассиметрию в заданных объемах кода. modpow элементарно реализуется на массиве/векторе. С хешем только проблема.

-----
старый пень




Ранг: 71.2 (постоянный), 33thx
Активность: 0.050.12
Статус: Участник

Создано: 24 сентября 2013 01:12 · Поправил: kunix
· Личное сообщение · #25

r_e пишет:
Принципиальная разница в том что ассиметрия не требует никаких секретов на стороне клиента

Так у нас же речь идет о слабой асимметрии, верно? Так звучало ТЗ топикстартера.
Я вам только что убедительно показал, что при слабой асимметрии секретом являются ключ и алгоритм.
r_e пишет:
то проще уже залинковать CryptoPP со стойкой ассиметрией.

Если вы так сделаете, то можно будет подменить/прочитать данные на выходе алгоритма дешифровки.
И таким образом отломается проверка подписи и генерация общего ключа. Так что, CryptoPP тоже нужно обфусцировать.

Я никак не против стойкой асимметрии, защищенной обфускацией/шифрованием кода/контрольными суммами. Но в топике речь идет о другом.



Ранг: 590.4 (!), 408thx
Активность: 0.360.18
Статус: Модератор

Создано: 24 сентября 2013 01:21 · Поправил: r_e
· Личное сообщение · #26

kunix
"Убедительно что?..." Вы сами пишете что ТЗ звучало "слабая ассиметрия" и тут же предлагаете какую-то херь с симметрией. Топикстартер написал "защита от дурака".

Если Вы собираетесь подменять что-то на выходе алго дешифровки, то тут не помогут ни симметрия ни пляски голым в лунную ночь.
Интересно, как Вы собираетесь обеспечить бесшовную обфускацию симметрии и проверки подписи?

kunix пишет:
Я никак не против стойкой асимметрии, защищенной обфускацией/шифрованием кода/контрольными суммами. Но в топике речь идет о другом.

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

-----
старый пень




Ранг: 71.2 (постоянный), 33thx
Активность: 0.050.12
Статус: Участник

Создано: 24 сентября 2013 01:32 · Поправил: kunix
· Личное сообщение · #27

r_e
Я не знаю, вы спали плохо или пьяны может.

Я же необфусцированным текстом написал, что слабая самопальная асимметрия ничем не отличается от слабой самопальной симметрии, ибо для взлома достаточно ее раздизасмить и найти ключ.
Только в случае симметрии взлом уже будет совершен, а в случае асимметрии еще надо будет подобрать приватный ключ (например, вызвать modpow 2^32 раз), что тривиально.
Итак, разницы почти нет в случае "защиты от дурака".
С этим утверждением спорить будете или нет?

r_e пишет:
Если Вы собираетесь подменять что-то на выходе алго дешифровки, то тут не помогут ни симметрия ни пляски голым в лунную ночь.Интересно, как Вы собираетесь обеспечить бесшовную обфускацию симметрии и проверки подписи?

Никто не собирается ничего подменять, это ответ на ваш CryptoPP, который вообще не в тему в этом топике.

r_e пишет:
А то что Вы пишете - это прошлый век.

Я рад, что вы такой продвинутый. Но топик не об этом.

UPD:
Не, есть еще другой тип асимметрии, когда алгоритмы дешифровки и шифрования разные.
Злоумышленнику придется по алгоритму дешифровки восстанавливать алгоритм шифрования, что может быть непросто. Но modpow - не тот случай.

И даже в этом случае можно тупо подбирать шифротекст до получения нужного плейнтекста, что сработает при слабой асимметрии. Т.е. цифровая подпись сломается.



Ранг: 590.4 (!), 408thx
Активность: 0.360.18
Статус: Модератор

Создано: 24 сентября 2013 01:51 · Поправил: r_e
· Личное сообщение · #28

kunix
Давайте вернемся к вашему первому посту и прочитаем что вы предлагаете. А именно вместо слабой ассиметрии использовать сложную симметрию. К чему это предложение? Почему тогда не использовать сложную ассиметрию?
Затем вы пытаетесь спорить с очевидными вещами, вроде того что слабая ассиметрия уязвима. Да и черт с ней. Это вполне устраивает ТС.
В чем суть-то вашего предложения? В чем выгода от использовании симметрии в данном случае? Меньше кода будет при большей стойкости?

-----
старый пень




Ранг: 71.2 (постоянный), 33thx
Активность: 0.050.12
Статус: Участник

Создано: 24 сентября 2013 01:54 · Поправил: kunix
· Личное сообщение · #29

Выгода элементарная. ТС не выдумывает велосипедов, а за 10 минут пишет блочный быдло-шифр (можно не криптостойкий, лол) c XOR и ADD плюс немного нелинейности, который легко реализуем в PHP. Из него сразу же получает поточный шифр и хеш. Задача решена.

Ибо этот блочный шифр будет точно так же уязвим к реверсингу, как modpow и другая некриптостойкая асимметрия.
Но напрягать фантазию не нужно. Вообще.



Ранг: 590.4 (!), 408thx
Активность: 0.360.18
Статус: Модератор

Создано: 24 сентября 2013 02:08
· Личное сообщение · #30

Вы страшный человек. ггг =)
Чего уж там: E(x) = D(x) = ~x, Sign(m) = E(Sum(m[i]))...

-----
старый пень



. 1 . 2 . >>
 eXeL@B —› Вопросы новичков —› Асиметричное шифрование
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати