报文鉴别与数字签名
- 格式:pdf
- 大小:367.60 KB
- 文档页数:57
数字签名技术•消息鉴别与散列函数•数字签名消息鉴别与散列函数•消息鉴别•散列函数消息鉴别9定义•消息鉴别(Message Authentication):是一个证实收到的消息来自可信的源点且未被篡改的过程。
•散列函数(Hash Functions):一个散列函数以一个变长的报文作为输入,并产生一个定长的散列码,有时也称报文摘要,作为输出。
•数字签名(Digital Signature):是一种防止源点或终点抵赖的鉴别技术。
消息鉴别?为什么需要消息鉴别•内容修改:消息内容被插入、删除、修改。
•顺序修改:插入、删除或重组消息序列。
•时间修改:消息延迟或重放•冒充:从一个假冒信息源向网络中插入消息消息鉴别9鉴别的目的•鉴别的主要目的有二:第一,验证信息的发送者是真正的,而不是冒充的,此为信源识别;第二,验证信息的完整性,在传送或存储过程中未被篡改,重放或延迟等。
消息鉴别9鉴别函数可用来做鉴别的函数分为三类:(1) 加密:以整个报文的密文作为它的鉴别符。
(2) 消息鉴别码MAC(Message Authentication Code):公开函数+密钥产生一个固定长度的值作为鉴别标识(3) 散列函数(Hash Function)是一个公开的函数,它将任意长的信息映射成一个固定长度的信息。
消息加密9消息的自身加密可以作为一个鉴别的量。
9对称密钥模式9公开密钥模式消息鉴别散列函数Hash Function•H(M): 输入为任意长度的消息M; 输出为一个固定长度的散列值,称为消息摘要(Message Digest)。
•这个散列值是消息M的所有位的函数并提供错误检测能力:消息中的任何一位或多位的变化都将导致该散列值的变化。
•又称为:哈希函数、数字指纹(Digital finger print)、压缩(Compression)函数、紧缩(Contraction )函数、数据鉴别码DAC(Data authentication code)、篡改检验码MDC(Manipulation detection code)散列函数9HASH函数是将一个任意长的输入变成固定长度的输出的函数,一般输出的长度为128位或160位。
数字签名技术•消息鉴别与散列函数•数字签名消息鉴别与散列函数•消息鉴别•散列函数消息鉴别9定义•消息鉴别(Message Authentication):是一个证实收到的消息来自可信的源点且未被篡改的过程。
•散列函数(Hash Functions):一个散列函数以一个变长的报文作为输入,并产生一个定长的散列码,有时也称报文摘要,作为输出。
•数字签名(Digital Signature):是一种防止源点或终点抵赖的鉴别技术。
消息鉴别?为什么需要消息鉴别•内容修改:消息内容被插入、删除、修改。
•顺序修改:插入、删除或重组消息序列。
•时间修改:消息延迟或重放•冒充:从一个假冒信息源向网络中插入消息消息鉴别9鉴别的目的•鉴别的主要目的有二:第一,验证信息的发送者是真正的,而不是冒充的,此为信源识别;第二,验证信息的完整性,在传送或存储过程中未被篡改,重放或延迟等。
消息鉴别9鉴别函数可用来做鉴别的函数分为三类:(1) 加密:以整个报文的密文作为它的鉴别符。
(2) 消息鉴别码MAC(Message Authentication Code):公开函数+密钥产生一个固定长度的值作为鉴别标识(3) 散列函数(Hash Function)是一个公开的函数,它将任意长的信息映射成一个固定长度的信息。
消息加密9消息的自身加密可以作为一个鉴别的量。
9对称密钥模式9公开密钥模式消息鉴别散列函数Hash Function•H(M): 输入为任意长度的消息M; 输出为一个固定长度的散列值,称为消息摘要(Message Digest)。
•这个散列值是消息M的所有位的函数并提供错误检测能力:消息中的任何一位或多位的变化都将导致该散列值的变化。
•又称为:哈希函数、数字指纹(Digital finger print)、压缩(Compression)函数、紧缩(Contraction )函数、数据鉴别码DAC(Data authentication code)、篡改检验码MDC(Manipulation detection code)散列函数9HASH函数是将一个任意长的输入变成固定长度的输出的函数,一般输出的长度为128位或160位。
9单向Hash的输出不依赖于输入9Hash主要用于完整性校验和身份认证9常见的Hash函数算法有:MD5,SHA消息鉴别•消息鉴别码MAC使用一个密钥生成一个固定大小的小数据块,并加入到消息中,称MAC (Message Authentication Code),或密码校验和(cryptographic checksum)MAC = CK(M)1、接收者可以确信消息M未被改变。
2、接收者可以确信消息来自所声称的发送者;3、如果消息中包含顺序码(如HDLC,X.25,TCP),则接收者可以保证消息的正常顺序;MAC函数类似于加密函数,但不需要可逆性。
因此在数学上比加密算法被攻击的弱点要少。
散列函数MD5算法安全散列函数(SHA)消息认证码(MAC)散列函数单向散列函数是将任意长度的消息M映射成一个固定长度散列值h的函数:h=H(M)其中,h的长度为m。
散列函数•散列函数要具有单向性,则必须满足如下特性:9给定M,很容易计算h。
9给定h,根据H(M)=h反推M很难。
9给定M,要找到另一消息M'并满足H(M)=H(M')很难。
单向散列函数工作模式消息分组1 消息分组2压缩函数压缩函数IV …… 消息分组n 填充位压缩函数函数值散列函数•给定一任意长度的消息输入,单向函数输出长为m 的散列值。
•压缩函数的输入是消息分组和前一分组的输出(对第一个压缩函数,其输入为消息分组1和初始化向量IV);输出是到该点的所有分组的散列,即分组M i 的散列为•h i =f (M i , h i −1)•该最后一分组的散列就是整个消息的散列。
MD5 算法9MD算法(Message Digest Algorithm信息摘要算法)由Rivest从二十世纪八十年代末开发的系列散列算法的合称。
9MD算法是让大容量信息在用数字签名软件签系统署积重难返人密匙前被”压缩”成一种保密的格式,即把一个任意长度的字节串变成一个定长的大整数。
91990年开发出MD4算法,1991年推出MD5算法9MD5以512位分组来处理输入的信息,每一分组又被划分为16个32位子分组,经过一系列的处理后,算法的输出由四个32位分组组成,最后级联后生成一个128位散列值MD5算法L ×512 bit =N ×32 bit消息K bit100…0填充位消息长度(K mod 264)Y 0512 bit512H MD5Y 1512H MD5CV 1128128IV512 bit ……Y L£-1512H MD5128位消息摘要128512 bit CV L -1MD5 算法MD5算法MD5算法包括以下五个步骤。
1) 附加填充位•填充消息,使其长度为一个比512的倍数小64位的数。
填充方法:在消息后面填充一位1,然后填充所需数量的0。
填充位的位数从1~512。
填充之后的消息长度M ≡448(mod 512)2) 附加长度将原消息长度的64位表示附加在填充后的消息后面。
当原消息长度大于264时,用消息长度mod 264填充。
这时,消息长度恰好是512的整数倍。
令M[0 1…N−1]为填充后消息的各个字(每字为32位),N是16的倍数。
MD5算法3) 初始化MD缓冲区初始化用于计算消息摘要的128位缓冲区。
这个缓冲区由四个32位寄存器A、B、C、D表示。
寄存器的初始化值为(按低位字节在前的顺序存放):A: 01234567B: 89ab cd efC: fe dc ba98D: 76543210MD5算法4) 按512位的分组处理输入消息这一步为MD5的主循环,包括四轮,如下图所示。
每个和128比特循环都以当前的正在处理的512比特分组Yq 缓冲值ABCD为输入,然后更新缓冲内容。
++++第四轮第三轮第二轮第一轮A BC DCV qY qA B C DCV q +1单个512比特分组的MD5主循环处理MD5算法四轮的操作类似,每一轮进行16次操作。
各轮的操作过程如下图所示。
c +++<<<s+非线性函数b da M jT[i]c b daMD5某一轮的执行过程MD5算法MD5算法•每轮使用的非线性函数不同,在第一轮操作之前,首先把A、B、C、D复制到另外的变量a、b、c、d中。
这四个非线性函数分别为(其输入/输出均为32位字):F(X,Y,Z) = (X∧Y)∨((~X) ∧Z)G(X,Y,Z) = (X∧Z)∨(Y∧(~Z))H(X,Y,Z) = X xor Y xor ZI(X,Y,Z) = Y xor(X∨(~Z))其中,∧表示按位与;∨表示按位或;~表示按位反;xor表示按位异或。
MD5算法•此外,由图可知,这一步中还用到了一个有64个元素的表T[1..64],T[i]=232×abs(sin(i)),i的单位为弧度。
MD5算法5) 输出•由A、B、C、D四个寄存器的输出按低位字节在前的顺序(即以A的低字节开始、D的高字节结束)得到128位的消息摘要。
•MD5算法的运算均为基本运算,比较容易实现且速度很快。
安全散列函数(SHA)•SHA是美国NIST和NSA共同设计的安全散列算法(Secure Hash Algorithm),用于数字签名标准DSS(Digital Signature Standard)。
•1992年NIST制定了SHA(128位)•1993年SHA成为标准•SHA的修改版SHA–1(160位)于1995年作为美国联邦信息处理标准公告(FIPS PUB 180–1)发布•SHA-1要求输入消息长度< 264•SHA-1的摘要长度为160位•SHA–1产生消息摘要的过程类似MD5,如图所示。
SHA-1算法L ×512 bit =N ×32 bit 消息K bit 100 0填充位消息长度(K mod 264)Y 0512 bit 512H SHAY 1512H SHACV 1160160IV512 bit ¡-…Y L-1512H SHA160位消息摘要160512 bit CV L -1SHA 算法SHA–1的输入为长度小于264位的消息,输出为160位的消息摘要。
具体过程如下。
1) 填充消息:填充方法和MD5完全相同2) 初始化缓冲区在运算过程中,SHA 要用到两个缓冲区,两个缓冲区均有五个32位的寄存器。
第一个缓冲区标记为A 、B 、C 、D 、E ;第二个缓冲区标记为H 0、H 1、H 2、H 3、H 4。
此外,运算过程中还用到一个标记为W 0、W 1、…、W 79的80个32位字序列和一个单字的缓冲区TEMP 。
在运算之前,初始化{H j }:SHA 算法3) 按512位的分组处理输入消息SHA运算主循环包括四轮,每轮20次操作。
SHA用到一个逻辑函数序列f0、f1、…、f79。
每个逻辑函数的输入为三个32位字,输出为一个32位字(4) 输出:160位的摘要SHA 算法SHA-1与MD5的比较SHA-1MD5 Hash值长度160 bit128 bit 分组处理长512 bit512 bit 步数80(4×20)64(4×16)最大消息长≤264 bit不限非线性函数3(第2、4轮相同)4常数个数464SHA和MD5•MD5使用little-endian •128位hash值太短•Dobbertin在1996年找到了两个不同的512bit块,它们在MD5计算下产生相同的hash•至今还没有真正找到两个不同的消息,它们的MD5的hash相等•MD5不是足够安全的••SHA-1使用big-endian •抗穷举攻击:2160•没有发现两个不同的512-bit块,它们在SHA-1计算下产生相同的“hash”•速度:慢于MD5•安全性优于MD5消息认证码(MAC)•与密钥相关的单向散列函数通常称为MAC,即消息认证码:MAC=C(M)K•其中,M为可变长的消息;K为通信双方共享的密钥;C为单向函数。
•MAC可为拥有共享密钥的双方在通信中验证消息的完整性;也可被单个用户用来验证他的文件是否被改动,如下图。
MCⅡKMCK比较C K (M)源端A目的端B MAC 应用于消息认证•在此讨论IP安全协议强制实现的MAC,也就是由RFC2104定义的HMAC。
•HMAC全称为Keyed-Hash Message Authentication Code,它用一个秘密密钥来产生和验证MAC。