LINUX.ORG.RU

openssl или libgcrypt - что выбрать?


0

3

Выбираю криптолибу для GPL-проекта. Нужны SHA и ECDSA. Выбор пал на эти два варианта как самые ходовые. Кто пользовался - поделитесь впечатлениями, чего посоветуете? Насколько они удобные, глючные, стабильные API и т.п. И всякие сопутствующие грабли (скажем, OpenSSL не совместима с GPL и требует добавления исключения в лицензию и т.п.).

Ну и альтернативные варианты так же рассматриваются.


libgcrypt простой и удобный, учитывая что это кусок от gnupg, думаю что и с надежностью проблем не будет.

anonymous
()
Ответ на: комментарий от anonymous

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

xusrol
() автор топика
Ответ на: комментарий от xusrol

Это Open Source. Найдётся замена этому кренделю

IIIypuk ★★★★
()

Как кодер сказать не могу, но могу сказать, как чаще всего. libgcypt более прозрачная, и чаще используется в настольных проектах, проекты же которые предполагают работу в среде интернет чаще используют openssl, хотя бы потому-что там есть ключи dh.
Но не стоит забывать, что есть скажем polarssl и libObfuscate. Хотя в последней кажется нет ECDSA
Но в данном конкретном случае разницы нет. Просто используй то, что тебе покажется понятней.
Да, если libgcrypt использует автором stegfs, то это о многом говорит.

anonymous_sama ★★★★★
()
Последнее исправление: anonymous_sama (всего исправлений: 1)
Ответ на: комментарий от xusrol

OpenSSL не совместима с GPL
libgcrypt, как я понял, пилит один единственный крендель

PolarSSL, очевидно же.

anonymous
()

libgcrypt не видел, но openssl видел, использовал и очень не рекомендую.

Вообще, какая у тебя стоит задача? Просто SHA и ECDSA это ходовые алгоритмы, найти свободную реализации на пару десятков строк не проблема. Конечно, стоит посмотреть что там внутри...

true_admin ★★★★★
()
Ответ на: комментарий от true_admin

найти свободную реализации на пару десятков строк не проблема. Конечно, стоит посмотреть что там внутри...

Это верная инструкция как сделать из кастрюли решето. Несмотря на кажущуюся простоту алгоритмов, сделать их грамотно - это весьма нетривиальная задача. И в серьёзных либах, к коим, мои два варианта, я надеюсь, принадлежат, задумываются не только о том как банально получить правильный резульат операции, но и о всяких подводных камнях как тайминг атаки, атаки на тепловыделение и т.п. Это в любом введении в прикладную криптографию жирным шрифтом на первой странице - «не городите баяны, юзайте проверенные либы».

openssl видел, использовал и очень не рекомендую.

Почему, можно поподробнее?

Я вот сейчас мельком глянул - тут обычный с-API, а в libgcrypt для PK нагородили всяких S-выражений...

xusrol
() автор топика
Ответ на: комментарий от xusrol

SHA и ECDSA это ходовые алгоритмы, найти свободную реализации на пару десятков строк не проблема.

И добавлю, что ECDSA это чисто математически веьса сложная хрень и на пару десятков строк ничего не найдёшь. Если что короткое и найдёшь, то будет там одна кривая и то какая-ть сингулярная. Это тебе не криптография на простых числах и не хеши. Разбираться в этом всём самому - можно, но уйму времени потратишь...

xusrol
() автор топика
Ответ на: комментарий от xusrol

Несмотря на кажущуюся простоту алгоритмов

Да что там шифрование, даже при реализации простейших алгоритмов ГПСЧ можно легко ошибиться.

anonymous
()
Ответ на: комментарий от xusrol

можно поподробнее?

Там сплошной спагетти-код с кучей макросов, глобальных переменных, зависимостями между файлами, недокументированными структурами данных, абсолютно ацтойным API (попробуй написать простейший асинхронный ssl-сервер без использования книжек от одного из афторов openssl). Так же там просто тонны legacy-кода и всяких хаков для сохранения совместимости с предыдущими версиями. Сорри, не хочу сейчас заниматься анализом сырцов, но могу привести конкретный пример.

Мне нужно было прочитать данные по сертификату (конкретно взять common name). Сама библиотека то ли делала экранирование символов, то ли не поддерживала multiple common names, я не помню. Но пользоваться этим было нельзя т.к. вывод не совпадал с актуальными данными. Тогда я натравил на сертификат комманду openssl и она его отобразила правильно. Я полез в исходники и увидел что вывод CN там был тупо написан с нуля и залазит глубоко в кишки библиотеки, туда куда лазить не следует.

true_admin ★★★★★
()
Ответ на: комментарий от xusrol

Это верная инструкция как сделать из кастрюли решето.

О великий эксперт, пощади мой пердак.

Несмотря на кажущуюся простоту алгоритмов, сделать их грамотно - это весьма нетривиальная задача.

Давай я тебе объясню, почему ты такую херню пишешь. Штука в тот, что как и любой студент-бабуин ты не осилишь написать своими кривыми ручками ничего сложнее хелворда, но надо же как-то это оправдывать, иначе пацаны не поймут.

В ход идёт такая техника: доказать в том, что на самом деле оно невероятно сложно, и сделать ты этого не может не потому что бабуин, а потому, что типа сделать этого не может почти никто.

Далее, чтобы как-то выделится из стада(ибо 99% говорят так же), ты пытаешься вообще свести на нет смысл запила - т.е. ты пытаешься стаду бабуинов показать несостоятельность и некомпетентность того, кто говорит о нужность запила.

но и о всяких подводных камнях как тайминг атаки, атаки на тепловыделение и т.п.

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

тайминг атаки

