主页 > 多语言仿imtoken钱包系统 > 以太坊私钥生成过程 用HTTPS加解密(二)
以太坊私钥生成过程 用HTTPS加解密(二)
大家好,我是向网,这里是我的头条号“向网说”,欢迎来到,欢迎再次光临~
最近几天因为彻底放手,我也从“杨过”变成了“杨康”,加上家人去世,所以好久没来得及更新,特此致歉~
上次讲了对称加密算法,这次要讲另一种加密算法:非对称加密算法。
与对称加密算法不同,在非对称加密算法中,信息的发送方和接收方需要持有两个密钥:公钥和私钥。 公钥和私钥成对出现:公钥必须公开,私钥必须保密。
发件人 A 使用收件人 B 的公钥加密,收件人 B 使用自己的私钥解密。 整个过程是这样的:
常用的非对称加密算法有几种:
1.RSA/DSA
2.ECDSA/ECC
3.PKCS
RSA是一种非常常见的非对称加密算法。 它的加密和解密算法也是公开的。 它的运行机制几乎是简单一句话“无法从公钥推导出私钥”。
非对称加密算法生成的密钥成对出现,一把公钥和一把私钥由用户保管。
RSA被认为是最好的非对称加密方案之一,支付宝的支付接口调用使用RSA。
“不可能从公钥推导出私钥”的机制是基于大整数因式分解的难度,其安全性可以抵御目前已知的大部分密码攻击。 RSA的加解密过程如下:
可见,要想得到一个能产生1024位或2048位二进制的素数乘积,参与运算的两个素数必须是天文数字。 因式分解质数的乘积非常困难,即使使用计算机也是如此,因为质数因子太多了。 这就是为什么可以说几乎“不可能从公钥推导出私钥”。
DSA 和 RSA 的主要区别在于它不用于加密和解密,而仅用于签名。 用于银行自助柜台和金融APP上的签名软件。 DSA签名生成速度很快,但验证速度相对较慢以太坊私钥生成过程,加密较慢,解密速度很快。 这一点与RSA正好相反,其安全性与RSA相差无几。 事实上,OpenSSH 7.0 及以上版本默认禁用了 DSA 算法。
全称是Elliptic curve cryptography(椭圆曲线密码学),用于在以太坊中生成比特币地址(比特币椭圆曲线使用secp256k1算法:y2 = x3 + 7)。 ECC的数学基础是黎曼几何中无限点的性质和群率(GROUP LAW)公式,解释起来很麻烦。
比特币的加解密过程可以通过OpenSSL来演示。 这个OpenSSL在Linux上一般都是默认安装的。 Windows上的安装可以问度娘。
第一步:生成ECC私钥
# openssl ecparam -name secp256k1 -genkey > private.pem
# 查看结果
# 猫 private.pem
# 以DER格式输出
# openssl ec -in private.pem -outform DER | 尾-c +8 | 头-c 32 | xxd -p -c 32 > private.der
# 猫 private.der
# 查看结果
#777cba7ba9b5d29a9f27ce67e8e88cce40abe5099e2bc8db4eaa14794726b5a2
第二步:生成ECC公钥
通过 private.pem 生成未压缩的公钥
# openssl ec -in private.pem -pubout -outform DER | 尾-c 65 | xxd -p -c 65 > public.der
# 查看结果(未压缩公钥=前缀04+x坐标+y坐标)
# 猫 public.der
# 044d678b6b0870adbe3419dcce114600fd1a19a660925ad82e61c23489218baf847e2f550371b8ffe405913e9a3b6c3954f0e186bd2bf7769a62ea9fcf1c592d25
# 压缩公钥(前缀03 + x(如果y为奇数),前缀02 + x(如果y为偶数))结果
#03edc773f78984a68dcad837d7fdf088c2efd434a088d9d6d1a7dc1e8770ea0b
第三步:执行Hash160操作
先进行SHA256运算,再进行RMD160运算
# openssl sha256 public.der
# 结果
#8674a407487bb7808bbb2c1ac12603f1f3a480e98c01abbebd03477c5179f974
# 保存结果
# echo 8674a407487bb7808bbb2c1ac12603f1f3a480e98c01abbebd03477c5179f974 > public_sha256.der
# openssl ripemd160 public_sha256.der
# 结果
# 9870db0ccf40cfd970b503fb031c889d089a4cd4
# 保存结果
# echo 9870db0ccf40cfd970b503fb031c889d089a4cd4 > public_rmd160.der
第四步:添加ECC前缀
可以在第3步的结果中加上比特币地址前缀(具体地址可以问度娘),比如常见的主网地址是00
#00+9870db0ccf40cfd970b503fb031c889d089a4cd4
# 结果
# 009870db0ccf40cfd970b503fb031c889d089a4cd4
# 保存结果
# vi public_rmd160.der
# 在前面加00,保存退出
# 查看结果
# 猫 public_rmd160.der
第 5 步:执行 SHA256
进行两次SHA256,取前8位作为校验和
# openssl sha256 public_rmd160.der
# echo c6349f1cb358dcd7af0dc8fd4cf7aa82293142eea7d97f45c83e86595ac22c04 > public_sha256.der
# openssl sha256 public_sha256.der
# 结果
#9550d445c36fc5d37cadfa1fff385121388a7e15d05fc78244c30e8aa9647908
# 获取前八位数字
#9550d445
第 6 步:合并第 4 步和第 5 步的结果
# 第四步的结果
# 猫 public_rmd160.der
# 009870db0ccf40cfd970b503fb031c889d089a4cd4
# 第五步结果
#9550d445
# 结果合并
# echo 009870db0ccf40cfd970b503fb031c889d089a4cd49550d445 > public_result.der
第七步:进行Base58编码
Base59编码是一种独特的编码方式以太坊私钥生成过程,是Base64的变形,主要用于比特币钱包地址。
出于演示目的,仅使用 Base64 执行编码
# openssl base64 -in public_result.der
# 结果
#MDA5ODcwZGIwY2NmNDBjZmQ5NzBiNTAzZmIwMzFjODg5ZDA4OWE0Y2Q0OTU1MGQ0NDUK
小知识:在比特币系统中,通过私钥可以得到公钥,通过公钥可以得到钱包地址,即:私钥=>公钥=>钱包地址,反之则不行可能的。
PKCS的全称是Public-Key Cryptography Standards(公钥密码学标准),是由RSA公司设计和发布的一系列安全标准。 主要用于证书申请、更新、失效、数字签名、数字信封等创建。 例如苹果的IOS目前使用的是PKCS12标准证书。
还是以OpenSSL生成PKCS12为例。
第 1 步:密钥生成和使用
生成一个 1024 位的私钥并保存在 rsa_private_key.pem 中
# openssl genrsa -out rsa_private_key.pem 1024
通过私钥生成公钥,保存在rsa_public_key.pem中
# openssl rsa -in rsa_private_key.pem -pubout -out rsa_public_key.pem
第二步:生成pkcs12文件
Keystore keyrepo.p12,密码123456,有效期1天
# keytool -genkey -v -alias root -keyalg RSA -storetype PKCS12 -keystore keyrepo.p12 -dname "CN=www.company.com,OU=company,O=company,L=Wuhan,ST=Hubei,C=China “-storepass 123456-keypass 123456-有效性 1
生成客户端证书
# keytool -genkey -v -alias p12client -keyalg RSA -storetype PKCS12 -keystore keyrepo.p12 -dname "CN=www.company.com,OU=company,O=company,L=Wuhan,ST=Hubei,C=China “-storepass 123456-keypass 123456-有效性 1
查看生成的证书
keytool -list -v -alias p12client -keystore keyrepo.p12 -storepass 123456 -storetype PKCS12
将p12证书导出为.cer格式
keytool -export -alias p12client -keystore keyrepo.p12 -storetype PKCS12 -storepass 123456 -rfc -file p12.cer
# 查看.cer文件
keytool -printcert -v -file /p12.cer
可以看出PKCS的密钥生成过程比ECC要简单的多。
谢谢你的到来! 技术、产品、运营管理等方面的咨询,请关注并留言。 欢迎骚扰,是荣幸~
我上了头条