首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

数据加密的那些事

今天要说的是数据加密,这是一个很深的东西,所以我也没想给大家讲什么高深的内容,就当知识普及来看就行。

信息加密的目的是什么我就不说了,大家都懂,我直接开始讲内容。

首先加密分两种,可逆加密不可逆加密

可逆加密就是密文可以解密成明文,而不可逆加密只能加密,不能解密。

那有人可能会问了,可逆算法我可以理解,不可逆加密是干啥用的?加密以后连自己都不知道是个什么东西了。

其实不可逆算法的目的不是用来防止数据被窃取,而是防止数据被恶意篡改,举个例子,你要约好朋友出去玩,然后在邮件中写明了时间地点,问他有没有空,然后你朋友很高兴的答应并回复了邮件,这本是没什么可保密的数据,但是万一有人不想你出去玩(比如你妈妈),然后她会在你查看之前先修改了邮件的内容,比如把内容改成不去玩了,这就会对你的生活造成相当大的影响(当然只是举个例子)。

那么,这么看来,不可逆算法确实是比较重要的,但是它是如何实现功能的呢?

不可逆算法,对原数据加密后得到密文,这个密文就是验证数据完整性的关键,我把它叫做信息摘要(以下简称摘要),不同数据生成的摘要都不一样,而且明文中的内容只要稍稍改动一下,摘要就会大相径庭。假设我和小Q公用同一套加密算法,有一天我要给小Q发送一组数据,我就把原数据和摘要统一传给小Q,小Q收到之后同样会对原数据进行加密,然后将生成的摘要和收到的摘要做对比,如果内容完全一致,则证明这段数据在传输中没有被别人篡改过。

需要注意的一点是,加密算法是公开的,现在网络上比较常见的不可逆加密算法有,MD5,SHA系列,但是MD5和SHA-1已经被证明是不安全的了,入侵的方式不是破解,而是碰撞,即用一些手段,把和原数据完全不同的数据生成和原数据一样的密文,从而成功蒙蔽对方(据说现在MD5加盐都是不安全的了)。

但目前SHA-256算法被证明是不可破解的(起码在有生之年是这样的)。

但其实这种加密方式还是存在着问题,假设我把数据和摘要一并发给小Q,中间又被黑客截获了,这次黑客有长进了,他知道我用的加密算法(这个是公开的),所以他不仅把原数据替换了,还把伪造的数据进行同算法的加密,连原来的摘要也被他伪造数据生成的摘要替换掉了,这样小Q可能还是没发现数据是被伪造的,那么这种情况该如何解决呢?大家先动动脑筋,我这里卖个关子,等到最后我再讲这个问题(希望你们不要打我,虽然你们打不到)。

下面再来说可逆算法,这个就有点难度了。

先来普及几个基本概念

密码算法:一套加解密算法,是公开的;

密钥:数据加密时的混淆参数,就是在原数据中混入一些参数再进行加密操作,理论上参数位数越多,破译就越困难;

对称加密:服务器和客户端同时用一样的密钥进行加解密。

客户端发送请求后,服务器会相应自己使用的算法和密钥过去。这样做虽然很方便,但是缺点也是显而易见的,我会分两种情况讨论:

1.服务器和所有客户端的密钥一样,这使得任何一个客户端都能截获并破解所有的加密信息,随时随地可以伪装成服务器攻击其他客户端,安全问题可想而知;

2.服务器给每个客户端分配一个密钥,这样服务器就需要管理和客户端相同数量的密钥,很可能导致其负载过大。

大体的攻击步骤:

服务器发送加密信息-->不法分子截获并解密-->修改内容并重新加密-->发送给客户端-->客户端成功被蒙蔽(成功懵逼是什么操作?)

为了解决这个问题,非对称加密现身了。

照样先解释一下术语:

私钥/公钥:私钥只存储在本机上,公钥对外公开,公钥和私钥是配套的;

数字签名:用本机的私钥对原数据进行加密,生成的密文就是数字签名,因为私钥只此一家,所以这个密文也是独一无二的,就相当于你本人的手印或签字,能证明你自己;

非对称加密:用同一套私钥和公钥,私钥加密的数据只能用公钥去解密,公钥加密过的数据只能用私钥去解密

那么现在两台主机间传输重要数据的一套完整的流程就是:

