Java加密体系(二)加密基础概念浅析

字数 3313阅读 55

背景介绍

大黄和小涵是好朋友,大黄的成绩在班级名列前茅,小涵的成绩却总是不如人意,于是在一次考试前大黄和小涵约定好,大黄通过各种方式给小涵传答案,帮助小涵渡过难关,但是监考老师其他因素的影响,让两人倍感紧张,一场考试风云即将拉开序幕......

第一集,机智的老师!

考虑到小纸条被监考老师发现的风险,大黄决定将选择题答案变得隐蔽一些。

  • 大黄:ABCD分别对应1、2、3、4,这样老师发现也不知道是考试答案!
  • 小涵:这种方式大家都知道的,老师是很容易发现这种规律的呀,被发现就惨啦!
  • 大黄:。。。

这种方式对应的是加密中的编码方式,如base64编码,编码表是公开的,大家都可以通过计算,将密文映射成加密前的字符串,严格的来说,这并不是一种加密算法。

第二集,全班雷同!

  • 大黄:我自己定义一套加密解密的规则,要给你传答案之前,先把这个规则用纸条给你传过去,然后给你传答案,你收到答案以后,根据我的那套规则进行解密,这样安全多了,如果没有规则的话,别说老师,就连你都不知道是什么!
  • 小涵:嗯,有道理,可是如果你的这套规则被其他同学截获了,这样我们的答案会被全班传阅的,全班雷同呀!
  • 大黄:。。。

这个方案对应的是对称加密算法,下面是维基百科的解释:

对称密钥加密(英语:Symmetric-key algorithm)又称为对称加密私钥加密共享密钥加密,是密码学中的一类加密算法。这类算法在加密和解密时使用相同的密钥,或是使用两个可以简单地相互推算的密钥。

使用对称加密算法的的确可以完成加密解密的过程,这也是我们经常会使用到的加密算法,如DES、3DES、AES等,对称加密算法的缺点是双方都使用同一个密钥并且是公开的,如果密钥被人截获,那么双方之后的通信内容也就变得赤裸。

第三集,一道选择题做半小时!

  • 大黄:我们搞两套密钥,公钥和私钥,使用的方法是这样的,我把私钥留下,把公钥传给你,你用公钥把你不会的题加密再传给我,只有我的独家私钥才能解开这个内容,其他人只会看的头大,反之,你也搞一套公钥和私钥,公钥给我,我用你的公钥加密,你解密的时候用你自己的私钥解密,这样我们就不怕被截获啦!
  • 小涵:嗯嗯!这个安全多了,但是这么算太麻烦了,又是生成密钥,又是解密的,步骤繁琐,每一次传都好麻烦,这是一道5分的选择题做半个小时的节奏呀,不划算。
  • 大黄:。。。
    这种方法对应的就是非对称加密算法,维基百科的解释:

公开密钥加密(英语:Public-key cryptography),也称为非对称加密(英语:asymmetric cryptography),是密码学的一种算法,它需要两个密钥,一个是公开密钥,另一个是私有密钥;一个用作加密的时候,另一个则用作解密。使用其中一个密钥把明文加密后所得的密文,只能用相对应的另一个密钥才能解密得到原本的明文;甚至连最初用来加密的密钥也不能用作解密。由于加密和解密需要两个不同的密钥,故被称为非对称加密;不同于加密和解密都使用同一个密钥的对称加密。虽然两个密钥在数学上相关,但如果知道了其中一个,并不能凭此计算出另外一个;因此其中一个可以公开,称为公钥,任意向外发布;不公开的密钥为私钥,必须由用户自行严格秘密保管,绝不透过任何途径向任何人提供,也不会透露给要通信的另一方,即使他被信任。

相对于对称加密算法而言,非对称加密加密更加安全,但是互相传递的效率并没有对称加密算法快。

第四集,我全都不会...

  • 大黄:效率问题可以解决!我们用第三集的非对称加密算法传递第二集的对称加密密钥,当我们都拥有密钥的时候,就不用每次都传输啦!
  • 小涵:哇,真棒,半小时后就可以坐等答案了!诶?要是我全都不会呢?每一次发送给你内容都特别多,这加密解密也很麻烦呀!
  • 大黄:。。。
    这个问题也是经常会遇到的,由于非对称加密步骤繁琐,且由于算法本身耗时相对较长,通常只使用非对称加密算法对传输的秘钥进行加密。

第五集,同学是老司机!

  • 大黄:既然你的情况比较特殊,我们可以采取另一种方式,我们对传递的消息生成一段密文,这段密文有这样的特性:
    1、不管多少内容,加密后的密文都是固定的长度。
    2、同一种规则,多次对内容一致的答案,加密后的结果密文都是一样的。
    3、不同的答案,生成不同的密文。
    4、这种规则是不可逆的,不能像一开始的1234一样,可以被人反推回来。

  • 小涵:嗯,这样的话,只要有人篡改了答案,我们就可以立刻发现,防止翻车,诶?那要是有人反水,他也是个老司机,知道我们的规则,顺便把我们的密文也篡改了怎么办?

  • 大黄:。。。

