http://www.xiaoyenzi.com

yottachain的加密去重技术——TruPrivacy

对于数据的加密和数据的去重,相信很多人都不会陌生。目前存储业界有一个共识——数据加密后无法去重。数据的加密和数据的去重已经有很长的研究历史。但却一直没有实现数据的加密去重问题。

究竟什么是数据加密,什么是数据去重呢?

一、数据加密

数据加密是一种非常古老的技术,许多考古结果都表明古时候的人类会使用很多种奇特的方法来对数据进行加密。例如八卦,八卦其实非常符合数据加密的过程:周文王在给他的既定读者先天八卦时,同时以特殊的方式给了他后天八卦。这就是最朴素的数据加密过程。

从这一朴素的加密过程出现,知道如今,数据加密的方式发生了翻天覆地的变化,大体上加密技术可以分为三个革新阶段:

1、1949年以前的数据加密技术

早期的数据加密技术很简单,复杂程度不高、安全性低,大部分是一些具有艺术特征的字谜,因此这个时期的密码被称为古典密码。比如下面这个字谜就是一个简单有趣的古典密码:

谜面:《红楼梦》与《莺莺传》 (打一成语)

   谜底:一石二鸟

解析:《红楼梦》又名《石头记》,一石;《莺莺传》中有二鸟,故曰一石二鸟。

套用现代密码学术语,上面这个古典密码的明文是谜底:“一石二鸟”,公钥是谜面:“《红楼梦》与《莺莺传》 (打一成语)”,而私钥就是解析:“《红楼梦》又名《石头记》,一石;《莺莺传》中有二鸟,故曰一石二鸟。”。

随着工业革命的到来和二次世界大战的爆发,密码学由艺术方式走向了逻辑-机械时代。 数据加密技术有了突破性的发展,先后出现了一些密码算法和机械的加密设备。不过这时的密码算法针对的只是字符,使用的基本手段是替代和置换。替代就是用密文字母来代替明文字母,在隐藏明文的同时还可以保持明文字母的位置不变。而置换则是通过重新排列明文中字母的顺序来达到隐藏真实信息的目的。

2、1949-1975年期间的数据加密技术

1949 年开始,借助计算机的力量,数据加密技术发展曲线陡然拔高。

从1946年2月世界上第一台计算机在美国诞生到1975年,计算机技术发展迅速,特别是计算机的运算能力有了大幅提升,这使得基于复杂计算的数据加密技术成为可能。简而言之,计算机将数据加密技术从机械时代提升到了电子时代。虽然这个时期使用的加密算法还是基于替代和置换思想的加密算法,但由于巧妙运用了计算机的高运算能力,这些加密算法在复杂程度和安全性上得到了提高,例如“置换表”加密算法和字/字节循环移位和异或操作。

“置换表”算法加密是所有加密算法中最简单的一种。这种加密算法将每一个数据段对应“置换表”中的一个偏移量,偏移量所对应的值输出成为加密后的文件。加密程序和解密程序都需要一个这样的“置换表”。这种加密算法比较简单、加解密速度都很快,但实用性差,黑客只要找到“置换表”就可以完全识破整个加密方案。这种解密过程,还保留着非常明显的“一石二鸟”韵味,在专业黑客面前,简直等于送钱。

因此在实际应用中,往往使用多张“置换表”进行加密,并按照伪随机的方式来使用每张置换表。这种情况下,黑客就算同时获得了明文和密文,要破译加密方案就会有相当的难度。

但是,随着计算机技术的发展,这种数据加密技术很快就没有了“法力”。

与“置换表”加密算法相比,字节循环移位+异或操作是一种更好的加密算法而且只有计算机可以做,循环移位数据加密技术最大贡献在于推出并形成了数据流理论体系。如果把一个字或字节在一个数据流内做循环移位,使用多次的左移或右移,就可以迅速地产生一个加密数据流。这种方法由于引入了数据流动性,很难被破解,如果在加密数据流的基础上再使用异或操作,就会使破译密码变得更加困难。异或操作示意图如下:

如果再使用伪随机的方法,即首先使用斐波那契数列生成一个随机数,并对数列所产生的数做模运算,得到一个结果,然后循环移位这个结果,就会使得密码几乎不能破解!

斐波那契数列指的是这样一个数列:1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233,377,610,987,1597,2584,4181,6765,10946,17711,28657,46368........

这个数列从第3 项开始,每一项都等于前两项之和。

