数字签名技术以及RSA算法的原理实现

数字签名技术

 

1)对称加密与非对称加密

对称加密:对文件的加密和解密采用的都是同一个**,有IDEA和DES两种加密算法

非对称加密:有一对公钥和私钥 如果我们使用公钥加密,必须得用私钥解密;如果使用私钥加密,则必须使用公钥解密。

当使用的加密和解密式两种不同的** 我们称之为非对称加密

 

2)信息摘要:

对数据进行处理,得到一段固定长度的结果。

一般在进行数字签名的时候我们先对文件使用HASH算法计算其信息摘要,然后对该摘要进行数字签名。

信息摘要特点有:

1.输出长度固定,所以输出长度与输入长度无关

2. 不可逆,输出数据无法推倒出输入数据

3.对输入数据很敏感,对于极小的变化输出数据也会发生明显的变化

4.防碰撞 用不同数据得到相同结果的可能性极低

3) 数字签名原理

 

数字签名技术以及RSA算法的原理实现

我们可以用一张图来弄懂数字签名的原理.对于原报文.我们计算完摘要之后会把它用私钥进行加密 然后 把原报文.公钥和机密之后的数字签名传给另一方 另一方需要得到摘要 它的对比方式是.

对于数字签名使用公钥解密得到加密前的摘要 在对原报文采用原先得到摘要时的单项哈希算法来得到摘要 从而对比摘要是否被掉包或是被更改.

 

数字签名算法——RSA算法(非对称加密)

RSA是目前最有影响力的公钥加密算法,它能够抵抗到目前为止已知的绝大多数密码攻击,已被ISO推荐为公钥数据加密标准。

RSA算法支持公钥加密、私钥解密以及私钥加密、公钥解密。

公钥密码*即公开**密码*,也称非对称密码*或双**密码*。1978年由美国麻省理工学院的RivestShamirAdleman共同提出了第一个有效的公钥密码*——RSA公钥密码*,目前RSA仍然应用于网络银行、电子贸易等许多电子商务领域。

一、RSA公钥密码原理

 

1. 参数定义与**生成

 

(1)用户首先秘密选择两个大素数p,q,然后计算出N=pq。

 

(2)用户计算出p-1和q-1的最小公倍数n,然后随机选择一个整数e,满足1<e<n,且e和n互素,将其作为加***,有时也称e为加密指数。

 

(3)然后用户利用加***e和n可容易地计算出脱***d,使得:ed (mod n)=1,有时也称d为脱密指数。

 

(4)用户将加***及大合数(e,N)公布为其公开参数,而将两个大素数p,q及脱***d严格保密作为秘密参数。

 

2. 加密、解密公式

 

设明文为m,密文为c,E表示加密算法,D表示脱密算法,于是有:

 

加密:c=E(m)=m^e(mod N)

 

解密:m=D(c)=c^d(mod N)

 

RSA算法用C++实现:之后显示的结果

 

 

手写大数类 实现 +-*/% << >>等运算符号重载

然后依照RSA加密算法来实现

 

根据上面的算法

加密:c=E(m)=m^e(mod N)

 

解密:m=D(c)=c^d(mod N)

我们应该实现大数类的幂运算和求余数运算

幂运算可以用快速幂算法运算 也就是二进制乘法运算

算法实现效果图如下: 代码:

URL:

https://github.com/KevinJey/RSA-Algorithm

数字签名技术以及RSA算法的原理实现

再次简述以下实现过程:

实现过程:
1 随意选择两个大的质数p和q,p不等于q,计算N=p*q。
2 根据欧拉函数,求得r = (p-1)(q-1)
3 选择一个小于 r 的整数 e,求得 e 关于模 r 的模反元素,命名为d。(模反元素存在,当且仅当e与r互质)
将 p 和 q 的记录销毁。

 

数字签名算法 DSA

 

DSA算法不能用于加密和解密 也不能进行**交换 只能用于签名 所以它比RSA要快很多 安全性于RSA差不多

数字签名算法和公钥加密算法的区别是什么呢?

