2012-01-09 2 views
4

Я пытаюсь использовать криптографию открытого ключа для подписывания, а затем проверить файл. Файл представляет собой простой файл открытого текста, содержащий информацию пользователя для целей создания.Реализация открытого ключа в C для Linux

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

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

Спасибо.

+0

Благодаря @frunsi для крепления опечатки –

+0

Итак, давайте подведем итог: вы ищете библиотку которые вы можете использовать в своем приложении с закрытым исходным кодом в операционной системе с открытым исходным кодом? – Flavius

+0

Мне действительно не нравится открытый исходный код для этого проекта. добавление источника GPLed заставит меня частично опубликовать код, который я пишу, и я не могу, поскольку я не делаю этого для проекта с открытым исходным кодом. Почему так сложно ответить? Существует ли алгоритм с открытым ключом (RSA, DSA, El Gamal, other) в C, который содержит ТОЛЬКО этот алгоритм и не приносит каких-либо других функций и не является библиотекой, которая приносит зависимости от миллионов, которые я могу проверить? Если вы не думаете, что это так. Благодарю. –

ответ

10

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

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

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

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

+3

Согласен, OpenSSL - это то, как вы хотите. – wadesworld

+2

Я уже пробовал это. 2 проблемы. 1) Я не хочу связываться с полной версией openssl lib, поэтому я могу иметь базовые функции открытого ключа и 2) я не могу заставить любой компьютер, на котором будет работать программа, должен иметь установленный openssl. Несколько ящиков, с которыми я имел дело, не имеют этого. Вот почему я ищу код, который я могу использовать с собственным кодом. –

+0

@Mr Aleph: Если дело доходит до криптографии, самым старым и наиболее пересмотренным кодом, вероятно, является тот, с которым вы хотите пойти, и OpenSSL определенно является уважаемой библиотекой. Статическая привязка его к вашему приложению не должна стоить слишком большого объема памяти. –

5

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

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

+2

Downvoters. Не могли бы вы объяснить, что не так с этим ответом (тем более, что другой ответ, дающий ту же ссылку/ответ, только что получил одобрение?) Я бы хотел чтобы улучшить этот ответ, если это вообще возможно. – templatetypedef

+0

Я не знаю, кто занижал этот вопрос. Это был не я. В любом случае, спасибо за ответ, но я не думаю, что OpenSSL - это жизнеспособное решение для того, что мне нужно. Посмотрите, что я ответил ранее. –

+0

Слишком грустно, что это происходит, ТАК становится все более и более местом банд. Все приносят свои семьи ... – Flavius

1

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

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

EDIT

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

+0

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

+0

FYI, если вы пойдете на этот сайт hackchina, он попытается установить хороший кусок вредоносного ПО. Благодарю. Если вы этого не заметили, скорее всего, вы инфицированы. –

+0

Хорошо, я проверю свой компьютер, и я удалю ссылку ... – Frunsi

2

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

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

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

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

2

Я думаю, что был ответ [1], что установлен на ваш вопрос о :: Small RSA or DSA lib without dependencies

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

[1] https://stackoverflow.com/a/1735526/68338 (любезно https://stackoverflow.com/users/33837/emerick-rogul)