详细解析非对称加密及RSA算法

本文介绍了非对称加密的基本概念,对比了对称加密,重点阐述了RSA算法的工作原理,包括密钥生成、加密和解密过程,并提及了算法的数学基础,如质数、欧拉函数等。
摘要由CSDN通过智能技术生成
想知道更多关于区块链技术知识,请百度【链客区块链技术问答社区】
链客,有问必答!!

最近在学习区块链相关的知识,发现其保证去中心化的一个重要的手段就是基于密码学中的非对称加密。
何为非对称加密?
在回答这个问题之前,我觉得有比说一下对称加密。所谓对称加密,就是加密和解密都使用同一个密钥。那么很显然,非对称加密就是加密和解密使用不同的密钥。
非对称加密有两个密钥:公钥和私钥,公钥是公开的,私钥是私密的,公钥加密的可以用私钥解开,私钥加密的东西可以用公钥解开,即加密和解密的密钥是不同的。举个例子,甲要发信息给乙,那么甲可以使用乙方的公钥对机密信息进行加密签名后发送给乙方,乙方收到数据后用自己的私钥对数据进行解密。
好了,非对称加密的概念我们很好理解,那么具体如何实现非对称加密呢?
常用的加密算法有RSA、Elgamal、背包算法、Rabin、D-H、ECC(椭圆曲线加密算法)。其中,使用最广泛的是RSA算法。下面我们就具体介绍一下RSA算法,主要参考博客安全体系(二)——RSA算法详解。
RSA
算法来源
RSA公钥加密算法是1977年由罗纳德·李维斯特(Ron Rivest)、阿迪·萨莫尔(Adi Shamir)和伦纳德·阿德曼(Leonard Adleman)一起提出的。1987年7月首次在美国公布,当时他们三人都在麻省理工学院工作实习。RSA就是他们三人姓氏开头字母拼在一起组成的。
数学基础
质数:除了1和它自己不能被别的数整除,这个数就是质数。
互质:两个正整数,除了1以外,没有其他公因子,那么这两个数就是互质的。
欧拉函数:对于任意一个正整数n,如果n=p1k1p2k2…prkr,其中,p1,p2,…,pk为质数,那么在小于n的正整数中,可以用下面的公式求解与n互质的数的个数:
φ(n)=n(1-1/p1)(1-1/p2)…(1-1/pr)
欧拉定理:如果a和n互为质数,则aφ(n)≡1(mod n),其中φ(n)为n的欧拉函数。
模反元素:如果两个正整数a和n互质,那么一定可以找到整数b,使得ab-1被n整除,或者说ab被n除的余数是1。这时b被称为a的模反元素。用公式表示为:ab≡1(mod n)。

算法过程
密钥生成
1、选择两个不同的质数p和q;
2、计算两者的乘积为n,将n转换成二进制后,二进制的长度即为密钥的长度;
3、计算n的欧拉函数φ(n);
4、选择整个e,其中φ(n)>e>1,且e与φ(n)互质;
5、计算e对φ(n)的模范元素d;
6、将n和e封装成公钥,将n和d封装成私钥。

加密
me=c(mod n),其中m为需要加密的信息,c为加密后的信息。

解密
me=c(mod n),其中c为解密前的信息,m为解密后的信息。

AB双方交换共享码流程说明:【双方使用一样的素数和原数,最终生成的共享码是完全一致的。】 A方: 用 素数prime,原数base,A任意自定的整数私锁 -> 生成公锁A (把公锁A发给B) B方: 用 素数prime,原数base,B任意自定的整数私锁 -> 生成公锁b (把公锁b发给A) 对应cCrypt中的:属性DiffieHellmanPrime,属性DiffieHellmanBase,属性DiffieHellmanPrivate -> DiffieHellmanCreatePublicKey() A方: 用 素数prime,原来自定的整数私锁A,公锁b-> 生成共享码 B方: 用 素数prime,原来自定的整数私锁b,公锁A-> 生成共享码 对应cCrypt中的:属性DiffieHellmanPrime,属性DiffieHellmanPrivate,属性DiffieHellmanPublic -> DiffieHellmanCreateSharedSecret() 说明:cCrypt中的GenPrime()用于随机生成一个极大的素数,CheckPrime()用于检查该数是否素数。 --------------------------------------------------------------------------------------------------------------------------------------- diffie-hellman算法原理(原理其实很简单,但大素数、原数及高次元方程比较难解^_^): 例子:设密钥交换基于素数P=97 和 97的一个原根G = 5 A和B分别随意选择私有密钥XA=36 和 XB=58。 每人计算其公开钥:YA=5^36=50 mod 97 :YB=5^58=44 mod 97 取了公开钥之后,都把公锁发给对方 再各自用以下公式计算得出双方共享数: Ka = (YB)^XA mod 97 = 44^36 = 75 mod 97 Kb = (YA)^XB mod 97 = 50^58 = 75 mod 97 如上所示,在双方不改变用于生成公锁的私锁值情况下(且素数一致),双方计算得到的shareKey是一样的!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值