单向散列函数的原理_实现和在密码学中的应用

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

收稿日期:2001204228

基金项目:国家重点科技项目(攻关)计划资助课题(20002A312

01205)

单向散列函数的原理、实现和在密码学中的应用3

辛运帏,廖大春,卢桂章

(南开大学信息技术科学学院,天津300071)

摘 要:简要介绍了单向散列函数的有关理论及实现情况,并且以密码学中广泛应用的单向散列函数M D5

为例,详细介绍了它的原理和实现过程。最后简要介绍了单向散列函数在当前的应用,并且提出了一种利用单向散列函数实现的新的用户密钥管理方案。

关键词:单向散列函数;密码学;邮摘散列算法;M D5中图法分类号:TP309.3 文献标识码:A 文章编号:100123695(2002)022******* 

The Principle and Implement of One 2way Hash Functions and

Their Cryptographic Application

XI N Y un 2wei ,LI AO Da 2chun ,LU G ui 2zhang

(College o f Information Technology &Science ,Nankai Univer sity ,Tianjin 300071,China )

Abstract :The paper introduces the theory and im plement of one 2way hash functions ,and using the M D5Alg orithm which is extensively used in cry ptography as an exam ple ,introduces its principle and im plement in detail.At last ,we research the application of them ,and pre 2sent a new schedule of user key management.

K ey w ords :One 2way Hash Function ;Cry ptography ;Message Digest Hash Alg orithm ;M D5

1 单向散列函数简介

密码学中使用的单向散列函数将任意长度的消息压缩到某一固定长度的消息摘要。单向散列函数又称为单向Hash 函数,它不是加密算法,却在密码学中有着广泛的应用,与各种加密算法有着密切的关系。它的模型为:h =H (M )。

其中,M 是待处理的明文,可以为任意长度;H 是单向散列函数,h 是生成的报文摘要,它具有固定的长度,并且和M 的长度无关。其中H 具有以下的单向性质:①给定H 和M ,很容易计算h ;②给定h 和H ,很难计算M ,甚至得不到M 的任何消息;③给定H ,要找两个不同的M 1和M 2,使得H (M 1)=H (M 2)在计算上是不可行的。

根据单向散列函数的安全水平,可以将单向散列函数分成两类:强碰撞自由的单向散列函数和弱碰撞自由的单向散列函数。上面描述的是强碰撞自由的单向散列函数的性质。如果将第③条改为:给定h 和一个已知的消息M ,找另外一个不同的消息M 1,使得h (M )=h (M 1)在计算上是不可行的,就叫做弱碰撞自由的单向散列函数。

显然强碰撞自由的单向散列函数比弱碰撞自由的单向散列函数安全性要高。因为弱碰撞自由的单向散列函数随着重复使用次数的增加安全性逐渐降低,强碰撞自由的单向散列函数则不会因其重复使用而降低安全性。因此在实际中要求使用强碰撞自由的单向散列函数。除此之外,在实际应用中还要求单向散列函数具有如下特点:

(1)单向散列函数能够处理任意长度的明文(至少是在实际应用中可能碰到的长度的明文),其生成的消息摘要数据块长度具有固定的大小,而且,对同一个消息反复执行该函数总是得到相同的信息摘要。

(2)单向散列函数生成的信息摘要是不可预见的,消息摘要看起来和原始的数据没有任何的关系。而且,原始数据的任何微小变化都会对生成的信息摘要产生很大的影响。

(3)具有不可逆性,即通过生成的报文摘要得到原始数据的任何信息在计算上是完全不可行的。

单向散列函数在密码学中有着非常广泛的应用,它被广泛地应用于数字签名、消息的完整性鉴别、消息的起源认证等,另外也和各种密码算法一起构成混合密码系统。

2 实现综述

实现一个安全的单向散列函数并不是一件容易的事

52・第2期辛运帏等:单向散列函数的原理、实现和在密码学中的应用

