公钥加密算法/哈希算法

2024-05-04 14:47

1. 公钥加密算法/哈希算法

  公钥加密算法  也叫非对称加密,它在加密和解密时使用的是不同的密钥,具有这样的特征:
                                           最常见的公钥加密算法是RSA公钥加密算法,也是签名中普遍使用的算法。其数学原理如下:
   理论上  {n, e}  和  {n, d}  可以互换,任何一个都可以是公钥或者私钥,加密和解密的函数也可以互换。但实践中,一般固定设置 e = 65537(0x10001) ,相当于公开的一个约定,这样一来 {n, e} 就只能作为公钥使用。
    哈希算法    也叫散列或者摘要算法,对一段任意长度的数据,通过一定的映射和计算,得到一个固定长度的值,这个值就被称为这段数据的哈希值(hash)。给定一个哈希算法,它一定具有以下特征:
   常见的哈希算法有: md5, sha1, sha256等,其中sha1长度为160bits,而sha256长度为256bits,二者相比,sha256的取值范围更大,因此碰撞和破解的概率更低,也就相对更安全。

公钥加密算法/哈希算法

2. 公钥加密的常见算法

RSA、ElGamal、背包算法、Rabin(Rabin的加密法可以说是RSA方法的特例)、Diffie-Hellman (D-H) 密钥交换协议中的公钥加密算法、Elliptic Curve Cryptography(ECC,椭圆曲线加密算法)。使用最广泛的是RSA算法(由发明者Rivest、Shmir和Adleman姓氏首字母缩写而来)是著名的公开金钥加密算法,ElGamal是另一种常用的非对称加密算法。

3. 公钥加密的常见算法

RSA、ElGamal、背包算法、Rabin(Rabin的加密法可以说是RSA方法的特例)、Diffie-Hellman(D-H)密钥交换协议中的公钥加密算法、EllipticCurveCryptography(ECC,椭圆曲线加密算法)。使用最广泛的是RSA算法(由发明者Rivest、Shmir和Adleman姓氏首字母缩写而来)是著名的公开金钥加密算法,ElGamal是另一种常用的非对称加密算法。

公钥加密的常见算法

4. 公钥算法的加密标准

公钥加密标准(PKCS)是RSA实验室和全球各家安全系统开发商进行合作而开发出的标准。PKCS标准已经被广泛地采纳,而PKCS系列的标准已经成为许多正式和实际标准的一部分,包括ANSI X9、PKIX、SET、S/MIME。

5. 私钥的加密算法

基类库中提供的块密码类使用称作密码块链 (CBC) 的链模式,它使用一个密钥和一个初始化向量 (IV) 对数据执行加密转换。对于给定的私钥 k,一 个不使用初始化向量的简单块密码将把相同的明文输入块加密为同样的密文输出块。如果在明文流中有重复的块,那么在密文流中将存在重复的块。如果未经授权的 用户知道有关明文块的结构的任何信息,就可以使用这些信息解密已知的密文块并有可能发现您的密钥。若要克服这个问题,可将上一个块中的信息混合到加密下一 个块的过程中。这样,两个相同的明文块的输出就会不同。由于该技术使用上一个块加密下一个块,因此使用了一个 IV 来加密数据的第一个块。使用该系统, 未经授权的用户有可能知道的公共消息标头将无法用于对密钥进行反向工程。可 以危及用此类型密码加密的数据的一个方法是,对每个可能的密钥执行穷举搜索。根据用于执行加密的密钥大小,即使使用最快的计算机执行这种搜索,也极其耗 时,因此难以实施。使用较大的密钥大小将使解密更加困难。虽然从理论上说加密不会使对手无法检索加密的数据,但这确实极大增加了这样做的成本。如果执行彻 底搜索来检索只在几天内有意义的数据需要花费三个月的时间,那么穷举搜索的方法是不实用的。私钥加密的缺点是它假定双方已就密钥和 IV 达成协议,并且互相传达了密钥和 IV 的值。并且,密钥必须对未经授权的用户保密。由于存在这些问题,私钥加密通常与公钥加密一起使用,来秘密地传达密钥和 IV 的值。

私钥的加密算法

