好吧,虽然加密也被reject了,但是既然看了这些天,就把一些理解神马的写上来好啦~
数据场景是介个样子的:
假如我有海量的数据用第三方的数据库存储,为了保证数据的安全性,我需要对数据进行加密。按照传统的逻辑,要检索存储在第三方的加密数据,需要把数据从第三方下载过来,解密后再检索,这种方式仅仅是把第三方当做硬盘来用,检索速度慢,而且浪费了第三方的计算资源。所以我需要有一种算法,能让第三方在不理解数据内容的基础上进行检索。
本文就是探讨目前的解决方案。主流的加密思想也有两种:保序加密和同态加密。加密的数据有两种形态:字符型,数字型。
保序加密,顾名思义,就是加密过后的数据仍然是有序的。从简单的数学角度来看,其实就是将数据用一个单调函数处理之后再存储到数据库中。优点是数据库加密对应用程序相对透明,加密计算通常为对称加密,时间复杂度相对较低。但是缺点也很明显,当需要对一组数进行SUM、AVG操作时,仍然需要解密,而且抵抗密文攻击的能力比较弱。一般用于数字型数据需要排序的列,字符型数据同样也可以用这种方法,只是需要把字符转换成ASCII码再计算。相关的算法可以搜索OPES、OPES+(针对字符型数据)。
同态加密,概念听起来很牛掰,可以对加密过的数据进行任何运算,解密后等同于对明文做同样的运算。但是在当下的DASS中并不适用,因为同态加密现在研究的是怎样的算法能同时保证加法同态和乘法同态。加法同态,就是对密文相加后解密,等同于明文相加,乘法同态类似。
当应用场景是DASS中,比如说我们要检索id>80的数据时,怎么检索?有人可能会说只要检索E(id)>E(80)或者E(id)-E(80)>E(0)的数据就好啦。
首先,目前的同态加密并不支持> <等一类的关系检索,第二,同态加密后的结果并不是有序的,第三方的数据库无法判断E(id)-E(80)是否大于E(0)。
同态加密确实克服了保序加密的一些缺点,如无法对加密后的数据进行计算,无法抵抗密文攻击等,但是如果给同态加密加上有序的特性,那抵抗密文攻击的性能就会下降很多。(再说。。也没几个人同态加密有序化的方向去努力吧。。)
当下的同态加密方案,大多都是非对称算法,比如说RSA。一些公钥密码天然的满足加法同态或者乘法同态,比如我没记错的话,RSA天生就是乘法同态的。
其他的方案,贴个xmind图。以上及以下均只供参考。