认证技术 (系统的数字签名认证)

认证技术主要用于防止对手对系统进行的主动攻击,如伪装、窜扰等,这对于开放环境中各种信息系统的安全性尤为重要。认证的目的有两个方面:一是验证信息的发送者是合法的,而不是冒充的,即实体认证,包括信源、信宿的认证和识别;二是验证消息的完整性,验证数据在传输和存储的过程中是否被篡改、重放和延迟等。

1. Hash函数

(1) Hash函数的概念

Hash函数是一类单向(计算h=H(m)是容易的,但求逆运算是困难的)函数。Hash函数h = H(m)也称为散列函数,它将任意长度的报文m映射为固定长度的输出h(摘要),另外该函数除满足单向性外,还应具备下列两项条件之一:

①抗弱碰撞性。对固定的m,要找到,使得在计算上是不可行的。

②抗强碰撞性。要找到m和,使得在计算上是不可行的。

显然,满足②的Hash函数的安全性要求更高,这是抗击生日攻击的要求。有关Hash函数的描述可如图3-23所示。

数字签名认证的流程,数字签名和认证

(2) Hash函数的构造

可以用很多办法构造Hash函数,但使用最多的是迭代型结构,著名的MD-5、SHA-1等都是基于迭代型的。

数字签名认证的流程,数字签名和认证

2 数字签名

(1) 数字签名的概念

在RSA公钥密码体制中,假如Alice用自己的私钥d来计算S≡md(mod n),然后把S连同消息m一起发送给Bob,而Bob用Alice的公钥(n, e)来计算m'≡ce(mod n),那么则有m'=m。大家想一下,这是否意味着Bob相信所收到的s一定是来自Alice?上述过程中的S是否相当于Alice对消息m的签名?上述过程可用图3-25来概括。

数字签名是利用密码运算实现“手写签名”效果的一种技术,它通过某种数学变换来实现对数字内容的签名和盖章。在ISO7498-2标准中,数字签名的定义为“附加在数据单元上的一些数据,或是对数据单元所做的密码变换,这种数据或变换允许数据单元的接收者用以确认数据单元的来源和数据单元的完整性,并保护数据,防止被人伪造”。

一个数字签名方案一般由签名算法和验证算法两部分组成。要实现“手写签名”的效果,数字签名应具有不可伪造、不可抵赖和可验证的特点。对于数字签名方案的攻击主要是想办法伪造签名。按照方案被攻破的程度,可以分为三种类型,分别是:

①完全伪造,即攻击者能计算出私钥或者能找到一个能产生合法签名的算法,从而可以对任何消息产生合法的签名;

②选择性伪造,即攻击者可以实现对某一些特定的消息构造出合法的签名;

③存在性伪造,即攻击者能够至少伪造出一个消息的签名,但对该消息几乎没有控制力。

(2) 基本签名算法

数字签名方案一般利用公钥密码技术实现,其中私钥用来签名,公钥用来验证签名。典型数字签名方案有RSA算法(R. L. Rivest, A. Shamir, and L. M. Adleman, 1978)、ElGamal 签名(T. ElGamal, 1985)、Schnorr签名(C. P. Schnorr, 1989)和DSS签名(NIST, 1991)。

①ElGamal签名方案

假设p是一个大素数,g是GF(p)的生成元。Alice的公钥为y=^ mod p,g,p私钥为x。

签名算法:

Alice首先选一个与p-1互素的随机数k

Alice计算a=^ mod p

Alice对b解方程M = x*a + k*b (mod p-1)

Alice对消息M的签名为(a,b)

验证算法:

检查^ ^ mod p =^"M" mod p是否成立。

例如:p = 11, g = 2,Bob 选 x = 8为私钥

y =2^8 mod 11 = 3

公钥: y = 3, g = 2, p = 11

Bob要对M = 5进行签名

选k=9 (gcd(9, 10) = 1)

a =2^9 mod 11 = 6,b=3

读者可检查^ ^ mod p =^"M" mod p是否成立。

上述方案的安全性是基于如下离散对数困难性问题的:已知大素数p、GF(p)的生成元g和非零元素yGF(p),求解唯一的整数k, 0≤k≤p – 2,使得y ^ (mod p),k称为y对g的离散对数。

②Schnorr签名方案

Schnorr签名方案是一个短签名方案,其安全性是基于离散对数困难性和hash函数的单向性的。假设p和q是大素数,且q能被p-1整除,q是大于等于160bit的整数,p是大于等于512bit的整数,保证GF(p)中求解离散对数困难;g是GF(p)中元素,且^1 mod p;Alice公钥为y ^ (mod p),私钥为x,1<x<q。

