不对称加密算法使用两把完全不同但又是完全匹配的一对钥匙—公钥和私钥。在使用不对称加密算法加密文件时,只有使用匹配的一对公钥和私钥,才能完成对明文的加密和解密过程。加密明文时采用公钥加密,解密密文时使用私钥才能完成,而且发信方(加密者)知道收信方的公钥,只有收信方(解密者)才是唯一知道自己私钥的人。不对称加密算法的基本原理是,如果发信方想发送只有收信方才能解读的加密信息,发信方必须首先知道收信方的公钥,然后利用收信方的公钥来加密原文;收信方收到加密密文后,使用自己的私钥才能解密密文。显然,采用不对称加密算法,收发信双方在通信之前,收信方必须将自己早已随机生成的公钥送给发信方,而自己保留私钥。由于不对称算法拥有两个密钥,因而特别适用于分布式系统中的数据加密。广泛应用的不对称加密算法有RSA算法和美国国家标准局提出的DSA。以不对称加密算法为基础的加密技术应用非常广泛。
密码术有很长的历史。古代人在没有高速运算设备的条件下想尽了各种方法,也包含了许多巧妙的构思。早在公元前1900年,一个古埃及书写员就在一个铭文中使用了非标准的象形文字,这是人类最早的有记录的密码术。其后,古代人使用的密码术有如把字母表的顺序颠倒过来、进行字母替代,或者用错后一定数目的位置的字母替代前面的字母。其中有些密码术的构思也是十分巧妙的。
现代密码术的划时代突破,是威特菲尔德;迪菲(Whitfield Diffie)和马丁;海尔曼(Martin Hellman)有关公开密钥加密系统的构想,这是在1976年发表的。但威特菲尔德;迪菲和马丁;海尔曼提供的MH背包算法于1984年被破译,因而失去了实际意义。真正有生命力的公开密钥加密系统算法是由隆;里维斯特(Ronald L. Rivest)、阿迪;沙米尔(Adi Shamir)和雷奥纳德;阿德尔曼(Leonard M.Adlemen)在威特菲尔德?迪菲和马丁;海尔曼的论文的启发下,在1977年发明的,这就是沿用至今的RSA算法。它是第一个既能用于数据加密也能用于数字签名的算法。
公钥加密标准(PKCS)是RSA实验室和全球各家安全系统开发商进行合作而开发出的标准。PKCS标准已经被广泛地采纳,而PKCS系列的标准已经成为许多正式和实际标准的一部分,包括ANSI X9、PKIX、SET、S/MIME。
1976 年,Whitfield Diffe 和 Martin Hellman 创建了公钥加密。公钥加密是重大的创新,因为它从根本上改变了加密和解密的过程。
Diffe 和 Hellman 提议使用两个密钥,而不是使用一个共享的密钥。一个密钥(称为“私钥”)是保密的。它只能由一方保存,而不能各方共享。第二个密钥(称为“公钥”)不是保密的,可以广泛共享。这两个密钥(称为“密钥对”)在加密和解密操作中配合使用。密钥对具有特殊的互补关系,从而使每个密钥都只能与密钥对中的另一个密钥配合使用。这一关系将密钥对中的密钥彼此唯一地联系在一起:公钥与其对应的私钥组成一对,并且与其他任何密钥都不关联。
由于公钥和私钥的算法之间存在特殊的数学关系,从而使得这种配对成为可能。密钥对在数学上彼此相关,例如,配合使用密钥对可以实现两次使用对称密钥的效果。密钥必须配合使用:不能使用每个单独的密钥来撤消它自己的操作。这意味着每个单独密钥的操作都是单向操作:不能使用一个密钥来撤消它的操作。此外,设计两个密钥使用的算法时,特意设计无法使用一个密钥确定密钥对中的另一个密钥。因此,不能根据公钥确定出私钥。但是,使得密钥对成为可能的数学原理也使得密钥对具有对称密钥所不具有的一个缺点。这就是,所使用的算法必须足够强大,才能使人们无法通过强行尝试,使用已知的公钥来解密通过它加密的信息。公钥利用数学复杂性以及它的单向特性来弥补它是众所周知的这样一个事实,以防止人们成功地破解使用它编码的信息。
如果将此概念应用于前面的示例,则发件人将使用公钥将纯文本加密成密码。然后,收件人将使用私钥将密码重新解密成纯文本。
由于密钥对中的私钥和公钥之间所存在的特殊关系,因此一个人可以在与许多人交往时使用相同的密钥对,而不必与每个人分别使用不同的密钥。只要私钥是保密的,就可以随意分发公钥,并让人们放心地使用它。使许多人使用同一个密钥对代表着密码学上的一个重大突破,因为它显著降低了密钥管理的需求,大大提高了密码学的可用性。用户可以与任意数目的人员共享一个密钥对,而不必为每个人单独设立一个密钥。
公钥加密是邮件安全中的一个基本要素。如果没有公钥加密,那么是否存在实用的邮件安全解决方案是值得怀疑的,因为在公钥加密出现之前,密钥管理是一件很麻烦的事情。在了解了公钥加密的基本概念之后,接下来便是了解如何借助这些概念来实现邮件安全性。
公钥算法-用途
公钥体系的原理为:用户A有一对密钥对,分为公钥和私钥,这对密钥对是唯一的,是通过对一个巨大的素数进行因数分解所得。当用公钥加密过的信息,只能使用与它配对的私钥来解密,反之亦然,私钥加密码的信息也只能用公钥来解密。这样,A从认证体系生成密钥对后,把它的私钥保存好,把公钥公开出去,当一个用户B要与A通信,又想确保数据安全时,就可以使用A的公钥来加密信息,再把密文传给A,因此这个世界是只有A手中的私钥才能对这个密文进行解密,这样就确保了信息的安全。
比如简单的素数加密原理如下:
1.随意选择两个大的质数p和q,p不等于q,计算N=pq。
2.根据欧拉函数,不大于N且与N互质的整数个数为(p-1)(q-1)
3.选择一个整数e与(p-1)(q-1)互质,并且e小于(p-1)(q-1)
4.用以下这个公式计算d:d× e ≡ 1 (mod (p-1)(q-1))
5.将p和q的记录销毁。
其中:e是公钥,d是私钥。d是秘密的,而N是公众都知道的。Alice将她的公钥e传给Bob,而将她的私钥d藏起来。
事实上,信息加密码只是公钥体系的用途之一,它还有一个用途就是对信息进行签名,防此信息发布者抵赖,和被第三方修改。为什么这种机制可以实现这此功能呢?很简单,还是使用了“公钥加密,只有私钥能解;私钥加密,只有公钥能解”的道理。举例:用户A用自已的私钥对他发出去的信息进行签名(加密),然后发出去,后来他发现他公开的信息对他不利,他就不承认这些信息是他发的,但是他不可能抵赖了,因为这些信息有他的私钥签名,那么,使用他的公钥对信息验证就知道,这些信息肯定是A发的了,因为只有A使用的私钥签名得到的信息,才能用这个公钥来解。如果A还不认是他发的信息,那只有一个可能,那就是他的私钥被人盗取了。
现在我们知道公钥机制的原理了,那它有什么用呢?上述举的例子就比较常用,而在我们日常工作中也有些用到公钥机制的地方,我们可能有人用过钥匙盘,它是一个类似U盘的东西,一般提供USB接口,它就使用了公钥机制,当我们在一台计算机上初始化这个钥匙盘的时候,它会生成一对密钥对,把公钥存在计算机上,私钥存在钥匙盘上,当用户要进行一个系统需要身份验证时,只需插入钥匙盘,就会通过公私钥加解密的原理,完成这个用户的身份验证过程,而无需输入帐号和密码进行验证。
公钥算法-缺点
现实上,公钥机制也有它的缺点,那就是效率非常低,比常用的单密钥算法慢上一两个数量级都有可能,所以它不适合经常为大量的原始信息进行加密,而使用单密码钥机制对原始信息进行加密码,然后这个单密钥,我们可以通过公钥机制进行加密。
形象点的介绍以及数字证书可参见以下链接,但愿点开时该链接依然存在
http://www.admin10000.com/document/633.html
分享到:
相关推荐
本文是一篇软件加密技术的基础性文章,简要介绍了软件加密的一些基本常识和一些加密产品,适用于国内软件开发商或者个人共享软件开发者阅读参考。
### 网络基础知识——无线网络的加密 无线网络的安全性是现代信息技术领域的一个重要议题。随着无线技术的广泛应用,确保无线通信数据的安全传输变得尤为关键。本文将深入探讨无线网络加密的不同方法及其应用场景,...
互联网相关开发人员
DES是一种古老的对称加密算法,虽然现在因为其较短的密钥长度(56位)而被认为不够安全,但作为学习和理解加密基础的好例子,它依然有价值。在Java中,可以使用`javax.crypto`包中的`Cipher`类来实现DES加密和解密。...
1. 混沌系统与加密基础: 混沌系统是一种非线性动态系统,其行为看似随机但实际上是确定性的。这种系统对初始条件极度敏感,微小的变化可能导致截然不同的结果,即著名的“蝴蝶效应”。在密码学中,混沌系统的这些...
总结,这个“vc++6.0简单加密程序”是一个学习加密基础知识的好例子,它涵盖了加密算法的应用、密钥管理和文件操作等基本概念。然而,对于实际的敏感数据保护,应当使用更加安全和先进的解决方案。
基于Java的RSA文件加密软件的设计与实现项目是...使用本系统需要基本Java编程知识以及基础操作系统能力,并具备相关的文件加密基础知识。在使用系统时,请遵循相关的使用规则和操作规范,不得进行不良行为和违规操作。
5. **公钥基础设施(PKI)**:PKI是建立在非对称加密基础上的一套系统,包括证书颁发机构(CA)、证书撤销列表(CRL)和证书存储等,用于管理和验证公钥的有效性。 6. **数字签名**:数字签名是用发送者的私钥对消息的...
一、C#加密基础 1. .NET Framework提供的加密类库:C#通过System.Security.Cryptography命名空间提供了一系列的加密算法,包括对称加密(如AES、DES、TripleDES)、非对称加密(如RSA、DSA)、哈希函数(如SHA、MD5...
一、C#中的加密基础 1. 加密算法:C#支持多种加密算法,如AES(高级加密标准)、RSA(公钥加密)、DES(数据加密标准)等。其中,AES是目前最常用的一种对称加密算法,适合大量数据的加密。 2. System.Security....
一、同态加密基础 同态加密的基本原理是,它允许在保持数据加密状态的同时执行计算操作。这意味着,即使数据处于加密形式,也可以对其进行处理,而最终的结果仍然是加密的,只有拥有正确密钥的人才能解密并理解结果...
二、Java加密基础 在Java中,加密和解密主要通过Java Cryptography Extension (JCE) 实现。JCE提供了一系列的接口和类,如Cipher、KeyGenerator、SecretKey、PublicKey、PrivateKey等,支持各种加密算法。 1. ...
公钥基础设施(PKI)是建立在非对称加密基础上的一种系统,包括证书颁发机构(CA)、注册机构(RA)等组件,用于管理和验证数字证书,确保网络通信的安全。 认证协议,如SSL/TLS协议,是保障互联网通信安全的重要...
一、C++中的字符串加密基础 在C++中,对字符串进行加密通常涉及到对每个字符进行位操作,如异或(XOR)、位移(Shift)等,或者使用更复杂的算法如AES(高级加密标准)、RSA(公钥加密算法)等。这里,我们重点关注异或...
然而,需要注意的是,尽管混沌系统提供了良好的加密基础,但单一的混沌映射可能会存在被破解的风险。因此,现代的加密算法往往结合多种混沌映射和额外的混淆技术,以提升整体安全性。 在"MyExperiment"这个文件中,...
1. **Java加密基础**: Java提供了强大的加密库,如Java Cryptography Extension (JCE) 和Java Cryptography Architecture (JCA),它们为开发者提供了各种加密算法,如对称加密、非对称加密、哈希函数和消息认证码...
首先,让我们了解一下C#中的加密基础。在C#中,主要使用System.Security.Cryptography命名空间下的类来实现加密和解密。常见的加密算法包括对称加密(如AES、DES、3DES)和非对称加密(如RSA、DSA)。这里的"ENCODE...
1. **理解加密基础** - 加密是将明文数据转换为不可读的密文,以防止非授权用户访问。 - 加密过程通常涉及一个密钥,它是用来解密密文的特殊代码。 2. **C#中的加密库** - .NET框架提供了`System.Security....
总结,这个C++编写的简单异或加密程序是一个学习加密基础知识的实例。它揭示了加密的基本原理,即通过特定操作(如异或)改变数据,然后通过相同操作恢复数据。然而,对于实际的安全需求,应当选择更为强大和安全的...