纯技术视点

PTV-Pure Technology View
随笔 - 216, 评论 - 2626, 引用 - 95

导航

关于

标签

每月存档

最新留言

广告

 

一、数据摘要算法概述

数据摘要算法是密码学算法中非常重要的一个分支,它通过对所有数据提取指纹信息以实现数据签名、数据完整性校验等功能,由于其不可逆性,有时候会被用做敏感信息的加密。数据摘要算法也被称为哈希(Hash)算法或散列算法。

常用的数据摘要算法主要以下几大类:

1、CRC8、CRC16、CRC32

CRC(Cyclic Redundancy Check,循环冗余校验)算法出现时间较长,应用也十分广泛,尤其是通讯领域,现在应用最多的就是 CRC32 算法,它产生一个4字节(32位)的校验值,一般是以8位十六进制数,如FA 12 CD 45等。CRC算法的优点在于简便、速度快,严格的来说,CRC更应该被称为数据校验算法,但其功能与数据摘要算法类似,因此也作为测试的可选算法。

在 WinRAR、WinZIP 等软件中,也是以 CRC32 作为文件校验算法的。一般常见的简单文件校验(Simple File Verify – SFV)也是以 CRC32算法为基础,它通过生成一个后缀名为 .SFV 的文本文件,这样可以任何时候可以将文件内容 CRC32运算的结果与 .SFV 文件中的值对比来确定此文件的完整性。

与 SFV 相关工具软件有很多,如MagicSFV、MooSFV等。

2、MD2 、MD4、MD5

这是应用非常广泛的一个算法家族,尤其是 MD5(Message-Digest Algorithm 5,消息摘要算法版本5),它由MD2、MD3、MD4发展而来,由Ron Rivest(RSA公司)在1992年提出,目前被广泛应用于数据完整性校验、数据(消息)摘要、数据加密等。MD2、MD4、MD5 都产生16字节(128位)的校验值,一般用32位十六进制数表示。MD2的算法较慢但相对安全,MD4速度很快,但安全性下降,MD5比MD4更安全、速度更快。

目前在互联网上进行大文件传输时,都要得用MD5算法产生一个与文件匹配的、存储MD5值的文本文件(后缀名为 .md5或.md5sum),这样接收者在接收到文件后,就可以利用与 SFV 类似的方法来检查文件完整性,目前绝大多数大型软件公司或开源组织都是以这种方式来校验数据完整性,而且部分操作系统也使用此算法来对用户密码进行加密,另外,它也是目前计算机犯罪中数据取证的最常用算法。

与MD5 相关的工具有很多,如 WinMD5等。

3、SHA1、SHA256、SHA384、SHA512

SHA(Secure Hash Algorithm)是由美国专门制定密码算法的标准机构—— 美国国家标准技术研究院(NIST)制定的,SHA系列算法的摘要长度分别为:SHA为20字节(160位)、SHA256为32字节(256位)、SHA384为48字节(384位)、SHA512为64字节(512位),由于它产生的数据摘要的长度更长,因此更难以发生碰撞,因此也更为安全,它是未来数据摘要算法的发展方向。由于SHA系列算法的数据摘要长度较长,因此其运算速度与MD5相比,也相对较慢。

目前SHA1的应用较为广泛,主要应用于CA和数字证书中,另外在目前互联网中流行的BT软件中,也是使用SHA1来进行文件校验的。

4、RIPEMD、PANAMA、TIGER、ADLER32 等

RIPEMD是Hans Dobbertin等3人在对MD4,MD5缺陷分析基础上,于1996年提出来的,有4个标准128、160、256和320,其对应输出长度分别为16字节、20字节、32字节和40字节。

TIGER由Ross在1995年提出。Tiger号称是最快的Hash算法,专门为64位机器做了优化。

二、常用数据摘要算法的测试

1、测试方法

  • 测试范围:常见的数据校验、摘要算法,主要有 CRC32、MD5、SHA1、SHA256、SHA384、SHA512
  • 样本数据:2G大小Vmware 虚拟机操作系统的磁盘文件,其中包含其中各种类型的文件,如二进制文件和文本文件等。
  • 软件平台:Windows、.NET Framework 2.0
  • 硬件平台
    • 机器A(SCSI Disk):软件配置 Windows 2000 + .Net Framework 2.0;硬件配置 CPU:4 (Xeon),2.8G,RAM:2G ,HD:70 GB SCSI
    •  机器B(IDE Disk):软件配置 Windows 2003 + .Net Framework 2.0;硬件配置 CPU:1 (P4),2.8G,RAM:1G,HD:40 GB IDE

 

考虑到整个测试过程只是涉及到文件读取与哈希值的计算,并无过多的与操作系统、软件平台、开发语言相关的操作,因此可以认为上述测试方法的结果具有普遍性,即也适用于其它操作系统平台(如Linux/Unix)或应用语言/平台(C、Java)。

2、测试结果

1)不同配置机器间的对比

在不同机器配置上的平均运算结果如下表所示:

 

注1:配有SCSI磁盘的机器运行时间反而比 IDE 磁盘时间长,可能是由于前者具有较多的应用负载造成的,如Oracle、WebSphere等,而且其OS为 Windows 2000,在之上运行 .NET 应用程序可能与 Windows 2003 的效率有所差别

注2:上述算法中,只有 CRC32 没有包含在.NET Framework 中,而是使用C#单独实现的,因此可能会对其测试结果带来一些影响。

 

2)不同算法的CPU占用率比较

在不同的算法运行时,在机器B上监控其对于 CPU 的平均使用时间,结果如下表所示:

