使用Erlang生成RSA密钥对?

时间:2010-01-20 17:50:25

标签: erlang cryptography rsa public-key private-key

Erlang具有加密功能,可生成公共私钥(下面复制的文档)。但是文档看起来很模糊,我找不到任何描述如何生成共享素数或生成器的示例代码。有人可以发布一个生成公钥/私钥对的示例吗?在此先感谢您的帮助!

dh_generate_key(DHParams) -> {PublicKey,PrivateKey} 
dh_generate_key(PrivateKey, DHParams) -> {PublicKey,PrivateKey} 

类型: DHParameters = [P,G] P,G = Mpint 其中P是共享素数,G是共享生成器。 PublicKey,PrivateKey = Mpint() 生成Diffie-Hellman PublicKey和PrivateKey(如果没有给出)。

4 个答案:

答案 0 :(得分:7)

您不为Diffie-Hellman生成共享素数或生成器。参见:

http://en.wikipedia.org/wiki/Diffie-Hellman_key_exchange

参数P和G由双方提前商定。使用维基百科文章的符号,crypto:dh_generate_key用于步骤2& 3生成a / A& b / B,然后crypto:dh_compute_key用于步骤4& 5计算共享密钥s

对于RSA,我不知道生成公钥/私钥对的标准库函数。从我记忆中生成素数是一个相当复杂的算法;我强烈建议你不要自己编写代码。 Diffie-Hellman密钥对不适合与RSA一起使用;它们是用于不同目的的不同算法。

通常,您不需要在运行时生成这些,因为您可以重用密钥对。您可以使用任意数量的其他来源来实际生成它。 (也许ssh-keygen会起作用?而且总是OpenSSL。)要使用你创建的密钥对,你可以使用crypto:rsa_ public/private _ encrypt/decrypt函数。

答案 1 :(得分:2)

见cutkey(https://github.com/yrashk/cutkey

  

" cutkey是一个用于生成RSA密钥的Erlang应用程序。它被实现为   一个端口驱动程序,它在一个线程上调用OpenSSL的RSA_generate_key   异步池。"

答案 2 :(得分:1)

os:command(“openssl genpkey -algorithm RSA -out private_key.pem -pkeyopt rsa_keygen_bits:2048”)。

答案 3 :(得分:0)

您可以使用crypto:generate_key / 2函数创建RSA公钥和私钥:

长度为2048

{Pub, Priv} = crypto:generate_key(rsa, {2048,65537}).

或者长度为1024

{Pub, Priv} = crypto:generate_key(rsa, {1024,65537}).

请参阅:https://erlang.org/doc/apps/crypto/crypto.pdf(第37页)

generate_key(Type, Params) -> {PublicKey, PrivKeyOut}

哪里

Type = rsa


Params = rsa_params() =
    {ModulusSizeInBits :: integer(),
     PublicExponent :: key_integer()}