网站首页 > 技术文章 正文
系列目录:
前文回顾
假如,明明和丽丽相互不认识,明明想给丽丽写一封情书,让隔壁老王送去
- 如何保证隔壁老王不能看到情书内容?(保密性)
- 如何保证隔壁老王不修改情书的内容?(完整性)
- 如何保证隔壁老王不冒充明明?(身份认证)
- 如何保证明明不能否认情书是自己写的?(来源的不可否认)
我们对数据进行了加密
但是上面的问题是明明和丽丽必须提前知道秘钥,但是如果双方提前不知道秘钥,那么明明就需要“隔壁的王叔叔" 把秘钥告诉丽丽,这个显然是风险太大了,因为”隔壁王叔叔“有了秘钥和密文,那么就等于有了明文。
非对称秘钥
DH(Diffie-Hellman)算法
1976年,美国学者Dime和Henman为解决信息公开传送和密钥管理问题,提出一种新的密钥交换协议,允许在不安全的媒体上的通讯双方交换信息,安全地达成一致的密钥,这就是“公开密钥系统”。相对于“对称加密算法”这种方法也叫做“非对称加密算法”。
与对称加密算法不同,非对称加密算法需要两个密钥:公开密钥(publickey)和私有密钥(privatekey)。公开密钥与私有密钥是一对,如果用公开密钥对数据进行加密,只有用对应的私有密钥才能解密;如果用私有密钥对数据进行加密,那么只有用对应的公开密钥才能解密。因为加密和解密使用的是两个不同的密钥,所以这种算法叫作非对称加密算法。
算法原理及示例
- 假如明明和丽丽希望交换一个密钥。
- 明明取一个素数p =97和97的一个原根a=5,让隔壁的王叔叔告诉丽丽。
明明和丽丽分别选择秘密密钥XA=36和XB=58,并计算各自的公开密钥,然后让隔壁的王叔叔帮忙交换公开秘钥。
YA=a^XA mod p=5^36 mod 97=50 YB=a^XB mod p=5^58 mod 97=44
明明和丽丽交换了公开密钥之后,计算共享密钥如下:
明明:K=(YB) ^XA mod p=44^36 mod 97=75 丽丽:K=(YA) ^XB mod p=50^58 mod 97=75
由于只有明明知道XA, 而只有丽丽知道XB, 那么“隔壁的王叔叔” 是不可能通过 P, A, YA, YB来得到最终密码K的。
DiffieˉHellman不是加密算法,它只是生成可用作对称密钥的秘密数值。
非对称加密特点
与对称加密算法不同,非对称加密算法需要两个密钥:公开密钥(publickey)和私有密钥(privatekey)。公开密钥与私有密钥是一对,如果 用公开密钥对数据进行加密,只有用对应的私有密钥才能解密;如果用私有密钥对数据进行加密,那么只有用对应的公开密钥才能解密。因为加密和解密使用的是两个不同的密钥,所以这种算法叫作非对称加密算法。
那么如果甲(收信方)想收到只有自己才能解读的加密信息,那么需要把自己的公钥告诉乙(发送发), 乙通过甲的公钥加密,把加密后的密文告诉甲,由于只有甲有私钥,那么也就只有甲才能加密。 由此可见,非对称加密只需要保存一对公钥和私钥,大大方便了秘钥管理。但是由于要做更多的计算,非对称加密只适合一些小数据量加密,一般情况都是用非对称加密算法来交换秘钥,随后通过对称加密算法来加密数据。
常用非对称加密算法
RSA、Elgamal、背包算法、Rabin、D-H、ECC(椭圆曲线加密算法)。
使用最广泛的是RSA算法,Elgamal是另一种常用的非对称加密算法。
最后
我们对数据的完整性使用Hash进行了保证,用DH算法交换了秘钥,使用RSA算法对数进行了加密,那么如果王叔叔在交换秘钥的过程中做了手脚呢?
如何做手脚?看下图:
- 王叔叔自己生成一个公私钥,和明明以及丽丽交换。
- 王叔叔冒充丽丽把自己的公钥发给明明。
- 明明用王叔叔的公钥对信件加密。
- 王叔叔用自己的私钥解密就可以看到明明给丽丽的邮件。
- 王叔叔冒充明明把自己的公钥发给丽丽。
- 丽丽用王叔叔的公钥对信件加密。
- 王叔叔用自己的私钥解密就可以看到丽丽给明明内容。
至此,邮件内容又赤裸裸地被王叔叔看到了,怎么办呢?我们下文继续解释。
猜你喜欢
- 2024-10-29 还对这两个概念认识模糊?简述对称加密和非对称加密
- 2024-10-29 一文详细解读https 一文移相全桥拓扑原理详解解析
- 2024-10-29 软考-信息安全工程师学习笔记-第3章密码学基本理论(1)
- 2024-10-29 量子计算机真的可以破解任何密码吗?
- 2024-10-29 谈谈HTTPS演变过程 鼠的演变过程图解
- 2024-10-29 高考数学九省卷的变化与影响 高考数学第9题
- 2024-10-29 区块链百科之 数 字 签 名 区块链中大量用到数字签名技术
- 2024-10-29 对称加密与非对称加密,到底有啥区别?
- 2024-10-29 软考-信息安全工程师学习笔记11——数字签名
- 2024-10-29 公钥和私钥的解释 公钥和私钥的解释区别
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- oraclesql优化 (66)
- 类的加载机制 (75)
- feignclient (62)
- 一致性hash算法 (71)
- dockfile (66)
- 锁机制 (57)
- javaresponse (60)
- 查看hive版本 (59)
- phpworkerman (57)
- spark算子 (58)
- vue双向绑定的原理 (68)
- springbootget请求 (58)
- docker网络三种模式 (67)
- spring控制反转 (71)
- data:image/jpeg (69)
- base64 (69)
- java分页 (64)
- kibanadocker (60)
- qabstracttablemodel (62)
- java生成pdf文件 (69)
- deletelater (62)
- com.aspose.words (58)
- android.mk (62)
- qopengl (73)
- epoch_millis (61)
本文暂时没有评论,来添加一个吧(●'◡'●)