1949-1975年间,很多场景都是用梅森旋转算法结合斐波那契数列来生成伪随机数,加大解密难度。

3、1976年至今的数据加密技术

1976年前的主流数据加密技术是对称密钥加密算法DES。DES算法又称美国数据加密标准,1972年由美国IBM公司研制。该算法明文按64位进行分组,密钥长64位。密钥事实上是56位参与DES运算分组后的明文组和56位的密钥用按位替代或交换方式形成的密文组。其入口参数有三个:key、data、mode。key为加密解密使用的密钥,data为加密解密的数据,mode为其工作模式。

当模式为加密模式时,明文按64位进行分组,形成明文组。key 用于对数据加密,当模式为解密模式时,key用于对数据解密。加密、解密使用同样的密钥,由发送者和接收者分别保存,在加密和解密时使用。DES算法特点是分组比较短、密钥短、密码生命周期短、加密速度快。

这种加密算法的主要问题是密钥的生成、注入、存储、管理、分发等很复杂,特别是随着用户的增加,密钥的需求量成倍增加,会使得大量密钥的分配是一个难度指数级增长、几乎不能解决的问题,几乎不可能胜任大规模复杂网络环境中的数据加密工作。

计算机与互联网技术的快速发展,催生了公开密钥密码体制。

1976年,美国密码学专家狄匪和赫尔曼提出公开密钥密码体制概念。这是现代密码学的重大发明,将密码学引入了全新的航向。公开密钥密码体制下,加密密钥不等于解密密钥。加密密钥可对外公开,使任何用户都可将传送给此用户的信息用公开密钥加密发送,而该用户唯一保存的私人密钥是保密的,也只有它能将密文复原、解密。虽然解密密钥理论上可由加密密钥推算出来,但这种算法设计在实际上是不可能的,或者虽然能够推算出,也要花费很长的时间从而几乎不可行,所以将加密密钥公开也不会危害密钥的安全。

公钥密码体制并不神秘,它的根基就是数学书上经常出现的单向陷门函数。

单向陷门函数是有且只有一个陷门的特殊单向函数。单向陷门函数包含两个明显特征:一是单向性,二是存在陷门。所谓单向性,也称不可逆性,即对于一个函数y=f(x),若已知x要计算出y很容易,但是已知y要计算出x=f ^(-1)(y)则很困难。单向函数的命名就是源于其只有一个方向能够计算。所谓陷门,也成为后门。对于单向函数,若存在一个z是计算出x=f ^(-1)(y)的充分必要条件,则称函数y=f(x)为单向陷门函数,而z称为陷门。

例如,两个大素数p和q相乘得到乘积n比较容易计算,但从它们的乘积n分解为两 个大素数p和q则十分困难。如果n为足够大,当前的算法不可能在有效的时间内实现。

具体数例:用123456789乘以987654321得出12193271112635269很容易,但是给出12193271112635269这个答案,反向计算出乘数与被乘数,就有非常多的可能性,从而构成了数据加密技术的“护城河”。

公钥密码体制就是基于上述原理而设计的,将辅助信息作为秘密密钥。这类密码的安全强度取决于它所依据的问题的计算复杂度。基于公钥概念的加密算法就是非对称密钥加密算法,这种加密算法有两个重要的原则:

第一,要求在加密算法和公钥都公开的前提下,其加密的密文必须是安全的;

第二,要求所有加密的人和掌握私人秘密密钥的解密人,计算或处理都应比较简单,但对其他不掌握秘密密钥的人,破译应是极其困难的。

正是基于这种理论,密码学领域涌现出了著名的RSA非对称加密算法。1977年,罗纳德·李维斯特(Ron Rivest)、阿迪·萨莫尔(Adi Shamir)和伦纳德·阿德曼(Leonard Adleman)共同提出RSA非对称加密算法。当时他们三人都在麻省理工学院工作。RSA 就是他们三人姓氏开头字母拼在一起组成。这种算法为公用网络上信息的加密和鉴别提供了一种基本的方法。RSA 算法的加密密钥和加密算法分开,使得密钥分配更为方便,它特别符合计算机网络环境。

随着计算机网络环境不断发展演变与信息保密性要求日益提高,非对称密钥加密算法表现出了对称密钥加密算法不可替代的优越性。

