原创 架构师技术联盟 

近期,Google和道荷兰阿姆斯特研究者宣布攻破了世界上第一例公开的SHA-1哈希碰撞实例,业界一片哗然。当两组不同的数据(文件、一段数据)计算出相同的Hash值时,即视为二者发生碰撞;很多声音强调了避免使用SHA-1的必要性。Google自己多年来也是一直主张弃用SHA-1方案,让更多人意识到其已经不再安全可靠。回顾历史,OpenSSL心脏出血Heartbleed漏洞也是引起了业界很大的反应。

SHA-1加密Hash函数在浏览器安全保护、代码库管理、存储数据重复删除等得到广泛应用。SHA-1作为一项被广泛使用的加密算法,其主要特点就是在当前计算能力、存储数据容量上,不同的数据出入无法找到相同Hash输出值。然而随着时间的推移,在未来存储应用中,庞大的数据量已经无法阻止小概率的数据碰撞冲突,在现实世界发生了。

这一系列反应都说明了数据安全的重要性和人们的关注度。在存储重删压缩应用中,厂商通常采用SHA-1算法计算数据指纹,下面我们重点讲讲SHA-1算法原理。

Hash在数据重删的应用

在存储重删算法中,SHA-1算法的输出长度为20Bytes(160bits),对相同的数据,其输出必然相同;对不同的数据,其输出是随机的,在[0,2^160-1]之间均匀分布,两个指纹出现Hash碰撞(不同的数据产生相同Hash值)的概率为2^(-160),对应48个9的可靠性;

最直接的攻击方法就是累积大量的SHA-1值,理论上,只要累积2^80个SHA-1值,就会以很高的概率出现碰撞,以每4KB数据计算一个HASH值来计算,此时的数据量为1DB(10^12 PB)。以总数据量等于4ZB(10^6 PB)为例,此时发生HASH碰撞概率为2^(-40),约为12个9的可靠性。

理论上,2012年IDC预计未来8年全世界才产生40ZB的数据,按照这个增长速率,保守估计,以较高的概率出现HASH碰撞将在几百年之后;但哈希碰撞事件也确有发生,如本次事件,以及利用 MD5 碰撞伪造合法CA证书,进而攻击HTTPS安全体系。

Hash冲突预防方法

所以,为了降低用户的担心,很多存储厂商的重删特性除了支持Hash算法外,还支持逐字节对比。当遇到相同Hash值时,可以再通过逐字节对比功能检验,这样就可以做到绝对的安全,但由于这个功能会增加额外的系统消耗,所以会对重删性能造成一定的影响。

另外,Hash算法也有等级之分,安全从业者比以往更为迫切地需要转而使用更加安全的加密散列算法,例如SHA-256与SHA-3。

  • 强Hash:SHA-1、SHA-3、SHA256;

  • 弱Hash:MurMur3、CRC、MD5;

强Hash与弱Hash的区别是,强Hash发生hash冲突的概率低,就是防冲突的能力强;弱hash发生冲突的概率低,防冲突的能力弱。

数据重删如何应用

数据重删也是有相应的应用场景,针对已经压缩或重删的数据来说,就不适合在进行重删了,因为数据经过专业的编码处理,已经不能再次进行重删了,加密的数据也是不适合再次进行重删的。

在实践中,有些数据格式我们很容易得知其数据时经过压缩处理的,如图片、视频文件等,有些是经过编码的,如PDF文档、Office365、ISO文件和可执行文件等;还有些数据是经过自身压缩实现压缩的,如.rar,.zip等文件。

很多存储产品支持的IO大小重删粒度是4K/8K,与数据库IO大小基本重合,再加上数据库操作会对数据表项的增加一些时间戳或标记,导致不能重删或重删无效果,但是可以使用压缩来节省存储空间。

在存储这一行业,重删压缩是十分火热的词汇,尤其随着闪存浪潮的兴起。所以促使所以与存储相关的软硬件都支持重删和压缩,如备份软件、备份PBBA设备、企业级存储等等。那么我们在实际应用中该如何选择呢,这也让方案设计工程师很头疼。

这就需要我们在选择时,回归到业务本质以备份为例,如备份软件、备份PBBA设备的重删压缩是针对备份场景优化设计,这种场景以带宽要求为高,时延限制不高,所以一般采用变长重删算法,这种算法可以识别出备份数据块中增加、修改的内容,从而可以提升重删率,如DataDomain、HP StoreOnce和飞康VTL等。

企业级存储主要应对主存场景,需要考虑IOPS和时延,重删处理流程不能太繁琐,所以一般采用定长分块算法,采用固定长度分块计算数据Hash,无法识别数据细小变化,以及细小的变化导致增长块的变化,重删率不高但主存性能影响较小。

在实际应用中,如何选择备份软件、备份PBBA设备、企业级存储的重删,完全决定于应用和业务场景。通常还要考虑在线重删和后处理重删,在线重删是数据在写入磁盘之前进行重删;后处理重删是数据先写入磁盘,然后再读出来进行重删,重删之后的数据再写入磁盘中。通常在实际操作时,用户会根据所承载业务的负载,指定系统相对空闲的时间让重删包括压缩功能运行起来。搜索“ICT_Architect”加入微信公众号“架构师技术联盟”获取更多精彩内容。

