1、1.RSA 数字签名的目的和意义数字签名的目的和意义 RSA 公开密钥加密算法自 20 世纪 70 年代提出以来,已经得到 了广泛认可和应用。发展至今,电子安全领域的各方面已经形成了较 为完备的国际规范。RSA 作为最重要的公开密钥算法,在各领域的 应用数不胜数。RSA 在硬件方面,以技术成熟的 IC 应用于各种消费 类电子产品。 RSA 在软件方面的应用,主要集中在 Internet 上。加密连接、数 字签名和数字证书的核心算法广泛使用 RSA。日常应用中,有比较 著名的工具包 Open SSL(SSL,Security Socket Layer,是一个安全传输 协议, 在 Internet
2、 上进行数据保护和身份确认。 Open SSL是一个开放 源代码的实现了SSL及相关加密技术的软件包, 由加拿大的Eric Yang 等发起编写的。Open SSL 应用 RSA 实现签名和密钥交换,已经在各 种操作系统得到非常广泛的应用。另外,家喻户晓的 IE 浏览器,自 然也实现了 SSL 协议, 集成了使用 RSA 技术的加密功能, 结合 MD5 和 SHA1,主要用于数字证书和数字签名,对于习惯于使用网上购物 和网上银行的用户来说,几乎天天都在使用 RSA 技术。 RSA 更出现在要求高度安全稳定的企业级商务应用中。在当今 的企业级商务应用中,不得不提及使用最广泛的平台 j2ee。事实
3、上, 在 j2se 的标准库中,就为安全和加密服务提供了两组 API:JCA 和 JCE。 JCA (Java Cryptography Architecture)提供基本的加密框架,如 证书、数字签名、报文摘要和密钥对产生器; JCA 由几个实现了基 本的加密技术功能的类和接口组成, 其中最主要的是 java.security 包, 此软件包包含的是一组核心的类和接口, Java 中数字签名的方法就集 中在此软件包中。 JCE(Java Cryptography Extension) 在 JCA 的基础上 作了扩展, JCE也是由几个软件包组成, 其中最主要的是 javax.crypto 包
4、, 此软件包提供了 JCE 加密技术操作 API。 javax.crypto 中的 Cipher 类用于具体的加密和解密。 在上述软件包的实现中, 集成了应用 RSA 算 法 的 各 种 数 据 加密 规 范 (RSA 算 法 应 用 规 范 介 绍 参见 : http:/ ,这些 API 内部 支持的算法不仅仅只有 RSA,但是 RSA 是数字签名和证书中最常用 的),用户程序可以直接使用 java 标准库中提供的 API 进行数字签名 和证书的各种操作。 2 2数字签名数字签名算法算法的基本框架的基本框架 1密钥的产生 选择两个保密的大素数 P 和 q。 计算 N=p q, (N) =(p
5、-1)(g-1), 其中(N)是 N 的欧拉函数值。 选择一个整数 e,满足 le(N),且 g c d(N),e)1。 计算私钥 d(解密密钥),满足 e dl(mod(N),d 是 e在模 (N)下的乘法逆元。 以(e, n)为公钥,(d ,N)为密钥,销毁 p,q,(N)。 2加密 加密时首先将明文比特串进行分组, 使得每个分组对应得串在数 值上小于 N, 即分组的二进制长度小于 l092N。然后,对每个明文 分组 M,作加密运算: C=E k(M)=M e mod N 3解密 对密文分组的解密运算为: M=D k (C) =C d mod N 由定理 1 和定理 2 可以证明解密运算能
6、恢复明文 M 并非所有的公开密钥系统,均可同时达到秘密性与数字签名功 能。一般而言, 一公开密钥系统若作为密码系统,则无法作为数字 签名,反之亦然。只有很少数 的系统可同时作为密码系统和数字签名,如本文讨论的 RSA 系统。 RSA 签名算 法如下: 设 N=p q, 且p 和q 是两个大素数, e和d 满足 e dl(mod (N)。 公开密钥:N,e 私有密钥:d 签名过程:发送方使用自己的私钥 d 对明文 m 进行数字签名变 换: y=x d mod N:并将加密后的消息和签名 y 发送给接收方; 验证过程: 接收方使用发送方的公钥 e 对收到的消息 y 进行数字 签名验证变换 x=ye mod N,并使用发送方的密钥解密恢复消息 x, 比较 x与 x,如果 x=x 则证实发送方的身份合法。 这样,用户 A 若想用 RSA 签名方案对消息 x 签名,他只需公开 他的公钥 N 和 e, 由于签名算法是保密的, 因此 A