Friday, February 26, 2010

数字签名和数据加密

北京这两天的雾特别大, 去逛有些不爽, 加上这几天都有出去逛, 干脆休息一天, 坐着看看文档
好久没有怎么看文档了。

一沉下去,就被"数字签名"这一概念搞得了点乱:
1. 首先是android手机上的不同程序要想为同一个user ID, 一定需要程序的数字签名相同
2. 然后是ubuntu upgrade时出现PGP error。

都是与“签名”这一概念扯上关系的。

沉就沉下去吧。 花点时间搞明白。

自己所知道


初见PGP时, 大约还是学生時期,那时只知道有PGP这个“东西“, 大概了解PGP的用途: 保护个人隐私, 数据安全。但是中国的一般计算机用户基本就不会理会这种事。
再说, 那时还算是个小小白. 戴着windows的链锁在跳舞。

工作后碰到ssh的, 会碰到“公钥“与”私钥“这两个概念。关于这方面的理论就不说了, 搜一下就一堆信息出来。

PGP与RSA,DSA的关系

Pretty Good Privacy (PGP) is a computer program that provides cryptographic privacy and authentication. PGP is often used for signing, encrypting and decrypting e-mails to increase the security of e-mail communications. It was created by Philip Zimmermann in 1991.
可以看到, PGP就是一种软件。它利用了“公钥”体系理论。
RSA, DSA为“公钥”体系的一种具体方式。

PGP和GPG

从名字看上去很纠结, 它们都是类似的东西
PGP: http://en.wikipedia.org/wiki/Pretty_Good_Privacy

“公钥”体系的加密与解密

RSA(Rivest-Shamir-Adleman)算法是一种基于大数不可能质因数分解假设的公匙体系。简单地说就是找两个很大的质数,一个公开即公钥,另一个不告诉任何人,即私钥。这两个密匙是互补的,就是说用公匙加密的密文可以用私匙解密,反过来也一样

证书与公钥的关系

http://en.wikipedia.org/wiki/X.509 页面可以看到:
In cryptographyX.509 is an ITU-T standard for a public key infrastructure (PKI) for single sign-on (SSO) and Privilege Management Infrastructure (PMI). X.509 specifies, amongst other things, standard formats for public key certificatescertificate revocation listsattribute certificates, and a certification path validation algorithm.
X.509是证书统一的格式标准

http://en.wikipedia.org/wiki/Public_key_certificate 看到:
In cryptography, a public key certificate (also known as a digital certificate or identity certificate) is an electronic document which uses a digital signature to bind together a public key with an identity — information such as the name of a person or an organization, their address, and so forth. The certificate can be used to verify that a public key belongs to an individual.
我们平时说的"数字证书"就是这样的一种东西: public key再加上一堆信息按照X.509的格式组成的文件。 

申请证书的过程

用户首先产生自己的密钥对,并将公共密钥及部分个人身份信息传送给认证中心。认证中心在核实身份后,将执行一些必要的步骤,以确信请求确实由用户发送而来,然后,认证中心将发给用户一个数字证书,该证书内包含用户的个人信息和他的公钥信息,同时还附有认证中心的签名信息。数字证书由独立的证书发行机构发布。数字证书各不相同,每种证书可提供不同级别的可信度。可以从证书发行机构获得您自己的数字证书

所谓的签名

从wikipedia里找到一幅很好的图片:

图中说明了签名和认证的过程. 但是有一点没有说明的: 认证签名时怎么确认使用certificate(也就是public key)就是发出者的呢?, 需要实现这种认证, 要有第三方认证机构的存在
* certificate可能会和数据文件一起发出, 也有可能不一起发出.

自签名与第三方认证机构

为了做到证明某一个certificate就是发出者的证书, 出现了第三方认证机构. 

说到这里, 已经不是技术问题了. 认证机构比的就是信用. 使用者使用前需要认同的一点: 认证机构上的证书都是可信的.

认证机构有两种性质的:
1. 商业
2. 非商业

注: 不同的认证机构不一定形网络. 有些认证机构是独立的. 

利用“公钥”体系对数据进行加密

上面一节: “公钥”体系的加密与解密 已经说到了“公钥”体系是可以把数据进行加密的。 但是存在一个问题: “公钥“体系的加密与解密速度是很慢的。
在这点上, “公钥”体系远远比不上对称加密方法快。 

PGP类型软件则结合了“公钥”体系和对称加密方法。它除了签名功能外, 还提供了一种功能:对数据进行加密, 实现数据在传输过程中安全性。 

实现方法: 每次使用PGP软件时,PGP都随机产生一个128位的IDEA会话密钥,用IDEA密钥来加密需要传输的数据(对称加密)。然后使用公钥对IDEA密钥加密,这两次加密的数据被一并传输。 通过这种方法间接地保护需要传输的数据内容