标题：公开密钥密码体系
公钥密码体制
简介但这仅仅是当今密码学主题的一个方面。对信息发送与接收人的真实身份的验证、对所发出/接收信息在事后的不可抵赖以及保障数据的完整性是现代密码学主题的另一方面。 
公开密钥密码体制对这两方面的问题都给出了出色的解答，并正在继续产生许多新的思想和方案。在公钥体制中，加密密钥不同于解密密钥。人们将加密密钥公之于众，谁都可以使用；而解密密钥只有解密人自己知道。迄今为止的所有公钥密码体系中，RSA系统是最著名、使用最广泛的一种。发展历程1976年提出公共密钥密码体制，其原理是加密密钥和解密密钥分离。这样，一个具体用户就可以将自己设计的加密密钥和算法公诸于众，而只保密解密密钥。任何人利用这个加密密钥和算法向该用户发送的加密信息，该用户均可以将之还原。公共密钥密码的优点是不需要经安全渠道传递密钥，大大简化了密钥管理。它的算法有时也称为公开密钥算法或简称为公钥算法。 
1978年提出公共密钥密码的具体实施方案，即RSA方案。
1991年提出的DSA算法也是一种公共密钥算法，在数字签名方面有较大的应用优势。
公钥体系结构中的概念
公钥体系结构中的一些基本概念与结构组成。
密钥对在基于公钥体系的安全系统中，密钥是成对生成的，每对密钥由一个公钥和一个私钥组成。在实际应用中，私钥由拥有者自己保存，而公钥则需要公布于众。为了使基于公钥体系的业务（如电子商务等）能够广泛应用，一个基础性关键的问题就是公钥的分发与管理。 
公钥本身并没有什么标记，仅从公钥本身不能判别公钥的主人是谁。 
在很小的范围内，比如A和B这样的两人小集体，他们之间相互信任，交换公钥，在互联网上通讯，没有什么问题。这个集体再稍大一点，也许彼此信任也不成问题，但从法律角度讲这种信任也是有问题的。如再大一点，信任问题就成了一个大问题。证书互联网络的用户群决不是几个人互相信任的小集体，在这个用户群中，从法律角度讲用户彼此之间都不能轻易信任。所以公钥加密体系采取了另一个办法，将公钥和公钥的主人名字联系在一起，再请一个大家都信得过有信誉的公正、权威机构确认，并加上这个权威机构的签名。这就形成了证书。
由于证书上有权威机构的签字，所以大家都认为证书上的内容是可信任的；又由于证书上有主人的名字等身份信息，别人就很容易地知道公钥的主人是谁。CA前面提及的权威机构就是电子签证机关，即CA。CA（Certificate Authority）也拥有一个证书（内含公钥），当然，它也有自己的私钥，所以它有签字的能力。网上的公众用户通过验证CA（Certificate Authority）的签字从而信任CA（Certificate Authority），任何人都应该可以得到CA（Certificate Authority）的证书（含公钥），用以验证它所签发的证书。 
如果用户想得到一份属于自己的证书，他应先向CA（Certificate Authority）提出申请。在CA（Certificate Authority）判明申请者的身份后，便为他分配一个公钥，并且CA（Certificate Authority）将该公钥与申请者的身份信息绑在一起，并为之签字后，便形成证书发给那个用户（申请者）。
如果一个用户想鉴别另一个证书的真伪，他就用CA的公钥对那个证书上的签字进行验证（如前所述，CA签字实际上是经过CA（Certificate Authority）私钥加密的信息，签字验证的过程还伴随使用CA（Certificate Authority）公钥解密的过程），一旦验证通过，该证书就被认为是有效的。
CA（Certificate Authority）除了签发证书之外，它的另一个重要作用是证书和密钥的管理。 
由此可见，证书就是用户在网上的电子个人身份证，同日常生活中使用的个人身份证作用一样。CA（Certificate Authority）相当于网上公安局，专门发放、验证身份证。
公开密钥算法
公开密钥算法的介绍公开密钥算法是在1976年由当时在美国斯坦福大学的迪菲（Diffie）和赫尔曼(Hellman)两人首先发明的（论文"New Direction in Cryptography"）。但目前最流行的RSA是1977年由MIT教授Ronald L.Rivest,Adi Shamir和Leonard M.Adleman共同开发的,分别取自三名数学家的名字的第一个字母来构成的。 
1976年提出的公开密钥密码体制思想不同于传统的对称密钥密码体制，它要求密钥成对出现，一个为加密密钥(e)，另一个为解密密钥(d)，且不可能从其中一个推导出另一个。自1976年以来，已经提出了多种公开密钥密码算法，其中许多是不安全的， 一些认为是安全的算法又有许多是不实用的，它们要么是密钥太大，要么密文扩展十分严重。多数密码算法的安全基础是基于一些数学难题， 这些难题专家们认为在短期内不可能得到解决。因为一些问题(如因子分解问题)至今已有数千年的历史了。
公钥加密算法也称非对称密钥算法，用两对密钥：一个公共密钥和一个专用密钥。用户要保障专用密钥的安全；公共密钥则可以发布出去。公共密钥与专用密钥是有紧密关系的，用公共密钥加密的信息只能用专用密钥解密，反之亦然。由于公钥算法不需要联机密钥服务器，密钥分配协议简单，所以极大简化了密钥管理。除加密功能外，公钥系统还可以提供数字签名。RSA公钥加密算法中使用最广的是RSA。RSA使用两个密钥，一个公共密钥，一个专用密钥。如用其中一个加密，则可用另一个解密，密钥长度从40到2048bit可变，加密时也把明文分成块，块的大小可变，但不能超过密钥的长度，RSA算法把每一块明文转化为与密钥长度相同的密文块。密钥越长，加密效果越好，但加密解密的开销也大，所以要在安全与性能之间折衷考虑，一般64位是较合适的。RSA的一个比较知名的应用是SSL，在美国和加拿大SSL用128位RSA算法，由于出口限制，在其它地区（包括中国）通用的则是40位版本。
RSA算法研制的最初理念与目标是努力使互联网安全可靠，旨在解决DES算法秘密密钥的利用公开信道传输分发的难题。而实际结果不但很好地解决了这个难题；还可利用RSA来完成对电文的数字签名以抗对电文的否认与抵赖；同时还可以利用数字签名较容易地发现攻击者对电文的非法篡改，以保护数据信息的完整性。通常信息安全的目标通常信息安全的目标可以概括为解决信息的以下问题：
保密性(Confidentiality)保证信息不泄露给未经授权的任何人。 
完整性（Integrity）防止信息被未经授权的人篡改。 
可用性（Availability）保证信息和信息系统确实为授权者所用。 
可控性（Controllability）对信息和信息系统实施安全监控，防止非法利用信息和信息系统。 
密码是实现一种变换，利用密码变换保护信息秘密是密码的最原始的能力，然而，随着信息和信息技术发展起来的现代密码学，不仅被用于解决信息的保密性，而且也用于解决信息的完整性、可用性和可控性。可以说，密码是解决信息安全的最有效手段，密码技术是解决信息安全的核心技术。 
公用密钥的优点就在于，也许你并不认识某一实体，但只要你的服务器认为该实体的CA是可靠的，就可以进行安全通信，而这正是Web商务这样的业务所要求的。例如信用卡购物。服务方对自己的资源可根据客户CA的发行机构的可靠程度来授权。目前国内外尚没有可以被广泛信赖的CA。美国Natescape公司的产品支持公用密钥，但把Natescape公司作为CA。由外国公司充当CA在我国是一件不可想象的事情。
公共密钥方案较保密密钥方案处理速度慢，因此，通常把公共密钥与专用密钥技术结合起来实现最佳性能。即用公共密钥技术在通信双方之间传送专用密钥，而用专用密钥来对实际传输的数据加密解密。另外，公钥加密也用来对专用密钥进行加密。 
在这些安全实用的算法中，有些适用于密钥分配，有些可作为加密算法，还有些仅用于数字签名。多数算法需要大数运算，所以实现速度很慢，不能用于快的数据加密。以下将介绍典型的公开密钥密码算法-RSA。 
RSA算法很好的完成对电文的数字签名以抗对数据的否认与抵赖；利用数字签名较容易地发现攻击者对电文的非法篡改，以保护数据信息的完整性。目前为止，很多种加密技术采用了RSA算法，比如PGP（PrettyGoodPrivacy）加密系统，它是一个工具软件，向认证中心注册后就可以用它对文件进行加解密或数字签名，PGP所采用的就是RSA算法。由此可以看出RSA有很好的应用。
密钥的产生
1. 选择两个大素数，p 和q ，计算出n=qp，n称为RSA算法的模数。p，q 必须保密，一般要求p，q为安全素数，n的长度大于1024bit ，这主要是因为RSA算法的安全性依赖于因子分解大数问题。 
2. 计算n的欧拉数
φ(n)=(p-1)(q-1)
φ(n)定义为不超过n并与n互质的数的个数。
3. 然后随机选择加密密钥e，从[0,φ(n)-1]中选择一个与φ(n)互质的数e作为公开的加密指数。
4. 最后，利用Euclid 算法计算解密密钥d, 满足de≡1(mod φ(n))。其中n和d也要互质。数e和n是公钥，d是私钥。两个素数p和q不再需要，应该丢弃，不要让任何人知道。
5.得到所需要公开密钥和秘密密钥：
公开密钥（即加密密钥）   PK=（e，n）
秘密密钥（即解密密钥）   SK=（d，n）
加密与解密
1. 加密信息 m（二进制表示）时，首先把m分成等长数据块 m1 ,m2,..., mi ，块长s，其中 2^s <= n, s 尽可能的大。
2. 对应的密文是：ci ≡mi^e ( mod n ) ( a )
3. 解密时作如下计算：mi ≡ci^d ( mod n ) ( b ) RSA 可用于数字签名，方案是用 ( a ) 式签名， ( b )式验证。