A要和B通信-->A主机获取B主机的公钥-->B获取A的公钥-->A用自己的私钥对原数据x进行加密,获得加密后的数据y-->A再用B的公钥对y进行加密,获取数据z-->A将数据z传输给B-->B利用自己的私钥对数据z进行解密,获得数据y-->B用A的公钥对数据y进行解密,获取原数据x

这样一个过程我们可以看到,因为私钥都是只在本机上存储的,即使有人想从中破坏,查看或修改数据,都是不可能的,安全性也就大大提升了。

不过其实这样的方法还是有安全隐患的,入侵者虽然不知道主机B的私钥,但是可以用自己的密钥和A主机完成对接,A以为和自己通讯的是B,其实已经被别人偷偷掉了包,这样入侵者的做法就是:

A主机发送自己的公钥给B-->被C拦截-->C发送自己的公钥-->C获取A的公钥

之后A主机所有发送给B的数据包全被C拦截,A会用自己的私钥和C的公钥加密数据,C也可以用自己的私钥和A的公钥解密,这样其实数据全被C获取,而A主机还浑然不知。那么问题就来了,如何保证现在和你连接的主机是真正的主机呢?

是不是感觉很烦?感觉怎么防都防不住?

没关系,兵来将挡,水来土掩,魔高一尺,道高一丈,出现新的安全漏洞,我们当然不能坐视不理,要赶紧发明更完备的措施来应对才是啊。

这时候我们就搞出了数字证书(CA)这个东西(当然不是我搞出来的,是的话我就不会在这苦逼的写推送了),找一家大家公认的权威机构,每台主机生成自己的一对密钥,就需要去找这家机构申请,顺利的话会被颁发一个认可凭证,也就是CA,上面记录了主机的公钥等信息,之后主机就可以使用自己的这套密钥了。

那么回到刚刚的情况,在主机A要确认对面主机是否是B的时候,只需把B的CA下载下来,然后将B发过来的公钥和CA中的公钥做对比,如果一样,就证明对面主机确实是B,也就避免了上面的问题。

非对称加密优点不用说,更加安全一些,毕竟私钥只有自己知道,只要不泄露就是安全的,缺点是加解密速度慢。常见的非对称加密算法有RSAElgamal,这里不多做解释,毕竟是科普文,大家有兴趣的请自行百度。

好了,到现在呢,整个加密算法也就说的差不多了,现在再来回顾一下之前那个不可逆加密的安全问题,忘了的可以先到上面翻一翻,然后思考一下。

略加分析,我们会得出一个结论,只要保证信息摘要不被修改,那么数据的完整性就可以保证,那么既然这样,我们干脆把信息摘要当作非对称加密的原数据对其加解密不就好了嘛?

不懂没关系,我把整个流程写下来你就明白了。

首先A把原数据进行不可逆加密运算,得到一个信息摘要;

之后,A将信息摘要当作要加密的数据和B互传公钥进行加解密,也就是上面的步骤,然后将数据和摘要一同传输过去,这样数据虽然是明文传输的,但是信息摘要却是加密传输的

在B接收到数据以后,B会用同样的hash算法对原数据进行操作,并将生成的信息摘要和解密后的信息摘要进行对比,如果一样,则证明数据在传输过程中没有变动,也就保证了数据的完整性。

这样的话别人自然不能对信息摘要进行任何的改动,他生成伪造数据的摘要后还得加密呢,苦于不知道别人的私钥,没办法只能放弃。

最后还有一点就是,有时候接收主机B是不需要有密钥的,比如服务器和客户端之间传输数据,客户端是可以没有一套自己的密钥的,只需要使用服务器的公钥就行,不然颁发CA的机构不得累死。

这方面的知识还有很多很多,比如怎么写非对称加密算法才能保证私钥加密的数据能被公钥解密,黑客们是怎么通过碰撞破解SHA-1算法的(原谅我用“破解”这个词,因为我想不出别的词了),你要是深挖的话,这些都是需要掌握的,我说的这些只是冰山一角,前辈们和黑客的对战比这些要丰富得多。

今天的内容就到这里,希望大家能看得懂,还是那句话,如果我写的有错误或者有看不懂的地方,尽情留言告诉我,谢谢!

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180407G1DGJO00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券