Реализация открытого ключа в C для Linux

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

Я пробовал разные сайты для C-реализации алгоритма шифрования с открытым ключом, но ничего не нашел. Многие сайты указывают на использование сертификатов (x.509 и т. д.), но это далеко не то, что мне нужно. Я просто ищу способ генерировать открытые и закрытые ключи и использовать относительно известный алгоритм для подписи и проверки файла.

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

Спасибо.


person Mr Aleph    schedule 09.01.2012    source источник
comment
Спасибо @frunsi за исправление опечатки   -  person Mr Aleph    schedule 10.01.2012
comment
Итак, давайте подведем итоги: вы ищете общедоступную библиотеку, которую можно использовать в своем приложении с закрытым исходным кодом в операционной системе с открытым исходным кодом?   -  person Flavius    schedule 10.01.2012
comment
Я действительно не забочусь об открытом исходном коде для этого проекта. добавление исходного кода GPL заставит меня частично опубликовать код, который я пишу, а я не могу, так как я не делаю этого для проекта с открытым исходным кодом. Почему так сложно ответить? Существует ли реализация алгоритма с открытым ключом (RSA, DSA, El Gamal и др.) в C, которая содержит ТОЛЬКО этот алгоритм и не предоставляет множество других функций, а также не является библиотекой, которая приносит миллионы зависимостей, которые я могу проверить? Если вы не думаете, что есть один, так и скажите. Спасибо.   -  person Mr Aleph    schedule 10.01.2012
comment
Напишите свой собственный, используя GMP, как предложено ниже.   -  person Flavius    schedule 10.01.2012
comment
так оно и есть. В порядке. Спасибо за помощь. Я должен был знать лучше, чем приходить спрашивать в stackoverflow. Я надеялся, что мне не придется кататься самостоятельно, но, думаю, мне придется.   -  person Mr Aleph    schedule 10.01.2012
comment
какой твой ответ Флавий? О, да, вы НЕ предоставили его. Я приму то, что было первым, и я уйду отсюда.   -  person Mr Aleph    schedule 10.01.2012
comment
@Flavius: Не могли бы вы прокомментировать, что не так с приложением с закрытым исходным кодом в операционной системе с открытым исходным кодом?   -  person President James K. Polk    schedule 10.01.2012
comment
@MrAleph: Просто реализация арифметики biginteger потребует изрядного количества кода, например. полная библиотека.   -  person President James K. Polk    schedule 10.01.2012
comment
@GregS: ничего. Только не жалуйтесь, что сообщество не желает его поддерживать (т. е. создавать библиотеку, которую можно использовать в среде с закрытым исходным кодом). Звучит справедливо для меня, не так ли? Да, есть несколько библиотек, которые позволяют это. Скажи спасибо за них и иди дальше. Если нет... скажите спасибо за отличную открытую платформу... и двигайтесь дальше.   -  person Flavius    schedule 10.01.2012
comment
Я не уверен, почему был принят только ответ OpenSSL, а не мой, который предоставил несколько альтернатив, поскольку вы прямо сказали, что не хотите OpenSSL   -  person samoz    schedule 10.01.2012
comment
@samoz Я только что принял первый ответ, так как ни один из них не был полезен, и я устал от Флавия. К тому же люди склонны не читать вопросы, а просто отвечать. Мне было очень ясно, что мне нужно, и никто не ответил на это. Правда, вы дали честный ответ, кроме как просто использовать openssl, но мне это все равно не помогло. Хочешь, я приму твою? Конечно.   -  person Mr Aleph    schedule 10.01.2012
comment
Там @samoz, теперь ответ принят   -  person Mr Aleph    schedule 10.01.2012
comment
Для всех остальных НЕТ openSSL не путь. И это может быть не GPL, но лицензия по-прежнему запрещает мне использовать части кода. В любом случае, этот код СУТЬ спагетти для меня, чтобы даже начать его использовать.   -  person Mr Aleph    schedule 10.01.2012


