1 / 77

网络与信息安全 密码学基础(二)

网络与信息安全 密码学基础(二). 潘爱民,北京大学计算机研究所 panaimin@icst.pku.edu.cn http://www.icst.pku.edu.cn/InfoSecCourse. 内容. 公钥算法 背包思想 RSA Elliptic curve Diffie-Hellman 密钥交换 消息算法 散列算法 数字签名 加密库 Crypto++. 公钥密码学的历史. 76年 Diffie 和 Hellman 发表了“密码学的新方向”,奠定了公钥密码学的基础 公钥技术是二十世纪最伟大的思想之一 改变了密钥分发的方式

Download Presentation

网络与信息安全 密码学基础(二)

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 网络与信息安全密码学基础(二) 潘爱民,北京大学计算机研究所 panaimin@icst.pku.edu.cn http://www.icst.pku.edu.cn/InfoSecCourse

  2. 内容 • 公钥算法 • 背包思想 • RSA • Elliptic curve • Diffie-Hellman密钥交换 • 消息算法 • 散列算法 • 数字签名 • 加密库Crypto++

  3. 公钥密码学的历史 • 76年Diffie和Hellman发表了“密码学的新方向”,奠定了公钥密码学的基础 • 公钥技术是二十世纪最伟大的思想之一 • 改变了密钥分发的方式 • 可以广泛用于数字签名和身份认证服务 • 78年,RSA算法 • PKI

  4. 公钥算法应用:保密

  5. 公钥算法应用:认证

  6. 基本思想和要求 • 涉及到各方:发送方、接收方、攻击者 • 涉及到数据:公钥、私钥、明文、密文 • 公钥算法的条件: • 产生一对密钥是计算可行的 • 已知公钥和明文,产生密文是计算可行的 • 接收方利用私钥来解密密文是计算可行的 • 对于攻击者,利用公钥来推断私钥是计算不可行的 • 已知公钥和密文,恢复明文是计算不可行的 • (可选)加密和解密的顺序可交换

  7. 如何设计一个公钥算法 • 公钥和私钥必须相关,而且从公钥到私钥不可推断 • 必须要找到一个难题,从一个方向走是容易的,从另一个方向走是困难的 • 如何把这个难题跟加解密结合起来 • 计算可行和不可行的界

  8. 公钥密码学的研究情况 • 与计算复杂性理论密切相关 • 计算复杂性理论可以提供指导 • 但是需求不尽相同 • 计算复杂性通常针对一个孤立的问题进行研究 • 而公钥密码学往往需要考虑一些相关的问题比如,密码分析还需要考虑已知明文、选择明文等相关的情形 • 讨论的情形不同 • 计算复杂性考虑最坏的情形 • 而对于公钥密码学则是不够的 • 一个困难问题必然会导致一个保密性很好的密码系统吗? • 不一定,还需要有好的构造

  9. 背包(knapsack)问题 • 0-1背包问题: • 给定一个正整数S和一个背包向量A=(a1,…,an),其中ai是正整数,求满足方程S = ∑aixi 的二进制向量X=(x1,…,xn)。 • 这是一个NP完全问题,解决这个问题所需要的时间与n呈指数增长 • 背包问题用于公钥密码学 • 做法方法:明文为X,S为密文 • 奥妙在于有两类背包,一类可以在线性时间内求解,另一类则不能 • 把易解的背包问题修改成难解的背包问题 • 公开密钥使用难解的背包问题 • 私钥使用易解的背包问题

  10. 易解的背包问题——超递增背包 • 满足下列条件的背包 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

  11. 转换背包 • 简单背包用作私钥 • 如何产生相应的公钥——转换 • 做法: 选择一个整数 m > ∑ai (i = 1,…,n) 然后选择一个与m互素的整数w,然后ai’ = wai (mod m) (i = 1,…,n) 这里的ai’是伪随机分布的 这样得到的背包是非超递增背包

  12. 基于背包问题的公钥密码系统 ——MH公钥算法 • 加密 • 将明文分为长度为n的块X=(x1,…,xn) • 然后用公钥A’ = (a1’, …, an’),将明文变为密文S S = E(X) = ∑ai’xi • 解密 • 先计算S’ = w-1S mod m • 再求解简单背包问题 S’ = ∑aixi

  13. 背包密码系统的意义 • 是第一个公钥密码系统 • 有较好的理论价值 • 在实践过程中,大多数的背包方案都已被破解,或者证明存在缺陷

  14. RSA算法 • 1977年由Ron Rivest、Adi Shamir和Len Adleman发明,1978年公布 • 是一种块加密算法。 • 明文和密文在0~n-1之间,n是一个正整数 • 应用最广泛的公钥密码算法 • 只在美国申请专利,且已于2000年9月到期

  15. RSA算法描述 • 分组大小为k, 2k < n  2k+1 • 加密: C = Me mod n • 解密: M = Cd mod n = Med mod n • 公钥: KU={e,n}, 私钥: KR={d,n} • 上述算法需要满足以下条件: • 能够找到e,d,n,使得Med mod n = M, 对所有M<n • 计算Me和Cd相对容易 • 从e和n得到d是在计算上不可行的

  16. RSA密钥生成原理 • 令n=pq, pq都是素数,(n)=(p-1)(q-1)是n的Euler数 • Euler定理推论: 若n=pq, pq都是素数, k是任意整数,则 mk(p-1)(q-1)+1 m mod n, 对任意0mn • 只要选择e,d, 满足ed=k(n)+1,即ed  1 mod (n)  d  e-1 mod (n) • 公钥: KU={e,n}, 私钥: KR={d,n}

  17. 数论基础 • Fermat定理: p素数,a是整数且不能被p整除,则: ap-1 1 mod p(证明略) • 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),特别地,若pq且都是素数, (pq)=(p-1)(q-1)

  18. 数论基础(续) • Euler定理: 若a与n为互素的正整数,则a(n) 1 mod n • 推论: 若n=pq, pq都是素数, k是任意整数,则mk(p-1)(q-1)+1 m mod n, 对任意0mn

  19. RSA密钥生成与使用 • 产生密钥对 • 选择两个大素数p,q, pq • 计算n=pq,(n)=(p-1)(q-1) • 选择整数e,使得gcd(e,(n))=1 • 计算d  e-1 mod (n) • 公钥: KU={e,n}, 私钥: KR={d,n} • 使用 • 加密: C = Me mod n • 解密: M = Cd mod n

  20. 计算乘幂 • 计算d=am, m=bkbk-1…b0(二进制表示) d1 for ik downto 0 do d(dd) mod n if bi = 1 then d(da) mod n return d • 原理: M = ((((((bk2+bk-1)2+bk-2)2+bk-3)2+…)2+b0

  21. RSA密钥产生 • 产生两个素数 • 由于n = pq是公开的,所以,为了防止攻击者利用n获得p和q,必须选择足够大的素数p和q • 大素数产生算法 • 选择e或者d,然后求出另一个

  22. 大素数产生 • 素数生成过程: 随机选择一个奇数n(如通过伪随机数发生器) 随机选择a, 使a<n 进行素性测试(例如用Miller-Rabin算法),若n没有通过测试,抛弃n,转到 如果通过了足够次数的测试,认为n是素数,否则转到. • 素数理论: 在N附近,每ln(N)个整数中有一个素数

  23. 素性测试 • Miller-Rabin算法:用来测试一个整数是否是素数 • WITNESS(a,n)  设bkbk-1…b0是(n-1)的二进制表示 d1  for ik downto 0  do xd  d(dd) mod n  if (d=1 & x1 & xn-1) return TRUE  if (bi=1) then d(da) mod n  if (d1) return TRUE else return FALSE • 如果n不是素数,则返回FALSE的概率(即失败概率)小于0.5 • 如返回TRUE,说明n不是素数。 • 不满足an-1=a mod n • 对于x2=1 mod n,除了1和n-1之外,还有别的解

  24. 扩展Euclid算法 • ExtEclid(d,f):求最大公约数或模逆, 假定df  (X1,X2,X3)(1,0,f), (Y1,Y2,Y3)(0,1,d)  if Y3 = 0 then return X3, no inverse  if Y3 = 1 then return 1, inverse is Y2  Q(X3/Y3)的整数部分  (X1,X2,X3)(X1-QY1, X2-QY2, X3-QY3)  (X1,X2,X3)  (Y1,Y2,Y3)  goto  • fX1+dX2=X3, fY1+dY2=Y3 • 若Y3=1,则 fY1+dY2=1 dY2=(-Y1)f+1 dY2  1 mod f Y2 = d-1 mod f

  25. RSA安全性 • 基于数学的攻击 公钥: KU={e,n}, 私钥: KR={d,n}, n=pq • 分解n=pq  (n)=(p-1)(q-1)  d=e-1 mod (n) • 不求出p,q,直接求(n)  d=e-1 mod (n) • 不求出(n),直接计算d • 结论 • 已知的方法至少跟因子分解一样难度 • 尚未发现多项式时间的因子分解算法 • 因子分解的算法已经取得了长足进步 • 措施: 选择足够大的n(1024位以上),并且使得e,d之间相差不太大,也不太小

  26. RSA其他攻击 • 同模攻击 • 两对密钥的模n相同 • 时间攻击 • 利用CPU处理某些特殊的模乘比较慢的规律来确定每一位指数

  27. 原根(primitive root) • Euler定理表明,对两个互素的整数a,n, a(n) 1 mod n • 定义:存在最小正整数m(n) (m|(n)),使得 am 1 mod n 若对某个a,m=(n),则称a是n的一个原根 • 对于素数p,若a是p的一个原根,则: a,a2, …,ap-1关于p两两不同余,从而构成了p的非0剩余类,即与{1,2,…,(p-1)}关于模p等价.

  28. 离散对数 • 若a是素数p的一个原根,则对任意整数b,b0 mod p,存在唯一的整数i, 1i(p-1),使得:bai mod pi称为b以a为基模p的指数(离散对数),记作inda,p(b).容易知道:inda,p(xy)= [inda,p(x)+inda,p(y)] mod (p) inda,p(xr)= [rinda,p(x)] mod (p) • 离散对数的计算:ygx mod p • 已知g,x,p,计算y是容易的 • 已知y,g,p,计算x是困难的

  29. Diffie-Hellman密钥交换 • 允许两个用户可以安全地交换一个秘密信息,用于后续的通讯过程 • 算法的安全性依赖于计算离散对数的难度 • 算法: • 双方选择素数q以及q的一个原根r • A选择X<q,计算XA=rXmod p, AB: XA • B选择Y<q,计算YB=rYmod p, BA: YB • A计算: (YB)X(rY)XrXYmod p • B计算: (XA)Y(rX)YrXYmod p • 双方获得一个共享密钥(rXYmod p) • 素数q以及q的原根r可由一方选择后发给对方

  30. K = rxy A B E A B E K = rxz K = ryz Diffie-Hellman密钥交换的攻击 • replay攻击 • 中间人攻击图示

  31. Diffie-Hellman密钥交换的攻击 • 中间人攻击 • 1 双方选择素数q以及q的一个原根r(假定E知道) • 2 A选择X<q,计算XA=rX mod p, AB: XA • 3 E截获XA,选Z,计算ZE=rZ mod p,冒充AB:ZE • 4 B选择Y<q,计算YB=rY mod p, BA: YB • 5 E截获YB,冒充BA: ZE • 6 A计算: (ZE)X(rZ)XrZX mod p • 7 B计算: (ZE)Y(rZ)YrYZ mod p • 8 E计算: (XA)ZrXZ mod p, (YB)ZrYZ mod p • E无法计算出rXY mod p • E永远必须实时截获并冒充转发,否则会被发现

  32. 椭圆曲线密码介绍 • 1985年Miller,Koblitz 独立提出 y2+axy+by=x3+cx2+dx+e • 曲线上的点连同无穷远点O的集合 • 运算定义: • 若曲线三点在一条直线上,则其和为O • O用作加法的单位:O = -O; P+O = P • 一条竖直线交X轴两点P1、P2,则P1+P2+O=O,于是P1 = -P2 • 如果两个点Q和R的X轴不同,则画一连线,得到第三点P1,则Q+R+P1=O,即Q+R=-P1 • 2倍,一个点Q的两倍是,找到它的切线与曲线的另一个交点S,于是Q+Q=2Q=-S

  33. 椭圆曲线密码示意图

  34. 有限域上椭圆曲线 • 有限域上椭圆曲线 y2x3+ax+b mod p p是奇素数,且4a3+27b20 mod p • 针对所有的0<= x <p,可以求出有效的y,得到曲线上的点(x,y),其中x,y < p。记为Ep(a,b) • Ep(a,b)中也包括O • 加法公式: • P+O=P • 如果P=(x,y),则P+(x,-y)=O,(x,-y)点是P的负点,记为-P。而且(x,-y)也在Ep(a,b)中 • 如果P=(x1,y1),Q=(x2,y2),则 P+Q=(x3,y3)为x3=2-x1-x2 (mod p)y3=(x1-x3)-y1 (mod p)其中,如果PQ,则  = (y2-y1)/(x2-x1) 如果P=Q,则  = (3x12+a)/(2y1)

  35. 椭圆曲线用于加密 • 找到一个难题: • 考虑等式Q=kP,其中Q、P属于Ep(a,b),k<p • 已知k和P,计算Q,是容易的 • 已知Q和P,计算k,是困难的 • 选择Ep(a,b)的元素G,使得G的阶n是一个大素数 • G的阶是指满足nG=O的最小n值 • 秘密选择整数r,计算P=rG,然后 • 公开(p,a,b,G,P),P为公钥 • 保密r • 加密M:先把消息M变换成为Ep(a,b)中一个点Pm • 然后,选择随机数k,计算密文Cm={kG,Pm+kP) • 如果k使得kG或者kP为O,则要重新选择k. • 解密Cm: (Pm+kP)-r(kG)=Pm+krG-rkG=Pm • 加密信息有扩张

  36. 椭圆曲线密码的安全性 • 难点: 从P和kP获得k • 对椭圆曲线研究的时间短 • 椭圆曲线要求密钥长度短,速度快 • 对比: ECC RSA*Pollard rho分析方法

  37. 消息认证 • 在网络通信中,有一些针对消息内容的攻击方法 • 伪造消息 • 窜改消息内容 • 改变消息顺序 • 消息重放或者延迟 • 消息认证:对收到的消息进行验证,证明确实是来自声称的发送方,并且没有被修改过。 • 如果在消息中加入时间及顺序信息,则可以完成对时间和顺序的认证

  38. 消息认证的三种方式 • Message encryption:用整个消息的密文作为认证标识 • 接收方必须能够识别错误 • MAC:一个公开函数,加上一个密钥产生一个固定长度的值作为认证标识 • Hash function:一个公开函数将任意长度的消息映射到一个固定长度的散列值,作为认证标识

  39. Message Authentication Code • 使用一个双方共享的秘密密钥生成一个固定大小的小数据块,并加入到消息中,称MAC,或密码校验和(cryptographic checksum) • 用户A和用户B,共享密钥K,对于消息M, MAC=CK(M) • 如果接收方计算的MAC与收到的MAC匹配,则 • 接收者可以确信消息M未被改变 • 接收者可以确信消息来自所声称的发送者 • 如果消息中含有序列号,则可以保证正确的消息顺序 • MAC函数类似于加密函数,但不需要可逆性。因此在数学上比加密算法被攻击的弱点要少

  40. MAC应用方式 M M || C C Compare Ck(M) K K

  41. 关于MAC算法 • MAC不等于数字签名 • 因为通讯双方共享同一个密钥 • MAC有固定的长度 • MAC结构的重要性,例如,密钥足够长+加密算法足够好安全 • M=(X1,X2,…,Xt) • 对M产生校验核M=X1X2…Xt • MAC = EK(M) • 攻击者选择M=(Y1,Y2,…,Yt-1,Yt),使得Yt满足: Yt= Y1Y2…Yt-1M • 于是M=MEK(M)=EK(M) CK(M)=CK(M) • 所以,尽管攻击者不知道K,仍然可以伪造消息M

  42. MAC算法的要求 • 条件: • 攻击者知道MAC函数但不知道密钥K • 要求: • 已知M和CK(M),要想构造M使得CK(M)=CK(M)在计算上不可行(计算上无碰撞) • CK(M)均匀分布:随机选择M和M, Pr[CK(M) = CK(M)]=2-|MAC| • f是M的一个变换(例如对某些位取反),那么, Pr[CK(M)= CK(f(M))]=2-|MAC|

  43. MAC based on DES • 算法: • M=(X1,X2,…,Xt) • M1=EK(X1) • Mj+1=EK(Xj+1Mj), 1j<t • MAC= Mt • ANSI标准(X9.17) • 即为CBC模式结构,初始向量为0 • 该方法适用于其他加密算法

  44. Hash Function • MAC需要对全部数据进行加密 • MAC速度慢 • Hash是一种直接产生认证码的方法 • Hash函数: h=H(x), 要求: • 可作用于任何尺寸数据且均产生定长输出 • H(x)能够快速计算 • 单向性: 给定h,找到x使h=H(x)在计算上不可行 • Weak Collision Resistence(WCR):给定x,找到yx使H(x)=H(y)在计算上不可行 • Strong Collision Resistence(SCR): 找到yx使H(x)=H(y)在计算上不可行

  45. 生日攻击理论基础 • 理论基础 • 若k1.182m/22m/2, 则k个在[1,2m]的随机数中有两个数相等的概率不低于0.5 • 若k0.83n1/2,两个在[1,n]的k个随机数集合有交集的概率不小于0.5 • 因此,当Hash算法选用N位的Hash值时,两组消息(选择k=N/2)中有一对消息产生相同Hash值的概率超过0.5

  46. 生日攻击例子 • Letter1: This Letter is I am writing you to to you Mr. -- to introduce P. -- . . . . . . Alfred Barton, • Letter2: . . . . . . Letter2与Letter1中的信含义不同。各自组合出2k封信件,然后在两个组中找到两封hash值相同的信! 对策:Hash值足够长,64-〉128-〉160-〉256

  47. hash函数通用模型 • 由Merkle于1989年提出 • 几乎被所有hash算法采用 • 具体做法: • 把原始消息M分成一些固定长度的块Yi • 最后一块padding并使其包含消息M的长度 • 设定初始值CV0 • 压缩函数f, CVi=f(CVi-1,Yi-1) • 最后一个CVi为hash值

  48. hash函数模型图 Y1 YL-1 Y0 b b b n n f f f n n n CVL IV= CV0 CV1 CVL-1 IV = initial value 初始值 CV = chaining value 链接值 Yi = ith input block (第i 个输入数据块) f = compression algorithm (压缩算法) n = length of hash code (散列码的长度) b = length of input block(输入块的长度)

  49. MD5 算法 • 作者:Ron Rivest • 算法 • 输入:任意长度的消息 • 输出:128位消息摘要 • 处理:以512位输入数据块为单位

  50. MD5: 示意图

More Related