相关阅读

>数据重删压缩技术分类

>闪存中数据重删技术浅析

>数据重删在主存如何实现

>大数据时代下数据重删的考虑

>数据重删在备份场景应用

Google揭露SHA-1碰撞,加速数据重删字节对比的更多相关文章

  1. GPU—加速数据科学工作流程

    GPU-加速数据科学工作流程 GPU-ACCELERATE YOUR DATA SCIENCE WORKFLOWS 传统上,数据科学工作流程是缓慢而繁琐的,依赖于cpu来加载.过滤和操作数据,训练和部 ...

  2. WordPress 后台禁用Google Open Sans字体,加速网站

    解决方法很简单,安装启用 Disable Google Fonts 或者 Remove Open Sans font Link from WP core 其中之一即可.或者如果你没有使用WP自带的官方 ...

  3. Fusion Tables 图层用于呈现 Google Fusion Tables 中包含的数据

    Google Maps API 允许您使用 FusionTablesLayer 对象将 Google Fusion Tables 中包含的数据呈现为地图上的图层.Google Fusion Table ...

  4. TypeToken 是google提供的一个解析Json数据的类库中一个类

    Type listType = new TypeToken<LinkedList<User>>(){}.getType(); Type是java里的reflect包的Type ...

  5. Django models .all .values .values_list 几种数据查询结果的对比

    Django models .all .values .values_list 几种数据查询结果的对比

  6. 一个purge参数引发的惨案——从线上hbase数据被删事故说起

    在写这篇blog前,我的心情久久不能平静,虽然明白运维工作如履薄冰,但没有料到这么一个细小的疏漏会带来如此严重的灾难.这是一起其他公司误用puppet参数引发的事故,而且这个参数我也曾被“坑过”.   ...

  7. MySQL 笔记整理(13) --为什么数据表删掉一半,表文件大小不变?

    笔记记录自林晓斌(丁奇)老师的<MySQL实战45讲> (本篇内图片均来自丁奇老师的讲解,如有侵权,请联系我删除) 13) --为什么数据表删掉一半,表文件大小不变? 我们还是以MySQL ...

  8. 【Debug】串口发送数据时部分字节被拉长,出现帧错误,原因MCU进入低功耗模式导致串口时钟停了!

    串口发送数据时部分字节被拉长,出现帧错误,原因MCU进入低功耗模式导致串口时钟停了!

  9. 教你如何6秒钟往MySQL插入100万条数据!然后删库跑路!

    教你如何6秒钟往MySQL插入100万条数据!然后删库跑路! 由于我用的mysql 8版本,所以增加了Timezone,然后就可以了 前提是要自己建好库和表. 数据库test, 表user, 三个字段 ...

随机推荐

  1. 62、常规控件(5)Navigation View –美观的侧滑视图

    1.main_layout.xml <android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.andr ...

  2. Servlet初始化及处理HTTP请求

    上一篇详细介绍了与Servlet相关的几个核心的接口和类,当我们自己写Servlet类时,一般需要继承HttpServlet类,实现init().doGet().doPost()等方法.当我们写好Se ...

  3. 【BZOJ3673/3674】可持久化并查集/可持久化并查集加强版 可持久化线段树

    [BZOJ3674]可持久化并查集加强版 Description Description:自从zkysb出了可持久化并查集后……hzwer:乱写能AC,暴力踩标程KuribohG:我不路径压缩就过了! ...

  4. [LintCode] 通配符查询

    动态规划: class Solution { public: /** * @param s: A string * @param p: A string includes "?" ...

  5. ES6入门概览一

    一.let const 1.let命令:声明变量仅在块级作用域有效:let实际上为js新增了块级作用域 好处: -不存在变量提升: -内部声明的变量 函数 不会影响外部 -不可重复声明变量 2.con ...

  6. 160708、JQuery解析XML数据的demo

    用JavaScript解析XML数据是常见的编程任务,JavaScript能做的,JQuery当然也能做.下面我们来总结几个使用JQuery解析XML的例子. 方案1 当后台返回的数据类型是xml对象 ...

  7. FineReport----单元格元素(数据列、公式、斜线)

    一.绑定.插入数据列 数据集字段绑定 二.公式 1.单元 格计算 1.两个单元格(C7,I7)和 2.等于某单元格的值 D7等C7单元格的值 3.C7/8(除) 4.除数被除数为零.空的处理 http ...

  8. 巨蟒python全栈开发-第17天 核能来袭-成员

    一.今日主要内容 1.成员 在类中你能写的所有内容都是类的成员 2.变量 (1)实例变量:昨天写的就是实例变量,由对象去访问的变量. (2)类变量(静态变量):此时,这个变量属于类,但是对象也可以访问 ...

  9. 巨蟒python全栈开发-第23天 内置常用模块2

    一.今日主要内容 1.nametuple:(命名元组,本质还是元组) 命名元组=>类似创建了一个类 结构化时间其实是个命名元组 2.os 主要是针对操作系统的 一般用来操作文件系统 os.mak ...

  10. IE11 Enterprise Mode Template missing from GPMC

    IE11 Enterprise Mode Template missing from GPMC     Reason:You have not copied the new IE11 Enterpri ...