密码学基础知识(七)公钥密码

来源:互联网 发布:java 编码url 空格 20 编辑:程序博客网 时间:2024/04/30 00:52

公钥密码体制:

            自从deffie和hellman发表了密码学的新方向后,公钥密码体制就以任我行吸星大法的速度广泛使用,其中有三个魔头:RSA,ElGamal和Menezs-Vanston。

            可是江湖上为什么在对称密码一统江湖的时候出现公钥密码呢?

不用想,就是小说里的情节,对称密码派面临巨大的困难:

1.    密钥分配,由于其密钥分发是通过秘密信道,而安全的秘密信道不好弄。

2.    密钥管理:密钥量太大,不是指密钥长度太长,而是和一个人通信就一个密钥,和n个人就n-1个密钥。

3.    数字签名:对称密码密钥相同,所以接收方可以伪造签名,理所当然发送方可以否认。

公钥密码体制基于:陷门单向函数,记得前面说过,陷门的意思是有个参数t,计算y=f(x)就容易了。没有t就显示单向性。

再说下公钥密码体制有意思的把:

            每个人一个公钥,一个私钥,公钥公开。

            首先,公钥密码的通信过程:

                                    一个消息,用B的公钥加密,密文传递过去,B私钥解密。

            然后是数字签名:

                                    一个消息,用A的私钥加密,密文传过去,B用A的公钥解密。

            那要是我两个一起用呢:即先A的私钥加密,然后再B的公钥加密,密文传过去,B就先A的公钥解密,再B的私钥解密,这种双重加密实现了机密性和(真实性)可认证性。

下面讲下三个魔头的故事:

首先讲RSA:

            RSA,基于大整数素分解问题。

1.    选两个保密的大素数p , q。

2.    公开n=p q,保密φ(n)。为啥公开n,φ(n)还能保密,很简单啊,因为数太大,素数求解很不容易。

3.    选取个e作为公开加密密钥,要求e和φ(n)最大公约数为1。

4.    核心:解密密钥d,d e=1 mod φ(n)。

加密: c=memod n;

解密: m=cd modn;

看完这两个公式你就明白了为啥是基于大整数素分解问题了吧,解密得有n,被人不知道你p 和q是多少,n欧拉值就不能得出,那就求不了d。咱们求解可以简单点,不用欧几里得扩展算法,d e=t φ(n) +1 ,t从0开始试,d就很容易求。

 

RSA的安全性:

     基于大整数素分解,因式分解公认很难,是个NP问题,现在pq已经大到n长度位1024-2048位了,跟对称密码都不是一个量级的了。

除了p q 要大,我们一般还要其长度大致一样,n是1024的话,那两个就都512位左右;他俩差值也不能小,要不直接根号n啥都出来了;p q 应为起强素数,即:p-1 q-1 也有大的素因数,而且两者最大公约数也要小,1肯定最好了。

            RSA承受着 共模攻击和低指数攻击。

 

EIGamal:

            基于有限域乘法群上离散对数问题

DSS美国数字签名标准就是其变形

            随机选择一个大素数p,再随机个d, 计算β=αd mod p .β是公开的加密密钥,d是保密的解密密钥。

            加密时随机选取一个整数k, c1k mod p;c2=m βk mod p;c=(c1,c2)。

            解密就是解密了:m=c2(c1d)-1mod p .

这个K就是搅屎棍,将一个明文可以对应出不同的密文,很好。

安全性:p至少768位,建议1024位,且是强素数,k也要是一次性的。

           

最后一个,椭圆曲线上的Menezs-Vanston:

            基于椭圆曲线上离散对数问题。且比上两个还难解。

(1) 设p > 3是一个素数,E是有限域Zp上的椭圆曲线。α∈E是椭圆曲线上的一个点,并且α的阶足够大,使得在由α生成的循环子群中的离散对数问题是难解的。

p和E以及α都公开。

(2)随机选取整数d,1≤d≤ord(α)-1,计算

β=dα

β是公开的加密密钥,d是保密的解密密钥。

(3)明文空间为Zp*×Zp* ,密文空间为E×Zp*×Zp*。

(4)加密变换:对任意明文x=(x1,x2)∈Zp*×Zp* ,秘密随机选取一个整数k,1≤k≤ord(α)-1 ,

密文为:      y=(y0, y1, y2),

其中y0=kα,(c1 , c2) = kβ,

            y1=c1 x1 modp,

            y2=c2 x2 modp,

(5)解密变换:对任意密文y=(y0, y1, y2)∈ E×Zp*×Zp*,明文为:

     x=(y1c1-1mod p, y2c2-1 mod p) ,其中(c1 , c2)= d y0

160位的椭圆曲线就相当于RSA的1024位了。


0 0
原创粉丝点击