这种方法叫做消息摘要,如果传输的内容很多,又不是特别机密的内容,我们可以考虑对其进行编码,然后将其摘要一起传输过去,如果内容被修改,接收方收到的明文生成的摘要与发送方发送的摘要是不同的,这时候可以及时发现被篡改,引用百度百科对消息摘要算法的解释:

消息摘要算法的主要特征是加密过程不需要密钥,并且经过加密的数据无法被解密,只有输入相同的明文数据经过相同的消息摘要算法才能得到相同的密文。消息摘要算法不存在密钥的管理与分发问题,适合于分布式网络上使用。由于其加密计算的工作量相当巨大,所以以前的这种算法通常只用于数据量有限的情况下的加密,例如计算机的口令就是用不可逆加密算法加密的。

第六集,资深老司机

  • 大黄:我们可以结合上面的密钥对的方式,我用私钥对这段密文进行加密,你用公钥解密!就算其他同学是老司机,知道我用了什么方法,但是他没有我的私钥呀,只能干瞪眼哈哈哈哈
  • 小涵:佩服佩服,但是我这里有个问题,大黄你生成秘钥对,把公钥传给我,他获取了你的公钥,把他自己生成的公钥传递给了我,为了节省时间,我只用一种加密规则(对称加密),用公钥加密,我以为是你的公钥,但是实际上这个是他的公钥!然后他收到了我的密文,获得了秘钥,他把这个秘钥用你之前的公钥加密,再还给你,这样的话我们所有的内容都是赤裸裸的呀!这个人是资深老司机!
  • 大黄:。。。
    大黄提供的方式叫做数字签名,大黄通过他的私钥对摘要进行加密,这个过程叫做加签,小涵通过大黄的公钥进行解密,这个过程叫做验签,数字签名的百度百科:

数字签名(又称公钥数字签名、电子签章)是一种类似写在纸上的普通的物理签名,但是使用了公钥加密领域的技术实现,用于鉴别数字信息的方法。一套数字签名通常定义两种互补的运算,一个用于签名,另一个用于验证数字签名,就是只有信息的发送者才能产生的别人无法伪造的一段数字串,这段数字串同时也是对信息的发送者发送信息真实性的一个有效证明数字签名是非对称密钥加密技术数字摘要技术的应用。

文中的“他”使用的方式叫做中间人攻击,以下是百度百科的解释:

中间人攻击(Man-in-the-Middle Attack, MITM)是一种由来已久的网络入侵手段,并且当今仍然有着广泛的发展空间,如SMB会话劫持、DNS欺骗等攻击都是典型的MITM攻击。简而言之,所谓的MITM攻击就是通过拦截正常的网络通信数据,并进行数据篡改和嗅探,而通信的双方却毫不知情。

第七集,活雷锋小昆

  • 大黄:这样我们可以找可靠的中间人小昆,你给他5包辣条好处费!我把我的公钥和我的个人信息都给他,他自己生成一套秘钥对,用他的私钥把我的公钥等信息生成证书发给我,这个摘要可以证明这个公钥是我的公钥!以后我传递给你的时候,给你小昆的证书,把我的密文放在后面,你收到证书以后,用小昆公钥解密就可以了,这样即使是资深老司机也没办法篡改,因为他没有小昆的私钥解不开的。
  • 小强:有道理!这样就不怕资深老司机的干预啦。
    这种方法叫做数字证书,小昆就是证书授权机构CA(Certificate Authority) ,资深老司机就是图谋不轨的黑客,数字证书百度百科如下:

数字证书就是互联网通讯中标志通讯各方身份信息的一串数字,提供了一种在Internet上验证通信实体身份的方式,数字证书不是数字身份证,而是身份认证机构盖在数字身份证上的一个章或印(或者说加在数字身份证上的一个签名)。它是由权威机构——CA机构,又称为证书授权(Certificate Authority)中心发行的,人们可以在网上用它来识别对方的身份。

总结:

考试要靠自己的实力,不要抄袭!这里只是为了方便读者理解,换了一种方式来表达,本文简单介绍了关于编码、对称加密、消息摘要、非对称加密、数字签名、中间人共计、数字证书的概念,其中关于数字证书的地方举例可能有些勉强,并没有继续深入,在后面的文章会单独开辟一篇专门讲数字证书、自签名证书、CA等知识。

参考资料:
1、掘金:https://juejin.im/post/5b1cc5c36fb9a01e8d6a3f80
2、百度百科:https://baike.baidu.com/
3、维基百科:https://zh.wikipedia.org/wiki/%E9%A6%96%E9%A1%B5
4、segmentfault:https://segmentfault.com/a/1190000004461428

推荐阅读更多精彩内容