![]() |
eXeL@B —› Вопросы новичков —› Асиметричное шифрование |
. 1 . 2 . >> |
Посл.ответ | Сообщение |
|
Создано: 22 сентября 2013 22:16 · Поправил: Isaev · Личное сообщение · #1 Хотелось бы какой-нибудь алго использовать (как защиту от дурака) асиметричный чтобы была минимальная нагрузка на клиент(быстро работал) ключ в пределах 64-128бит более чем достаточно(может даже 32) нужно чтобы данные читались открыто, но не было возможности их подмены на свои, т.е. ключ, который зашит в программу расшифровывал, но зашифровать было нельзя им же может кто писал что своё простенькое(строк на 10-30 кода), или от моего внимания улизнул стандартный алго, подходящий для этих целей не хотелось бы пользовать монстров типа aes ----- z+Dw7uLu5+jqLCDq7vLu8PvpIPHs7uMh ![]() |
|
Создано: 22 сентября 2013 22:29 · Личное сообщение · #2 |
|
Создано: 22 сентября 2013 22:36 · Личное сообщение · #3 |
|
Создано: 22 сентября 2013 22:41 · Личное сообщение · #4 |
|
Создано: 22 сентября 2013 23:40 · Поправил: Isaev · Личное сообщение · #5 |
|
Создано: 23 сентября 2013 08:43 · Личное сообщение · #6 Isaev пишет: не хотелось бы пользовать монстров типа aes AES это симмитричный алгоритм, он вам принципиально не подходит. Isaev пишет: ключ в пределах 64-128бит ECDSA с длиной ключа 160 бит будет условно-безопасным, но реализация на порядок больше и сложнее чем любой симметрик. Isaev пишет: простенькое(строк на 10-30 кода) Простенькое - это только через OpenSSL, CryptoAPI или какую-нибудь другую библиотеку. Иначе даже 100 строк никак не получается. ----- PGP key ![]() |
|
Создано: 23 сентября 2013 10:38 · Личное сообщение · #7 |
|
Создано: 23 сентября 2013 10:52 · Личное сообщение · #8 |
|
Создано: 23 сентября 2013 11:18 · Личное сообщение · #9 r_e пишет: Почему бы a^b mod c не уложиться в 100 строк? Может потому что либа для работы с большими числами больше 100 строк? Плюс нужен хэш для ЭЦП или симметрик для шифрования. Хотя, может быть можно и ужать. Если делать на готовых либах, то 10 строк без вопросов. ----- PGP key ![]() |
|
Создано: 23 сентября 2013 11:27 · Поправил: reversecode · Личное сообщение · #10 есть много либ с большими числами на мизерное количество строк в том же platform_system_core\libmincrypt да и вообще много где правда если именно шифрование дешифрование, и ключ уже сгенерен деление простым не бывает, и все 100 строк займет докучи есть еще на с++ с шаблонами libcage\src\bn.hpp ![]() |
|
Создано: 23 сентября 2013 11:29 · Личное сообщение · #11 https://android.googlesource.com/platform/system/core/+/master/libmincrypt/rsa_e_f4.c Действительно очень компактная реализация. Правда к ней еще нужно добавить SHA. ----- PGP key ![]() |
|
Создано: 23 сентября 2013 15:01 · Поправил: SWR · Личное сообщение · #12 |
|
Создано: 23 сентября 2013 16:21 · Личное сообщение · #13 ntldr Какие большие числа? Человек спрашивал про алго с 32/64/128-битным ключем. Тут можно вообще не заморачиваться и crc32 как дайджест использовать + m^3 mod n как ассиметрику. ----- старый пень ![]() |
|
Создано: 23 сентября 2013 16:30 · Личное сообщение · #14 r_e пишет: Какие большие числа? Человек спрашивал про алго с 32/64/128-битным ключем. Тут можно вообще не заморачиваться и crc32 как дайджест использовать + m^3 mod n как ассиметрику. именно в таком духе и хотелось бы найти можно даже ещё проще с банальными сдвигами и ксорами типа такого: Code:
но не на столько примитивно а если существует то, что ты написал, будет вообще отлично ----- z+Dw7uLu5+jqLCDq7vLu8PvpIPHs7uMh ![]() |
|
Создано: 23 сентября 2013 16:33 · Личное сообщение · #15 |
|
Создано: 23 сентября 2013 20:08 · Личное сообщение · #16 |
|
Создано: 23 сентября 2013 20:18 · Личное сообщение · #17 Вот заготовка из гугла. Code:
Я немного не согласен с типизацией, но это можно легко допилить. Внутренний тип результата должен быть вдвое больше типа параметров и результата функции. Так что для T=UINT32 нужен UINT64 для внутренних вычислений. crc32 еще даст строк 10 кода. Sign = modpow(crc32(m), PrivateKey, N); Verify = crc32(m) == modpow(Sign, PublicKey, N); Шифрованный канал передачи тебе вроде не нужен, но его можно просто сделать через диффи-хелмана + PRNG в качестве гаммы. ----- старый пень ![]() |
|
Создано: 23 сентября 2013 21:23 · Поправил: Isaev · Личное сообщение · #18 SWR пишет: ну с таким размером ключа, смысла нет городить. Проще и надежней кодом запутывать. Сделать хитрожопную стейт машину. на вход хеш на выходе другой для сверки. Использовать разрозненные классы на виртуальных методах чтоб не рипнули быстро. я то сделаю, да на другой стороне не я, ему всё это на php переводить придется)) r_e пишет: но это можно легко допилить. во, компактно) пойду гонять и допиливать, посмотрим как оно себя покажет ----- z+Dw7uLu5+jqLCDq7vLu8PvpIPHs7uMh ![]() |
|
Создано: 23 сентября 2013 21:51 · Поправил: kunix · Личное сообщение · #19 r_e, Isaev На PHP у функции modpow будут проблемы из-за переполнения и потери точности (целое сконвертится во float). Плюс с такой "огромной" длиной ключа вполне доступен прямой перебор приватных ключей, не говоря уже о факторизации модуля, что слегонца сделает даже Wolfram Alpha. Какой смысл делать асимметрию, если она сломается любым киддисом после недолгого реверсинга? Может тогда уже лучше сделать сложную симметрию? ![]() |
|
Создано: 23 сентября 2013 23:00 · Личное сообщение · #20 |
|
Создано: 23 сентября 2013 23:07 · Личное сообщение · #21 |
|
Создано: 24 сентября 2013 00:51 · Личное сообщение · #22 kunix Она лучше симметрии тем что через нее реализуются подпись/верификация и выработка общих ключей. Каким образом симметрия вообще применима к предложенной выше задаче? Симметричные алго там вообще не подходят по условию. Разве что white box реализация. Да и то спорно что не сломают. ----- старый пень ![]() |
|
Создано: 24 сентября 2013 00:56 · Личное сообщение · #23 r_e Если асимметрия слабая, то дизасма алгоритма и нахождения публичного ключа достаточно для взлома. В случае и подписи и в случае генерации общих ключей. Согласны? То есть, алгоритм и публичный ключ должны быть секретными. Аналогичный случай и с симметрией. Ее можно использовать и для подписи и для передачи общего ключа. Но нужен секретный ключ. Итак, в обоих случаях злоумышленник не должен получить некий секрет. В чем тогда принципиальная разница? ![]() |
|
Создано: 24 сентября 2013 01:07 · Поправил: r_e · Личное сообщение · #24 kunix Принципиальная разница в том что ассиметрия не требует никаких секретов на стороне клиента и легко масштабируется. Для симметричного варианта прийдется сплясать с бубном чтобы достичь той же гибкости. В защиту симметрии можно только сказать что ее стойкость растет заметно быстрее с ростом длины ключа. Беда только в том что прийдется ключ на клиенте прятать нетривиально. А если что-то прятать в коде (обфускация и прочее), то проще уже залинковать CryptoPP со стойкой ассиметрией. ------- Да, кстати, можно даже реализовать стойкую ассиметрию в заданных объемах кода. modpow элементарно реализуется на массиве/векторе. С хешем только проблема. ----- старый пень ![]() |
|
Создано: 24 сентября 2013 01:12 · Поправил: kunix · Личное сообщение · #25 r_e пишет: Принципиальная разница в том что ассиметрия не требует никаких секретов на стороне клиента Так у нас же речь идет о слабой асимметрии, верно? Так звучало ТЗ топикстартера. Я вам только что убедительно показал, что при слабой асимметрии секретом являются ключ и алгоритм. r_e пишет: то проще уже залинковать CryptoPP со стойкой ассиметрией. Если вы так сделаете, то можно будет подменить/прочитать данные на выходе алгоритма дешифровки. И таким образом отломается проверка подписи и генерация общего ключа. Так что, CryptoPP тоже нужно обфусцировать. Я никак не против стойкой асимметрии, защищенной обфускацией/шифрованием кода/контрольными суммами. Но в топике речь идет о другом. ![]() |
|
Создано: 24 сентября 2013 01:21 · Поправил: r_e · Личное сообщение · #26 kunix "Убедительно что?..." Вы сами пишете что ТЗ звучало "слабая ассиметрия" и тут же предлагаете какую-то херь с симметрией. Топикстартер написал "защита от дурака". Если Вы собираетесь подменять что-то на выходе алго дешифровки, то тут не помогут ни симметрия ни пляски голым в лунную ночь. Интересно, как Вы собираетесь обеспечить бесшовную обфускацию симметрии и проверки подписи? kunix пишет: Я никак не против стойкой асимметрии, защищенной обфускацией/шифрованием кода/контрольными суммами. Но в топике речь идет о другом. Топикстартер хоть где-то упоминал о защите реализации? Я, вроде, ни слова не нашел. А так уже давно рулят "танковые клинья и ковровое бомбометание.. ну и тактическое ядерное оружие." В смысле виртуальные машины. А то что Вы пишете - это прошлый век. ----- старый пень ![]() |
|
Создано: 24 сентября 2013 01:32 · Поправил: kunix · Личное сообщение · #27 r_e Я не знаю, вы спали плохо или пьяны может. Я же необфусцированным текстом написал, что слабая самопальная асимметрия ничем не отличается от слабой самопальной симметрии, ибо для взлома достаточно ее раздизасмить и найти ключ. Только в случае симметрии взлом уже будет совершен, а в случае асимметрии еще надо будет подобрать приватный ключ (например, вызвать modpow 2^32 раз), что тривиально. Итак, разницы почти нет в случае "защиты от дурака". С этим утверждением спорить будете или нет? r_e пишет: Если Вы собираетесь подменять что-то на выходе алго дешифровки, то тут не помогут ни симметрия ни пляски голым в лунную ночь.Интересно, как Вы собираетесь обеспечить бесшовную обфускацию симметрии и проверки подписи? Никто не собирается ничего подменять, это ответ на ваш CryptoPP, который вообще не в тему в этом топике. r_e пишет: А то что Вы пишете - это прошлый век. Я рад, что вы такой продвинутый. Но топик не об этом. UPD: Не, есть еще другой тип асимметрии, когда алгоритмы дешифровки и шифрования разные. Злоумышленнику придется по алгоритму дешифровки восстанавливать алгоритм шифрования, что может быть непросто. Но modpow - не тот случай. И даже в этом случае можно тупо подбирать шифротекст до получения нужного плейнтекста, что сработает при слабой асимметрии. Т.е. цифровая подпись сломается. ![]() |
|
Создано: 24 сентября 2013 01:51 · Поправил: r_e · Личное сообщение · #28 kunix Давайте вернемся к вашему первому посту и прочитаем что вы предлагаете. А именно вместо слабой ассиметрии использовать сложную симметрию. К чему это предложение? Почему тогда не использовать сложную ассиметрию? Затем вы пытаетесь спорить с очевидными вещами, вроде того что слабая ассиметрия уязвима. Да и черт с ней. Это вполне устраивает ТС. В чем суть-то вашего предложения? В чем выгода от использовании симметрии в данном случае? Меньше кода будет при большей стойкости? ----- старый пень ![]() |
|
Создано: 24 сентября 2013 01:54 · Поправил: kunix · Личное сообщение · #29 Выгода элементарная. ТС не выдумывает велосипедов, а за 10 минут пишет блочный быдло-шифр (можно не криптостойкий, лол) c XOR и ADD плюс немного нелинейности, который легко реализуем в PHP. Из него сразу же получает поточный шифр и хеш. Задача решена. Ибо этот блочный шифр будет точно так же уязвим к реверсингу, как modpow и другая некриптостойкая асимметрия. Но напрягать фантазию не нужно. Вообще. ![]() |
|
Создано: 24 сентября 2013 02:08 · Личное сообщение · #30 |
. 1 . 2 . >> |
![]() |
eXeL@B —› Вопросы новичков —› Асиметричное шифрование |