三、一些测试结论

  • 数据摘要算法的处理是很快的,在一般配置的PC机上使用MD5算法,处理1G的文件数据只需20-30秒(有些专用设备声称达 3GB/秒),不会对应用或机器带来过多负载;
  • MD5、SHA1虽然被发现存在缺陷(碰撞),但在近几年内,仍然可以大量使用;
  • SHA256/384/512 的速度较慢,可以用于少量数据摘要,目前不适合用于大文件校验;
  • ...

注:测试程序相当简单,也写得很烂,有需求者可以在 Comment  中提出。

打印 | 张贴于 2006-04-12 00:25:00 | Tag:软件技术  行业观察

留言反馈

#回复: 一组数据摘要算法的效率测试 编辑
作者您好,我也在处理数据完整性算法的设计,
目前自己做了一个文件完整性验证的算法,

但希望能有作者您这样的测试程序测试看看情况如何,便于我写文档报告,
我的邮箱:tmx21@163.com

如果作者能够和我一起讨论这方面的问题,那就更好了,再次感谢
2008-02-21 16:25:00 | [匿名:屠敏欣]
#回复: 一组数据摘要算法的效率测试 编辑
可以帮我说一下SHA-1算法的重点和难点、提出解决问题的方法和措施 flyingmd917@sina.com
2007-02-09 13:51:00 | [匿名:慕丹]
#re: 一组数据摘要算法的效率测试 编辑
想看看你的程序,学习一下,谢谢, songweiqwe@163.com
2006-11-06 13:46:00 | [匿名:qwe]
#re: 一组数据摘要算法的效率测试 编辑
想看看你的程序,学习学习,xgwzw@tom.com
测试脚本,源程序,谢谢!
我想请你详细解释一下crc的原理,最好能校验及纠正举例,以及md5的原理.
2006-06-16 13:13:00 | [匿名:xgwzw]
#re: 一组数据摘要算法的效率测试 编辑
想看看你的程序,学习学习,feida007@163.com
测试脚本,源程序,谢谢!
2006-05-28 05:26:00 | [匿名:iiieef]
#re: 一组数据摘要算法的效率测试 编辑
Thanks again, and good luck with your future endeavors.

2006-05-17 00:09:00 | [匿名:Alex]
#re: 一组数据摘要算法的效率测试 编辑
jackalssica@163.com 谢谢
2006-05-09 16:25:00 | [匿名:修恩]
#re: 一组数据摘要算法的效率测试 编辑
能否借鉴一下您的程序 谢谢
还有 您的时间测试用的是何种时控函数?
2006-05-09 16:24:00 | [匿名:修恩]
#re: 一组数据摘要算法的效率测试 编辑
我欣赏自己动手去做到人,但是,这样的结果到底能不能得到这样的结论,还有待考证。你用基于ARM的汇编实现过MD4吗
2006-04-20 11:03:00 | [匿名:jane]
#re: 一组数据摘要算法的效率测试 编辑
可否把CRC32的代码 给一份?
多谢
alonewolft@gmail.com
2006-04-18 23:58:00 | [匿名:a lone wolf]
#上周技术关注:《断背山2》之Google爱情故事 编辑
今天周末,给大家讲一个发生在Google里面的爱情故事。说到爱情故事,真是无奇不有。如果你对传统男女之间的生离死别感到厌倦,那么李安导演的两个牛仔之间的断背之情可能会在一定程度上满足你的要求。当然,如果你不喜欢牛仔,那么王家卫的《春光乍泄》是个不错的后备选择——至少张国荣与梁朝伟都是国产帅哥。什么?!你很喜欢这种类型的爱情故事?!那好,下面是一个发生在Google里面的《断背山2》。
2006-04-17 16:48:00 | [匿名:曾登高]
#re: 一组数据摘要算法的效率测试 编辑
有没有对不同大小文件进行测试?时间是否跟文件大小都是线性的?

有空对对称和非对称加密也测试一下?
2006-04-17 10:03:00 | [匿名:怡红公子]
#re: 一组数据摘要算法的效率测试 编辑
图表当然是 Excel 画的了,不过是 Excel 12,呵呵,Office 12 中的图表功能太强了,我喜欢。
2006-04-13 16:41:00 | [匿名:moslem]
#re: 一组数据摘要算法的效率测试 编辑
en ,很不错的算法
2006-04-13 04:28:00 | [匿名:风]
#re: 一组数据摘要算法的效率测试 编辑
学习ing
2006-04-13 01:38:00 | [匿名:dj2003]
#re: 一组数据摘要算法的效率测试 编辑
SHA256/384/512 的速度较慢,可以用于少量数据摘要,目前不适合用于大文件校验
2006-04-13 01:37:00 | [匿名:慢摇]
#re: 一组数据摘要算法的效率测试 编辑
我想看看你的程序,学习学习,funcg@163.com
2006-04-12 16:54:00 | [匿名:Glen]
#re: 一组数据摘要算法的效率测试 编辑
can u send me your test program source thx?
b0ji@hotmail.com
2006-04-12 11:40:00 | [匿名:b0ji]
#re: 一组数据摘要算法的效率测试 编辑
貌似via的处理器在这方面很强
2006-04-12 11:12:00 | [匿名:rIPPER]
#re: 一组数据摘要算法的效率测试 编辑
图表做的很漂亮。用什么做的?
2006-04-12 11:11:00 | [匿名:ly4cn]
#re: 一组数据摘要算法的效率测试 编辑
要是有 md系列或者别的信息加密算法的 算法原理 剖析就好了,当然这样的测试也是非常有益的:)
2006-04-12 09:30:00 | [匿名:FuC]
对不起,目前本随笔不允许发表新评论.

Powered by: Joycode.MVC引擎 0.5.2.0