## CRYPT-4 公钥密码 **author : Odyssey@cyberpeace** - [公钥密码体制的基本概念](#公钥密码体制的基本概念) - [公钥密码中的数学知识](#公钥密码中的数学知识) - [RSA密码体制](#rsa密码体制) - [基于离散对数的密码体制](#基于离散对数的密码体制) - [椭圆曲线密码体制](#椭圆曲线密码体制) ### 知识点 - 公钥密码体制 - 常见公钥密码 ### 学习目标 - 掌握公钥密码体制的基本思想 - 掌握公钥密码体制中的数学原理 - 掌握常见公钥密码的加解密原理 - 了解公钥密码体制在信息安全领域的实际应用 ### 公钥密码体制的基本概念 #### 4.1.1 对称密码与非对称密码 非对称密码与诸如AES或DES的对称算法完全不同。绝对大多数公钥算法都是基于数论函数,这点与对称密码大不相同,对称密码的目标通常是让输入与输出之间不存在紧凑的数学描述关系。尽管人们常用数学结构来描述对称密码内的小型分组,比如AES中的S-盒,但这并不意味着整个密码形成了一个紧凑的数学描述。 在公钥密码体制以前的整个密码学史中,所有的密码算法,包括原始手工计算的、由机械设备实现的以及由计算机实现的,都是基于代换和置换这两个基本工具。而公钥密码体制则为密码学的发展提供了新的理论和技术基础,一方面公钥密码算法的基本工具不再是代换和置换,而是数学函数;另一方面公钥密码算法是以非对称的形式使用两个密钥,两个密钥的使用对保密性、密钥分配、认证等都有着深刻的意义。可以说公钥密码体制的出现在密码学史上是一个最大的而且是惟一真正的革命。 #### 4.1.2 对称密码的一些缺点 - 密钥分配问题:通信双方必须使用信道传输密钥,但是通信信道是不安全的,所以直接在信道上传输密钥这种最简单的密钥分配方式是不可取的。 - 密钥个数:即使解决了密钥分配问题,我们仍然需要保存和处理大量密钥。在一个拥有n个用户的网路中,如果每对用户之间都需要一个单独的密钥对,那么网络上的密钥对个数会变成:$\frac {n*(n-1)}{2}$ 。 - 缺少对欺骗行为的防御机制。由于通信双方的密钥相同,任意一方都可以伪造另外一方的信息或否认自己发送的信息。 #### 4.1.3 公钥密码解决的问题 公钥密码体制的概念是在解决单钥密码体制中最难解决的这两个问题时提出的。 - 单钥密码体制在进行密钥分配时, 要求通信双方或者已经有一个共享的密钥,或者可籍助于一个密钥分配中心。对第一个要求,常常可用人工方式传送双方最初共享的密钥,这种方法成本很高,而且还完全依赖信使的可靠性。第二个要求则完全依赖于密钥分配中心的可靠性。 - 第二个问题数字签字考虑的是如何为数字化的消息或文件提供一种类似于为书面文件手书签字的方法。 1976年W.Diffie和M.Hellman对解决上述两个问题有了突破,从而提出了公钥密码体制。 #### 4.1.4 公钥密码体制的原理 公钥密码算法的最大特点是采用两个相关密钥将加密和解密能力分开,其中一个密钥是公开的,称为公开密钥,简称公开钥,用于加密;另一个密钥是为用户专用,因而是保密的,称为秘密密钥,简称秘密钥,用于解密。因此公钥密码体制也称为双钥密码体制。算法有以下重要特性: 已知密码算法和加密密钥,求解密密钥在计算上是不可行的。 ![](files/2018-05-15-11-28-30.png)
$x_3≡λ^2-x_1-x_2(mod p)$ >$y_3≡λ(x_1-x_3)-y_1(mod p)$ 其中 $$ \lambda = \begin{cases} \frac{y_2-y_1}{x_2-x_1}\space P\not=Q \\ \frac{3x^2_1+a}{2y_1}\space P\not=Q \end{cases} $$ 例: 仍以$E_{23}(1,1)$为例,设P=(3,10),Q=(9,7),则 ![](files/2018-05-15-20-10-58.png) 所以P+Q=(17,20),仍为$E_{23}(1,1)$中的点。 若求2P则 ![](files/2018-05-15-20-11-28.png) 所以2P=(7,12)。 倍点运算仍定义为重复加法,如 4P=P+P+P+P 从例题看出,加法运算在$E_{23}(1,1)$中是封闭的,且能验证还满足交换律。对一般的$E_p(a,b)$,可证其上的加法运算是封闭的、满足交换律,同样还能证明其上的加法逆元运算也是封闭的,所以$E_p(a,b)$是一个Abel群。 #### 4.5.3 椭圆曲线上的点数 在上一个例题中,GF(23)上的椭圆曲线$y^2\equiv x^3+x+1$在第一象限中的整数点加无穷点O共有28个。一般有以下定理: GF(p)上的椭圆曲线$y^2=x^3+ax+b \space (a,b\in GF(p),4a^3+27b^2\not =0)$在第一象限中的整数点加无穷远点O共有 $1+p+\sum_{x\in GF(p)}(\frac{x^3+ax+b}{p})=1+p+\varepsilon $个 其中$(\frac{x^3+ax+b}{p})$是Legendre符号。 定理中的$\varepsilon$由以下定理给出: Hasse's 定理 $|\varepsilon |\leq 2\sqrt{p}$ Hasse's 定理也称为Hasse's 边界,它说明了点的个数大概在素数p的范围内。这个结论具有非常大的实用性。例如,需要一个拥有$2^{160}$个元素的椭圆曲线,我们必须使用一个长度大约为160位的素数。 #### 4.5.4 明文消息到椭圆曲线上的嵌入 在使用椭圆曲线构造密码体制之前,需要将明文消息嵌到椭圆曲线上,作为椭圆曲线上的点。设明文消息是$m(0\leq m\leq M)$,椭圆曲线$y^2\equiv x^3+ax+b(mod\space p)$$(a,b∈GF(p),4a^3+27b^2(mod\space p)≠0)$,k是一个足够大的整数,使得将明文消息嵌入到椭圆曲线上时,错误率是$2^{-k}$。实际中,k可在30到50之间取值。下面取k=30,对明文消息m,如下计算一系列$x$: $x=\{mk+j,j=0,1,2,...\}={30m,30m+1,30m+2,...}$ 直到$x^3+ax+b(mod\space p)$是平方根,即得到椭圆曲线上的点$(x,\sqrt{x^3+ax+b})$。因为在0到p的整数中,由一半是模p的平方剩余,一班是模p的非平方剩余。所以k次找到$x$,使得$x^3+ax+b(mod\space p)$是平方根的概率不小于$1-2^{-k}$。 反过来,为了从椭圆曲线上的点(x,y)得到明文消息m,只需要$m=\llcorner \frac{x}{30} \lrcorner$ #### 4.5.5 椭圆曲线上的密码 为使用椭圆曲线构造密码体制,需要找出椭圆曲线上的数学困难问题。 在椭圆曲线构成的Abel群$E_p(a,b)$上考虑方程Q=kP,其中P,$Q∈E_p(a,b)$,k