构成信息安全技术体系的三类基本算法(构成信息安全技术体系的三类基本算法有哪些)

网友投稿 248 2022-10-09


构成信息安全技术体系的三类基本算法(构成信息安全技术体系的三类基本算法有哪些)

1. 数据摘要

byte[] digest(byte[] data)

1.2. 函数特性:

1.2.1. 无论data的长度为多少,digest返回某一定长数据,通常为几十个字节  1.2.2. 若digest(data1) != digest(data2),则data1 != data2;若digest(data1) = digest(data2)则可以认为有很高的概率data1 = data2,在特定的情况下,对某些算法来讲,该判断出错的概率不到1/128^2。  1.2.3. 运算不可逆,即知道digest的返回值,不能反推出data的值。顺便提一句,人们常提起的比特币挖矿其实就是指通过不断的尝试找出一个data,使得digest(data)的结果小于某一个表示难度的数,其基本代码如下:

while(digest(blockData + random()) > difficultyFactor); //random()在这里产生随机数

可见即使为了得到满足某一条件的data值,也只能通过暴力尝试,而不能有其它快速的方法。  1.2.4. digest函数相对于下面要谈的其它两类算法来说,运算速度非常快。注意是相对的快,因为即便如此挖矿也是个很费时的运算,呵呵。

1.3. 应用举例:

1.3.1. 大数据检索比较

假设要做这么一个文件上传系统,要求上传文件前,先检测服务器上是否已经有同样的文件存在,如果已经存在,则不再上传。如果没有digest算法,只有把整个文件上传到服务器再进行比较,这无疑非常费时。如果我们每次上传文件,都对文件做一次摘要运算(特性1.2.4:摘要运算速度非常快,相对于文件上传的耗时来说忽略不计),并将摘要值保存起来;那么下次上传文件前我们对将要上传的文件进行一次摘要运算,只是把摘要值提交到服务器(特性1.2.1:摘要值一般只有几十个字节), 服务器在之前保存的摘要值列表中查找客户端新提交上来的摘要值,如果找到了(特性1.2.2),则告诉客户端不用再上传了。这就是很多云盘使用的秒传技术,很多上G的文件,只要几秒钟就上传成功了,原因就在于其他人在你之前已经上传过同样的文件。

1.3.2. 防数据损坏

还是上传文件的例子,客户端上传前先把本地文件的摘要值传给服务器,服务器在接收到完整的文件后,用同样的摘要算法,计算接收到的文件的摘要值,和客户端上传的摘要值进行比较,如果相同则可以认为文件接收完整;反之则认为文件在传输过程中损坏(特性1.2.2)。

1.3.3. 防数据纂改

2. 对称加密

byte [] symEncrypt(byte[] plainData,byte[] password); byte [] symDecrypt(byte[] cipherData,byte[] password);

2.2. 函数特性:

2.2.1. 加密和解密必须使用同样的密匙。 2.2.2. 相对于非对称加密速度快。

2.3. 应用举例:

2.3.1. 文件加密解密

不再赘述。

3.非对称加密

class KeyPair //密钥对 { byte [] privateKey //私钥 byte [] publicKey; //公钥 }; KeyPair generateKeyPair();//用于产生一个密钥对 byte[] asyEncrypt(byte[] plainData,byte[] publicKey); //用公钥对数据加密 byte[] asyDecrypt(byte[] cipherData,byte[] privateKey); //用私钥对公钥加密的数据解密

3.2. 函数特性:

3.2.1. 用公钥加密的数据,只能由对应的私钥解密。即他们都在由generateKeyPair产生的一个密钥对(KeyPair)里面。有时也用私钥加密,公钥解密。  3.2.2. 知道一个KeyPair的publicKey,以现在计算机的算力在短期内无法计算出它对应的privateKey。这个短期指的是至少几十年。  3.2.3. 非对称加密通常比对称加密慢很多。所以它通常只用来对密钥或摘要加解密,而不会用在长数据上。

3.3. 应用举例:

设计一个文件上传系统,要求所有终端上传的数据都经过加密,即使数据经过被窃听的网络,窃听者也无法获知数据内容。如果使用对称加密会发生什么:  1. 所有终端和服务器共享一个秘钥,任何一个终端泄露了秘钥,数据传输将不再安全。  2. 为每个终端分配一个秘钥,服务器保存每个终端的秘钥,从不同终端来的数据使用对应终端的秘钥来解密。这可以解决一个终端泄密,导致整个系统泄密的问题。但同样存在秘钥泄露的风险。  这时候使用非对称加密就解决了上面的所有问题。首先用generateKeyPair生成一个密钥对(KeyPair),将KeyPair的publicKey分配给所有终端,将KeyPair的privateKey安全保存在服务器。终端上传数据时使用asyEncrypt(byte[] plainData,byte[] publicKey)加密数据,服务器端用asyDecrypt(byte[] cipherData,byte[] privateKey)解密数据。因为公钥加密的数据只能通过对应的私钥来解密(特性3.2.1),所以数据即使在传播途中被窃听也是安全的,又因为特性3.2.2,即使所有人知道公钥,私钥也是安全的。   上述设计方案只是为了演示非对称加密方案的使用,在现实中一般不会这么做,因为特性3.2.3,这样会存在性能问题。所以一般会与对称加密组合使用,我们接着就要介绍这种用法。

4. 三类算法的组合应用:

4.1. 加密通信

继续上文的例子,由于非对称加密的速度非常慢,所以我们考虑只用它来加密数据量小的一个临时密钥,用这个临时密钥来使用对称加密的方法加密实际的通信数据。终端向服务器发起通信的流程大致如下:  1.终端生成一个随机密码:symPassword.  2.终端将这个随机密码使用非对称加密加密,加密使用服务器对应的公钥(publicKey)。asyEncrypt(symPassword,publicKey),并将这个加密后的结果发到服务器端。  3.服务器端使用私钥进行非对称解密asyDecrypt(encryptedSymPassword,privateKey),解密得到symPassword.  4.终端使用symEncrypt(data,symPassword)对data进行加密,并将加密结果发送到服务器。  5.服务器使用symDecrypt(encryptedData,symPassword)对数据进行解密。  这个方案使用临时的对称加密密码来进行数据的加密传输,由于临时密码可以在每次通信建立时重新生成,所以不会有密码泄露的风险。

4.2. 数字证书

4.3.HTTPS

这实际上是在HTTP协议的下层增加了由4.1和4.2组合成的加密通信协议。先有4.2得到网站的公钥,再用4.1的方法传输HTTP数据。具体的实现不在本文讨论的范围。

4.4. 加密货币与区块链

不外乎也是本文讨论的三类算法的组合应用,将在接下来的文章讨论这个话题。


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:FIDO U2F应用开发(二)-编程接口(fidodido)
下一篇:springboot实现将自定义日志格式存储到mongodb中
相关文章

 发表评论

暂时没有评论,来抢沙发吧~