近年来,非对称密钥加密算法和PKI、数字签名、电子商务等技术相结合,保证了网上数据传输的机密性、完整性、有效性和不可否认性,在网络安全及信息安全方面发挥了巨大的作用。

目前比较流行的非对称密钥加密算法主要有两类:一类是基于大整数因子分解问题的,其中最典型的代表是RSA算法;另一类是基于离散对数问题的,其中最典型的代表是椭圆曲线公钥密码体制。虽然公钥密码体制是非常重要的一种技术,实现了数字签名的概念,使安全通信成为可能,但非对称密钥加密算法并非完美。这类算法普遍存在算法复杂、运行速度慢的缺点。

除了上述数据加密算法外,近年来还出现了一些新的加密算法,其中以1998年6月正式公布的多步加密算法最为著名,但纵观这些新的加密算法都是基于上述理论基础的。数据加密技术今后的研究重点将集中在三个方向:

   第一,继续完善非对称密钥加密算法;

第二,综合使用对称密钥加密算法和非对称密钥加密算法,利用它们自身的优点来弥补对方的缺点;

第三,随着笔记本电脑、移动硬盘、数码相机等数码产品的流行,如何利用加密技术保护数码产品中信息的安全性与私密性、降低因丢失这些数码产品带来的经济损失也将成为数据加密技术的研究热点。

二、数据去重

与数据加密技术不同,从根本上来说,数据去重技术是一个现代化概念。随着互联网尤其是移动互联网的不断发展,涌现出了大数据的概念。数据去重技术可以说是为大数据“量身定制”的数据处理技术。

什么是大数据?高德纳集团(META Group)于2012 年对大数据做出了比较科学的定义: “大数据是大量、高速、及/或多变的信息资产,它需要新型的处理方式去促成更强的决策能力、洞察力与最优化处理。” 另外,有机构在3V之外加入另外一个维度:真实性(Veracity),从而构成了大数据相对标准的4V 定义。正如高德纳对大数据的定义所言,处理海量数据需要特殊的技术。适用于大数据的技术,包括但不限于大规模并行处理(MPP)数据库、数据挖掘、分布式文件系统、分布式数据库、云计算平台、互联网和可扩展的存储系统。

从某种意义上来说,数据去重技术是所有大数据处理技术的底层技术。尽管适用于大数据的技术越来越多,但是面对海量数据仍然力不从心,经常有无力回天的感觉。

大数据处理的第一步,通常是检测和消除其中的重复数据。

数据去重技术是所有大数据技术的底层技术。随着数据量的指数级增长,人们越来越意识到数据去重的重要性与紧迫性。大数据技术发展至今,数据去重技术几乎成了数据后续处理的充分必要条件。只有做好数据去重工作,才能减少数据处理量、减少存储空间和网络带宽的占用,减少计算机网络相关软硬件没有必要的消耗。只要扎扎实实地做好数据去重工作,就能真真切切地“放大”既定容量的存储空间、释放既有网络带宽的“自带能量”,从而大幅节省成本、提升计算机网络相关软硬件的经济效用。

数据去重简单来说,就是多个数据主体拥有相同的数据,不重复存储而是合并共用同一份空间。

值得注意的是,数据去重和冗余存储是不同层面的概念。即使去重后只存一份数据,这份数据也必须用冗余编码分成很多碎片,分别保存在多个不同节点上,这样可以保证即使其中有部分节点数据丢失也不影响数据的完整性。众多节点共同存储的碎片合起来称为一份数据。这两个概念之所以有时候会产生误导或混淆,是因为有一种最简单的冗余算法是多副本存储。这种情况下,多个用户拥有的相同数据会通过去重而只保存一份,但这一份有多个副本。

数据去重也称为数据重删。“重删”二字其实包含两层意思:去重与删除。

下面就以关系数据库管理系统SQL Server为例,说明数据重删的技术要点。

1.从海量数据中删除数据

从海量数据表中删除一半数据看似简单:使用delete命令就可以了。但是如果真这么干,SQL Server 产生的事务日志将指数级暴增,没多久便会把服务器硬盘爆掉。数据库的恢复模式会影响日志文件的增长,在删除海量数据时,根据采用的方法,相应地把恢复模式设置为simple,或bulk_logged模式,能够在很大程度上减少删除操作产生的事务日志,从而避免日志暴增。

另外,在删除数据时,把表上的多余索引删除,只保留一个必需的索引。在数据删除完成之后,再重建索引,能够提高数据删除操作的性能。

