Подскажите, пожалуйста, способо генерации пар ключей RSA в erlang.
Андреенко Артём.
Я бы вызвал чего-то из OpenSSL, как внешнюю программу.
В стандартных модулях такого не видно, а задача в общем достаточно
нетривиальная, если учесть, что может быть разный уровень проверок
правильности формирования ключа.
--
-netch-
--
Страница рассылки: http://groups.google.com/group/erlang-russian
Jabber-конференция: erl...@conference.jabber.ru
Новости: http://erlanger.ru
Написать письмо: erlang-...@googlegroups.com
Отписаться: erlang-russia...@googlegroups.com
Это где? В R14B01 в списке функций есть rsa_sign, rsa_verify,
rsa_{private,public}_{en,de}crypt и всё. Покажите мне там функцию
_генерации_ ключей.
--
-netch-
N=9676388573028346607648827639044480354350734446440837605277805507263079714 60619683126465685994589442949811931966094798480668769197,
D=4147023674155005688992354702447634437578886191331787545119059502839432302 45925749951816401493352286133311189794309745737857051223,
E=7,
PrivKey = [crypto:mpint(E), crypto:mpint(N), crypto:mpint(D)] ,
PubKey = [crypto:mpint(E), crypto:mpint(N)],
Crypted = crypto:rsa_public_encrypt("123456789",PubKey,rsa_pkcs1_padding),
Decrypted = crypto:rsa_private_decrypt(Crypted,PrivKey,rsa_pkcs1_padding).
N и D - два prime'а, а еще в crypto.erl есть
mod_exp(N, P, M) -> Result
Types N, P, M, Result = Mpint
Mpint = binary()
This function performs the exponentiation N ^ P mod M , using the crypto library.
уж два prime'а сгенерировать мы сумеем?
2011/2/25 Valentin Nechayev <net...@gmail.com>
-netch-
--
Страница рассылки: http://groups.google.com/group/erlang-russian
Jabber-конференция: erl...@conference.jabber.ru
Новости: http://erlanger.ru
Написать письмо: erlang-...@googlegroups.com
Отписаться: erlang-russia...@googlegroups.com
Извините, ничего личного, но Вы проявили в этом сообщении
катастрофический уровень ламерства, который был бы где-то в другом
месте ещё допустим, но никак не в криптографии. Ибо:
1. N - public modulus - это _не_ простое число. Это произведение двух
(в идеале простых) чисел, которые обычно обозначаются P и Q. Защита
RSA как метода основана на проблемах разложения числа N на простые
сомножители.
2. Для генерации ключа надо сгенерировать P и Q нужных размеров (чтобы
их произведение имело нужный размер в битах). Они должны быть
простыми, но на практике используется не полная проверка на простоту
(которая по цене где-то 1/4 от вообще взлома ключа), а ряд упрощённых
методов косвенной проверки. Качество генерации зависит от качества
реализации этих методов. Вы можете, конечно, считать задачу генерации
большого простого числа простой, но чтобы Ваш результат был хоть
как-то полезным - надо её делать с достаточным уровнем качества, а не
просто "предположим, оно простое", и не писать так, чтобы ныдо было
ждать тысячу лет для полной проверки.
3. Выбор числа E надо основывать на оценке необходимой скорости работы
с публичным ключом и качестве реализации, тут тоже есть несколько
нетривиальных эмпирических критериев.
Можете почитать основу, например, тут:
http://www.ietf.org/rfc/rfc2313.txt
(для реализации следует использовать версию 2.0, но в 1.5 более
простые для освоения обозначения, поэтому даю ссылку на неё).
В общем случае я _настаиваю_, что в криптографии надо доверять
профессионалам и ни в коем случае не пытаться делать закат солнца
вручную по принципу "а мы что, рыжие?" Я сам не являюсь профессионалом
в криптографии и не собираюсь им быть, но моего уровня достаточно,
чтобы быть в курсе тематики отрасли и уметь фильтровать заведомо
негодные подходы, и, разумеется, не пытаться делать самому то, для
чего есть готовые средства. Чего и Вам желаю.
--
-netch-
-netch-
--
Страница рассылки: http://groups.google.com/group/erlang-russian
Jabber-конференция: erl...@conference.jabber.ru
Новости: http://erlanger.ru
Написать письмо: erlang-...@googlegroups.com
Отписаться: erlang-russia...@googlegroups.com
"На посмотреть" достаточно поиграться с ключами, которые делаются
вручную. Например, e = 3, d = 7, N = 55. Можете проверить на паре
значений данных:
6> A = 16.
16
7> B = trunc(math:pow(A,3)) rem 55.
26
8> A = trunc(math:pow(B,7)) rem 55.
16
А для более серьёзного испытания таки лучше взять готовое:
$ openssl genrsa 1024
Generating RSA private key, 1024 bit long modulus
.....++++++
...................................++++++
e is 65537 (0x10001)
-----BEGIN RSA PRIVATE KEY-----
MIICXAIBAAKBgQC6ayzO2oGLxMHdbM2igYCox8gs9wYMgAYofu3vQAtXSl0W7dLt
Lxs1XTUHVqU2VLeVXKb6qBvWqF7XIlkxxfwxeu9PsroqsTjjjzSp0aRtyBNtZjqi
w1YwVIcPMg6aVlX4uCSf3PB7KDTyZzY2jy7wy/L+CU3+THzYjhgsIGPxKwIDAQAB
AoGBAJrW2IH8JmwUgr5LWEYpcNdAEbmfeKu7TuImA7WcqY7Ympen9HHDlcLuZ1Rw
GIwXM+Fg8uTx6yWR9iyVQCbCfySi5iwrfppiCtVbxePWxGJ2UA/bq9yIjJsp+hpw
zXPU+x1VodtqampZrwsv41Kpprh6iGciW3qIW3yY7cjZPl2pAkEA5HNEBl0XyyLg
NJvf4+Zh7d0Wj/cUQzap8UpGZFptbs8782yDsjDrTK4r7HYRrGSEctsbpVD9DzC+
+XEnxgHkRQJBANDmTmr1EhsMbUJmQ1upQ2dpvs3k5YZglese2ntlGT1eKN6WtJXV
R+TZsloBwq0f5tjKX5iKMwBKrgxDWIBKrq8CQAXd2+pZ66mAzMctFZPRr8QfAFxU
GQYc2kJjCOm81MCau8xlhgBGd1RxyJj68zs9HZWhgNU+/jCsrMrVGBNiqw0CQBpV
znEBcETkril+xuMZVZwF4r4GK0Fjj8LSYuzHdAUeh7x391AkUSnyn99k9Wvp56pQ
6PhMA933jDWTj+asg5UCQC4vCcW+LNY0ah3ogOH7yo1FLE0cuAjPo0LkdUkqSvDv
6qH2P3CH/S/krwz60xPKFDdkyZKWDVQRZFrFlh/cxUI=
-----END RSA PRIVATE KEY-----
Да, ещё потребуется чуть повозиться с расшифровкой упакованного по
PKCS#8 ключа, но вполне решается.
Если такого командного интерфейса к OpenSSL нет - поставить, в
нормальной поставке оно обязано быть.
> а вообще, если уж
> использовать что-то внешнее, то проще дописать одну функцию в crypto,
Проще ли? У нас даже тривиальные патчи маринуются, извините, слишком
долго в Erlang team, а тут новая функция в очень сложной тематике.
> потому
> как в С`шной реализации есть функции для генерации ключей, и просто никто не
> сделал к ним интерфейс в crypto аппликейшене (я делал в 2009ом, или еще
> раньше, но кода сейчас нет уже).
Ну если оно будет просто враппером вокруг OpenSSL - да, возможно, в
R15B успеете впихнуть.
--
-netch-
-netch-
--
Страница рассылки: http://groups.google.com/group/erlang-russian
Jabber-конференция: erl...@conference.jabber.ru
Новости: http://erlanger.ru
Написать письмо: erlang-...@googlegroups.com
Отписаться: erlang-russia...@googlegroups.com
25 февраля 2011 г. 13:44 пользователь Alexander Dergachev
<cy6er...@gmail.com> написал:
25 февраля 2011 г. 14:42 пользователь Artem Miolini <mio...@gmail.com> написал:
К сожалению, на такое можно предложить только взять код genrsa и
портировать под Erlang. Ну или сделать патченый crypto вместе с
драйвером - переходником на OpenSSL. Думаю, такое и в апстрим примут с
радостью.
--
-netch-