6. 哈希加密算法

 MD5即Message-Digest Algorithm 5(信息摘要算法5),是计算机广泛使用的散列算法之一。经MD2、MD3和MD4发展而来,诞生于20世纪90年代初。用于确保信息传输完整一致。虽然已被破解,但仍然具有较好的安全性,加之可以免费使用,所以仍广泛运用于数字签名、文件完整性验证以及口令加密等领域。
   算法原理:
   散列算法得到的结果位数是有限的,比如MD5算法计算出的结果字长为128位,意味着只要我们穷举2^128次,就肯定能得到一组碰撞,下面让我们来看看一个真实的碰撞案例。我们之所以说MD5过时,是因为它在某些时候已经很难表现出散列算法的某些优势——比如在应对文件的微小修改时,散列算法得到的指纹结果应当有显著的不同,而下面的程序说明了MD5并不能实现这一点。
   而诸如此类的碰撞案例还有很多,上面只是原始文件相对较小的一个例子。事实上现在我们用智能手机只要数秒就能找到MD5的一个碰撞案例,因此,MD5在数年前就已经不被推荐作为应用中的散列算法方案,取代它的是SHA家族算法,也就是安全散列算法(Secure Hash Algorithm,缩写为SHA)。
   SHA实际包括有一系列算法,分别是SHA-1、SHA-224、SHA-256、SHA-384以及SHA-512。而我们所说的SHA2实际是对后面4中的统称。各种SHA算法的数据比较如下表,其中的长度单位均为位:
                                           MD5和SHA1,它们都有4个逻辑函数,而在SHA2的一系列算法中都采用了6个逻辑函数。   以SHA-1为例,算法包括有如下的处理过程:
   和MD5处理输入方式相同
   经过添加位数处理的明文,其长度正好为512位的整数倍,然后按512位的长度进行分组,可以得到一定数量的明文分组,我们用Y 0 ,Y 1 ,……Y N-1 表示这些明文分组。对于每一个明文分组,都要重复反复的处理,这些与MD5都是相同的。
   而对于每个512位的明文分组,SHA1将其再分成16份更小的明文分组,称为子明文分组,每个子明文分组为32位,我们且使用M[t](t= 0, 1,……15)来表示这16个子明文分组。然后需要将这16个子明文分组扩充到80个子明文分组,我们将其记为W[t](t= 0, 1,……79),扩充的具体方法是:当0≤t≤15时,Wt = Mt;当16≤t≤79时,Wt = ( W t-3  ⊕ W t-8 ⊕ W t-14 ⊕ W t-16 ) <<< 1,从而得到80个子明文分组。
   所谓初始化缓存就是为链接变量赋初值。前面我们实现MD5算法时,说过由于摘要是128位,以32位为计算单位,所以需要4个链接变量。同样SHA-1采用160位的信息摘要,也以32位为计算长度,就需要5个链接变量。我们记为A、B、C、D、E。其初始赋值分别为:A = 0x67452301、B = 0xEFCDAB89、C = 0x98BADCFE、D = 0x10325476、E = 0xC3D2E1F0。
   如果我们对比前面说过的MD5算法就会发现,前4个链接变量的初始值是一样的,因为它们本来就是同源的。
   经过前面的准备,接下来就是计算信息摘要了。SHA1有4轮运算,每一轮包括20个步骤,一共80步,最终产生160位的信息摘要,这160位的摘要存放在5个32位的链接变量中。
   在SHA1的4论运算中,虽然进行的就具体操作函数不同,但逻辑过程却是一致的。首先,定义5个变量,假设为H0、H1、H2、H3、H4,对其分别进行如下操作:
   (A)、将A左移5为与 函数的结果求和,再与对应的子明文分组、E以及计算常数求和后的结果赋予H0。
   (B)、将A的值赋予H1。
   (C)、将B左移30位,并赋予H2。
   (D)、将C的值赋予H3。
   (E)、将D的值赋予H4。
   (F)、最后将H0、H1、H2、H3、H4的值分别赋予A、B、C、D
   这一过程表示如下:
                                           而在4轮80步的计算中使用到的函数和固定常数如下表所示:
                                           经过4轮80步计算后得到的结果,再与各链接变量的初始值求和,就得到了我们最终的信息摘要。而对于有多个明文分组的,则将前面所得到的结果作为初始值进行下一明文分组的计算,最终计算全部的明文分组就得到了最终的结果。

7. 什么是公钥密码算法?

