原创 架构师技术联盟 

近期,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. css3 html5画心

    以下内容不是原创 我是搬运工 1. <!DOCTYPE HTML><html> <head> <meta charset="UTF-8"/ ...

  2. java项目学习

    GitHub地址:https://github.com/zhanglei-workspace/shopping-management-system

  3. 一起talk C栗子吧(第二十五回:C语言实例--二分查找)

    各位看官们,大家好,上一回中咱们说的是顺序查找的样例,这一回咱们说的样例是:二分查找.闲话休 提,言归正转. 让我们一起talk C栗子吧. 看官们,我们在上一回中说了查找的相关内容,而且介绍了一种查 ...

  4. pycharm 变量批量重命名

    Ctrl + R 替换 Ctrl + Shift + F 全局查找 Ctrl + Shift + R 全局替换

  5. 【BZOJ4557】[JLoi2016]侦察守卫 树形DP

    [BZOJ4557][JLoi2016]侦察守卫 Description 小R和B神正在玩一款游戏.这款游戏的地图由N个点和N-1条无向边组成,每条无向边连接两个点,且地图是连通的.换句话说,游戏的地 ...

  6. python之设置小数保留位数

    python之设置小数保留位数 test.py: a = [3,4,4,4,6,4] average1 = float(sum(a)/len(a)) average2 =round(average1, ...

  7. Xenu Link Sleuth

    Xenu Link Sleuth 是一款检查网站死链接的软件,可以通过它打开一个本地的网页文件来检查它的链接,也可以输入任何网址来检查. 具体使用如下: 1,下载,并安装. 2,打开软件,出现 Tip ...

  8. 初识python (一)

    初识Python(一) python2和python3的一些区别 Python2 和 Python3 区别汇总:http://www.cnblogs.com/bigtreei/p/7806288.ht ...

  9. django_上传文件

    要求:  写一个文件上传:如果文件名字重复,不要覆盖,并且放到项目根路径的media文件夹下 def upload(request): if request.method == "GET&q ...

  10. Django框架视图类

    类视图 在写视图的时候,Django除了使用函数作为视图,也可以使用类作为视图.使用类视图可以使用类的一些特性,比如继承等. View django.views.generic.base.View是主 ...