签名算法:

Alice首先选一个与p-1互素的随机数k

Alice计算r = h(M,^ mod P)

Alice计算s = k + x*r( mod q)

验证算法:

计算^ mod P =^ ^ mod P

验证r = h(M, ^ mod P)

Schnorr签名较短,由 |q| 及 |H(M)| 决定。在Schnorr签名中,r=^ mod p可以预先计算,k与M无关,因而签名只需一次mod q乘法及减法。所需计算量少,速度快,适用于智能卡。

(3) 特殊签名算法

目前国内外研究重点已经从普通签名转向具有特定功能、能满足特定要求的数字签名。如适用于电子现金和电子钱包的盲签名、适用于多人共同签署文件的多重签名、限制验证人身份的条件签名、保证公平性的同时签名以及门限签名、代理签名、防失败签名等。

盲签名是指签名人不知道签名内容的一种签名,用于电子现金系统,实现不可追踪性。如下是D. Chaum 于1983年提出的一个盲签名方案:

假设在RSA密码系统中,Bob的公钥为e,私钥为d,公共模为N。Alice想让Bob对消息M盲签名

①Alice 在1和N之间选择随机数k对M盲化:t=M^ mod N。

②Bob对t签名,^=〖"(M" ^ ")" 〗^"d" mod N。

③Alice对^脱盲:s=^/k mod N=^ mod N,s即为消息M的签名。

3. 消息认证

(1) 消息认证与消息认证码

消息认证是指验证者验证所接收到的消息是否确实来自真正的发送方,并且消息在传送中没被修改的过程。消息认证是抗击伪装、内容篡改、序号篡改、计时篡改和信源抵赖的有效方法。

加密技术可用来实现消息认证。假如使用对称加密方法,那么接收方可以肯定发送方创建了相关加密的消息,因为只有收发双方才有对应的密钥,并且如果消息本身具有一定结构、冗余或校验和的话,那么接受者很容易发现消息在传送中是否被修改。假如使用公钥加密技术,则接收者不能确定消息来源,因为任何人都知道接收者的公钥,但这种技术可以确保只有预定的接收者才能接收信息。

数字签名也可用来实现消息认证。验证者对签名后的数据不仅能确定消息来源,而且可以向第三方证明其真实性,因而还能防止信源抵赖。

消息认证更为简单的实现方法是利用消息认证码。

消息认证码(MAC)也称密码校验和,是指消息被一密钥控制的公开单向函数作用后,产生的固定长度的数值,即MAC=CK(M)。如图3-26所示,假设通信双方A和B共享一密钥K,A欲发送给B的消息是M,A首先计算MAC=CK(M),其中CK(·)是密钥控制的公开单向函数,然后向B发送M‖MAC,B收到后做与A相同的计算,求得一新MAC,并与收到的MAC做比较,如果B计算得到的MAC与接收到的MAC一致,则:

①接收方相信发送方发来的消息未被篡改,这是因为攻击者不知道密钥,所以不能够在篡改消息后相应地篡改MAC,而如果仅篡改消息,则接收方计算的新MAC将与收到的MAC不同。

②接收方相信发送方不是冒充的,这是因为除收发双方外再无其他人知道密钥,因此其他人不可能对自己发送的消息计算出正确的MAC。

(2) 消息认证码的构造

安全的MAC函数MAC=CK(M)不但要求要具有单向性和固定长度的输出,而且应满足:

①如果敌手得到M和CK(M),则构造一满足CK(M ' ) = CK(M)新消息M ' 在计算上是不可行的。

②CK(M)均匀分布的条件是:随机选取两个消息M、M′,Pr[CK(M)=CK(M′)]=2-n,其中n为MAC的长。

③若M ' 是M的某个变换,即M ' = f (M),例如f为插入一个或多个比特,那么Pr[CK(M)=CK(M ')]=2-n。

MAC的构造方法有很多种,但MAC函数的上述要求很容易让我们想到Hash函数。事实上,基于密码杂凑函数构造MAC正是一个重要的研究方向,RFC2104推荐的HMAC已被用于IPSec和其他网络协议。HMAC的结构大致如图3-27所示。

数字签名认证的流程,数字签名和认证

数字签名认证的流程,数字签名和认证

@木子雨辰,将一直带给大家信息安全知识,由浅至深、采用体系化结构逐步分享,大家有什么建议和问题,可以及留言,多谢大家点击关注、转发,谢谢大家。