Для справочки - любая реализация функции, которая обходит входящие данные имеет для любой реализации разное время работы для разной длинны обходов.

Это основа текущей хардварной базы. Был бы ты не бабуином и хотябы чутка знал основы матчасти, ты бы знал что на уровне той же кхешфункции это не решается. Это решается на уровне входящих данных, либо комплексно.

Т.е. либо дополнением данных до максимального блоккаунта. Либо комплексный подход - дамп блоков и прогон до максимального блоккаунта. Это нигде не реализовано.

атаки на тепловыделение

Такая же сказка-пугалка для школьников, которая нигде не реализована. А чего сразу не «атаки на мантировку»? Чё не атаки на дамп рамы? А чё не атаки на «вжопупаяльник»?

Это в любом введении в прикладную криптографию жирным шрифтом на первой странице - «не городите баяны, юзайте проверенные либы».

Ну да, ибо обезьяна не способна это написать. Как всегда, даже аргументировать свой выхлоп не осилил, слил всю ответственность на книжки - молодец.

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

Для справочки - переполнение буфера уже дожопы лет как абсалютно решенная задача. Особенно в таком примитивном коде.

Далее, для справочки любая кхешф имеет 100% вхождение. Т.е. имеет абсалютную надёжность. Т.е. функция на ЛЮБЫХ входных данных выполняет ВСЕ инструкции - она полностью покрывается тестовым набором и её ~100% корректность доказывается за 5минут. А то, что не доказывается(корректность исполнителя и иже с ним) - не доказывается в общем случае никогда.

Да там в криптографии почти у всего корректность доказывается одним проходом. Это полностью статический код, в коде все участки проходятся вне зависимости от входных данных(это основная проблема тестирования - динамика и связанное с ней покрытие).

Carb_blog2
()
Ответ на: комментарий от anonymous

Ахахаа, эти пацанчики.

Ещё раз, понимаешь в чем штука - тик ГПСЧ и тик в sha отличаются тем, что тик в sha детектит ~все логические ошибки.

Т.е. логическая ошибка в sha детектится с вероятностью 99% за 5минут. Устройство любой хешфункции - это сбор битиков, и чем лучше хешфункция собирает эти битики, тем лучше она сама себя тестирует. Плюс суть криптографической хфункции в том, что даже если все битики нули, то она будет месить битики и разряды не простаивают в любом случае - т.е. она минимально зависима от входящих данных.

В sha есть битопы - логические ошибки связанные с написанием не того битопа - детектятся 100%. цсдвиги там константные - детектятся 100%. Финалити детектится 100%. Т.е. всё упирается в корректность операций, но они все железячные. Она чувствительна к потери любого битика - это суть её.

ГПСЧ же более подвержен логическим ошибкам, но они так же детектятся диффом периода. Откуда вы всей этой бредоты набрались я даже представить не могу, кто вас учит?

Carb_blog2
()
Ответ на: комментарий от Carb_blog2

В sha есть битопы - логические ошибки связанные с написанием не того битопа - детектятся 100%. цсдвиги там константные - детектятся 100%. Финалити детектится 100%. Т.е. всё упирается в корректность операций, но они все железячные. Она чувствительна к потери любого битика - это суть её.

Круто, а теперь представь человека, который впервые в жизни пишет реализацию хеш-функции будет все это анализировать.

crowbar
()
Ответ на: комментарий от xusrol

К слову, по моим ощущениям от списков рассылки, из всех открытых библиотек именно у libgcrypt самый большой потенциал в плане дальнейшего развития.

Deathstalker ★★★★★
()
Ответ на: комментарий от crowbar

Вот о5 подмена понятий, почему если кто-то будет писать хеш-функции, то обязательно обезьяна? Пацан же писал не «если ты обезьяна, то лучше взять готовую», ибо да, обезьяна не напишет(хотя даже обезьяна напишет sha).

До того, как впервые в жизни писать эту самую реализацию, человек имеет базис - это скилл, и в этот скилл, если он называется «программистом» и работает с либой не на уровне обезьяны с гранатой, а на уровне понимания, то битики в этот базис входят и человек спокойно пилит.

Если же случается подмена понятий и вместо реального базиса под ним понимается умение дёргать api и ваять нобрейн обёртку на нетипизированном api(вида send(crypt(msg))), то это не девелопер, а обезьяна.

Когда ты начнёшь называть вещи своими именами - у тебя это уйдёт.

Carb_blog2
()
Ответ на: комментарий от Carb_blog2

Погоди, ты не тот самый «борщевик», он же «анскильный», он же «царь»? Это не ты когда-то давно аналогию с «говномесом» проводил?

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

crowbar
()
Ответ на: комментарий от crowbar

Погоди, ты не тот самый «борщевик», он же «анскильный», он же «царь»? Это не ты когда-то давно аналогию с «говномесом» проводил?

Царь.

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

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

Только вот ты не берёшь готовую - ты будешь либу.

Ладно, я понимаю, что вам, обезьянкам, трудно написать 2строчки, ибо вы к реальному программированию имеете скудное отношение, но вы не то, что написать её не можете - вы даже скопипастить её не можете.

Не можешь написать - скопипасти из openssl. Ах да, наверное везде идиоты, и Царь идиот, и libgcrypt идиоты - нахрен они писали новые функции, а не копипастили старые? Почему пацаны, которые пишут либы кладут на ваши некомпетентные, бездарные заявления, а вы нет?

Почему в той же openssl sha переписывали 10раз? Вот дауны, же, да?

ты говно как программист будь ты хоть трижды скилльным в криптографии.

Скорее я говно как обезьяна, хотя у вас уже давно обезьяна==программист, то таки да.

Carb_blog2
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.