Ответы (5)


OpenSSL — очень хороший пакет. Вы можете просто использовать часть криптобиблиотеки, которая предоставляет базовые реализации RSA. Это может соответствовать тому, что вы ищете.

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

Crypto++ — это набор различных криптотехнологий, включающий RSA, поэтому вы можете попробовать его.

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

person samoz    schedule 09.01.2012
comment
Согласитесь, OpenSSL — это то, что вам нужно. - person wadesworld; 10.01.2012
comment
Я это уже пробовал. 2 проблемы. 1) Я не хочу связываться с полной библиотекой openssl, чтобы у меня была базовая функциональность открытого ключа, и 2) я не могу заставить любой из компьютеров, на которых будет работать программа, установить openssl. В нескольких ящиках, с которыми я имел дело, его нет. Вот почему я ищу код, который я могу использовать со своим собственным кодом. - person Mr Aleph; 10.01.2012
comment
@Mr Aleph: Если дело доходит до криптографии, самый старый и наиболее рецензируемый код — это, вероятно, тот, с которым вы хотите работать, и OpenSSL определенно является уважаемой библиотекой. На самом деле статическая привязка его к вашему приложению не должна занимать слишком много памяти. - person Niklas B.; 10.01.2012
comment
Только он есть и приносит с собой огромный набор зависимостей, которые могут присутствовать, а могут и не присутствовать на всех компьютерах. - person Mr Aleph; 10.01.2012
comment
@samoz OpenSSl, я указал, почему не могу его использовать. Cryplib Я смотрю на это прямо сейчас. Crypto++ — это C++, и он перенесет всю среду выполнения C++ в приложение C, а я не могу этого сделать. - person Mr Aleph; 10.01.2012
comment
Спасибо. Без библиотек, если это возможно. В порядке. Я ухожу, я думаю, что нет никакого способа сделать это, не имея дело с ужасными зависимостями, огромными кусками кода, которые бесполезны для меня, или сторонними библиотеками, которые больше, чем вся моя программа. - person Mr Aleph; 10.01.2012
comment
Хорошо, я просто не понимаю, кто отрицает эти ответы. Думаю, мы никогда не узнаем... - person templatetypedef; 10.01.2012

Возможно, вы захотите ознакомиться с хорошо зарекомендовавшими себя, отлаженными и протестированными библиотеками OpenSSL. Хотя OpenSSL в первую очередь предназначен для сетей SSL/TLS, он содержит очень хорошие реализации многих криптографических протоколов, которые часто используются сами по себе для общей криптографии.

Надеюсь это поможет!

