标题：密钥密码体系
背景简介
直到现代以前，密码学几乎专指加密算法：将普通信息（明文）转换成难以理解的资料（密文）的过程；解密算法则是其相反的过程：由密文转换回明文；密码机（cipher或cypher）包含了这两种算法，一般加密即同时指称加密与解密的技术。 密码机的具体运作由两部分决定：一个是算法，另一个是钥匙。钥匙是一个用于密码机算法的秘密参数，通常只有通讯者拥有。历史上，钥匙通常未经认证或完整性测试而被直接使用在密码机上，密钥来源于密码技术领域。
在汉语口语中，电脑系统或网络使用的个人帐户口令 （password）也常被以密码代称，虽然口令亦属密码学研究的范围，但学术上口令与密码学中所称的钥匙并不相同，即使两者间常有密切的关连。
密钥的定义
密钥 正确读音【mi yue】统一四声
密钥是一种参数，它是在明文转换为密文或将密文转换为明文的算法中输入的数据.
密钥的发展
对于普通的对称密码学，加密运算与解密运算使用同样的密钥。通常,使用的加密算法比较简便高效，密钥简短，破译极其困难，由于系统的保密性主要取决于密钥的安全性，所以，在公开的计算机网络上安全地传送和保管密钥是一个严峻的问题。正是由于对称密码学中双方都使用相同的密钥，因此无法实现数据签名和不可否认性等功能。此即为对称密钥体系，又称通用密钥体系。
20世纪70年代以来，一些学者提出了公开密钥体制，即运用单向函数的数学原理，以实现加、解密密钥的分离。加密密钥是公开的，解密密钥是保密的。这种新的密码体制，引起了密码学界的广泛注意和探讨，不像普通的对称密码学中采用相同的密钥加密、解密数据，此即为非对称密钥体系，又称公用密钥体系。
密钥密码体系的分类
密钥分为两种：对称密钥与非对称密钥，所以密钥密码体系就分为两个领域，通用密钥体系和公用密钥体系。
对称密钥加密　对称密钥加密，又称私钥加密，即信息的发送方和接收方用一个密钥去加密和解密数据。它的最大优势是加/解密速度快， 适合于对大数据量进行加密，但密钥管理困难。
非对称密钥加密系统　非对称密钥加密，又称公钥密钥加密。它需要使用一对密钥 来分别完成加密和解密操作，一个公开发布，即公开密钥，另一 个由用户自己秘密保存，即私用密钥。信息发送者用公开密钥去 加密，而信息接收者则用私用密钥去解密。公钥机制灵活，但加密和解密速度却比对称密钥加密慢得多。
通用密钥体系　通用密钥密码体系的加密密钥Ke和解密密钥Kd是通用的，即发送方和接收方使用同样密钥的密码体制，也称之为“传统密码体制”。
例如,人类历史上最古老的“恺撒密码”算法，是在古罗马时代使用的密码方式。由于无论是何种语言文字，都可以通过编码与二进制数字串对应，所以经过加密的文字仍然可变成二进制数字串，不影响数据通信的实现。
现以英语为例来说明使用恺撒密码方式的通用密钥密码体系原理。
例如：恺撒密码的原理是，对于明文的各个字母，根据它在26个英文字母表中的位置，按某个固定间隔n变换字母，即得到对应的密文。这个固定间隔的数字n就是加密密钥，同时也是解密密钥。例cryptograsphy是明文，使用密钥n=3，加密过程如图所示：
明文： C R Y P T O G R A P H Y
| | |
| |................. | 密钥：n=3
| | |
密文： F U B S W R J U D S K B
明文的第一个字母C在字母表中的位置设为1，以4为间隔，往后第4个字母是F，把C置换为F；同样，明文中的第二个字母R的位置设为1，往后第4个字母是U，把R置换为U；依此类推，直到把明文中的字母置换完毕，即得到密文。密文是意思不明的文字，即使第三者得到也毫无意义。通信的对方得到密文之后，用同样的密文n=4，对密文的每个字母，按往前间隔4得到的字母进行置换的原则，即可解密得到明文。
恺撒密码方式的密钥只有26种，只要知道了算法，最多将密钥变换26次做试验，即可破解密码。因此，恺撒密码的安全性依赖于算法的保密性。
在通用密码体制中，目前得到广泛应用的典型算法是DES算法。DES是由“转置”方式和“换字”方式合成的通用密钥算法，先将明文（或密文）按64位分组，再逐组将64位的明文（或密文），用56位（另有8位奇偶校验位，共64位）的密钥，经过各种复杂的计算和变换，生成64位的密文（或明文），该算法属于分组密码算法。
DES算法可以由一块集成电路实现加密和解密功能。该算法是对二进制数字化信息加密及解密的算法，是通常数据通信中，用计算机对通信数据加密保护时使用的算法。DES算法在1977年作为数字化信息的加密标准，由美国商业部国家标准局制定，称为“数据加密标准”，并以“联邦信息处理标准公告”的名称，于1977年1月15日正式公布。使用该标准，可以简单地生成DES密码。
公用密钥体系　
1976年提出公共密钥密码体制，其原理是加密密钥和解密密钥分离。加密技术采用一对匹配的密钥进行加密、解密，具有两个密钥，一个是公钥一个是私钥，它们具有这种性质：每把密钥执行一种对数据的单向处理，每把的功能恰恰与另一把相反，一把用于加密时，则另一把就用于解密。用公钥加密的文件只能用私钥解密，而私钥加密的文件只能用公钥解密。 公共密钥是由其主人加以公开的，而私人密钥必须保密存放。为发送一份保密报文，发送者必须使用接收者的公共密钥对数据进行加密，一旦加密，只有接收方用其私人密钥才能加以解密。 相反地，用户也能用自己私人密钥对数据加以处理。换句话说，密钥对的工作是可以任选方向的。这提供了"数字签名"的基础，如果要一个用户用自己的私人密钥对数据进行了处理，别人可以用他提供的公共密钥对数据加以处理。由于仅仅拥有者本人知道私人密钥，这种被处理过的报文就形成了一种电子签名----一种别人无法产生的文件。 数字证书中包含了公共密钥信息，从而确认了拥有密钥对的用户的身份。
这样，一个具体用户就可以将自己设计的加密密钥和算法公诸于众，而只保密解密密钥。任何人利用这个加密密钥和算法向该用户发送的加密信息，该用户均可以将之还原。公共密钥密码的优点是不需要经安全渠道传递密钥，大大简化了密钥管理。它的算法有时也称为公开密钥算法或简称为公钥算法。
公钥本身并没有什么标记，仅从公钥本身不能判别公钥的主人是谁。
在很小的范围内，比如A和B这样的两人小集体，他们之间相互信任，交换公钥，在互联网上通讯，没有什么问题。这个集体再稍大一点，也许彼此信任也不成问题，但从法律角度讲这种信任也是有问题的。如再大一点，信任问题就成了一个大问题。
证书　
互联网络的用户群决不是几个人互相信任的小集体，在这个用户群中，从法律角度讲用户彼此之间都不能轻易信任。所以公钥加密体系采取了另一个办法，将公钥和公钥的主人名字联系在一起，再请一个大家都信得过有信誉的公正、权威机构确认，并加上这个权威机构的签名。这就形成了证书。
由于证书上有权威机构的签字，所以大家都认为证书上的内容是可信任的；又由于证书上有主人的名字等身份信息，别人就很容易地知道公钥的主人是谁。 
1978年提出公共密钥密码的具体实施方案，即RSA方案。
1991年提出的DSA算法也是一种公共密钥算法，在数字签名方面有较大的应用优势
公开密钥密码体制是现代密码学的最重要的发明和进展。
在公钥体制中，加密密钥不同于解密密钥。人们将加密密钥公之于众，谁都可以使用；而解密密钥只有解密人自己知道。迄今为止的所有公钥密码体系中，RSA系统是最著名、使用最广泛的一种。
CA(Certificate Authority)　电子签证机关（即CA）。CA也拥有一个证书（内含公钥），当然，它也有自己的私钥，所以它有签字的能力。网上的公众用户通过验证CA的签字从而信任CA，任何人都应该可以得到CA的证书（含公钥），用以验证它所签发的证书。
如果用户想得到一份属于自己的证书，他应先向CA提出申请。在CA判明申请者的身份后，便为他分配一个公钥，并且CA将该公钥与申请者的身份信息绑在一起，并为之签字后，便形成证书发给那个用户（申请者）。
如果一个用户想鉴别另一个证书的真伪，他就用CA的公钥对那个证书上的签字进行验证（如前所述，CA签字实际上是经过CA私钥加密的信息，签字验证的过程还伴随使用CA公钥解密的过程），一旦验证通过，该证书就被认为是有效的。
CA除了签发证书之外，它的另一个重要作用是证书和密钥的管理。
由此可见，证书就是用户在网上的电子个人身份证，同日常生活中使用的个人身份证作用一样。CA相当于网上公安局，专门发放、验证身份证。
公开密钥算法RSA
公开密钥算法是在1976年由当时在美国斯坦福大学的迪菲（Diffie）和赫尔曼(Hellman)两人首先发明的（论文"New Direction in Cryptography"）。但目前最流行的RSA是1977年由MIT教授Ronald L.Rivest,Adi Shamir和Leonard M.Adleman共同开发的,分别取自三名数学家的名字的第一个字母来构成的。
1976年提出的公开密钥密码体制思想不同于传统的对称密钥密码体制，它要求密钥成对出现，一个为加密密钥(e)，另一个为解密密钥(d)，且不可能从其中一个推导出另一个。自1976年以来，已经提出了多种公开密钥密码算法，其中许多是不安全的， 一些认为是安全的算法又有许多是不实用的，它们要么是密钥太大，要么密文扩展十分严重。多数密码算法的安全基础是基于一些数学难题， 这些难题专家们认为在短期内不可能得到解决。因为一些问题(如因子分解问题)至今已有数千年的历史了。
公钥加密算法也称非对称密钥算法，用两对密钥：一个公共密钥和一个专用密钥。用户要保障专用密钥的安全；公共密钥则可以发布出去。公共密钥与专用密钥是有紧密关系的，用公共密钥加密的信息只能用专用密钥解密，反之亦然。由于公钥算法不需要联机密钥服务器，密钥分配协议简单，所以极大简化了密钥管理。除加密功能外，公钥系统还可以提供数字签名。
公钥加密算法中使用最广的是RSA。RSA使用两个密钥，一个公共密钥，一个专用密钥。如用其中一个加密，则可用另一个解密，密钥长度从40到2048bit可变，加密时也把明文分成块，块的大小可变，但不能超过密钥的长度，RSA算法把每一块明文转化为与密钥长度相同的密文块。密钥越长，加密效果越好，但加密解密的开销也大，所以要在安全与性能之间折衷考虑，一般64位是较合适的。RSA的一个比较知名的应用是SSL，在美国和加拿大SSL用128位RSA算法，由于出口限制，在其它地区（包括中国）通用的则是40位版本。
RSA算法研制的最初理念与目标是努力使互联网安全可靠，旨在解决DES算法秘密密钥的利用公开信道传输分发的难题。而实际结果不但很好地解决了这个难题；还可利用RSA来完成对电文的数字签名以抗对电文的否认与抵赖；同时还可以利用数字签名较容易地发现攻击者对电文的非法篡改，以保护数据信息的完性。 公用密钥的优点就在于，也许你并不认识某一实体，但只要你的服务器认为该实体的CA是可靠的，就可以进行安全通信，而这正是Web商务这样的业务所要求的。例如信用卡购物。服务方对自己的资源可根据客户CA的发行机构的可靠程度来授权。目前国内外尚没有可以被广泛信赖的CA。美国Natescape公司的产品支持公用密钥，但把Natescape公司作为CA。由外国公司充当CA在我国是一件不可想象的事情。
公共密钥方案较保密密钥方案处理速度慢，因此，通常把公共密钥与专用密钥技术结合起来实现最佳性能。即用公共密钥技术在通信双方之间传送专用密钥，而用专用密钥来对实际传输的数据加密解密。另外，公钥加密也用来对专用密钥进行加密。
在这些安全实用的算法中，有些适用于密钥分配，有些可作为加密算法，还有些仅用于数字签名。多数算法需要大数运算，所以实现速度很慢，不能用于快的数据加密。以下将介绍典型的公开密钥密码算法-RSA。
RSA算法很好的完成对电文的数字签名以抗对数据的否认与抵赖；利用数字签名较容易地发现攻击者对电文的非法篡改，以保护数据信息的完整性。目前为止，很多种加密技术采用了RSA算法，比如PGP（PrettyGoodPrivacy）加密系统，它是一个工具软件，向认证中心注册后就可以用它对文件进行加解密或数字签名，PGP所采用的就是RSA算法。由此可以看出RSA有很好的应用。
密钥的产生
1. 选择两个大素数，p 和q 。
2. 计算： n = p * q (p，q分别为两个互异的大素数，p，q 必须保密，一般要求p，q为安全素数，n的长度大于512bit ，这主要是因为RSA算法的安全性依赖于因子分解大数问题)。有欧拉函数 (n)=(p-1)(q-1)。
3. 然后随机选择加密密钥e，要求 e 和 ( p - 1 ) * ( q - 1 ) 互质。
4. 最后，利用Euclid 算法计算解密密钥d, 满足de≡1(mod φ(n))。其中n和d也要互质。数e和n是公钥，d是私钥。两个素数p和q不再需要，应该丢弃，不要让任何人知道。
加密与解密
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 )式验证。