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




写在前面

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

加密那些事

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

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

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

双向加密

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

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

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

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

数字签名

数字签名是怎么回事呢?

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

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

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

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

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

Https

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

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

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

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

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

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

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

(完)

转载于:https://my.oschina.net/u/1000241/blog/3076901

发布了0 篇原创文章 ·
获赞 0 ·
访问量 1601