签名算法用来确保信息发布人的身份和信息的完整性,不能用来做加密传输,所以必须伴着信息原文或者信息摘要一起发送和公布才能被验证。RSA是公钥加密体系,可以用来加密传输,也可以实现签名验证。

 

数字签名算法——ECDSA

椭圆曲线数字签名算法ECDSA是使用椭圆曲线密码ECC对数字签名算法DSA的模拟。

ECC于RSA相比有以下的优点:
1) 同样的**长度下,安全性更高。

2) 计算量小 速度快 再处理私钥的速度上远比RSA DSA要快很多

3) 存储空间占用小 ECC的**尺寸和系统参数比RSA DSA要小很多 所以占用的存储空间要小得多

4) 低带宽要求

比特比所使用的数字签名算法就是椭圆曲线数字签名算法

 

 

对称加密算法
OpenSSL一共提供了8种对称加密算法,其中7种是分组加密算法,仅有的一种流加密算法是RC4。这7种分组加密算法分别是AESDESBlowfishCASTIDEARC2RC5,都支持电子密码本模式(ECB)、加密分组链接模式(CBC)、加密反馈模式(CFB)和输出反馈模式(OFB)四种常用的分组密码加密模式。其中,AES使用的加密反馈模式(CFB)和输出反馈模式(OFB)分组长度是128位,其它算法使用的则是64位。事实上,DES算法里面不仅仅是常用的DES算法,还支持三个**和两个**3DES算法。

非对称加密算法
OpenSSL一共实现了4种非对称加密算法,包括DH算法、RSA算法、DSA算法和椭圆曲线算法(EC)。DH算法一般用户**交换。RSA算法既可以用于**交换,也可以用于数字签名,当然,如果你能够忍受其缓慢的速度,那么也可以用于数据加密。DSA算法则一般只用于数字签名。

当然也有ECC ECDSA两种数字椭圆曲线数字签名算法

数字签名技术是将摘要信息用发送者的私钥加密,与原文一起传送给接收者。接收者只有用发

送者的公钥才能解密被加密的摘要信息,然后用HASH函数对收到的原文产生一个摘要信息,与解密的摘要信息对比。如果相同,则说明收到的信息是完整的,在传输过程中没有被修改,否则说明信息被修改过,因此数字签名能够验证信息的完整性。

 

数字签名是个加密的过程,数字签名验证是个解密的过程。

 

摘要命令

OPENSSL实现了五种信息摘要算法,分别是:MD2 MD5 MDC2 SHA RIPEMD

sha算法包括了sha1和sha

 

摘要的作用一般有:

1.确认数据完整性 2.保存密码,有些密码是直接再数据库中采用MD5保存的

另外摘要的一个重要特性——摘要不可逆

 

对文件1.txt使用求md5摘要:

 

 

生成密码和BASE64

生成密码需要使用的标准命令为passwd用法如下:

-1:使用md5加密算法

数字签名技术以及RSA算法的原理实现

生成**对

 

使用rsa

openssl rsa -in 1.txt -out 567.pub -pubont

 

创建证书

使用openssl工具创建CA证书和申请证书时,需要先查看配置文件,配置文件中对证书存放的位置等相关信息都有明确的定义 具体可以参考

/etc /pki /tls /openssl.cnf 文件

先创建为CA所提供的目录文件

 

指明证书的开始编号

 

 

umask 077表示只用root用户才有权限对其进行操作

openssl genrsa -out PATH bitnum

表示能够在指定路径下生成 4096为的私钥

创建证书openssl req -new -x509 -key PATH -out DESTPATH -days 3650

生成自签证书

命令中用到的选项解释:
-new:表示生成一个新证书签署请求
-x509:专用于CA生成自签证书,如果不是自签证书则不需要此项
-key:生成请求时用到的私钥文件
-out:证书的保存路径
-days:证书的有效期限,单位是day(天),默认是365天

颁发证书

在需要使用证书的主机上生成证书请求

 

生成私钥→ 生成证书签署请求并填写信息

CA服务器拿到证书签署请求后颁发证书

当然也可以通过openssl CA -revoke PATH 以此吊销证书