对称加密,非对称加密
非对称算法(即公钥算法)与诸如AES或DES的对称算法完全不同。对称密码的目标通常是让输入和输出之间不存在紧凑的数字描述关系,
一个对称系统必须满足以下两个属性
加密和解密使用相同的密钥
加密函数和解密函数非常类似(在DES中,加密函数和解密函数基本相同)
对称加密的缺陷
密钥分配问题(消息传递所使用的通信链路是不安全的,即加密者和解密者必须使用一个安全的信道建立密钥)
密钥个数问题(即上锁的人和解锁的人需要使用同一把钥匙,这里出现一个问题,在拥有N个用户的网络中,如果每对用户之间都需要一个单独的密钥对,呢么整个网络需要的密钥对数就是n(n-1)/2,并且每个用户都需要安全存储n-1个密钥)
对解密者和解密者的欺骗没有防御机制(即加密者和解密者能力相同,因为他们拥有相同的密钥,对于那些需要防止加密者和解密者的应用而言,对称密码学是不能使用的。)
非对称密码学的基本原理
首先来说,RSA是一种非对称加密算法,它是由三位数学家(Rivest、Shamir、Adleman)于1977年在麻省理工学院设计出来的。非对称加密是相对于对称加密而言的。对称加密算法是指加密解密使用的是同一个秘钥,而非对称加密是由两个密钥(公钥、私钥)来进行加密解密的,由此可见非对称加密安全性更高。
公钥顾名思义就是公开的密钥会发放给多个持有人,而私钥是私有密码往往只有一个持有人。\
加密者用来加密消息的密钥没有必要保密,重要的部分在于,接受者只有使用密钥才能解密。为了实现这样的系统,解密者公开了一个众人皆知的加密密钥,此外,解密者还拥有一个用于解密的匹配密钥。因为,解密者的密钥K由两部分组成,公开部分Kpub和保密部分Kpr。
就比如一个邮箱,加密者就相当于寄信封的人,解密者就相当于取信的人。
非对称密码学(即公钥密码学)的实用性
公钥算法的主要安全机制
密钥建立:在不安全信道上建立密钥的协议有若干种,包括Diffie-Hellman密钥交换(DHKE)协议或RSA密钥传输协议
不可否认性:可以通过数学签名算法(比如RSA,DSA,或ECDSA)实现不可否认性和消息完整性
身份标识:在类似银行智能卡或手机等的应用中,可使用质询-响应协议与数字签名相结合的方法识别实体。
加密:可使用类似RSA或Elgamal的算法对消息进行加密.
但也有非对称加密也有一个主要缺点:使用公钥算法对数据进行加密的计算量非常大--通俗的讲就是非常慢(因为密钥长度越长越安全,所以都会选择把数据写的很长)
RSA
RSA是目前最广泛的一种非对称密码方案,不过椭圆曲线和离散对数方案也逐渐普及 RSA应用广泛主要用于
数据小片段的加密,尤其用于密钥传输
数字签名,比如Internet上的数字证书
这里需要明白一个点,RSA加密的并不是为了取代对称密码,而是它比 诸如AES的算法要慢的多,这主要因为RSA执行中设计很多计算。实际上,RSA通常与类似AES的对称密码一起使用,其中真正用来加密大量数据的是对称密码.
所有非对称方案的一个显著特征就是,他们都有一个计算公钥和私钥的握手阶段,密钥生成依赖于公獒方案,因此十分复杂,需要注意的一点时,对分组密码或序列密码而言,密钥生成通常不是一个问题
RSA密码体制中计算公钥和私钥所涉及的步骤
RSA密钥生成
输出:公钥:Kpub = (n,e)和私钥:Kpr = (d)
1,选择两个大素数p和q。
2,计算n = p.q
3,计算Φ(n) = (p-1)(q-1)
4,选择满足以下条件的公开指数e∈{1,2....Φ(n)-1}
gcd(e,Φ(n))=1
5,计算满足以下条件的私钥d
d·e ≡ 1modΦ(n)
gcd函数是最大公约数函数,条件gcd(e,Φ(n))=1保证e的逆元存在模Φ(n),因此私钥d始终存在 补充(逆元,即逆元素,是指一个可以取消另一给定元素运算的元素,在数学里,逆元素广义化了加法中的加法逆元和乘法中的倒数。 正整数 a, n,如果有 ax ≡ 1(mod n),则称 x 的最小正整数解为 a 模 n的逆元,即a平方+n平方开根号之后再取反。)
RSA加密解密
可以看下图
示例:
Alice想要发送一个加密后的消息给Bob,首先,Bob执行步骤1~5计算RSA参数,并将他的公钥发送给Alice,Alice然后将消息(x=4)加密,并将得到的密文y发送给Bob,最后,Bob使用他自己的私钥解密y。
注意:私钥指数和公钥指数满足条件e·d=3·7 ≡ 1modΦ(n)