基本概念:
加密:发送方利用接受方的公钥对要发送的明文进行加密。
解密:接收方利用自己的私钥进行解密。
公钥与私钥是配对的,用公钥加密的文件,只有对应的私钥才能解密,反过来,用私钥加密,用对应的公钥进行解密。
签名:发送方用一个哈希函数从报文文本中生成报文摘要,然后用自己的私钥对摘要进行加密,得到的就是这个报文对应的数字签名,通常来说,发送方会将数字签名和报文原文一并发送接收者,方便接收者进行验签。
验签:接收方得到原始报文和数字签名后,用同一个哈希函数从报文中生成报文摘要A,另外,用发送方提供的公钥对数字签名进行解密,得到摘要B,对比A和B是否相同,就可得知报文有没有被篡改过。
公钥密码体制:
原理就是加密密钥与解密密钥分离,这样一个具体用户就可将自己设计的加密密钥和算法公诸于众,而只保密解密密钥。任何人都可利用这个加密密钥和算法向该用户发送加密信息,该用户均可通过解密密钥将之还原。公共密钥密码的优点就是不需要经安全渠道传递密钥,大大简化了密钥管理。它的算法又是也称之为公开密钥算法或简称公约算法。
公钥加密算法:
公钥加密算法中使用最广的是RSA,RSA使用两个密钥,一个公共密钥,一个专用密钥。如用其中一个加密,则可用另一个解密,密钥长度从40到2048bit可变。加密是也把明文分成快,块的大小可变,但不可能超过密钥的长度,RSA算法吧每一块明文转化为与密钥长度相同的密文块,密钥越长,加密效果越好,但加密解密的开销也大,所以在安全和性能之间折中考虑,一般64位较为合适。RSA的一个比较知名的应用是SSL,在美国和加拿大SSL用128位RSA算法,由于出口限制,在其他地区(包括中国)通用的则是40位版本。
RSA算法基于一个十分简单的数论事实:将两大素数相乘十分容易,但是想要对其乘积进行因式分解却极其困难,因此可以将乘积公开座位加密密钥。质数:又称素数,有无限个。一个大于1的自然数,除了1和它本身以外,不能被其他自然数整除。
RSA算法涉及三个参数,n、e1、e2.其中,n是两个大指数p、q的积,n的二进制表示时所占用的尾数,就是密钥长度。e1和e2是一对相关的值,e1可以随意取,但要求e1与(p-1)*(q-1)互质;再选择e2,要求(e2*e1) mod((p-1)*(q-1))=1.
其中(n,e1),(n,e2)就是密钥对,其中(n,e1)为公钥,(n,e2)为私钥。RSA加解密的算法完全相同,设A为明文,B为密文,则:A=B^e2 mod n;B=A^e1 mod n;(公钥加密机制中,一般用公钥加密,私钥解密) e1和e2可以互换使用,即:A=B^e1 mod n;B=A^e2 mod n;