前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >旧闻系列-编程加密那些事儿

旧闻系列-编程加密那些事儿

作者头像
春哥大魔王
发布2019-07-31 11:39:50
4290
发布2019-07-31 11:39:50
举报

写在前面

在上大学之前对于加密和密码的理解就是qq的password输入,以为是一串******不让别人看见就是密码了,后来有次上课老师一不小心把话题扯远了,讲起来各种暗网,洋葱头等故事,才理解原来计算机在加密这件事上那么酷,又那么多玩法,后来应该就去网上搜了下关于加密算法的东西。

加密那些事

加密主要分两种:单向加密和双向加密。

单向加密比较简单,双向的稍微复杂一些。

单向加密是通过一种加密方式加密和解密。所以保存好加密算法很重要,一旦泄漏加密方式就失效了。

双向加密

双向加密是密钥有两把,公钥和私钥,公钥可以公开到公网上,私钥是一个于公钥对应的私钥。使用公钥可以解开私钥加密的信息。在双钥体系中,公钥用来加密信息,私钥用来数字签名。

因为任何人都可以生成自己的(公钥,私钥)对,所以为了防止有人散布伪造的公钥骗取信任,就需要一个可靠的第三方机构来生成经过认证的(公钥,私钥)对。

目前,世界上最主要的数字服务认证商是位于美国加州的Verisign公司,它的主要业务就是分发RSA数字证书。

所以双向加密分为三部分:公钥,私钥,数字服务提供商。

数字签名

数字签名是怎么回事呢?

我们可以在传输内容上进行进一步的加密和编码,比如对内容采用Hash函数,生成信件的“摘要”(digest)。然后使用私钥,对这个“摘要”加密,生成"数字签名"(signature)。信息接收方取下“数字签名”,再用提供的公钥解密,得到信件的“摘要”。由此证明,这封信确实是信任方发出的,所以“签名”这一步是为了确认接收方和发送方授信。之后再对信件本身使用Hash函数,将得到的结果,与上一步得到的“摘要”进行对比。如果两者一致,就证明这封信未被修改过。

因为公钥是可以暴露在公网上的,所以公钥很容易被窃取,为了保证公钥的可信,引入了"证书中心"(certificate authority,简称CA),为公钥做认证。

证书中心用自己的私钥,对公钥和一些相关信息一起加密,生成"数字证书"(Digital Certificate)。

拿到数字证书以后,就可以放心了。以后通信过程中,只要在签名的同时,再附上数字证书就行了。

收到消息后用CA的公钥解开数字证书,就可以拿到传输信息的真实的公钥了,然后就能证明"数字签名"是否真的是授信方签的。

Https

我们看下应用"数字证书"的实例:https协议。

首先,客户端向服务器发出加密请求。

服务器用自己的私钥加密网页以后,连同本身的数字证书,一起发送给客户端。

客户端(浏览器)的"证书管理器",有"受信任的根证书颁发机构"列表。客户端会根据这张列表,查看解开数字证书的公钥是否在列表之内。

如果数字证书记载的网址,与你正在浏览的网址不一致,就说明这张证书可能被冒用,浏览器会发出警告。

如果这张数字证书不是由受信任的机构颁发的,浏览器会发出另一种警告。

如果数字证书是可靠的,客户端就可以使用证书中的服务器公钥,对信息进行加密,然后与服务器交换加密信息。

(完)


本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-07-25,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 春哥talk 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 写在前面
  • 加密那些事
  • 双向加密
  • 数字签名
  • Https
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档