一、前言
在使用单向散列函数校验数据完整性时,需要保证原始的散列值不能被更改。
因此,在很多场景下,我们并不能仅仅通过单向散列函数来解决完整性问题,还需要其他技术来解决这个问题,如加密技术。
本篇博客就来介绍一下第一类加密技术------对称加密技术
二、加密、解密、密钥
加密数据的安全性依赖于:加密算法的质量和密钥的保密性。(注意:算法应该是公开的才经得起考验,同时,要做好密钥的保密)
三、什么是对称密钥
对称密钥:每个参与者,都持有相同的密钥。
非对称密钥:每个参与者,都持有不同的密钥。
四、怎么选择对称密钥算法
跟单向散列函数一样,对称密钥算法也可以分为退役的,遗留的和现行的算法。
相比于对称散列函数,加密、解密的算法是一种很快的运算,虽然快,但也是要额外的运算的,会影响性能,但并不显著。
序列算法和分组算法
之前讲过,为了能够处理任意大小的数据,并输出固定长度的结果,单向散列函数会对数据进行分组,然后按数据组进行计算;在对称密钥的算法里,因为输出结果的长度没有限制,对数据的处理方式,也就有了更多的想象空间。
从数据分组的角度:
进行数据分组,然后按数据组进行运算,就是分组算法。
不进行数据分组,按照原始数据的大小进行运算,就是序列算法(效率更高)。
怎么计算序列算法?
从对称密钥里推导出一段和明文数据相同长度的密钥序列,然后密钥序列和明文进行异或运算得到密文,和密文进行异或运算得到明文。
关键:怎么通过固定长度的密钥推导出任意长度的密钥序列。
对比:
☆由于不需要分组,序列算法的安全性主要取决于密钥序列的推导算法,而不用考虑数据分组带来的种种陷阱。对于应用程序而言,这是一个便于使用,不易出错的选择。
☆分组算法的安全性,除了算法本身之外,还取决于数据分组的策略。
因此,更倾向于优先使用序列算法。