原创 架构师技术联盟 

近期,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. AutoMapper整理收集

    http://www.cnblogs.com/jobs2/p/3503990.html http://www.cnblogs.com/1-2-3/p/AutoMapper-Best-Practice. ...

  2. Android开发:《Gradle Recipes for Android》阅读笔记(翻译)5.1——单元测试

    问题: 你想要测试app中的非android部分. 解决方案: 可以使用Android Studio1.1里面增加的单元测支持和Android的Gradle插件. 讨论: ADT插件只支持集成测试,并 ...

  3. Bouncy Castle Crypto API c# port

    Bouncy Castle 是一种用于 Java 平台的开放源码的轻量级密码术包.它支持大量的密码术算法,并提供 JCE 1.2.1 的实现.现在有了C#的版本.下面是网站上的介绍 This port ...

  4. 在本地模拟搭建zookeeper集群环境实例

    先给一堆学习文档,方便以后查看 官网文档地址大全: OverView(概述) http://zookeeper.apache.org/doc/r3.4.6/zookeeperOver.html Get ...

  5. vue+node+mongoDB 火车票H5(二)---vux和less的配置

    vue基本环境配置好之后,就可以开始开发页面了 开发页面之前先了解一下项目结构,原始的目录结构为: config是配置文件,环境配置好了开发阶段可以不再去修改了,node_modules文件夹是打包的 ...

  6. HDU 5421 Victor and String(回文树)

    Victor and String Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 524288/262144 K (Java/Othe ...

  7. 【Python之路】第二十三篇--Django【进阶篇】

    文件配置 1.模版Templates文件配置: TEMPLATE_DIRS = ( os.path.join(BASE_DIR,'templates'), ) 2.静态文件static配置: STAT ...

  8. IO流入门-第十章-DataInputStream_DataOutputStream

    DataInputStream和DataOutputStream基本用法和方法示例 /* java.io.DataOutputStream 数据字节输出流,带着类型写入 可以将内存中的“int i = ...

  9. <2014 05 09> Lucida:我的算法学习之路

    [转载] 我的算法学习之路 关于 严格来说,本文题目应该是我的数据结构和算法学习之路,但这个写法实在太绕口——况且CS中的算法往往暗指数据结构和算法(例如算法导论指的实际上是数据结构和算法导论),所以 ...

  10. Linux(6)- redis发布订阅/持久化/主从复制/redis-sentinel/redis-cluster、nginx入门

    一.redis发布订阅 Redis 通过 PUBLISH .SUBSCRIBE 等命令实现了订阅与发布模式. 其实从Pub/Sub的机制来看,它更像是一个广播系统,多个Subscriber可以订阅多个 ...