惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

A
Arctic Wolf
M
MIT News - Artificial intelligence
博客园_首页
人人都是产品经理
人人都是产品经理
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
The Cloudflare Blog
Hacker News - Newest:
Hacker News - Newest: "LLM"
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
W
WeLiveSecurity
酷 壳 – CoolShell
酷 壳 – CoolShell
Apple Machine Learning Research
Apple Machine Learning Research
Last Week in AI
Last Week in AI
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
SecWiki News
SecWiki News
Help Net Security
Help Net Security
云风的 BLOG
云风的 BLOG
Blog — PlanetScale
Blog — PlanetScale
H
Heimdal Security Blog
Jina AI
Jina AI
Hacker News: Ask HN
Hacker News: Ask HN
阮一峰的网络日志
阮一峰的网络日志
WordPress大学
WordPress大学
博客园 - 【当耐特】
Engineering at Meta
Engineering at Meta
TaoSecurity Blog
TaoSecurity Blog
T
Troy Hunt's Blog
T
Threatpost
AWS News Blog
AWS News Blog
H
Help Net Security
L
LINUX DO - 最新话题
有赞技术团队
有赞技术团队
A
About on SuperTechFans
G
GRAHAM CLULEY
The GitHub Blog
The GitHub Blog
P
Proofpoint News Feed
Hugging Face - Blog
Hugging Face - Blog
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
Recorded Future
Recorded Future
L
Lohrmann on Cybersecurity
Webroot Blog
Webroot Blog
O
OpenAI News
Schneier on Security
Schneier on Security
月光博客
月光博客
P
Privacy International News Feed
博客园 - 聂微东
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
Stack Overflow Blog
Stack Overflow Blog
aimingoo的专栏
aimingoo的专栏
L
LangChain Blog
罗磊的独立博客

博客园 - 敏捷的水

程序员成长思维:把自己当做产品来发展 发展你的兴趣,而不是跟随你的兴趣 领导力:不要做个“好人” 当你是个锤子 做自己的CEO 我们为何难以升职加薪 程序员的自我修养系列(四):图形化表达 - 敏捷的水 - 博客园 程序员的自我修养系列(三):习惯付费 程序员的自我修养系列(二):从元编程到元认知 程序员的自我修养系列(一):聊聊专业和业余 如何向别人介绍我是一个程序员 领域驱动开发实践之路:我们是如何从领域驱动开发当中获益的 ES6+ 现在就用系列(二):let 命令 ES6+ 现在就用系列(一):为什么使用ES6+ - 敏捷的水 - 博客园 程序员之网络安全系列(六):动态密码 程序员之网络安全系列(五):数字证书以及12306的证书问题 程序员之网络安全系列(三):数据加密之对称加密算法 程序员之网络安全系列(二):如何安全保存用户密码及哈希算法 程序员之网络安全系列(一):为什么要关注网络安全?
程序员之网络安全系列(四):数据加密之非对称秘钥
敏捷的水 · 2016-01-12 · via 博客园 - 敏捷的水

程序员之网络安全系列(四):数据加密之非对称秘钥

2016-01-12 09:07  敏捷的水  阅读(3417)  评论()    收藏  举报

系列目录:

前文回顾

假如,明明和丽丽相互不认识,明明想给丽丽写一封情书,让隔壁老王送去

  1. 如何保证隔壁老王不能看到情书内容?(保密性)
  2. 如何保证隔壁老王不修改情书的内容?(完整性)
  3. 如何保证隔壁老王不冒充明明?(身份认证)
  4. 如何保证明明不能否认情书是自己写的?(来源的不可否认)

程序员之网络安全系列(二):如何安全保存用户密码及哈希算法 我们保证了数据的完整性

程序员之网络安全系列(三):数据加密之对称加密算法
我们对数据进行了加密

但是上面的问题是明明和丽丽必须提前知道秘钥,但是如果双方提前不知道秘钥,那么明明就需要“隔壁的王叔叔" 把秘钥告诉丽丽,这个显然是风险太大了,因为”隔壁王叔叔“有了秘钥和密文,那么就等于有了明文。

非对称秘钥

DH(Diffie-Hellman)算法

1976年,美国学者Dime和Henman为解决信息公开传送和密钥管理问题,提出一种新的密钥交换协议,允许在不安全的媒体上的通讯双方交换信息,安全地达成一致的密钥,这就是“公开密钥系统”。相对于“对称加密算法”这种方法也叫做“非对称加密算法”。

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

算法原理及示例

  1. 假如明明和丽丽希望交换一个密钥。

  2. 明明取一个素数p =97和97的一个原根a=5,让隔壁的王叔叔告诉丽丽。

  3. 明明和丽丽分别选择秘密密钥XA=36和XB=58,并计算各自的公开密钥,然后让隔壁的王叔叔帮忙交换公开秘钥。

    YA=a^XA mod p=5^36 mod 97=50

    YB=a^XB mod p=5^58 mod 97=44

  4. 明明和丽丽交换了公开密钥之后,计算共享密钥如下:

    明明: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算法对数进行了加密,那么如果王叔叔在交换秘钥的过程中做了手脚呢?

如何做手脚?看下图:

  1. 王叔叔自己生成一个公私钥,和明明以及丽丽交换。
  2. 王叔叔冒充丽丽把自己的公钥发给明明。
  3. 明明用王叔叔的公钥对信件加密。
  4. 王叔叔用自己的私钥解密就可以看到明明给丽丽的邮件。
  5. 王叔叔冒充明明把自己的公钥发给丽丽。
  6. 丽丽用王叔叔的公钥对信件加密。
  7. 王叔叔用自己的私钥解密就可以看到丽丽给明明内容。

至此,邮件内容又赤裸裸地被王叔叔看到了,怎么办呢?我们下文继续解释。

扫码关注公众号,了解更多管理,见识,育儿等内容

作者: 王德水
出处:http://www.cnblogs.com/cnblogsfans
版权:本文版权归作者所有,转载需经作者同意。