930 likes | 1.15k Views
网络安全技术 郑秋生 中原工学院 Zhongyuan University of Technology 计算机学院 School of Computer Science. http://www.cs.zzti.edu.cn zqs@zzti.edu.cn. Feb. 20, 2006 网络工程专业 2003 级. 网络安全技术. 第二章:密码技术 --- 公钥加密部分. 公开密钥加密. 一对密钥 公钥公开. 非对称加密部分的主要内容. 随机数的产生 // 密钥对的产生 密钥分配 公钥密码算法
E N D
网络安全技术郑秋生中原工学院Zhongyuan University of Technology计算机学院School of Computer Science http://www.cs.zzti.edu.cnzqs@zzti.edu.cn Feb. 20, 2006 网络工程专业 2003级
网络安全技术 第二章:密码技术 ---公钥加密部分
公开密钥加密 • 一对密钥 • 公钥公开
非对称加密部分的主要内容 • 随机数的产生 //密钥对的产生 • 密钥分配 • 公钥密码算法 • Diffie-Hellman密钥交换算法 • 背包算法 • RSA算法 • EIGamal算法 • 椭圆曲线密码算法ECC
随机数(Random number) • 随机数的基本特点 • 随机性 • 均匀分布 • 独立性,难以测试,只能测试足够独立 • 不可预测性 • 其特点决定了适合做密钥。 • 随机数用途,重要的角色,例如 • 会话密钥 //对称 • RSA公钥算法 //非对称 • 认证过程中,避免重放攻击
Random number generation • 真正的随机数难以产生 • 伪随机数 • 计算机语言中提供的随机函数的问题 • 随机数在加密算法中的重要性 • 可能是密钥 • 可能是密钥产生的基础
基于密码的随机数产生几种方法 1、线性同余法 Xn+1 = (aXn+c) mod m m 模数 m>0 231 a 乘数 0a<m a=75=16807 c 增量 0 c<m X0种子 0 X0<m 线性同余伪随机数缺乏不可预测性 2、循环加密 3、DES输出反馈方式 4、ANSI X.917 伪随机数产生器 5、Blum Blum Shub (BBS) 产生器
ANSI X9.17 Ri=EDEK1,K2(ViEDEK1,K2(DTi)) Vi+1= EDEK1,K2(RiEDEK1,K2(DTi))
BBS ( Blum Blum Shub)伪随机数产生器 • (1)首先选择两个大素数p,q pq 3(mod4) • (2)选择s与n互素 • 通过了“下一位”测试(next-bit test) • 不存在多项式时间的算法使得在已知前k位的情况下预测出第k+1位的概率大于0.5 • BBS的安全性同样基于分解n的难度
对称加密情形下的密钥分发 和密钥管理的问题分析
密钥的分发(Key Distribution) • 保密通信双方需共享密钥 • 共享密钥要经常更换//几种可能方式 • A选择密钥并手工传递给B • 第三方C选择密钥分别手工传递给A,B • 用A,B原有共享密钥传送新密钥 • 与A,B分别有共享密钥的第三方C传送新密钥给A和/或B • N个用户集需要N(N-1)/2个共享密钥 • //太多的Key? • 解决方案:密钥分发中心KDC (Key Distribution Center)
Key Distribution Center KDC应用于对称加密情形 • 每个用户与KDC有共享密钥(Master Key) • N个用户,KDC只需分发N个Master Key • 两个用户间通信用会话密钥(Session Key) • 会话密钥是临时的、可变的 • 使用共享密钥加密会话密钥,分发之 • 用户必须信任KDC • KDC能解密用户间通信的内容 • //他产生、分发的会话密钥
对称加密问题的提出 (1)密钥管理量的困难 //无KDC 传统密钥管理:两两分别用一对密钥时,则n个用户需要C(n,2)=n(n-1)/2个密钥,当用户量增大时,密钥空间急剧增大。如: n=100 时, C(100,2)=4,995 n=5000时, C(5000,2)=12,497,500 (2)建立KDC权威、信任机构 (3)数字签名的问题 传统加密算法无法实现抗抵赖的需求。
公钥加密的起源 • 公钥密码又称为双钥密码和非对称密码,是1976年由Diffie和Hellman在其“密码学新方向”一文中提出的,见划时代的文献: W.Diffie and M.E.Hellman, New Directrions in Cryptography, IEEE Transaction on Information Theory, V.IT-22.No.6, Nov 1976, PP.644-654 • RSA公钥算法 • 是由Rivest,Shamir和Adleman在1978年提出来的, 见 Communitions of the ACM. Vol.21.No.2. Feb. 1978, PP.120-126
公开密钥密码的重要特性 • 加密与解密由不同的密钥完成 加密: XY: Y = EKU(X) //Public Key 解密: YX: X = DKR(Y) = DKR(EKU(X)) //Private Key • 知道加密算法(公开),从加密密钥(公钥、公开)得到解密密钥(私钥、保密)在计算上是不可行的 • 两个密钥中任何一个都可以用作加密而另一个用作解密 (不是必须的) X = DKR(EKU(X)) = EKU(DKR(X))
用公钥密码实现加密 • 用户产生自己的密钥对(KU,KR) • Public //KU • Private //KR • 公钥KU公开,私钥KR保密 • All B: //加密 • Y=EKUb(X) • B: //解密 • DKRb(Y)= DKRb(EKUb(X))=X
用公钥密码实现鉴别 • 条件: • 两个密钥中任何一个都可以用作加密而另一个用作解密 • 鉴别: • AALL: //Only A • Y=DKRa(X) • ALL: //鉴别、验证 A ? • EKUa(Y)=EKUa(DKRa(X))=X • 鉴别+保密: • AB: • Z= EKUb(DKRa(X)) • B: • EKUa(DKRb(Z))=X
公钥密钥的应用范围 • 加密/解密 • 数字签名(身份鉴别) • 密钥交换 //会话密钥,数字信封
公钥加密的基本思想和要求 • 涉及到各方: • 发送方、接收方、攻击者 • 涉及到数据: • 公钥、私钥、明文、密文 • 公钥算法的条件: • 产生一对密钥是计算可行的 • 已知公钥和明文,产生密文是计算可行的 • 接收方利用私钥来解密密文是计算可行的 • 对于攻击者,利用公钥来推断私钥是计算不可行的 • 已知公钥和密文,恢复明文或得到私钥是计算不可行的 • (可选)加密和解密的顺序可交换 • // • 如何产生密钥对,设计算法?满足以上条件????
陷门单向函数trap-door one way function 单向陷门函数是满足下列条件的函数f: //一个Key (1)给定x,计算y=fk(x)是容易的; (2)给定y, 计算x使x=fk-1(y)是不可行的。 (3)存在k,已知k 时,对给定的任何y,若相应的x存在,则计算x使fk-1(x)是容易的。
公钥密码基于的数学难题 1、背包问题 2、大整数分解问题(The Integer Factorization Problem,RSA体制) 3、有限域的乘法群上的离散对数问题 (The Discrete Logarithm Problem, ElGamal体制) 4、椭圆曲线上的离散对数问题(The Elliptic Curve Discrete Logarithm Problem, 类比的ElGamal体制)
Fermat定理 • Fermat定理: p素数,a是整数且不能被p整除,则: ap-1 1 mod p • 证明: 考虑集合{1,2,…,p-1},对每个数乘以a,得到集合{a mod p,2a mod p,…,(p-1)a mod p},对于p,后者两两不同且都在1与p-1之间,因此两个集合相同,于是: • (p-1)! = 12…(p-1) • [(a mod p)(2a mod p)…((p-1)a mod p)] mod p • [a2a…(p-1)a] mod p • [ap-1(p-1)!] mod p • 注意到(p-1)!与p互素,因此定理成立. • 推论: p素数,a是任意整数,则: ap a mod p
Euler数 • Euler数(n)定义为小于n且与n互素的正整数个数 • p是素数,(p)=p-1 • 若n的因子分解为n=Piai, ai>0,Pi互不相同,则 (n)= Piai(1-1/Pi) • 若gcd(m,n)=1,则(mn)=(m)(n),特别地,若pq且都是素数, (pq)=(p-1)(q-1) • Euler定理:若a与n为互素的正整数,则: • a(n) 1 mod n
Euler数和Euler定理 欧拉定理:a (n) ≡1 (mod n) 其中:① a对n必须是互素的; ② (n) =n(1-1/p1)(1-1/p2)…(1-1/pn) p1,p2,…,pn是r的素数因子 (n) 是n的欧拉函数,它确定1,2,…,n中有多少个是与n互素的。 例如:20=2·2·5,有两个素数2和5,这样, (20) =20(1-1/2)(1-1/5)=8 即20中有8个整数与20是互素的,即它们没有2或5为因子: 1, 3, 7, 9, 11, 13, 17, 19
Euler定理 • a(n) 1 mod n • 证明: R={x1,x2,…,x(n)}为所有小于n且与n互素的正整数,考虑集合 S={(ax1mod n), (ax2mod n),…, (ax(n) mod n)} (aximod n)与n互素 (aximod n)两两不等: (aximod n) = (axjmod n) ximod n = xjmod n S有(n)个元素 故S也是所有小于n且与n互素的正整数,因此S=R,从而 xi=(aximod n)((axi)) mod n (a(n) xi) mod n 注意到xi与n互素,从而得到结论.
Euler定理推论 • 推论: 若n=pq, pq都是素数, k是任意整数,则 • mk(p-1)(q-1)+1 m mod n, 对任意0mn • 证明:若m=0或n,结论是显然的;若m与n互素,注意到(n)=(p-1)(q-1),由Euler定理可得到结论;否则m必定是p或者q的倍数,不妨设m=sp,则0<s<q为正整数,m与q互素,由Euler定理得到: m(q) 1 mod q (m(q))k(p) 1 mod q mk(p-1)(q-1)= tq+1 t是整数 等式两边乘以m=sp,得到: mk(p-1)(q-1)+1 = (tq+1)sp = tspq+sp m mod n
中国剩余定理 中国剩余定理:设自然数m1,m2,…mr两两互素,并记N=m1m2…mr,则同余方程组 在模N同余的意义下有唯一解。
证明:考虑方程组, (1<=i<=r) 由于诸mi(1<=i<=r)两两互素,这个方程组作变量替换,令x=(N/mi)*y,方程组等价于解同余方程: (N/mi)y≡1(mod mi)
若要得到特解yi,只要令 xi=(N/mi)yi 则方程组的解为 x0=b1x1+ b2x2+ …+ brxr (mod N) 模N意义下唯一。
原根(primitive root) • Euler定理表明,对两个互素的整数a,n, • a(n) 1 mod n • 定义: • 素数p的原根定义:如果a是素数p的原根,则数 • a mod p, a2 mod p, … , ap-1 mod p • 是不同的并且包含1到p-1的整数的某种排列。 • 对任意的整数b,我们可以找到唯一的幂i满足 • b=ai mod p 0<=i<=(p-1)
离散对数 • 若a是素数p的一个原根,则对任意整数b,b0 mod p,存在唯一的整数i, 1i(p-1),使得: bai mod pi称为b以a为基模p的指数(离散对数),记作inda,p(b).容易知道: inda,p(xy)= [inda,p(x)+inda,p(y)] mod (p) inda,p(xr)= [rinda,p(x)] mod (p) • 离散对数的计算: ygx mod p • 已知g,x,p,计算y是容易的 • 已知y,g,p,计算x是困难的
经典例子--非对称加密算法 • Diffie-Hellman密钥交换算法 • 背包算法 • RSA算法 • EIGamal算法 • 椭圆曲线密码算法ECC
Diffie-Hellman密钥交换 • 允许两个用户可以安全地交换一个秘密信息,用于后续的通讯过程 • 算法的安全性依赖于计算离散对数的难度 • 素数p的原始根定义:如果a是素数p的原始根,则数 • a mod p, a2 mod p, … , ap-1 mod p • 是不同的并且包含1到p-1的整数的某种排列。 • 对任意的整数b,我们可以找到唯一的幂i满足 • b=ai mod p 0<=i<=(p-1) • i 在离散对数算法中称为以a为基的指数 mod p。记为inda,p(b)
Diffie-Hellman密钥交换 • 算法: • 双方选择素数p以及p的一个原根a • 用户A选择一个随机数Xa < p,计算 Ya=aXa mod p • 用户B选择一个随机数Xb < p,计算 Yb=aXb mod p • 每一方保密X值,而将Y值交换给对方 • 用户A计算出 K=YbXa mod p • 用户B计算出 K=YaXb mod p • 双方获得一个共享密钥(aXaXbmod p) • 素数p以及p的原根a可由一方选择后发给对方
User A User B Generate random Xa < p Calculate Ya=aXa mod p Generate random Xb < p Calculate Yb=aXb mod p Ya Yb Calculate K=(Yb)Xa mod p Calculate K=(Ya)Xb mod p Diffie-Hellman Key Exchange
K = aXaXb A B O A B O K = aXaXo K = aXbXo Diffie-Hellman密钥交换的攻击 • replay攻击 • 中间人攻击图示
Diffie-Hellman密钥交换的攻击 • 中间人攻击 • 1 双方选择素数p以及p的一个原根a(假定O知道) • 2 A选择Xa<p,计算Ya=aXa mod p, AB: Ya • 3 O截获Ya,选Xo,计算Yo=aXo mod p,冒充AB:Yo • 4 B选择Xb<p,计算Yb=aXb mod p, BA: Yb • 5 O截获Yb,冒充BA:Yo • 6 A计算: (Xo)Xa(aXo)XaaXoXa mod p • 7 B计算: (Xo)Xb(aXo)XXbaXoXb mod p • 8 O计算: (Ya)XoaXaXo mod p, (Yb)XoaXbXo mod p • O无法计算出aXaXb mod p • O永远必须实时截获并冒充转发,否则会被发现
经典例子 • Diffie-Hellman密钥交换算法 • 背包算法 • RSA算法 • EIGamal算法 • 椭圆曲线密码算法ECC
背包问题 • 背包问题描述:给定重量分别为a1,a2,…an的n个物品,装入一个背包中,要求重量等于一个给定值那么,究竟是那些物品? • 0-1背包问题: • 给定一个正整数S和一个背包向量A=(a1,…,an),其中ai是正整数,求满足方程S = ∑aixi 的二进制向量X=(x1,…,xn)。 • 这是一个NP完全问题,解决这个问题所需要的时间与n呈指数增长
背包问题用于公钥密码学 • 做法:明文为X,S为密文 • 奥妙在于有两类背包,一类可以在线性时间内求解,另一类则不能 • 把易解的背包问题修改成难解的背包问题 • 公开密钥使用难解的背包问题 • 私钥使用易解的背包问题
易解的背包问题——超递增背包 • 满足下列条件的背包 • ai > ∑aj (j = 1,…,i-1) • 这样的背包也被称为简单背包 • 求解 • 从最大的ai开始,如果S大于这个数,则减去ai, 记xi为1,否则记xi为0 • 如此下去,直到最小的ai • 例如背包序列{2, 3, 6, 13, 27, 52} • 求解70的背包 • 结果为{2, 3, 13, 52} • 所以,密文70对应的明文为110101
转换背包 • 简单背包用作私钥 • 如何产生相应的公钥——转换 • 做法: • 选择一个整数 m > ∑ai (i = 1,…,n) • 然后选择一个与m互素的整数w,然后ai' = wai (mod m) (i = 1,…,n) • 这里的ai '是伪随机分布的 • 这样得到的背包是非超递增背包
基于背包问题的公钥密码系统——MH公钥算法 • 加密 • 将明文分为长度为n的块X=(x1,…,xn) • 然后用公钥A ' = (a1 ', …, an '),将明文变为密文S = E(X) = ∑ai 'xi • 解密 • 先计算S ' = w-1S mod m • 再求解简单背包问题 • S ' = ∑aixi
Eaxmple-从私钥计算公钥 • 私钥{2,3,6,13,27,52} • N=31, m=105 2*31 mod 105= 62 3*31 mod 105=93 6*31 mod 105=81 13*31 mod 105= 88 27*31 mod 105=102 52831 mod 105= 37 • 公钥{62,93,81,88,102,37}
Eaxmple-加密 • 消息=011000 110101 101110 • 明文: 0 1 1 0 0 0 • 背包: 62 93 81 88 102 37 • 密文:93+81=174 • 011000 对应于93+81=174 • 110101对应于62+93+88+37=280 • 101110对应于62+81+88+102=333
Eaxmple-解密 • 解密者知道{2,3,6,13,27,52}, n,m • 计算n(n-1)=1mod(m) • n-1=61 • 174*61 mod 105=9=3+6, 对应于 011000 • 280*61 mod 105=70=2+3=13+52,对应于110101 • 333*61 mod 105=48=2+6+13+27, 对应于101110 • 因此, 消息=011000 110101 101110