如何为区块链生成公钥和私钥

2018-12-05 18:18 栏目:经验之谈 来源: 查看()
公钥加密或非对称加密是使用公钥和私钥对的加密系统。它是加密货币协议中最重要的部分之一,并且在几个地方用于创建:加密货币钱包,以确保加密货币只能由所有者使用,即交易签名(数字签名),这是一种加密货币协议。核心组件。简而言之,如果您将加密货币发送给其他人,请使用您的私钥(或使用私钥生成的签名密钥)对交易进行签名,并使用您的公钥验证交易。因此,如果黑客获取您的私钥,他们可以将您的加密货币发送给自己。

如何为区块链生成公钥和私钥

有两种算法用于生成公钥和私钥。例如,比特币协议使用椭圆曲线数字签名算法(ECDSA)。在本文中,我将解释铆钉 - 沙米尔 - 阿德勒曼(RSA)并将其与ECDSA进行比较。 RSA是最早和最广泛使用的公钥密码系统之一。以其创始人Ron Rivest,AdiShamir和Leonard Adleman命名,它几乎是公钥加密的同义词。

RSA算法

RSA使用modulo-n(mod n)算法广泛使用算术运算。 n的余数是x除以n后的余数。例如,17取剩下的5=2.RSA通常由三个主要部分组成(有时添加公钥共享有意义):

·生成公钥和私钥
·使用生成的公钥加密数据
·使用生成的私钥解密数据

生成公钥和私钥

为了生成RSA的公钥和私钥,Alice和Bob(两个虚构的角色已成为讨论加密的行业标准)执行以下步骤:

1.选择两个大素数p和q。值越大,破解RSA越难,但代码解码时间越长。
2.计算n=pq和z=(p-1)(q-1)。
3.选择小于n的数字e,除了1,z之外没有公因子,或者它们的最大公约数(gcd)等于1,并且gcd(e,z)等于1.在这种情况下,e和z是相对素数。 e将用于加密。
4.找到一个数字d,使得ed-1可以被z整除。另一种方法是采用z=1的余数.d将用于解密。
5. Bob或Alice向世界提供的公钥是一对数字(n,e),私钥必须是秘密的,一对数字(n,d)。

使用生成的公钥加密数据

假设Alice想要将消息传递给Bob,并且“位”模式表示整数m(纯文本消息),其中m <1。 ñ。加密的明文消息m c m ^=e mod n ciphertext c将被发送给Bob。请注意,Alice使用Bob的公钥来加密消息。

使用生成的私钥解密数据

为了解密接收到的密文,Bob计算m=c ^ d mod,这需要使用他的私钥(N,d)。

RSA的安全性依赖于没有用于快速分解(主要因子分解)数字的已知算法的事实。在此示例中,公共值n位于p和q中。

RSA和ECDSA的比较

在ECDA中,私钥是随机生成的整数。在比特币协议中,它是一个256位(32字节)整数。 ECDSA还可以使用相同的算法使用不同的椭圆曲线生成公钥。比特币协议使用Secp256k1。在RSA中,密钥(公钥,私钥和签名)很大,密钥生成很慢。

另一方面,RSA易于实施,ECDSA难以实施。 2010年12月,PlayStation 3遭到黑客入侵,因为索尼没有正确实施该算法。这就是为什么建议使用已经过测试的库(例如OpenSSL)来生成ECDSA密钥对的原因。

大约一年前,我实现了一个名为eccpem的开源库并安装了GitHub,它生成了ECDSA密钥对,并使用OpenSSL库将它们存储在.pem文件中。

结论

大多数加密货币协议使用ECDSA(我认为有意义)而不是RSA。:至少有两个原因
·ECDSA使用的内存比RSA少得多。

·ECDSA比RSA快。


微信二维码
售前客服二维码

文章均源于网络收集编辑侵删

提示:仅接受技术开发咨询!

郑重申明:资讯文章为网络收集整理,官方公告以外的资讯内容与本站无关!
NFT开发,NFT交易所开发,DAPP开发 Keywords: NFT开发 NFT交易所开发 DAPP开发