找回密码
 注册

QQ登录

只需一步,快速开始

密码知识

[复制链接]
发表于 2011-1-12 20:57:37 | 显示全部楼层 |阅读模式
谈起密码算法,有的人会觉得陌生,但一提起PGP,大多数网上朋友都很熟悉, 它是一个工具软件,向认证中心注册后就可以用它对文件进行加解密或数字签名,PGP所采用的是RSA算法,以后我们会对它展开讨论。密码算法的目的是为了保护信息的保密性、完整性和安全性,简单地说就是信息的防伪造与防窃取,这一点在网上付费系统中特别有意义。密码学的鼻祖可以说是信息论的创始人香农,他提出了一些概念和基本理论,论证了只有一种密码算法是理论上不可解的,那就是 One Time Padding,这种算法要求采用一个随机的二进制序列作为密钥,与待加密的二进制序列按位异或,其中密钥的长度不小于待加密的二进制序列的长度,而且一个密钥只能使用一次。其它算法都是理论上可解的。如DES算法,其密钥实际长度是56比特,作2^56次穷举,就肯定能找到加密使用的密钥。所以采用的密码算法做到事实上不可解就可以了,当一个密码算法已知的破解算法的时间复杂度是指数级时,称该算法为事实上不可解的。顺便说
  q6 V( \; h0 t6 f+ E+ s一下,据报道国外有人只用七个半小时成功破解了DES算法。密码学在不断发展变化之中,因为人类的计算能力也像摩尔定律提到的一样飞速发展。作为第一部分,首先谈一下密码算法的概念。
% |( a7 C! ~  x, a
9 k) T6 |  S+ k2 Z$ o5 `1 ^* w  d" O密码算法可以看作是一个复杂的函数变换,C = F M, Key ),C代表密文,即加密后得到的字符序列,M代表明文即待加密的字符序列,Key表示密钥,是秘密选定的一个字符序列。密码学的一个原则是“一切秘密寓于密钥之中”,算法可以公开。当加密完成后,可以将密文通过不安全渠道送给收信人,只有拥有解密密钥的收信人可以对密文进行解密即反变换得到明文,密钥的传递必须通过安全渠道。目前流行的密码算法主要有DES,RSA,IDEA,DSA等,还有新近的Liu氏算法,是由华人刘尊全发明的。密码算法可分为传统密码算法和现代密码算法,传统密码算法的特点是加密和解密必须是同一密钥,如DES和IDEA等;现代密码算法将加密密钥与解密密钥区分开来,且由加密密钥事实上求不出解密密钥。这样一个实体只需公开其加密密钥(称公钥,解密密钥称私钥)即可,实体之间就可以进行秘密通信,而不象传统密码算法似的在通信之前先得秘密传递密钥,其中妙处一想便知。因此传统密码算法又称对称密码算法(Symmetric Cryptographic Algorithms ),现代密码算法称非对称密码算法或公钥密码算法( Public-Key Cryptographic Algorithms ),是由Diffie 和Hellman首先在1976年的美国国家计算机会议上提出这一概念的。按照加密时对明文的处理方式,密码算法又可分为分组密码算法和序列密码算法。分组密码算法是把密文分成等长的组分别加密,序列密码算法是一个比特一个比特地处理,用已知的密钥随机序列与明文按位异或。当然当分组长度为1时,二者混为一谈。这些算法以后我们都会具体讨论。: J8 f- a. F6 c- M% R& h7 u# Q
  {) G/ a7 l4 o7 {
RSA算法& k. i/ ?, D9 k  d* f' F, z
% C! I& z" F. d
  , R0 U1 ?7 B: @/ j7 M% ^/ [
1978年就出现了这种算法,它是第一个既能用于数据加密也能用于数字签名的算法。它易于理解和操作,也很流行。算法的名字以发明者的名字命名:Ron Rivest, AdiShamir 和Leonard Adleman。但RSA的安全性一直未能得到理论上的证明。& D0 k+ e+ @1 P9 J/ \7 C. u

, r4 @2 b! ?+ o  ]8 w9 x' G5 KRSA的安全性依赖于大数分解。公钥和私钥都是两个大素数( 大于 100个十进制位)的函数。据猜测,从一个密钥和密文推断出明文的难度等同于分解两个大素数的积。
) Q6 _! u/ E, y2 K9 L  S' k+ N$ f! Q5 A* N6 y) f
密钥对的产生。选择两个大素数,p 和q 。计算: 2 @8 d5 p9 H! M8 H: r+ M

; ]5 C5 M8 b+ ^* ?; Y0 Xn = p * q
) G# z/ _9 t! G, N2 j" A
; ?2 a( Y+ d: U: Y% Y# Z然后随机选择加密密钥e,要求 e 和 ( p - 1 ) * ( q - 1 ) 互质。最后,利用Euclid 算法计算解密密钥d, 满足 2 ?1 Z! J. L- k2 x8 E/ P
4 E1 {; i0 n5 F  K; G
e * d = 1 ( mod ( p - 1 ) * ( q - 1 ) )
; u5 t) U- Y* z; e8 x; \  K: m% j) q0 b/ @2 q& o2 C
其中n和d也要互质。数e和n是公钥,d是私钥。两个素数p和q不再需要,应该丢弃,不要让任何人知道。
( R5 L- O& M  G6 q6 m; h
4 ]4 q. x8 `: ]& e) Y/ L加密信息 m(二进制表示)时,首先把m分成等长数据块 m1 ,m2,..., mi ,块长s,其中 2^s <= n, s 尽可能的大。对应的密文是:
$ R& {9 I" s- X2 s6 a6 l* I: n% c' k! C# k3 X
ci = mi^e ( mod n ) ( a )
) v( L  f3 Y8 `4 o2 o+ ]8 W/ ^) k" }1 [, c6 }3 z" I* I
解密时作如下计算:
* \4 s: q3 G8 Y' n  N. L
( k7 m  q8 K2 ?$ A! g- W# t0 R+ |7 A5 @mi = ci^d ( mod n ) ( b )
8 Z+ g. d# v: y# D) _6 a7 \* @
& G  E- j* l% l; T0 W& _RSA 可用于数字签名,方案是用 ( a ) 式签名, ( b )式验证。具体操作时考虑到安全性和 m信息量较大等因素,一般是先作 HASH 运算。
8 f/ w- U4 @* I+ z# G0 D7 k3 o4 H* }& W3 e2 B3 e
RSA 的安全性。- T- C& m; J  A% ]# e
RSA的安全性依赖于大数分解,但是否等同于大数分解一直未能得到理论上的证明,因为没有证明破解RSA就一定需要作大数分解。假设存在一种无须分解大数的算法,那它肯定可以修改成为大数分解算法。目前, RSA的一些变种算法已被证明等价于大数分解。不管怎样,分解n是最显然的攻击方法。现在,人们已能分解140多个十进制位的大素数。因此,模数n必须选大一些,因具体适用情况而定。 7 A- Z( t2 `! H- N& m

1 J9 t. x, V" R$ L. I/ YRSA的速度。
. c7 f: C- N6 u由于进行的都是大数计算,使得RSA最快的情况也比DES慢上100倍,无论是软件还是硬件实现。速度一直是RSA的缺陷。一般来说只用于少量数据加密。
+ n4 j0 W* _) z  a; |- |- N- Y' x# G* [5 K8 R  Z* ?. x% \7 P/ v# ?9 w
RSA的选择密文攻击。
+ w3 T& A, R( e  r( b/ J0 cRSA在选择密文攻击面前很脆弱。一般攻击者是将某一信息作一下伪装(Blind),让拥有私钥的实体签署。然后,经过计算就可得到它所想要的信息。实际上,攻击利用的都是同一个弱点,即存在这样一个事实:乘幂保留了输入的乘法结构:6 g/ |, q* O) N- f/ O( Y
2 ~+ B4 x, u( A. e0 U3 ?8 I+ K8 ^) S
( XM )^d = X^d *M^d mod n/ J& H$ q# y2 f" `, N
5 P1 C1 z  h6 _, o+ g+ `1 a4 E
前面已经提到,这个固有的问题来自于公钥密码系统的最有用的特征--每个人都能使用公钥。但从算法上无法解决这一问题,主要措施有两条:一条是采用好的公钥协议,保证工作过程中实体不对其他实体任意产生的信息解密,不对自己一无所知的信息签名;另一条是决不对陌生人送来的随机文档签名,签名时首先使用One-Way HashFunction2 o, H/ ]9 I, K! F8 j( B( W
对文档作HASH处理,或同时使用不同的签名算法。在中提到了几种不同类型的攻击方法。   8 |: |9 Z' @$ j( r" U8 \( ?

; ~3 S- G1 D7 Q( p8 E: v- FRSA的公共模数攻击。
3 _9 r5 w8 E5 p+ z0 N若系统中共有一个模数,只是不同的人拥有不同的e和d,系统将是危险的。最普遍的情况是同一信息用不同的公钥加密,这些公钥共模而且互质,那末该信息无需私钥就可得到恢复。8 N. j" O) @4 t$ |
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|本地广告联系: QQ:905790666 TEL:13176190456|Archiver|手机版|小黑屋|汶上信息港 ( 鲁ICP备19052200号-1 )

GMT+8, 2026-6-14 22:08

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表