区块链之非对称加密算法

非对称加密,在现在网络应用中,有这非常广泛的场景,更是加密货币的基础。本文主要介绍非对称加密、解密的原理和过程,以及在区块链中的使用。

一、非对称加密解密过程

  1. A要向B发送信息,A和B都要产生一对用于加密、解密的公钥和私钥
  2. A保管自己的私钥,把公钥告诉B;B保管自己的私钥,把公钥告诉A
  3. A要给B发送信息时,A用B的公钥加密信息,因为A知道B的公钥。
  4. A将这个消息发给B(已经用B的公钥加密消息)。
  5. B收到这个消息后,B用自己的私钥解密A的消息。其他所有收到这个报文的人都无法解密,因为只有B才有B的私钥。

二、如何理解公钥和私钥

  非对称加密算法需要两个密钥:公开密钥(public key)和私有密钥(private key)。公开密钥与私有密钥是一对,如果用公开密钥对数据进行加密,只有用对应的私有密钥才能解密;如果用私有密钥对数据进行加密,那么只有用对应的公开密钥才能解密。因为加密和解密使用的是两个不同的密钥,所以这种算法叫作非对称加密算法。

  非对称加密算法实现机密信息交换的基本过程是:甲方生成一对密钥并将其中的一把作为公用密钥向其它方公开;得到该公用密钥的乙方使用该密钥对机密信息进行加密后再发送给甲方;甲方再用自己保存的另一把专用密钥对加密后的信息进行解密。

  非对称密码的特点:算法强度复杂、安全性依赖于算法与密钥,但是由于其算法复杂,而使得加密解密速度没有对称加密解密的速度快。对称密码体制中只有一种密钥,并且是非公开的,如果要解密就得让对方知道密钥。所以保证其安全性就是保证密钥的安全,而非对称密钥体制有两种密钥,其中一个是公开的,这样就可以不需要像对称密码那样传输对方的密钥了。这样安全性就大了很多。

三、非对称加密解密原理

非对称加密算法中,常用的就是RSA算法了,以下就以RSA算法为例来讲解非对称加密算法的实现原理。

RSA算法的基于这样的数学事实:两个大质数相乘得到的大数难以被因式分解。

RSA加密过程

$$ 密文=明文^E\ mod\ N $$

解释:也就是说RSA加密是对明文的E次方后除以N后求余数的过程。也就是说只要知道E(Encryption)和N(Number),任何人都可以进行RSA加密了。其中E、N是RSA加密的密钥,E和N的组合就是公钥,我们用(E,N)来表示公钥

$$ 公钥=(E,N) $$

不过E和N不并不是随便什么数都可以的,它们都是经过严格的数学计算得出的

RSA解密过程

$$ 明文=密文^D\ mod\ N $$

也就是说对密文进行D次方后除以N的余数就是明文,这就是RSA解密过程。知道D和N就能进行解密密文了,所以D和N的组合就是私钥

$$ 私钥=(D,N) $$

从上述可以看出RSA的加密方式和解密方式是相同的,加密是求"E次方的mod N",解密是求"D次方的mod N"

知道上述的几个简单公式后,剩下就是计算各个参数对应的值了

  1. 求N。准备两个质数p,q,这两个数不能太小,太小则会容易破解,将p乘以q就是N。 $$ N=p∗q $$
  2. 求L。L为中间数,是 (p-1) 和 (q-1) 的最小公倍数,可用如下表达式表示 $$ L=lcm(p-1,q-1) $$
  3. 求E。E必须满足两个条件:E是一个比1大比L小的数,E和L的最大公约数为1,用gcd(X,Y)来表示X,Y的最大公约数则E条件如下: $$ 1 < E < L $$ $$ gcd(E,L)=1 $$ 之所以需要E和L的最大公约数为1是为了保证一定存在解密时需要使用的数D。现在我们已经求出了E和N也就是说我们已经生成了密钥对中的公钥了。
  4. 求D。D是由数E计算出来的。D、E和L之间必须满足以下关系: $$ 1 < D < L $$ $$ E * D\ mod\ L = 1 $$

至此,公钥和私钥都都计算出来了,大家可以自己试着计算下

四、为何非对称加密难以破解

  破解RSA算法的关键就是计算N、p、q的值,给出两个很大的质数p、q,可以计算N,但知道N,去很难算出p、q,只能不停的尝试,这就是为什么当前RSA很难破解。

  RSA算法的破解与密钥的长度有关,如果密钥的长度小于等于256位,一台较快的电脑可以在几个小时内成功分解其因子。位数越高因式分解所需时间也越长。例如破解RSA-2048(2048-bit)的密钥需要耗费传统电脑10亿年的时间,而量子计算机只需要100秒就可以完成。所以随着科技的发展,算法也会更新换代。

欢迎订阅「K叔区块链」 - 专注于区块链技术学习

博客地址:http://www.jouypub.com

简书主页:https://www.jianshu.com/u/756c9c8ae984

segmentfault主页:https://segmentfault.com/blog/jouypub

腾讯云主页:https://cloud.tencent.com/developer/column/72548

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

编辑于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏小工匠技术圈

【Java小工匠聊密码学】--非对称加密--ElGamal

  ElGamal算法,是一种较为常见的加密算法,它是基于1985年提出的公钥密码体制和椭圆曲线加密体系。既能用于数据加密也能用于数字签名,其安全性依赖于计算有...

983
来自专栏Albert陈凯

2018-10-11 对称加密、非对称加密、Hash算法看完这篇文章加解密就别蒙了散列函数 加密算法

http://hongyitong.github.io/2016/07/18/%E5%AF%B9%E7%A7%B0%E5%8A%A0%E5%AF%86%E3%8...

2453
来自专栏小工匠技术圈

【Java小工匠聊密码学】--对称加密--IDEA

  国际数据加密算法(IDEA)是[上海交通大学]教授来学嘉与瑞士学者James Massey联合提出的。它在1990年正式公布并在以后得到增强。这种算法是在[...

882
来自专栏黑白安全

如何攻破加密算法

当应用加密算法时,有许多地方可能会出错。难点在于识别和分析程序员用来加密的方法,然后寻找其中的漏洞。漏洞的种类也很多,比如弱加密算法、弱密钥生成器、服务端漏洞和...

1582
来自专栏iOS 开发杂谈

HTTPS 之对称加密与非对称加密

加密 encryption 与解密 decryption 使用的是同样的密钥 secret key,对称加密是最快速、最简单的一种加密方式。加密和解密算法是公开...

2734
来自专栏java一日一条

DES/3DES/AES 三种对称加密算法在 Java 中的实现

1)算法和数据结构就是编程的一个重要部分,你若失掉了算法和数据结构,你就把一切都失掉了。 2)编程就是算法和数据结构,算法和数据结构是编程的灵魂。

1202
来自专栏吴伟祥

加密总结 原

DES(Data Encryption Standard):对称算法,数据加密标准,速度较快,适用于加密大量数据的场合;

1114
来自专栏贾老师の博客

加密与签名算法

2433
来自专栏不止是前端

密码学术语以及nodejs实现

3888
来自专栏程序猿

数据加密之加密算法RSA公钥加密系统

本来想写一下SQL注入来着,还是写一下这个可爱的算法吧。 加密算法有多中,md5等多中加密算法,但是RSA算法不知各位有没有听说...

38610

扫码关注云+社区

领取腾讯云代金券