密码算法


密码算法

文章插图
密码算法【密码算法】密码算法是用于加密和解密的数学函式,密码算法是密码协定的基础 。现行的密码算法主要包括序列密码、分组密码、公钥密码、散列函式等,用于保证信息的安全,提供鉴别、完整性、抗抵赖等服务 。假设我们想通过网路传送讯息P(P通常是明文数据包),使用密码算法隐藏P的内容可将P转化成密文,这个转化过程就叫做加密 。与明文P相对应的密文C的得到依靠一个附加的参数K,称为密钥 。密文C的接收方为恢复明文,需要另一个密钥K-1完成反方向的运算 。这个反向的过程称为解密 。
基本介绍中文名:密码算法
外文名:cryptographic algorithm
类别:数学函式
分类:序列密码、分组密码、公钥密码
加密技术一个密码系统的安全性只在于密钥的保密性,而不在算法的保密性 。对纯数据的加密的确是这样 。对于你不愿意让他看到这些数据(数据的明文)的人,用可靠的加密算法,只要破解者不知道被加密数据的密码,他就不可解读这些数据 。但是,软体的加密不同于数据的加密,它只能是“隐藏” 。不管你愿意不愿意让他(合法用户,或 Cracker)看见这些数据(软体的明文),软体最终总要在机器上运行,对机器,它就必须是明文 。既然机器可以“看见”这些明文,那幺 Cracker,通过一些技术,也可以看到这些明文 。于是,从理论上,任何软体加密技术都可以破解 。只是破解的难度不同而已 。有的要让最高明的 Cracker 忙上几个月,有的可能不费吹灰之力,就被破解了 。密码学相关概念(1) 传送者和接收者假设传送者想传送讯息给接收者,且想安全地传送信息:她想确信偷听者不能阅读传送的讯息 。(2) 讯息和加密讯息被称为明文 。用某种方法伪装讯息以隐藏它的内容的过程称为加密,加了密的讯息称为密文,而把密文转变为明文的过程称为解密 。明文用M(讯息)或P(明文)表示,它可能是比特流(文本档案、点阵图、数位化的语音流或数位化的视频图像) 。至于涉及到计算机,P是简单的二进制数据 。明文可被传送或存储,无论在哪种情况,M指待加密的讯息 。密文用C表示,它也是二进制数据,有时和M一样大,有时稍大(通过压缩和加密的结合,C有可能比P小些 。然而,单单加密通常达不到这一点) 。加密函式E作用于M得到密文C,用数学表示为:E(M)=C.相反地,解密函式D作用于C产生MD(C)=M.先加密后再解密讯息,原始的明文将恢复出来,下面的等式必须成立:D(E(M))=M(3) 鉴别、完整性和抗抵赖除了提供机密性外,密码学通常有其它的作用:.(a) 鉴别讯息的接收者应该能够确认讯息的来源;入侵者不可能伪装成他人 。(b) 完整性检验讯息的接收者应该能够验证在传送过程中讯息没有被修改;入侵者不可能用假讯息代替合法讯息 。(c) 抗抵赖传送者事后不可能虚假地否认他传送的讯息 。(4) 算法和密钥密码算法也叫密码,是用于加密和解密的数学函式 。(通常情况下,有两个相关的函式:一个用作加密,另一个用作解密)如果算法的保密性是基于保持算法的秘密,这种算法称为受限制的算法 。受限制的算法具有历史意义,但按现在的标準,它们的保密性已远远不够 。大的或经常变换的用户组织不能使用它们,因为每有一个用户离开这个组织,其它的用户就必须改换另外不同的算法 。如果有人无意暴露了这个秘密,所有人都必须改变他们的算法 。但是,受限制的密码算法不可能进行质量控制或标準化 。每个用户组织必须有他们自己的唯一算法 。这样的组织不可能採用流行的硬体或软体产品 。但窃听者却可以买到这些流行产品并学习算法,于是用户不得不自己编写算法并予以实现,如果这个组织中没有好的密码学家,那幺他们就无法知道他们是否拥有安全的算法 。儘管有这些主要缺陷,受限制的算法对低密级的套用来说还是很流行的,用户或者没有认识到或者不在乎他们系统中内在的问题 。现代密码学用密钥解决了这个问题,密钥用K表示 。K可以是很多数值里的任意值 。密钥K的可能值的範围叫做密钥空间 。加密和解密运算都使用这个密钥(即运算都依赖于密钥,并用K作为下标表示),这样,加/解密函式现在变成:EK(M)=CDK(C)=M.这些函式具有下面的特性:DK(EK(M))=M.有些算法使用不同的加密密钥和解密密钥,也就是说加密密钥K1与相应的解密密钥K2不同,在这种情况下:EK1(M)=CDK2(C)=MDK2 (EK1(M))=M所有这些算法的安全性都基于密钥的安全性;而不是基于算法的细节的安全性 。这就意味着算法可以公开,也可以被分析,可以大量生产使用算法的产品,即使偷听者知道你的算法也没有关係;如果他不知道你使用的具体密钥,他就不可能阅读你的讯息 。密码系统由算法、以及所有可能的明文、密文和密钥组成的 。基于密钥的算法通常有两类:对称算法和公开密钥算法 。下面将分别介绍:对称密码算法对称算法有时又叫传统密码算法,就是加密密钥能够从解密密钥中推算出来,反过来也成立 。在大多数对称算法中,加/解密密钥是相同的 。这些算法也叫秘密密钥算法或单密钥算法,它要求传送者和接收者在安全通信之前,商定一个密钥 。对称算法的安全性依赖于密钥,泄漏密钥就意味着任何人都能对讯息进行加/解密 。只要通信需要保密,密钥就必须保密 。对称算法的加密和解密表示为:EK(M)=CDK(C)=M对称算法可分为两类 。一次只对明文中的单个比特(有时对位元组)运算的算法称为序列算法或序列密码 。另一类算法是对明文的一组比特亚行运算,这些比特组称为分组,相应的算法称为分组算法或分组密码 。现代计算机密码算法的典型分组长度为64比特——这个长度大到足以防止分析破译,但又小到足以方便使用(在计算机出现前,算法普遍地每次只对明文的一个字元运算,可认为是序列密码对字元序列的运算) 。公开密码算法公开密钥算法(也叫非对称算法)是这样设计的:用作加密的密钥不同于用作解密的密钥,而且解密密钥不能根据加密密钥计算出来(至少在合理假定的长时间内) 。之所以叫做公开密钥算法,是因为加密密钥能够公开,即陌生者能用加密密钥加密信息,但只有用相应的解密密钥才能解密信息 。在这些系统中,加密密钥叫做公开密钥(简称公钥),解密密钥叫做私人密钥(简称私钥) 。私人密钥有时也叫秘密密钥 。为了避免与对称算法混淆,此处不用秘密密钥这个名字 。用公开密钥K加密表示为EK(M)=C.虽然公开密钥和私人密钥是不同的,但用相应的私人密钥解密可表示为: DK(C)=M有时讯息用私人密钥加密而用公开密钥解密,这用于数字签名(后面将详细介绍),儘管可能产生混淆,但这些运算可分别表示为:EK(M)=CDK(C)=M当前的公开密码算法的速度,比起对称密码算法,要慢的多,这使得公开密码算法在大数据量的加密中套用有限 。单向散列函式单向散列函式 H(M) 作用于一个任意长度的讯息 M,它返回一个固定长度的散列值 h,其中 h 的长度为 m。输入为任意长度且输出为固定长度的函式有很多种,但单向散列函式还有使其单向的其它特性:(1) 给定 M,很容易计算 h ;(2) 给定 h,根据 H(M) = h 计算 M 很难 ;(3) 给定 M,要找到另一个讯息 M‘ 并满足 H(M) = H(M’) 很难 。在许多套用中,仅有单向性是不够的,还需要称之为“抗碰撞”的条件:要找出两个随机的讯息 M 和 M‘,使 H(M) = H(M’) 满足很难 。由于散列函式的这些特性,由于公开密码算法的计算速度往往很慢,所以,在一些密码协定中,它可以作为一个讯息 M 的摘要,代替原始讯息 M,让传送者为 H(M) 签名而不是对 M 签名。如 SHA 散列算法用于数字签名协定 DSA中 。数字签名提到数字签名就离不开公开密码系统和散列技术 。有几种公钥算法能用作数字签名 。在一些算法中,例如RSA,公钥或者私钥都可用作加密 。用你的私钥加密档案,你就拥有安全的数字签名 。在其它情况下,如DSA,算法便区分开来了??数字签名算法不能用于加密 。这种思想首先由Diffie和Hellman提出。基本协定是简单的 :(1) A 用她的私钥对档案加密,从而对档案签名 。(2) A 将签名的档案传给B 。(3) B用A的公钥解密档案,从而验证签名 。这个协定中,只需要证明A的公钥的确是她的 。如果B不能完成第(3)步,那幺他知道签名是无效的 。这个协定也满足以下特徵:(1) 签名是可信的 。当B用A的公钥验证信息时,他知道是由A签名的 。(2) 签名是不可伪造的 。只有A知道她的私钥 。(3) 签名是不可重用的 。签名是档案的函式,并且不可能转换成另外的档案 。(4) 被签名的档案是不可改变的 。如果档案有任何改变,档案就不可能用A的公钥验证 。(5) 签名是不可抵赖的 。B不用A的帮助就能验证A的签名 。加密算法加密技术是对信息进行编码和解码的技术,编码是把原来可读信息(又称明文)译成代码形式(又称密文),其逆过程就是解码(解密) 。加密技术的要点是加密算法,加密算法可以分为对称加密、不对称加密和不可逆加密三类算法 。对称加密算法 对称加密算法是套用较早的加密算法,技术成熟 。在对称加密算法中,数据发信方将明文(原始数据)和加密密钥一起经过特殊加密算法处理后,使其变成複杂的加密密文传送出去 。收信方收到密文后,若想解读原文,则需要使用加密用过的密钥及相同算法的逆算法对密文进行解密,才能使其恢复成可读明文 。在对称加密算法中,使用的密钥只有一个,发收信双方都使用这个密钥对数据进行加密和解密,这就要求解密方事先必须知道加密密钥 。对称加密算法的特点是算法公开、计算量小、加密速度快、加密效率高 。不足之处是,交易双方都使用同样钥匙,安全性得不到保证 。此外,每对用户每次使用对称加密算法时,都需要使用其他人不知道的惟一钥匙,这会使得发收信双方所拥有的钥匙数量成几何级数增长,密钥管理成为用户的负担 。对称加密算法在分散式网路系统上使用较为困难,主要是因为密钥管理困难,使用成本较高 。在计算机专网系统中广泛使用的对称加密算法有DES和IDEA等 。美国国家标準局倡导的AES即将作为新标準取代DES 。不对称加密算法 不对称加密算法使用两把完全不同但又是完全匹配的一对钥匙—公钥和私钥 。在使用不对称加密算法加密档案时,只有使用匹配的一对公钥和私钥,才能完成对明文的加密和解密过程 。加密明文时採用公钥加密,解密密文时使用私钥才能完成,而且发信方(加密者)知道收信方的公钥,只有收信方(解密者)才是唯一知道自己私钥的人 。不对称加密算法的基本原理是,如果发信方想传送只有收信方才能解读的加密信息,发信方必须首先知道收信方的公钥,然后利用收信方的公钥来加密原文;收信方收到加密密文后,使用自己的私钥才能解密密文 。显然,採用不对称加密算法,收发信双方在通信之前,收信方必须将自己早已随机生成的公钥送给发信方,而自己保留私钥 。由于不对称算法拥有两个密钥,因而特别适用于分散式系统中的数据加密 。广泛套用的不对称加密算法有RSA算法和美国国家标準局提出的DSA 。以不对称加密算法为基础的加密技术套用非常广泛 。不可逆加密算法 的特徵是加密过程中不需要使用密钥,输入明文后由系统直接经过加密算法处理成密文,这种加密后的数据是无法被解密的,只有重新输入明文,并再次经过同样不可逆的加密算法处理,得到相同的加密密文并被系统重新识别后,才能真正解密 。显然,在这类加密过程中,加密是自己,解密还得是自己,而所谓解密,实际上就是重新加一次密,所套用的“密码”也就是输入的明文 。不可逆加密算法不存在密钥保管和分发问题,非常适合在分散式网路系统上使用,但因加密计算複杂,工作量相当繁重,通常只在数据量有限的情形下使用,如广泛套用在计算机系统中的口令加密,利用的就是不可逆加密算法 。近年来,随着计算机系统性能的不断提高,不可逆加密的套用领域正在逐渐增大 。在计算机网路中套用较多不可逆加密算法的有RSA公司发明的MD5算法和由美国国家标準局建议的不可逆加密标準SHS(Secure Hash Standard:安全杂乱信息标準)等 。