情。单向散列函数是建立在压缩函数基础上的,它的一般原理与实现过程是:单向散列函数按分组处理输入的消息。在分组之前,首先将待处理的消息进行填充,使得它的长度恰好是分组长度的整数倍。一般为了避免不同长度的消息散列后得到相同的散列值,填充的部分需要包含原来消息长度的信息。将消息分组后对各分组分别处理,压缩函数的输入是上一个变换的输出加上本分组的消息,即:h i =f (M i ,h i 21)。第i 21个散列值和第i 个消息分组一起,作为第i 轮函数的输入。最后一个分组的散列值即成为整个消息的散列值。

目前在密码学上已经设计出了大量的单向散列函数,如:Rabin Hash 方案、M erkle Hash 方案、N 2Hash 算法、M D2算法、M D4算法、M D5算法和SH A 等。通过考察发现,实际系统中用得最多的单向散列函数是消息摘要算法M D5(M essage Digest 5)和安全散列算法SH A (Security Hash Alg orithm )。它们具有相似的原理和实现方法,下面就以M D5为例详细分析它的实现过程。

3 MD5的原理和实现过程

M D5(M essage Digest 5)是著名密码学家R on Rivest 在M D4基础上进行改进得到的一种单向散列函数,它对任意一个文件进行散列,得到128bit 的散列值。它的大致流程如图1所示

图1 M D5的实现过程

在处理过程中需要一个MD5C ontext 结构,该结构

包含了每一次需要处理的一个明文块(512bit )和计算出来的散列值(128bit )。在散列的整个过程中,它的作用非常重要,各个明文块计算出来的散列值都是通过它来传递的。

计算散列时用到四个32bit 的变量(它们称为链接变量),在计算之前对它们进行初始化如下:

A =0x1234567

B =0x89abcdef

C =0x fedcba98

D =0x76543210

接着进行算法的主循环,循环的次数是消息中512bit 消息分组的数目。再将上述四个变量复制到另外的四个变量中:A 到a ,B 到b ,C 到c ,D 到d 。

主循环有四轮,每一轮都很相似,如图2所示。每一轮进行16次操作。每一次操作对a ,b ,c ,d 中三个作一次非线性运算,然后将所得到的结果加上第四个变量、文本的一个子分组和一个常数。再将所得到的结果向右环移一个不定数,并加上a ,b ,c ,d 中的一个。最后用结果取代a ,b ,c ,d 中的一个,如图3所示

图2 M D5的主循环 图3 M D5的一次执行过程

在每一次操作中用到了四个非线性函数(每一轮一个):

F (X ,Y,Z )=(X ∧Y )∨((?X )∧Z )

G (X ,Y,Z )=(X ∧Z )∨(Y ∧(?Z ))

H (X ,Y,Z )=X Y Z

I (X ,Y,Z )=Y (X ∨(?Z ))

因为MD5中只用到了以上函数,因此运算速度非常快。而且,最新的密码分析学表明,到目前为止,在实际中仍然还没有针对它的有效攻击方法,这就是它在目前得到广泛应用的根本原因。

安全散列算法SH A (Security Hash Alg orithm )是由美国NIST 和NS A 一起作为联邦信息处理标准(FIPS )提出的,该标准被用来与数字签名标准(DSS )一起使用。该算法对于输入的长度小于264bit 的消息(实际中很少有大于此长度的消息),都可以得到160bit 的散列值。

该算法的设计思想和MD5相似,但是比MD5具有更长的散列值,因此更能够抵抗穷举攻击和生日攻击,当然其速度比MD5要慢一些。

关于SH A 算法的更详细介绍,可以参考文献[3]。

4 在密码学中的实际应用

我们在这里简要介绍当前单向散列函数在密码学中的几个应用。411 数字签名技术

随着电子商务的逐渐普及,数字签名技术正逐步被接受。许多发达国家,包括美国、日本和欧洲诸国都已经承认数字签名的法律效力。其实数字签名是一种身份确认的方式,传统签名用手写识别,数字鉴名用密码确认,两者在交往中的作用并无区别。但多年不变的传统签名却已赶不上电子商务的形势,特别是对从事国际间B to B (企业对企业)电子商务的企业,迫切需要实现安全的数字签名技术。与传统签名相比较,数字签名具有安全、快速、高效的特点。图4是用H ash

函数进行数字签名的过程。

图4 使用Hash 函数的数字签名方案

・62・ 计算机应用研究2002年

相关文档
最新文档