630 likes | 1.27k Views
群论在密码学中的应用. 一 、 基本概念 二、 RSA 密码体制 三、 ElGamal 密码体制 四、 Diffie-Hellman 密钥交换 五、 ECC 密码体制. 一、基本概念. 双(公)钥密码体制 于1976年由 W. Diffie 和 M. Hellman 提出,同时 R. Merkle 也独立提出了这一体制。可用于保密通信,也可用于数字签字。这一体制的出现在密码学史上是划时代的事件,它为解决计算机信息网中的安全提供了新的理论和技术基础。
E N D
群论在密码学中的应用 • 一、基本概念 • 二、RSA密码体制 • 三、ElGamal密码体制 • 四、Diffie-Hellman密钥交换 • 五、ECC 密码体制
一、基本概念 双(公)钥密码体制于1976年由W. Diffie和 M. Hellman提出,同时R. Merkle也独立提出了这一体制。可用于保密通信,也可用于数字签字。这一体制的出现在密码学史上是划时代的事件,它为解决计算机信息网中的安全提供了新的理论和技术基础。 自1976年以来,双钥体制有了飞速发展,不仅提出了多种算法,而且出现了不少安全产品。本章将介绍其中的一些主要体制。包括可用于密钥分配、加解密的双钥算法。一个好的系统,不仅算法要好,还要求能与其它部分,如协议等进行有机的组合。
单向函数 1. 双钥密码体制的基本概念 双钥密钥保密、认证系统的的安全性主要取决于构造双钥算法所依赖的数学问题。要求加密函数具有单向性,即求逆的困难性。因此,设计双钥体制的关键是先要寻求一个合适的单向函数。 (1)单向函数 定义 令函数f是集A到集B的映射,以f:AB表示。若对任意x1x2,x1, x2A,有f(x1)f(x2),则称f为单射。
f为可逆的充要条件是,存在函数g:B A,使对所有xA有g[f(x)]=x。 定义 一个可逆函数f:AB,若它满足: 1对所有xA,易于计算f(x)。 2 对“几乎所有xA”由f(x)求x“极为困难”,以至于实际上不可能做到,则称f为一单向(One-way)函数。 定义中的“极为困难”是对现有的计算资源和算法而言。
例1令f是在有限域GF(p)中的指数函数,其中p是大素数,即 y=f(x)=x。 式中,xGF(p),其逆运算是GF(p)中定义的对数运算 x=logx0 x<p-1 显然,由x求y是容易的,即使当p很大,例如p2100时也不难实现。为方便计算以下令=2。所需的计算量为lb p次乘法,存储量为(lb p)2比特,利用高速计算机由x计算x可在0.1毫秒内完成。但是相对于当前计算GF(p)中对数最好的算法,当p=2100时,以计算指数一样快的计算机进行计算需时约1010.7秒(1年=107.5秒,故约为1600年!其中假定存储量的要求能够满足)。可见,当p很大时,GF(p)中的f(x)=x,x<p-1是个单向函数。
Pohlig和Hellman对(p-1)无大素因子时给出一种快速求对数的算法[Pohlig等1978]。特别是,当p=2n+1时,从x求x的计算量仅需(log p)2次乘法。对于p=2160,在高速计算机上大约仅需时10毫秒。因此,在这种情况下,f(x)=x就不能被认为是单向函数。 由上述我们可以得出,当对素数p,且p-1有大的素因子时,GF(p)上的函数f(x)=x是一个单向函数。寻求在GF(p)上求对数的一般快速算法是当前密码学研究中的一个重要课题。
(2) 陷门单向函数 单向函数是求逆困难的函数,而单向陷门函数(Trapdoor one-way function),是在不知陷门信息下求逆困难的函数,当知道陷门信息后,求逆是易于实现的。这是Diffie和Hellmam[1976]引入的有用概念。 但如何给陷门单向函数下定义则很棘手,因为 (1) 陷门函数其实就不是单向函数,因为单向函数是在任何条件下求逆都是困难的; (2) 陷门可能不止一个,通过试验,一个个陷门就可容易地找到逆。如果陷门信息的保密性不强,求逆也就不难。
定义2陷门单向函数是一类满足下述条件的单向函数:定义2陷门单向函数是一类满足下述条件的单向函数: fz:AzBz,zZ,Z是陷门信息集。 (1) 对所有zZ,在给定z下容易找到算法使对所有xA,易于计算fz及其逆。 (2) 如果没有陷门信息z,对“几乎所有”的xAz,“很难” (“实际上不可能”)从y=Fz(x)算出x。 (3) 对任一z,集Az必须是保密系统中明文集中的一个“方便”集,即便于实现明文到它的映射。(在PKC中是默认的条件)。(Diffie和Hellman定义的陷门函数中,Az=A,对所有Z成立。而实际中的Az取决于Z)。
(3) 公钥系统。在一个公钥系统中,所有用户共同选定一个陷门单向函数,加密运算E及可用消息集鉴别函数F。用户i从陷门集中选定zi,并公开Ezi和Fzi。任一要向用户i送机密消息者,可用Fzi检验消息x是否在许用明文之中,而后送y=Ezi(x)给用户x即可。 在仅知y,Ezi和Fzi下,任一用户不能得到x。但用户i利用陷门信息zi,易于得到Dzi(y)=x。
(4) 用于构造双钥密码的单向函数 1976年Diffie和Hellman发表的文章中虽未给出陷门单向函数,但大大推动了这方面的研究工作。双钥密码体制的研究在于给出这种函数的构造方法以及它们的安全性。 陷门单向函数的定义并没有给出这类函数是否存在。但他们指出“一个单钥密码体制,如果能抗击选择明文攻击,就可规定一个陷门单向函数”。以其密钥作为陷门信息,则相应的加密函数就是这类函数。这是构造双钥体制的途径。下面给出一些目前多数双钥体制所用的单向函数的例子。
大整数分解FAC。 判断一个大奇数n是否为素数的有效算法,大约需要的计算量是lb n4,当n为256或512位的二元数时,用当前计算机做可在10分钟内完成。已知FACCONP。 若已知二大素数p和q,求n=pq只需一次乘法,但若由n,求p和q,则是几千年来数论专家的攻关对象。 离散对数DL。给定一大素数p,p-1含另一大素数因子q。可构造一乘群Zp*,它是一个p-1阶循环群。其生成元为整数g,1<g<p-1。已知x,求y=gx mod p容易,只需lb x-1次乘法。如x=15=11112,g15=(((1·g)2·g)2·g)2·g mod p,要用3+4-1=6次乘法。
若已知y, g, p,求x=logg ymod p为离散对数问题。最快求解法运算次数渐近值为 p=512时, 。若离散对数定义在GF(2n)中的2n-1阶循环群上,它的预计算量的渐近式为 求一特定离散对数的计算量的渐近式为 广义离散对数问题是在n阶有限循环群G上定义的。
RSA问题,是FAC问题的一个特例。n是两个素数p和q之积,给定n后求素因子p和q的问题称之为RSAP。求n=pq分解问题有以下几种形式: (1) 分解整数n为p和q; (2) 给定整数M和C,求d使CdM mod n; (3) 给定整数e和C,求M使MeC mod n; (4) 给定整数x和C,决定是否存在整数y使xy2 mod n(二次剩余问题)。 Diffie-Hellman问题(DHP)。给定素数p,令为Zp*的生成元,若已知a和b ,求a b的问题为Diffie-Hellman问题,简记为DHP。若为循环群G的生成元,且已知a和b为G中的元素,求a b的问题为广义Diffie-Hellman问题,简记为GDHP。
二、RSA 密码体制 MIT三位年青数学家R.L.Rivest,A.Shamir和L.Adleman 发现了一种用数论构造双钥的方法,称作MIT体制,后来被广泛称之为RSA体制。它既可用于加密、又可用于数字签字,易懂且易于实现,是目前仍然安全并且逐步被广泛应用的一种体制。国际上一些标准化组织ISO、ITU、及SWIFT等均已接受RSA体制作为标准。在Internet中所采用的PGP(Pretty Good Privacy)中也将RSA作为传送会话密钥和数字签字的标准算法。
1. 体制: 独立地选取两大素数p1和p2(各100~200位十进制数字),计算 n=p1×p2 其欧拉函数值 (n)=(p1-1)(p2-1) 随机选一整数e, 1e<(n),((n), e)=1。因而在模(n)下,e有逆元 d=e -1 mod (n) 取公钥为n,e。秘密钥为d。(p1, p2不再需要,可以销毁。) 加密:将明文分组,各组在mod n下可惟一地表示(以二元数字表示,选2的最大幂小于n)。各组长达200位十进数字。可用明文集 Az={x:1x<n, (x, n)=1} 注意,(x, n)1是很危险的,请思考。
xAz的概率: 密文 y=xe mod n 解密: x=yd mod n 证明:yd=(xe)d=xde,因为de1 mod (n) 而有 de=q(n)+1。由欧拉定理,(x, n)=1意味 x(n)1 mod n,故有 yd=xde=xq(n)+1xxq(n)=x1=x mod n 陷门函数:Z=(p1, p2, d)
2. RSA的安全性 (1)分解模数n。在理论上,RSA的安全性取决于模n分解的困难性,但数学上至今还未证明分解模就是攻击RSA的最佳方法,也未证明分解大整数就是NP问题,可能有尚未发现的多项式时间分解算法。人们完全可以设想有另外的途径破译RSA,如求解密指数d或找到(p1-1)(p2-1)等。但这些途径都不比分解n来得容易。甚至Alexi等[1988]曾揭示,从RSA加密的密文恢复某些bit的困难性也和恢复整组明文一样困难。这一视在困难性问题是个NP问题,但还没人证明它为NPC问题。
(2)其它途径:从n若能求出(n),则可求得p1, p2,因为 n-(n)+1=p1p2-(p1-1)(p2-1)+1=p1+p2 而 。 已证明,求(n)等价于分解n的困难。 从n求d亦等价于分解n。前尚不知是否存在一种无需籍助于分解n攻击法。也未能证明破译RSA的任何方法都等价于大整数分解问题。
(3)迭代攻击法:Simmons和Norris曾提出迭代或循环攻击法。例如,给定一RSA的参数为(n, e, y)=(35, 17, 3),可由y0=y=3计算y1=317=33 mod 35。再由y1计算y2=y117=3 mod 35,从而得到明文x=y1=33 mod 35。一般对明文x加密多次,直到再现x为止。Rivest证明,当p1-1和p2-1中含有大素数因子,且n足够大时,这种攻击法成功的概率趋于0。
(4)选择明文攻击 攻击者收集用户A以公钥e加密的密文y=xe mod n,并想分析出消息x。 选随机数r<n,计算y1=re mod n,y2=y1×y mod n。现在攻击者请A对消息y2进行解密得到s=y2d mod n。攻击者计算 s/r mod n=x,得到了明文x。
(5)公用模攻击 若很多人共用同一模数n,各自选择不同的e和d,这样实现当然简单,但是不安全。若消息以两个不同的密钥加密,在共用同一个模下,若两个密钥互素(一般如此),则可用任一密钥恢复明文。 设e1和e2是两个互素的不同密钥,共用模为n,对同一消息x加密得 y1=xe1 mod n, y2=xe2mod n。分析者知道n, e1, e2, y1和y2。因为(e1, e2,)=1,所以有r e1+s e2=1。假定r为负数,从而可知由Euclidean算法可计算 (y1-1)ry2s=x mod n 还有两种攻击共用模RSA的方法,用概率方法可分解n和用确定性算法可计算某一用户密钥而不需要分解n。
(6)低加密指数攻击:采用小的e可以加快加密和验证签字的速度,且所需的存储密钥空间小,但若加密钥e选择得太小,则容易受到攻击。令网中三用户的加密钥e均选3,而有不同的模n1, n2, n3,若有一用户将消息x传给三个用户的密文分别为 y1=x3 mod n1x< n1 y2=x3 mod n2 x< n2 y3=x3 mod n3x< n3 一般选n1, n2, n3互素(否则,可求出公因子,而降低安全性),利用中国余定理,可从y1, y2, y3求出 y=x3 mod (n1n2n3)。 由x<n1, x<n2, x<n3,可得x3< n1n2, n3,故有 。
(7)定时攻击法:定时(Timing)攻击法由P. Kocher提出,利用测定RSA解密所进行的模指数运算的时间来估计解密指数d,而后再精确定出d的取值。R. Rivest曾指出,这一攻击法可以通过将解密运算量与参数d无关挫败。另外还可采用盲化技术,即先将数据进行盲化,再进行加密运算,而后做去盲运算。这样做虽然不能使解密运算时间保持不变,但计算时间被随机化而难于推测解密所进行的指数运算的时间。
3. RSA的参数选择。 为了保证安全,必须仔细选择各参数。 (1)n的确定 n=p×q,p与q必须为强素数。 强素数p的条件:(a)存在两个大素数p1和p2,p1|(p-1), p2|(p+1)。(b)存在4个大素数r1, s1, r2及s2,使r1|(p1-1), s1|(p1+1), r2|(p2-1), s2|(p2+1)。称r1, r2, s1和s2为三级素数; p1和p2为二级素数。
p与q之差要大。若p与q之差很小,则可由n=pq估计(p+q)/2=n1/2,则由((p+q)/2)2-n=((p-q)/2)2。上式右边为小的平方数,可以试验给出p, q的值。 p-1与q-1的最大公因子要小。在惟密文攻击下,设破译者截获密文y=xe mod n。破译者做下述计算: xi=xi-1e mod n=(xe)i mod n
若ei=1 mod (n),则有xi=x mod n,且ei+1=e mod (n),即xi+1=x。若i小,则由此攻击法易得明文x。 由Euler定理知,i=((p-1)(q-1)),若p-1和q-1的最大公因子小,则i值大,如i=(p-1)(q-1)/2,此攻击法难于奏效。 p,q要足够大,以使n分解在计算上不可行。
(2)e的选取原则 (e, (n))=1的条件易于满足,因为两个随机数为互素的概率约为3/5。e小时,加密速度快,Knuth和Shamir曾建议采用e=3。但e太小存在一些问题。若e小,x小,y=xe mod n,当xe<n,则未取模,由y直接开e次方可求x。易遭低指数攻击。 (3)d的选择:e选定后可用Euclidean算法在多项式时间内求出d。d要大于n1/4。d小,签字和解密运算快,这在IC卡中尤为重要(复杂的加密和验证签字可由主机来做)。类似于加密下的情况,d不能太小,否则由已知明文攻击。Wiener给出对小d的系统攻击法,证明了当d长度小于n的1/4时,由连分式算法,可在多项式时间内求出d值。这是否可推广至1/2还不知道。
群 ZN* • 如何证明ZN*是一个群?该群的阶是什么? • 对该群中任意的元素a,我们有 a(N)=1modN。 • RSA 假设是指如果 N 的分解未知时,求模 N 的 e 次方根是困难的。RSA密码体制就基于该假设。 • RSA假设与分解假设等价吗?为什么? • ZN* 是循环群吗?为什么?
三、 ElGamal密码体制 ElGamal [1984,1985] 提出一种基于离散对数问题的双钥密码体制,既可用于加密,又可用于签字。 (1) 参数:令Zp 是一个有p个元素的有限域,p是一个素数,令g是Zp*(Zp中除去0元素)中的一个本原元或其生成元。明文集M为Zp*,密文集C为Zp*×Zp*。 公钥:选定g(g <p的生成元),计算公钥 g mod p 秘密钥: <p (2) 加密:选择随机数kZp-1,且(k,p-1)=1,计算: y1=gk mod p (随机数k被加密) y2=Mk mod p(明文被随机数k和公钥加密) M是发送明文组。密文由y1、y2级连构成,即密文C=y1||y2。
特点:密文由明文和所选随机数k来定,因而是非确定性加密,一般称之为随机化加密,对同一明文由于不同时刻的随机数k不同而给出不同的密文。代价是使数据扩展一倍。 解密:收到密文组C后,计算 M=y2/y1=M k/gk=Mgk/gkmod p 3. 安全性:基于Zp*中有限群上的离散对数的困难性。
有限域的乘法群:Zp* • 该群是否是循环群? • 该群中的元素是否都可以做为生成元?如果不是,有多少个生成元? • 如何快速选择一个生成元? • ElGamal 加密是否是同态加密?
四、 Diffie-Hellman密钥交换 • Input (p,g), p is a prime, g is a generator of Fp* • Output a shared element of Fp*. • Alice sends A=gx mod p to B. • Bob sends B=gy mod p to A. • The shared key is : Key=gx y mod p Disadvantage:Man in the middle attack
Diffie-Hellman密钥交换的攻击 • 中间人攻击 • 1 双方选择素数p以及p的一个原根g(假定O知道) • 2 A选择Xa<p,计算Ya=gXa mod p, AB: Ya • 3 O截获Ya,选Xo,计算Yo=gXo mod p,冒充AB:Yo • 4 B选择Xb<p,计算Yb=gXb mod p, BA: Yb • 5 O截获Yb,冒充BA:Yo • 6 A计算: (Xo)Xa(gXo)XagXoXa mod p • 7 B计算: (Xo)Xb(gXo)XXbgXoXb mod p • 8 O计算: (Ya)XogXaXo mod p, (Yb)XogXbXo mod p • O无法计算出gXaXb mod p • O永远必须实时截获并冒充转发,否则会被发现
A B O K = gXaXo K’ = gXbXo Diffie-Hellman密钥交换的攻击 • 中间人攻击图示
五、 椭圆曲线密码体制 • Eliptic Curve Cryptography ,即ECC是1985年,华盛顿大学的Neal Koblitz和当时在IBM工作的Victor Miller相互独立地提出的,这使得被数学家在代数学和代数几何学领域研究了150多年的椭圆曲线在密码领域中得以发挥重要作用。 • 由于ECC具有的特性,利用ECC不但可以实现高度安全性,且在同等安全强度下,可以用较小的开销(所需的计算量、存储量、带宽、软件和硬件实现的规模等)和时延(加密和签字速度高)实现较高的安全性。 • ECC已经成为公钥密码的主流,成为设计大多数计算能力和集成电路空间受限(如Smart卡)、带宽受限又要求高速实现的安全产品的首选。
Elliptic curve group over real number • y2 = x3 + ax + b, where x, y, a and b are real numbers. • All (x,y) points satisfying above equation along with infinite point O and addition operation, form a group. • Suppose P=(x,y) then define –P=(x,-y).
Addition operation: A Geometric Approach • If P and Q are distinct, and P -Q, define P+Q as follows: • Draw a line through P and Q, then the line will intersect with the curve, the intersected point is denoted as –R, and define P+Q=R. • Define P + (-P) = O • If P=(x,0), then P+P = O , (in fact, a vertical line) • Otherwise, draw a tangent line through p, the intersected point is defined as –R, then P+P =2P =R.