eXeLab
eXeL@B ВИДЕОКУРС !

ВИДЕОКУРС ВЗЛОМ
выпущен 2 сентября!


УЗНАТЬ БОЛЬШЕ >>
Домой | Статьи | RAR-cтатьи | FAQ | Форум | Скачать | Видеокурс
Новичку | Ссылки | Программирование | Интервью | Архив | Связь

Русский / Russian English / Английский

Сейчас на форуме: Follower, maddmaks, sty, ARCHANGEL (+4 невидимых)
 · Начало · Статистика · Регистрация · Поиск · ПРАВИЛА ФОРУМА · Язык · RSS · SVN ·

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


Ранг: 755.3 (! !)
Статус: Участник
Student

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

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

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

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


Ранг: 1011.4 (!!!!)
Статус: Участник

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

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

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

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

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


Ранг: 1011.4 (!!!!)
Статус: Участник

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

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

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


Ранг: 755.3 (! !)
Статус: Участник
Student

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

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

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

Ранг: 370.2 (мудрец)
Статус: Участник

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

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

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

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

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

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

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

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


Ранг: 573.6 (!)
Статус: Модератор

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

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


Ранг: 1011.4 (!!!!)
Статус: Участник

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

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

Ранг: 370.2 (мудрец)
Статус: Участник

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

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

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


Ранг: 1011.4 (!!!!)
Статус: Участник

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

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

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

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


Ранг: 370.2 (мудрец)
Статус: Участник

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

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

Ранг: 162.4 (ветеран)
Статус: Участник

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

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

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


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

Ранг: 573.6 (!)
Статус: Модератор

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

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

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



Ранг: 755.3 (! !)
Статус: Участник
Student

Создано: 23 сентября 2013 16:30 New!
Цитата · Личное сообщение · #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);

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

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


Ранг: 1011.4 (!!!!)
Статус: Участник

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

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

Ранг: 162.4 (ветеран)
Статус: Участник

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

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

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

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

Ранг: 573.6 (!)
Статус: Модератор

Создано: 23 сентября 2013 20:18 New!
Цитата · Личное сообщение · #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



Ранг: 755.3 (! !)
Статус: Участник
Student

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

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

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

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

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

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

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

Ранг: 66.0 (постоянный)
Статус: Участник

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

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

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

Ранг: 573.6 (!)
Статус: Модератор

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

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

Ранг: 66.0 (постоянный)
Статус: Участник

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

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

Ранг: 573.6 (!)
Статус: Модератор

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

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

Ранг: 66.0 (постоянный)
Статус: Участник

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

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

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

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

Ранг: 573.6 (!)
Статус: Модератор

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

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

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

Ранг: 66.0 (постоянный)
Статус: Участник

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

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

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

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

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

Ранг: 573.6 (!)
Статус: Модератор

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

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

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

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

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

Ранг: 66.0 (постоянный)
Статус: Участник

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

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

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

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

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

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

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

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

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

Ранг: 573.6 (!)
Статус: Модератор

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

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

Ранг: 66.0 (постоянный)
Статус: Участник

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

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

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

Ранг: 573.6 (!)
Статус: Модератор

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

Вы страшный человек. ггг =)
Чего уж там: E(x) = D(x) = ~x, Sign(m) = E(Sum(m[i]))...
. 1 . 2 . >>
 eXeL@B —› Вопросы новичков —› Асиметричное шифрование

Оригинальный DVD-ROM: eXeL@B DVD !

Вы находитесь на форуме сайта EXELAB.RU
Проект ReactOS