数字签名
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1.1 算法描述(续)
算 法 2RSA 签名产生和认证 摘要:实体A对一条消息m签名。任何实体B 可以验证 A的签名并从签名中恢复 出消息m。 签名产生. A 做如下步骤: (1) 计算 m R (m),这里 m 是区间[0, n 1]上的整数。 (2) 计算s m d (mod n)。 (3) s就是A对m的签名。 认证. 为了认证A的签名 s 并恢复出消息m, B 做如下步骤: (1) 得到A的真实公开密钥(n, e)。 (2) 计算 m s e (modn)。 (3) 认证 m ,如果非法,拒绝签名 s。 (4) 恢复消息 m = R 1 ( m )。
1.4.1分块问题(续)
例 子 3 令 n A 8387 7499 62894113 , e A 5,和d A 37726937 ; 以及nB 55465219 , eB 5, d B = 44360237 。注意 n A nB . 假定消息 m 1368797 符合冗余规则,先用 A的秘密密钥签名再用 B的公开 密钥加密。A 计算的过程为:
37726937 (1) s m d A (modn A ) 1368797 (mod62894113) 59847900 。 5 (2) c s eB (modnB ) 59847900 (mod55465219) 38842235 。
为了恢复消息并认证签 名,B 做如下计算:
1.1 算法描述(续)
评述. 冗余函数R和它的逆函数R 1公开选择产生。这个 冗余函数可以部分降低攻击 者通过随机选择数字产 生 合法签名的可能性。 签名认证正确性证明 如果 . s是对消息m的一个签名,则 s m d (modn),这里 m R (m)。由于e d 1 (modφ), se m ed m (mod n)。最终,R 1 (m ) = R 1 ( R(m)) m。
1.3.2 RSA的乘法特性(续)
例 子 2令 n为 RSA 的模 , d为秘密密钥。令k log2 n 是n的比特长度,并且令 t 是一个固定长度的正整 数, 满足t k/2。令w 2t 并令消息m为在区间 [1 , n 2 t 1] 上的整数。冗余函数定 义为R(m) = m 2t ( R(m) 的二进 制表示的最末t比特全为0)。在绝大多数的模n下,R 将都不具有乘法特性。
44360237 ˆ c d B (mod nB ) 38842235 (1) s (mod55465219) 4382681 。 5 ˆ s ˆ e A (mod nA ) 4382681 (2) m (mod62894113) 54383568 。
ˆ 。发生这个问题的原因 注意m 是s大于nB。 m
1.4.1分块问题(续)
(3) (续) 对模 n的这一选择并不能完全 解决不正确解 密问题,但是可使出现 不正确解密情况的概率 可以 忽略。假定n A是模并且s m d A (modn A )是对消息 m 的签名。进一步假定 s在最高的k +1 比特位中有一位 为1,而不是首位。由于 s应该小于n A,s的最高必须 为0,因此,s小于一般形式模产生的 结果。在s最高 的k +1 比特位中首位为 1的概率不超过 (1/ 2) k 。当k选 择100 的时候,这一概率可以 忽略。
本讲提要
RSA签名方案 ElGamal族签名方案 生日攻击
1 RSA数字签名方案
1.1 算法描述
算 法 1 RSA 数字签名方案的密钥产 生 摘要:每个实体产生一 个RSA 公开密钥和对应的秘密 密钥。 每个实体A做如下步骤: (1) 产生两个大的不同随机 素数p和q,两个素数规模大约相 同。 (2) 计算n p q和φ ( p 1)(q 1)。 (3) 选择一个随机整数 e, 1 e φ, 满足(e, φ) 1。 (4) 使用扩展Euclidean算法计算唯一一个整数 d, 1 d φ, 满足e d 1(modφ)。 (5) A的公开密钥是(n, e);A的秘密密钥是d。
(3) 预先设定模的形式。这 种方法是仔细选择素数p和q, 以使它们的乘积n 具有特殊的形式:最高 位为1接下来的 连续 k位都是0。 具有这种形式的 t比特的模n可以这样产生。 对于n具有需要形式应该满足 2t 1 n 2t 1 + 2t k 1。随机 选择一个 t/ 2比特的素数p,在2t 1 / p 到2t 1 + 2t k 1 / p 区间 内找一个素数q,这样n p q 就具有需要的形式。 例 子 4假定希望找到一个 12比特的模 n ,满足最高位为 1接 下来连续k 3位为 0。开始任意选择一个6比特的素数p 37。 在 211 /p 56 到 (211 + 28 ) /p 62之间任选择一个素数 q。 q的可能选择为 59和 61 。 如果选择q = 59,则 n 37 59 2183 , 二进制表示为1000100001 11 。如果选择q 61 ,则n 37 61 2257 ,二进制表示为 1000110100 01 。
44360237 31229978 (mod55465219) 30729435 。 5 签名认证. B计算m s e (mod n ) 30729435 (mod55465219)
31229978 。 最终,由于m 符合冗余函数要求, B 接受签名并 可以恢复消息m R 1 (m ) 31229978 。
1.4.2 短消息与长消息 由于签名和消息的规模相当,这在消息长的情 况下非常不利。为了解决这一问题,通常采用 hash函数。签名方案只作用于消息的hash函数 值,而不是消息的本身。在这种情况下,使用 冗余函数R保障签名方案安全就不再需要。
1.4.2 短消息与长消息 (续)
假定 n是RSA 用于算 法 2 的2 k比特的模,算法用于签 名k比特 的消息。假定实体 A期望签名k t比特的消息。一种办法 就是将 消息分成k比特的分组m m1 || m2 || || mt,然后分别对每一块 进行签名。这样产生的 签名数据是2 k t比特。另一种办法是 A对消息m进行hash计算得到比特长度为l k 的hash值,再对 hash值签名。这样产生的签 名数据是 k t+2 k比特,这里k t是 原始消息的长度。由于 在t 2时,k t+2 k 2 k t,最有效的 办法是使用RSA 数字签名对hash值签名。而当消息的长 度小于 k比特时,不使用 hash的RSA 数字签名更好。
1.3.2 RSA的乘法特性
RSA 签名方案具有如下的乘 法特性,有时候也称其 为
d 同态特性。 如果 s1 m1d (mod n) 和s2 m2 (mod n)分别
是对消息 m1和 m2的签名,则s s1 s2 (modn) 有特性 s (m1 m2 ) d (mod n)。 如果m m1 m2也具有正确的冗余 特性则s就是对消息m的合法签名。因此,冗 余函数R 应该不具有乘法特性, 也就是,对于基本上所 有的对 a, b, R(a b) R(a) R(b)。对R的这一条件是必须的, 但满足这一条件并不一 定就是安全的。
1.4.1分块问题(续)
(2) 每个实体两个模。每个 实体把用于签名的模和 加密 的模分开。如果每个实 体的签名的模都小于系 统中所有 用来加密的模,则不正 确解密的情况将不再会 发生。这 种方法可以通过要求加 密的模使用t + 1 比特的数,而签名 模使用t比特的数来实现。
1.4.1分块问题(续)
数字签名有很多应用,包括:认证,数据 真实性,和不可否认。数字签名的一个非 常重要应用是在大规模网络上的公钥数字 证书。数字证书是可信第三方将用户身份 与其的公开密钥绑定的方法,在此之后, 其它实体认证公开密钥的时候都不需要可 信第三方的协助。
数字签名的概念和用途在实用数字签名技 术产生之前就为人们所认识。第一个数字 签名方法是 RSA数字签名方案,它至今仍 然是最为实用数字签名技术。后续的研究 也给出非常丰富的各种数字签名方法。这 些技术常常在功能性和执行性方面提供了 相当大的改进。
第十讲 数字签名
这一讲考虑设计用于模拟手写签名的数字签 名技术。一条消息的数字签名是一个依赖于 仅签名者知晓的秘密而产生的数字,并需附 加被签名的消息。数字签名必须可以被验证: 如果任何一方对文件的签名的真实性产生争 议(导致的原因可能是不诚实的签名者想否认 自己产生的签名,或者是认证者提出欺诈的 权利要求),一个公正的第三方就可以公平的 解决这一问题,而不需要获得签名者的秘密 (秘密密钥)。
1.2 例子
例子1 密 钥 产 生 实体 . A选择素数p 7927 ,q 6997 , 并且计算 n p q 55465219 和φ = 7926 6996 55450296 。A 选择 e 5 并且解e d 5 d 1(mod55450296) ,得到d 44360237 。 A的公开密钥是(n 55465219 , e 5); A的秘密 密钥是 d 44360237 。 签 名 产 生 为了简单,假设冗余函 . 数R是一个单位映射 R (m) m。 为了签名消息m 31229978 , A 计算m R (m) 31229978 ,并且计算签名s m d (modn )
1.3 RSA 签名的可能攻击 1wk.baidu.com3.1 整数分解
如果一个攻击者可以分 解某个实体A的公开模n, 那么攻击者就可以计算 φ,并进而使用扩展 Euclidean算法通过解同余式 e d 1 (modφ)得到 秘密密钥 d 。这一方法就完全使签 名系统崩溃。 为了阻止这一攻击, A 必须选择p 和q使得分解n 在计算上不可能。
d 2 d 3 d 2 d d d d
rw r s2 m d 如果y 0,计算 m (modn)。 d s3 (m3 ) yw y
1.4 RSA 签名的执行 1.4.1 分块问题
一种对RSA 的常用方法是签名一条 消息再对签名 结果加密。必须考虑在 执行这一过程时两个模 的 长度。假定A希望签名再加密一条消 息给B。假定 (n A, e A ) 和(nB,eB )分别是A和B的公开密钥。如果 n A nB,则B有可能不能正确恢复出 消息。
1.3.2 RSA的乘法特性(续)
例 子 2(续) 假定攻击者想伪造消息 m的签名。对n和m R(m) m 2t m w应用扩展Euclidean算法。在每次应用扩展 Euclidean算法时, 都会得到整数 x,y, 和r满足x n + y m r。从这里可以看出,在 某 次可能存在y和r满足 | y | n/w和 r n/w的情况。如果y 0,构造整数 m2 r w 和 m3 y w。如果y 0,构造整数m2 r w和m3 y w。 在每种情况下, m2和m3都符合冗余的规则。 如果可以从合法签名者 获得签名s2 m2d (modn) 和s3 m3d (modn),则攻击者可以计算对 m的 签名如下: 如果 y 0, 计算 rw r s2 m d m (modn); s3 m yw y
1.4.1分块问题(续)
有几种方法可以克服分 块问题。 (1) 调换顺序。如果先做小 模操作再做大模操作, 不正 确解密的问题将不会出 现。也就是说,如果 n A nB, 则 实体A应该先使用B的公开密钥加密消息, 再用自己的 秘密密钥签名加密的消 息。当然,最好的操作 顺序通 常是先签名消息再加密 签名,原因是如果 A 先加密再 签名,攻击者可以移除 该签名而换上自己的签 名。 虽 然攻击者并不知道具体 签名的内容,这仍然是 对攻击 者十分有利的情形。因 此,调换顺序并不是最 好的解 决方法。