nullnull2012年4月8日计算机安全技术与实践 数字签名,密钥管理为了承诺为了承诺数字签名是密码学发展过程中的最重要的概念之一。数字签名可以提供其他方法难以实现的安全性---抗抵赖。
抵抗内部攻击!数字签名 Digital Signature数字签名 Digital Signature加密
报文鉴别
数字签名
抵制通信双方的抵赖
对方(自己)否认发送过或收到过某个报文
向对方表明自己的身份
数字签名数字签名消息认证基于共享秘密,不能防止抵赖
只是2方合作抵抗第3方窜改/假冒
共享的秘密不具有排他性质
双方有同样的不分彼此地能力;因此对某个报文的存在和有效性,每一方都不能证明是自己所为,或者是和自己无关
特异性
要想实现类似签名的安全能力,必须使每个人使用独有的秘密
考察手写签名的特性考察手写签名的特性签名的含义
签名者慎重表达认可文件内容的意向的行为
主要形式
手写签名、签章、手指纹印(其他生物技术)
特性
不可伪造,特异性
不可重用,日期和时间相关性
不可改变,能发现涂改、转移意义或用途
不可抵赖,能够质证
可仲裁的,可做为法律证据数字签名: 要适应的新变化数字签名: 要适应的新变化数字签名 手写签名
数字文件 纸版文件
数字小文件 手写字(签章)
如何绑定? 同一页纸
关于扫描手写字迹、鼠标手写
No!手写签名的数字化改造手写签名的数字化改造数学支持-签名函数
被签署的是文件(大文件)
签名生成另外一个文件(小文件)
签名过程一定有签署人的身份和某种秘密(别人不知的)参与
简单易行
计算/存储
签名函数报文(大)报文签名(小)身份和秘密用私钥加密当作签名用私钥加密当作签名主要操作
输入 报文明文、私钥 m^d = s
输出 报文明文、报文密文(签名) (m, s)
验证 s^e =? m
是否满足签名要求的特性
讨论
私钥(其实是公钥)的管理: 和身份绑定、更新等
签名过程太慢: 启用散列函数
改进
对报文的散列值用私钥加密得到和n等宽的签名值数字签名的一般模型数字签名的一般模型数字签名过程机制数字签名过程机制无中心数字签名无中心数字签名直接使用自己的私钥加密作为签名
无中心
存在问题
声称私钥被偷窃而抵赖。虽然可以给报文添加时间戳,并要求用户必须及时挂失私钥,但是盗用者仍可以伪造较早期的签名。
引入中心可以有很多优点,同时也很多缺点。
有信任中心帮助的签名有信任中心帮助的签名优点:可以简化用户的考虑,甚至可以使用对称算法
缺点:中心的安全故障、在线瓶颈、可靠性等问题
13.1a PKCS#1V2.1 Outline13.1a PKCS#1V2.1 OutlineRSA public key :(n,e)
RSA private key:(n,d)
ed≡1 mod λ(n)
其中λ是n的(素因子-1)的LCM
I2OSP (Integer-to-Octet-String primitive)
给定正整数x,输出字节串X=X1X2X3…
x=2560X1+2561X2+2562X3+…
OS2IP (Octet-String-to-Integer primitive)
输入字节串,返回整数值RSA PrimitiveRSA Primitive
RSAEP ((n, e), m) c = me mod n
RSADP ((n,d), c) m = cd mod n
RSASP1((n,d), m) s = md mod n
RSAVP1((n,e), s) m = se mod nEncryption SchemesEncryption SchemesES
RSAES-OAEP (Optimal Asymmetric Encryption Padding)
new, recommended
RSAES-PKCS1-v1_5
obsolete
RSAES-OAEP
EME-OAEP+RSAEP/RSADP
RSAES-PKCS1-v1_5
EME-PKCS1-v1_5+RSAEP/RSADPRSAES-OAEPRSAES-OAEPRSAES-OAEP-ENCRYPT((n, e), M, L)
Option: Hash of hLen-byte
MGF mask generation function (output, an octet string)
mLen <= k-2hLen-2
L optional label to be associated with the message
|L| <= 2^61-1 octets for SHA-1
EME-OAEP encoding
EM = 0x00 || maskedSeed || maskedDB
m = OS2IP (EM)
c = RSAEP ((n, e), m)
C = I2OSP (c, k)
RSAES-OAEP-DECRYPT (K=(n, d), C, L)EME-OAEP encoding operation EME-OAEP encoding operation Signature schemes with appendixSignature schemes with appendixSS
RSASSA-PSS (Probabilistic Signature Scheme)
new, recommended
RSASSA-PKCS1-v1_5
obsolete
RSASSA-PSS
EMSA-PSS+RSASP1/RSAVP1
RSASSA-PKCS1-v1_5
EMSA-PKCS1-v1_5+RSASP1/RSAVP1RSASSA-PSSRSASSA-PSSRSASSA-PSS-SIGN (K=(n,d), M)
EM = EMSA-PSS-ENCODE (M, modBits – 1)
m = OS2IP (EM)
s = RSASP1 (K, m)
S = I2OSP (s, k)
RSASSA-PSS-VERIFY ((n, e), M, S)
RSASSA-PKCS1-v1_5RSASSA-PKCS1-v1_5RSASSA-PKCS1-V1_5-SIGN (K=(n, d), M)
EM = EMSA-PKCS1-V1_5-ENCODE (M, k)
m = OS2IP (EM)
s = RSASP1 (K, m)
S = I2OSP (s, k)
RSASSA-PKCS1-V1_5-VERIFY((n, e), M, S)
Encoding methods for signatures with appendixEncoding methods for signatures with appendixEM
EMSA-PSS
EMSA-PKCS1-v1_5
EMSA-PSS
EMSA-PSS-ENCODE (M, emBits)
EMSA-PSS-VERIFY (M, EM, emBits)
EMSA-PKCS1-v1_5
EMSA-PKCS1-v1_5-ENCODE (M, emLen)
EMSA-PSS encoding operationEMSA-PSS encoding operationEMSA-PKCS1-v1_5EMSA-PKCS1-v1_5EMSA-PKCS1-v1_5-ENCODE (M, emLen)
Option: Hash of hLen-byte
emLen at least tLen + 11
H = Hash (M)
T = HashID+H (ASN.1编码)
DigestInfo ::= SEQUENCE {
digestAlgorithm AlgorithmIdentifier,
digest OCTET STRING }
PS: emLen-tLen-3(8+B) octets with value 0xff
EM = 0x00 || 0x01 || PS || 0x00 || T 对HASH的ASN.1编码
(in EMSA-PKCS1-v1_5)对HASH的ASN.1编码
(in EMSA-PKCS1-v1_5)MD2 ref layman’s guide
30 20 30 0c 06 08 2a 86 48 86 f7 0d 02 02 05 00 04 10 || H
MD5
30 20 30 0c 06 08 2a 86 48 86 f7 0d 02 05 05 00 04 10 || H
SHA-1
30 21 30 09 06 05 2b 0e 03 02 1a 05 00 04 14 || H
SHA-256
30 31 30 0d 06 09 60 86 48 01 65 03 04 02 01 05 00 04 20 || H
SHA-384
30 41 30 0d 06 09 60 86 48 01 65 03 04 02 02 05 00 04 30 || H
SHA-512
30 51 30 0d 06 09 60 86 48 01 65 03 04 02 03 05 00 04 40 || H{回顾ElGamal加密体制}{回顾ElGamal加密体制}准备
素数p,Zp*中本原元g,公开参数
私钥a,公钥b=ga mod p
加密
对明文1<=m<=p-1,选随机数k
密文(c1, c2)
c1=gk mod p, c2=mbk mod p
解密
m=c2 (c1a)-1=mbk ((gk)a)-1
=m(ga)k (g-ka)
=m mod pnullZp满足离散对数问题难解,α是生成元
设P = Zp* ,A= Zp*×Zp-1
K ={(p,α, a,β), β=αa (mod p) }
私钥是a
签名时,取秘密随机数k∈Zp-1*,
定义sig(x,k) = (γ,δ),
=(αk mod p, (x-aγ)k-1 mod (p-1))
验证
ver(x, (γ,δ)): βγγδ=?αx mod p验证正确性证明验证正确性证明如果 (x,γ,δ)是真实签名
βγγδ=αaγαkδ=αaγ+kδ
而 δ = (x-aγ) k-1 mod Φ(p)
即 aγ=x-kδ mod Φ(p)
故 βγγδ = αnΦ(p)+x-kδ+kδ
=αnΦ(p)+x
=αnΦ(p)αx
= αx mod p
其实δ就是签名时从 kδ+aγ=x解出来得签名计算实例签名计算实例p=467,α=2,a=127,则
β=αa mod p = 2127 mod 467 = 132
签名x=100,取k=213(注: k得和p-1互素),则
k-1=213-1 mod 466 = 431
γ=αk mod p = 2213 mod 467 = 29
δ= (x-aγ) k-1 mod Φ(p)
= (100-127×29)×431 mod 466
=51
签名值:(100,(29,51))验证计算实例验证计算实例p=467,α=2,a=127, β= 132
(x,(γ,δ))=(100,(29,51))
判断是否:βγγδ=αx mod p
事实上
βγγδ=13229×2951=189 mod 467
αx=2100=189 mod 467
而且,如果(100,(29,51))的任何改变都会导致验证失败
数字签名
数字签名标准Digital Signature Standard (DSS)
Digital Signature Algorithm (DSA)
DSS标准-DSA
FIPS 186 NIST 1991 1993
只能签名,不能加密
概念对比
RSA:M+Eki(H(M)),ki是私钥
DSS:M+Eki(H(M), k),ki是私钥 k是随机数
图示 RSA vs. DSS图示 RSA vs. DSS DSADSA准备
素数p,约512+比特;
素数q,约160比特,要求是p-1的因子
选择g=h^(p-1/q) mod p
密钥
用户私钥x,x
申请
证书。
CA以某种可靠的方式核对申请人的身份及其公钥,并用自己的私钥“签发”证书。
证书主要内容:用户公钥,持有人和签发人的信息,用途,有效期间,签名等。
证书在需要通信时临时交换,并用CA的公钥验证。
有了经CA签名保证的用户公钥,则可进行下一步的身份验证和交换会话密钥等。CACA使用公钥传递会话密钥 使用公钥传递会话密钥 公钥算法太慢
对称算法一般几十兆字节/秒
1024位RSA解密约100多次/秒(加密快10倍以上)
100*128B = 10KB/s
只用来传递会话密钥
(假设B已经有A的公钥KeA)
A发起和B的通信
B产生会话密钥Ks,并用KeA加密后传给A
A能用自己的私钥KdA解开
他人不会知道KsMerkle
Merkle方案
因为B临时获取A的公钥,所以存在“中间人攻击”的问题NEED78方案NEED78方案(事先拥有对方公钥)14.2 X.509/CA14.2 X.509/CAX509定义了公钥认证服务框架。
Certificate 证书印象
PKI/X.509
CA in Win2k
EJBCA
Certificate 证书印象Certificate 证书印象证书是可靠发布公钥的载体
公钥及其持有人信息
其他信息(用途、有效期、)
签发人及其签名(对上面信息)
X.509X.509分发公钥
证书
内容、格式和编码、签名
鉴别
X509中推荐的协议
应用
IPSec、SSL/TLS、SET、S/MIME、PGP、…
RFC 2459
从公钥到证书从公钥到证书审核 证书格式证书格式版本
序列号
签名算法标识
其参数
签发者名字
不早于,不迟于
主题名(持有人名)
算法标识
其参数
公钥
签发人标识(重名)
持有人标识
扩展
签名算法
参数
签名X509v3 扩展X509v3 扩展V3以可选扩展项的形式体现
(扩展名字,值,是否可忽略)
密钥标识符
密钥用途
签名、加密、密钥交换、CA等组合
私钥使用期限
对应的公钥一般有更长的期限以用于验证
策略信息等
颁发者和持有人的更多信息
证书路径的约束信息证书中心: CA证书中心: CACA
权威的证书签发者
接受请求、审核、(收费)、签发
商业CA机构
申请证书
申请人产生自己的公钥(私钥)
提交PKCS#10格式的申请
公钥、自己的身份信息,用户自己的签名
审核颁发
面对面的交涉; 代理RA
证书发布
X500目录; 在线交换证书的获得等问题证书的获得等问题证书是公开的,不需保密
这很好
信任
对证书的信任基于对中心的信任
CA是分层次的
以减轻负载和压力(尤其是审核)
对多个中心的信任
分散了风险,也引入了风险
证书的自证明和应用证书的自证明和应用前提: 已经有CA的公钥
CA公钥一般是自签名证书的形式
必须可靠的获得,离线手工
取得对方的证书
证书是公开的,不需保密
查目录;在线交换
判断证书是否有效
验证证书中的签名是否是CA的真实签名
(只是说这个证书是有效的)
公钥应用
加密(PGP);鉴别(SSL)信任关系信任关系信任
信任CA
信任CA的签名
信任CA签发的证书
信任该持有人拥有这个公钥 <持有人,公钥>
层次
CA组织成为层次关系
信任链
信任某CA则信任其子CA及其子CA签发的证书
CA之间的相互信任
相互给对方的公钥签署一个证书CA TreeCA TreeA和B之间
如何达成相互信任证书的撤销证书的撤销证书中的有效期
证书提前作废的原因
私钥泄密
用户自己的、CA的
持有人身份变化
CRL - certificate revocation list
由CA定期公布的证书黑名单
作废证书的序列号的表
(序列号,撤销时间)
表的创建日期
其他信息
CRL位置、下次CRL更新时间
签名在线证书状态协议在线证书状态协议OCSP 在线证书状态协议
可以用在线方式查询指定证书的状态
RFC 2560 – OCSP
使用证书进行身份鉴别使用证书进行身份鉴别前提: 已经有某人的真实证书(公钥)
查目录或在线交换
鉴别
鉴别对方是否是真实的持有人(某人)
看对方是否拥有证书中公钥对应的私钥
使用挑战-应答机制
举例
SSL协议
使用证书的鉴别过程使用证书的鉴别过程A要和B通信,A要弄清楚B是否是他所期望的真的B
A->B:A向B请求证书
A<-B:B的证书
A :A检查B的证书是否是A所信任的中心签发的
A->B:A给B一个随机报文,让B签个名来看看
B :B签名,在签名之前可施加自己的影响成分
A<-B:B的签名
A :检验是否通过了B的证书里的公钥的验证14.3
PKI 14.3
PKI PKIXPKIXIETF PKIX charter
http://www.ietf.org/html.charters/pkix-charter.html