20世纪70年代,美国学者Diffie和Hellman,以及以色列学者Merkle分别独立地提出了一种全新的密码体制的概念。Diffie和Hellman首先将这个概念公布在1976年美国国家计算机会议上,几个月后,他们这篇开创性的论文《密码学的新方向》发表在IEEE杂志信息论卷上,由于印刷原因,Merkle对这一领域的贡献直到1978年才出版。他们所创造的新的密码学理论,突破了传统的密码体制对称密钥的概念,竖起了近代密码学的又一里程碑。
不同于以前采用相同的加密和解密密钥的对称密码体制,Diffie和Hellman提出了采用双钥体制,即每个用户都有一对选定的密钥:一个是可以公开的,另一个则是秘密的。公开的密钥可以像电话号码一样公布,因此称为公钥密码体制或双钥体制。公钥密码体制的主要特点是将加密和解密的能力分开,因而可以实现多个用户的信息只能由一个用户解读;或只能由一个用户加密消息而由多个用户解读,前者可以用于公共网络中实现保密通信,而后者可以用于认证系统中对消息进行数字签名。公开密钥密码的基本思想是将传统密码的密钥一分为二,分为加密密钥Ke和解密密钥Kd,用加密密钥Ke控制加密,用解密密钥Kd控制解密。而且由计算复杂性确保加密密钥Ke在计算上不能推导出解密密钥Kd。这样,即使将Ke公开也不会暴露Kd,也不会损害密码的安全。于是便可以将Ke公开,而只对Kd保密。由于Ke是公开的,只有Kd是保密的,因此从根本上克服了传统密码在密钥分配上的困难。
公开密钥密码满足的条件根据公开密钥密码的基本思想,可知一个公开密钥密码应当满足下面三个条件:
解密算法D和加密算法E互逆,即对所有明文M都有,D(E(M,Ke),Kd)=M。在计算上不能由Ke推导出Kd。算法E和D都是高效的。条件1是构成密码的基本条件,是传统密码和公开密钥密码都必须具备的起码条件。条件2是公开密钥密码的安全条件,是公开密钥密码的安全基础,而且这一条件是最难满足的。目前尚不能从数学上证明一个公开密钥密码完全满足这一条件,而只能证明它不满足这一条件。条件3是公开密钥密码的工程实用条件。因为只有算法E和D都是高效的,密码才能实用。否则,密码只有理论意义,而不能实际应用。满足了以上三个条件,便可构成一个公开密钥密码,这个密码可以确保数据的秘密性。然而还需要确保数据的真实性,则还需满足第四个条件。4.对于所有明文M都有E(D(M,Kd),Ke)=M。条件4是公开密钥密码能够确保数据真实性的基本条件。如果满足了条件1、2、4,同样可以构成一个公开密钥密码,这个密码可以确保数据的真实性。如果同时满足以上四个条件,则公开密钥密码可以同时确保数据的秘密性和真实性。此时,对于所有的明文M都有D(E(M,Ke),Kd)= E(D(M,Kd),Ke)=M。公开密钥密码从根本上克服了传统密码在密钥分配上的困难,利用公开密钥密码进行保密通信需要成立一个密钥管理机构(KMC),每个用户将自己的姓名、地址和公开的加密密钥等信息在KMC登记注册,将公钥记入共享的公开密钥数据库。KMC负责密钥的管理,并对用户是可信赖的。这样,用户利用公开密钥密码进行保密通信就像查电话号码簿打电话一样方便,再也不需要通信双方预约密钥,因此特别适合计算机网络应用,而且公开密钥密码实现数字签名容易,所以特别受欢迎。下图是公钥密码体制的框图,主要分为以下几步:
网络中要求接收消息的端系统,产生一对用来加密和解密的密钥,如图中的接收者B,产生一对密钥PKB,SKB,其中PKB是公开钥,SKB是秘密钥。端系统B将加密密钥(图中的PKB)存储在一个公开的寄存器或文件中,另一密钥则被保密(图中个SKB)。A要想向B发送消息m,则使用B的公开钥加密m,表示为 c=EPKB[m] 其中,c是密文,E是加密算法。B收到密文c后,用自己的秘密钥SKB解密,表示为 m=DSKB[c] 其中,D是解密算法。因为只有B知道SKB,所以其他人无法对c解密。这就是公开密钥的原理~
(转载需向本人获取权限)

什么是公钥密码算法?

8. 最著名的私钥加密算法是

MD5的全称是Message-Digest Algorithm 5,在90年代初由MIT的计算机科学实验室和RSA Data Security Inc发明,经MD2、MD3和MD4发展而来。
MD5将任意长度的“字节串”变换成一个128bit的大整数,并且它是一个不可逆的字符串变换算法,换句话说就是,即使你看到源程序和算法描述,也无法将一个MD5的值变换回原始的字符串,从数学原理上说,是因为原始的字符串有无穷多个,这有点象不存在反函数的数学函数。
    MD5的典型应用是对一段Message(字节串)产生fingerprint(指纹),以防止被“篡改”。举个例子,你将一段话写在一个叫 readme.txt文件中,并对这个readme.txt产生一个MD5的值并记录在案,然后你可以传播这个文件给别人,别人如果修改了文件中的任何内容,你对这个文件重新计算MD5时就会发现。如果再有一个第三方的认证机构,用MD5还可以防止文件作者的“抵赖”,这就是所谓的数字签名应用。
MD5还广泛用于加密和解密技术上,在很多操作系统中,用户的密码是以MD5值(或类似的其它算法)的方式保存的, 用户Login的时候,系统是把用户输入的密码计算成MD5值,然后再去和系统中保存的MD5值进行比较,而系统并不“知道”用户的密码是什么。
RSA是第一个既能用于数据加密也能用于数字签名的算法。它易于理解和操作,也很流行。算法的名字以发明者的名字命名:Ron Rivest, Adi Shamir 和Leonard Adleman。但RSA的安全性一直未能得到理论上的证明。它经历了各种攻击,至今未被完全攻破。 
DES算法 
美国国家标准局1973年开始研究除国防部外的其它部门的计算机系统的数据加密标准,于1973年5月15日和1974年8月27日先后两次向公众发出了征求加密算法的公告。 1977年1月,美国政府颁布:采纳IBM公司设计的方案作为非机密数据的正式数据加密标准(DES?Data Encryption Standard)。