一、数字签名的基本概念
1.手写签名与数字信息的联系
手写签名(如写信、签订协议、支付确认、批复文件等)是一种传统的确认方式。
(1)手写签名是所签文件的物理组成部分;数字信息无绑定的物理载体。
(2)手写签名通过与标准签名比较或检查笔迹来验证;数字信息肉眼无法辨识含义。
(3)手写签名不易模仿复制;数字信息十分容易复制、粘贴。
2.数字签名的含义
数字签名,也称电子签名,是指附加在某一电子文档中的一组特定的符号或代码,它是利用数学方法对该电子文档进行关键信息提取并与用户私有信息进行混合运算而形成的,用于标识签发者的身份以及签发者对电子文档的认可,并能被接收者用来验证该电子文档在传输过程中是否被篡改或伪造。
3.数字签名模型
(1)密钥生成:概率算法,输入一个二进制的安全参数 1k∈N,为签名者生成一对密钥(PKA,SKA),PKA是公开钥, SKA是秘密密钥;
(2)签名:概率算法或确定算法(如图),签名者A首先对待签消息m进行摘要提取h(m),然后用私钥
对其签名 S=SigSKA(m);
(3)验证:确定算法,任何验证者获取A的公钥,并验证消息m及其签名S是否正确
4.安全模型
(1)攻击者资源:(攻击强度渐强)
①惟密钥攻击:攻击者只有用户的公开密钥。
②已知消息攻击:攻击者拥有一些消息的合法签名,但是消息不由他选择。
③选择消息攻击:攻击者可以自由选择消息并获取消息相应的签名。
(2)攻击结果:(攻击结果渐弱)
①完全破译:攻击者恢复出用户的私有密钥。
②一致伪造:攻击者对于任意消息可以伪造其签名。
③选择性伪造:攻击者可以对一个自己选取的消息伪造签名。
④存在性伪造:攻击者可以生成一些消息的签名,但在伪造前对该消息一无所知。
一个安全的数字签名是使用最强的攻击强度“选择消息攻击”,也达不到最差的攻击结果“存在性伪造”。
二、RSA数字签名算法
1.密钥的产生
① 选两个安全的大素数p和q。
② 计算n=p×q,φ(n)=(p-1)(q-1),其中φ(n)是n的欧拉函数值。
③ 选一整数e,满足1<e<φ(n),且gcd(φ(n),e)=1。
④ 计算d,满足d·e≡1 mod φ(n),即d是e在模φ(n)下的乘法逆元。因e与φ(n)互素,故它的乘法逆元存在且唯一。
⑤ {e,n}为公开密钥,{d,n}为秘密密钥。
⑥选取一个hash函数h:{0,1}*→{0,1}t,t为安全参数。
(①-⑤与RSA一致)
2.签名
设待签名消息为m,用私钥对其签名
s≡ h(m)d mod n
3.验证
验证者获取签名者公钥{e,n},对收到的消息签名对(m,s)计算下列等式是否成立,若成立,则发送方的签名有效。
h(m) ≡se mod n
hash的作用:破坏同态性、加快运算。
三、DSA数字签名算法(与ELGamal类似)
1.密钥生成
2.签名
3.验证
4.正确性
因为若(m,r,s) 为用户生成的合法签名,则
这里的第二步,是由s≡[k-1(h(m)+xr)] mod q,左右两边同乘s-1和k-1得到[s-1(h(m)+xr)] mod q≡k,故可得第三步。
5.安全性问题
DSA安全性基于有限域上求离散对数的困难性。
6.离线在线签名
签名产生过程中的运算主要是求r的模指数运算r=(gk mod p) mod q,而这一运算与待签的消息m无关,因此能被预先计算. 事实上,用户可以预先离线计算出很多r和k-1,需对消息m签名时,只需在线进行模乘和模加运算,从而可大大加快产生签名的速度。
7.随机参数
随机数k不可泄露,也不可重复使用。