person templatetypedef    schedule 09.01.2012
comment
Downvoters. Не могли бы вы объяснить, что не так с этим ответом (тем более, что за другой ответ, дающий ту же ссылку / ответ, только что проголосовали?) Я хотел бы улучшить этот ответ, если это вообще возможно. - person templatetypedef; 10.01.2012
comment
Я не знаю, кто минусовал этот вопрос. Это был не я. В любом случае, спасибо за ответ, но я не думаю, что OpenSSL является жизнеспособным решением для того, что мне нужно. Смотрите, что я ответил ранее. - person Mr Aleph; 10.01.2012
comment
Жаль, что это происходит, ТАК становится все больше и больше местом банд. Каждый приводит своих корешей... - person Flavius; 10.01.2012
comment
@template - я не знаю, почему за тебя минусуют, но я ручаюсь за тебя. Я отмечаю, что ваш ответ был на самом деле до ответа samoz, поэтому, если OpenSSL является принятым ответом, ваш, вероятно, должен быть выбран вместо этого. Вы можете улучшить свой ответ, связавшись с соответствующими компонентами в документации OpenSSL, например rsa( 3) и соответствующий RFC 2437. - person Kevin Vermeer; 10.01.2012
comment
@KevinVermeer Спасибо, но я не могу, это GPL. Кроме того, я играл с ним несколько дней, и для того, чтобы использовать общедоступную криптографическую часть, мне нужно принести столько дополнительного кода и внешних библиотек, что это смешно. - person Mr Aleph; 10.01.2012
comment
@Flavius ​​Я использую stackoverflow в качестве последнего средства, поскольку в последние несколько месяцев люди просто опускают голоса по вопросам, которые на самом деле важны, без видимой причины. Кроме того, люди, отвечающие на вопросы, склонны не отвечать и просто раздражающе спрашивают, зачем вам это нужно или зачем вы хотите это сделать. Даже когда я намеренно пишу в вопросе, почему я хочу сделать X или что я не могу использовать конкретную технологию, они говорят мне использовать это ... Жаль, что stackoverflow раньше был отличным. - person Mr Aleph; 10.01.2012
comment
Я просто хотел бы отметить, что на самом деле я проголосовал за вас, templatetypedef, поскольку мы оба изначально ответили одинаково. - person samoz; 10.01.2012
comment
Принятие этого, потому что это был 1-й ответ. Это действительно не помогает мне ни один из ответов. Благодарю всех. - person Mr Aleph; 10.01.2012
comment
@MrAleph: Openssl не является GPL, и его лицензия не похожа на GPL. Кроме того, вы можете извлечь исходный код только тех частей, которые вам нужны, хотя это и не тривиально. - person President James K. Polk; 10.01.2012
comment
Как я сказал в ответах ниже, вы НЕ МОЖЕТЕ извлечь код из openSSL, это невозможно, вы принесете с кодом, который вам нужен, бесконечное количество функций, которые мне не нужны, и у меня нет времени, чтобы попытаться выяснить, что каждая из них делает . - person Mr Aleph; 10.01.2012

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

Обновление: в то же время есть также Ed25519, в котором уже разобрались с созданием подписи. , без необходимости прыгать через обручи. Тот же автор, та же доступность программного обеспечения (например, реализация Donna и привязка к Python), та же простота использования, сопоставимая скорость.

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

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

person Damon    schedule 09.01.2012

Я думаю, что был ответ [1], который соответствовал вашему вопросу о :: Small Библиотека RSA или DSA без зависимостей

Вы можете найти LibTomCrypt полезным. Он написан на C, поддерживает RSA и DSA (наряду с множеством других алгоритмов) и является общедоступным программным обеспечением. Вы можете прочитать о его функциях здесь: http://libtom.org/?page=features

[1] https://stackoverflow.com/a/1735526/68338 (любезно предоставлено https://stackoverflow.com/users/33837/emerick-rogul)

person Terry    schedule 07.06.2013

Ответы на это question содержит несколько интересных ссылок на другие библиотеки.

Однако я помню, что существует некоторый справочный исходный код на C для RSA и криптографии с закрытым ключом. Добавлю ссылку, как только найду ;-)

ИЗМЕНИТЬ

Я только что нашел «эту ссылку» (http://www.hackchina.com/en/cont/93068 - открывайте на свой страх и риск) - не уверен в источнике и деталях этого кода. Но, однако, в прошлом ссылка на исходную эталонную реализацию RSA содержалась где-то в исходниках OpenSSL или его документации. Который основан на библиотеке cryptsoft.com. Я уверен, что источник все еще можно найти где-нибудь на www.rsa.com/rsalabs / - но я не смог его найти, и у меня сейчас мало времени. Удачи ;-)

person Frunsi    schedule 09.01.2012
comment
Спасибо. Опять же, я пытаюсь использовать код для подписи файла. Мне не нужно приносить огромный кусок кода, чтобы иметь псевдослучайные генераторы, 4 разных блочных шифра и т. д. - person Mr Aleph; 10.01.2012
comment
К вашему сведению, если вы зайдете на этот сайт hackchina, он попытается установить хорошее вредоносное ПО. Спасибо. Если вы этого не видели, скорее всего, вы заражены. - person Mr Aleph; 10.01.2012