最后,根据保留数据占总数据量的比例,选择不同的方法删除数据。如果大表中保留的数据较少,可以先把保留的数据存储到临时表中,然后把原始表删除,这样能够利用大容量日志操作,减少日志的增长和提高数据插入的速度。技术要点如下:

   A、循环删除,避免日志文件暴增

在从海量数据表中删除大量数据时,为了避免日志文件暴增,通常采用循环删除方法:首先设置恢复模式为simple,然后每次删除操作都只删除部分数据,这样当单个删除操作执行完成时,事务日志会被及时清理,事务日志一般保持单个删除操作的事务日志量。但是该方法耗时过长,仍有一些局限性。

   B、将数据插入到临时表中,把原表drop

如果原始表有一半以上的数据要被删除,从原始表中执行delete命令删除数据,效率十分低下,可以考虑把原始表中的数据通过select语句筛选出来,然后批量插入导新表中,这种方式利用了大容量日志(Bulk Logged)操作的优势。由于SELECT INTO,INSERT SELECT是大容量日志操作,select 命令不会产生大量日志文件,因此执行插入比执行删除的效率更高。最后执行drop命令,删除整个原始表,几乎不消耗任何时间。

   C、对分区表执行分区转移操作

SQL Server 的分区表实际上是一系列物理上独立存储的分区构成的,如果一个分区中的数据都需要被删除,那么可以把该分区转移(switch)到一个临时表中,由于分区的转移仅仅是元数据库的变更,因此不会产生任何的数据I/O,分区转移瞬间完成。被剥离的分区通过drop 命令删除,整个过程仅仅会产生少量的I/O 操作,用于元数据变更;而不会产生用于数据删除的IO 操作,这种方法耗时最短,资源消耗最小,效率最高。

   2.从海量数据中去重

数据去重分为部分列去重和全部列去重。全部列去重使用distinct子句来实现,由于distinct操作符会在tempdb中创建临时表,因此distinct操作是I/O 密集型操作。而部分列去重一般采用row_number排名函数来实现,也可以考虑使用忽略重复值的唯一索引来实现。实际使用过程中部分列去重更为常见。

   A、使用row_number函数来实现

选择排名函数,是因为排名函数有部分列分区排序的功能。首先在部分列上创建索引,这样数据库引擎能够根据索引列快速排序,然后通过row_number函数和cte来实现重复数据的删除。在数据去重时需要注意,如果删除的数据量太大,数据库引擎会产生大量的事务日志,导致日志文件暴增。因此在选择该方法时,务必慎之又慎,否则后果不堪设想。

   B、使用忽略重复值的唯一索引来实现

通过插入和忽略重复值实现部分列的去重,相对来说,更容易控制。可以通过循环插入方式来执行,这样在单独的一个事务中,控制插入数据的数量,能够控制产生的事务日志不至于太大,对于海量数据的去重,建议采用该方法。

以上为SQL Server海量数据删除与去重的技术要点。

除了上述数据库管理系统与数据去重方法,还有Oracle、Informix、Sybase、Access等等数据库管理系统与相应的数据去重方法。但是,无论采用哪种数据库管理系统和数据去重技术,数据去重的特点都是同一生态系统内的数据主体越多、数据应用场景越多,去重率就越大。数据去重的这个特点映射到存储领域,就会出现“同样的存储空间可以存储更多的数据”这种魔幻效果。

三、加密去重技术是通往未来世界的门票

如前所述,零知识数据加密和数据去重都对存储起到决定性的作用。但在行业中却存在一个“公知常识”:数据加密后不能去重。即零知识数据加密与数据去重二者不可兼得,最多只能选一个。大部分人认为,数据加密将导致数据量增大,而数据去重目的在于减少数据量,二者水火不容。还有人认为数据加密后就变成乱码,无法实施数据重删。

但这其实并非问题的关键:完全可以保存数据明文的hash值,通过比较hash值来识别重复数据,这并不会削弱数据安全性。

加密后去重的核心问题在于数据的授权。即A存储的数据,当B也要存储相同的数据时,如何将A的数据授权给B使用同时不影响A的数据安全性。

世间无难事,只要肯攀登。YottaChain创始人王东临先生大胆突破常规思维,从数据安全和存储的最基本原理出发,通过严谨而艰辛的科学研究发明了“加密后去重” TruPrivacy专利技术,从而改写了数据处理、IT及区块链的格局。

郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。