`
conkeyn
  • 浏览: 1529278 次
  • 性别: Icon_minigender_1
  • 来自: 厦门
社区版块
存档分类
最新评论

公钥系统_数字签名_数字证书工作原理入门 (转)

阅读更多

公钥系统 / 数字签名 / 数字证书工作原理入门 (转)

 

译者按:
加密和解密使用同一个密钥的算法,称为对称加密算法;加密和解密使用的是不同的密钥,称为非对称加密算法,公钥系统即属于非对称加密算法。对于对称加密而言,需要着重保护的是对称密钥,对于公钥算法而言,需要着重保护的是私钥。
公钥加密算法,以及衍生出的数字签名、数字证书技术,不仅广泛应用于 Internet 通讯中,例如 HTTPS 协议中的 SSL/TLS ,在单机系统中也越来越受到重视,例如 Windows XP 的设备驱动程序、 .NET GAC assembly 都要求数字签名。微软从 Windows98/NT4 起即提供了 Cryptograph API ,支持 DES RC2 RC4 IDEA 等对称加密算法和 RSA 公钥系统等非对称密算法,以及 MD5 SHA MAC 等摘要( Digest ,也称为 Hash ,散列)算法。
本文译自:
http://developer.netscape.com/tech/security/ssl/howitworks.html

这是一篇生动浅显的文章,对了解公钥系统的工作原理很有帮助, CSDN 上已有一篇译文:

http://www.csdn.net/Develop/article/27/27524.shtm
但本人认为上文的关键地方不够准确,欠通顺。本译文在上篇译文的基础上,关键的术语采用了通用译法,少数地方采用了意译,而且附有英文原文,有翻译不当的地方大家可以对照原文。
希望能对公钥系统有兴趣的朋友们有所帮助。

BTW :上面提到的所有对称加密和非对称加密,它们的加解密算法都是公开的,只要不知道密钥,算法的设计者有信心使加密结果不会被轻易破解,这点与 WAPI 截然不同:)

以下是中英文对照的译文:

Public key encryption is a technique that uses a pair of asymmetric keys for encryption and decryption. Each pair of keys consists of a public key and a private key. The public key is made public by distributing it widely. The private key is never distributed; it is always kept secret.
公钥加密是使用一对非对称的密钥加密或解密的技术。每一对密钥由公钥和私钥组成。公钥被广泛发布。私钥是隐密的,不公开。

Data that is encrypted with the public key can be decrypted only with the private key. Conversely, data encrypted with the private key can be decrypted only with the public key. This asymmetry is the property that makes public key cryptography so useful.
用公钥加密的数据只能够被私钥解密。反过来,使用私钥加密的数据只能用公钥解密。这个非对称的特性使得公钥加密很有用。

USING PUBLIC KEY CRYPTOGRAPHY FOR AUTHENTICATION
使用公钥加密法认证

Authentication is the process of verifying identity so that one entity can be sure that another entity is who it claims to be. In the following example involving Alice and Bob, public key cryptography is easily used to verify identity. The notation {something}key means that something has been encrypted or decrypted using key.
验证是一个核实身份的过程,以便一方能确认另一方的确是其所声称的那个身份。在下列例子中包括甲和乙,公钥加密会轻松地校验身份。符号 { 数据 } key 意味着 " 数据 " 已经使用 key 加密或解密。

Suppose Alice wants to authenticate Bob. Bob has a pair of keys, one public and one private. Bob discloses to Alice his public key (the way he does this is discussed later). Alice then generates a random message and sends it to Bob:

  A->B   random-message

Bob uses his private key to encrypt the message and returns the encrypted version to Alice:

B->A   {random-message}bobs-private-key

Alice receives this message and decrypts it by using Bob's previously published public key. She compares the decrypted message with the one she originally sent to Bob; if they match, she knows she's talking to Bob. An imposter presumably wouldn't know Bob's private key and would therefore be unable to properly encrypt the random message for Alice to check.
假如甲想校验乙的身份。乙有一对密钥,一个是公开的,另一个是私有的。乙透露给甲他的公钥。甲产生一个随机信息发送给乙。

—— 〉乙: random message

乙使用他的私钥加密信息,把加密后的信息返回甲。

—— 〉甲: {random-message} 乙的私钥

甲收到这个信息然后使用乙的前面公开的公钥解密。他比较解密后的信息与他原先发给乙的信息。如果它们完全一致,就会知道在与乙说话。任意一个中间人不会知道乙的私钥,也不能正确加密甲检查的随机信息。

BUT WAIT, THERE'S MORE
等一下,事情还没有完

Unless you know exactly what you are encrypting, it is never a good idea to encrypt something with your private key and then send it to somebody else. This is because the encrypted value can be used against you (remember, only you could have done the encryption because only you have the private key).
用私钥加密某些信息,然后发送给其他人不是一个好主意,除非你清楚知道这个信息的含义。因为加密后的信息可能被用来对付你(记住,别人知道该信息是你加密的,因为只有你有加密用的私钥)。

So, instead of encrypting the original message sent by Alice, Bob constructs a message digest and encrypts that. A message digest is derived from the random message in a way that has the following useful properties:

The digest is difficult to reverse. Someone trying to impersonate Bob couldn't get the original message back from the digest.
An impersonator would have a hard time finding a different message that computed to the same digest value.

所以,取代直接加密甲发来的原始信息,乙创建一个信息摘要并且加密该摘要。信息摘要由任意信息运算而来,并具有以下有用的特性:

1. 从这个摘要值难以还原出原始信息。任何人即使伪装成乙,也不能从摘要值得到原始信息;

2. 不同的信息很难计算出相同的摘要值;

By using a digest, Bob can protect himself. He computes the digest of the random message sent by Alice and then encrypts the result. He sends the encrypted digest back to Alice. Alice can compute the same digest and authenticate Bob by decrypting Bob's message and comparing values.
使用摘要,乙能够保护自己。他计算甲发出的任意信息的摘要,加密摘要值,然后发送加密的摘要值给甲。甲能够计算出相同的摘要值并且解密乙的信息,最终认证乙。
(译者注:摘要( Digest )算法又称为散列 (Hash) 算法)

GETTING CLOSER
进一步的讨论

The technique just described is known as a digital signature. Bob has signed a message generated by Alice, and in doing so he has taken a step that is just about as dangerous as encrypting a random value originated by Alice. Consequently, our authentication protocol needs one more twist: some (or all) of the data needs to be originated by Bob.

A->B  hello, are you bob?
B->A    Alice, This Is bob { digest[Alice, This Is Bob] } bobs-private-key

When he uses this protocol, Bob knows what message he is sending to Alice, and he doesn't mind signing it. He sends the unencrypted version of the message first, "Alice, This Is Bob." Then he sends the digested-encrypted version second. Alice can easily verify that Bob is Bob, and Bob hasn't signed anything he doesn't want to.

刚刚讨论的技术称为数字签名。乙直接在甲产生的信息上签名,这样做和加密甲产生的任意信息是同样危险的。因此我们的验证协议还需要加一些技巧:某些或全部信息需要由乙产生:

—— 〉乙:你好,你是乙么 ?
—— 〉甲:甲,我是乙 { 摘要 [ 甲,我是乙 ] } 乙的私钥

使用这个协议,乙知道他发送给甲的信息的内容,他不介意在上面签名。他先发送不加密的信息, " 甲,我是乙 " ,然后发送该信息的加密后的摘要。甲可以非常方便地核实乙就是乙,同时,乙还没有在他不想签名的信息上签名。

HANDING OUT PUBLIC KEYS
分发公钥

How does Bob hand out his public key in a trustworthy way? Let's say the authentication protocol looks like this:

A->B   hello
B->A  Hi, I'm Bob, bobs-public-key
A->B prove it
B->A Alice, This Is bob  { digest[Alice, This Is Bob] } bobs-private-key

那么,乙怎样以可信的方式提交他的公钥呢?看看如下所示的验证协议:

—— 〉乙:你好
—— 〉甲:嗨,我是乙,乙的公钥
—— 〉乙:请证明
—— 〉甲:甲,我是乙 { 摘要 [ 甲,我是乙 ] } 乙的私钥

With this protocol, anybody can be Bob. All you need is a public and private key. You lie to Alice and say you are Bob, and then you provide your public key instead of Bob's. Then you prove it by encrypting something with the private key you have, and Alice can't tell you're not Bob.
使用这个协议,任何人都能够成为 " " 。只要你有一对公钥和私钥。你欺骗甲说你就是乙,只要提供你的公钥,而不是乙的公钥。然后,你发送用你的私钥加密的信息,证明你的身份。甲并不能发觉你并不是乙。

To solve this problem, the standards community has invented an object called a certificate. A certificate has the following content:

The certificate issuer's name
The entity for whom the certificate is being issued (aka the subject)
The public key of the subject
Some time stamps

The certificate is signed using the certificate issuer's private key. Everybody knows the certificate issuer's public key (that is, the certificate issuer has a certificate, and so on...). Certificates are a standard way of binding a public key to a name.

为了解决这个问题,标准化组织发明了证书。一个证书有以下的内容:

       证书发行者的名称
      
被发给证书的实体(也称为主题)
      
主题的公钥
      
一些时间戳

证书使用发行者的私钥加密。每一个人都知道证书发行者的公钥(就是说,每个证书的发行者也拥有一个证书,以此类推)。证书是一个把公钥与一个名称绑定的标准方式。

By using this certificate technology, everybody can examine Bob's certificate to see whether it's been forged. Assuming that Bob keeps tight control of his private key and that it really is Bob who gets the certificate, then all is well. Here is the amended protocol:

A->B   hello
B->A Hi, I'm Bob, bobs-certificate
A->B prove it
B->A Alice, This Is bob { digest[Alice, This Is Bob] } bobs-private-key

Now when Alice receives Bob's first message, she can examine the certificate, check the signature (as above, using a digest and public key decryption), and then check the subject (that is, Bob's name) and see that it is indeed Bob. She can then trust that the public key is Bob's public key and request Bob to prove his identity. Bob goes through the same process as before, making a message digest of his design and then responding to Alice with a signed version of it. Alice can verify Bob's message digest by using the public key taken from the certificate and checking the result.

通过使用证书技术,每个人都可以检查乙的证书,判断其是否被伪造。假设乙控制好他的私钥,并且他确实是得到证书的乙,就万事大吉了。下面是修订后的协议:

—— 〉乙:你好
—— 〉甲:嗨,我是乙,乙的证书
—— 〉乙:请证明
—— 〉甲:甲,我是乙 { 摘要 [ 甲, 我是乙 ] } 乙的私钥

现在当甲收到乙的第一个信息,他能检查证书,核查证书上的签名(如上所述,使用摘要和公钥解密),检查证书中的主题(这里是乙的姓名),确定是乙。他就能相信公钥就是乙的公钥,然后要求乙证明自己的身份。乙通过前面描述过的过程,制作一个信息摘要,用一个签名版本答复甲。甲可以通过使用从证书上得到的公钥检验乙的信息摘要,并对比结果。

A bad guy - let's call him Mallet - can do the following:

A->M hello
M->A Hi, I'm Bob, bobs-certificate
A->M prove it
M->A   ????

But Mallet can't satisfy Alice in the final message. Mallet doesn't have Bob's private key, so he can't construct a message that Alice will believe came from Bob.

假设有一个坏小子,我们称他为 H ,他可以这么做:

—— H :你好
H——
〉甲:你好,我是乙,乙的证书
—— H :请证明
H——
〉甲:???

H 不能满足甲的最后一个信息,他没有乙的私钥,因此他不能建立一个令甲相信是来自乙的信息。

EXCHANGING A SECRET
交换密钥( secret

Once Alice has authenticated Bob, she can do another thing - she can send Bob a message that only Bob can decode:

A->B   {secret}bobs-public-key


The only way to find the secret is by decrypting the above message with Bob's private key. Exchanging a secret is another powerful way of using public key cryptography. Even if the communication between Alice and Bob is being observed, nobody but Bob can get the secret.

一旦甲已经验证乙后,他就可以做另外的事情了 -- 发送给乙一个只有乙可以解密、阅读的(另一个)密钥:

—— 〉乙: { secret } 乙的公钥

只有使用乙的私钥才能解密上述信息,得到 secret (另一个密钥)。交换(额外的)密钥是公钥密码术提供的另一个强有力的手段。即使在甲和乙之间的通讯被侦听,只有乙才能得到密钥。

This technique strengthens Internet security by using the secret as another key, but this time it's a key to a symmetric cryptographic algorithm (such as DES, RC4, or IDEA). Alice knows the secret because she generated it before sending it to Bob. Bob knows the secret because Bob has the private key and can decrypt Alice's message. Because they both know the secret, they can both initialize a symmetric cipher algorithm and then start sending messages encrypted with it. Here is a revised protocol:

A->B  hello
B->A  Hi, I'm Bob, bobs-certificate
A->B  prove it
B->A  Alice, This Is bob { digest[Alice, This Is Bob] } bobs-private-key
A->B ok bob, here is a secret {secret} bobs-public-key
B->A some message}secret-key
 
How secret-key is computed is up to the protocol being defined, but it could simply be a copy of secret.

使用 secret 作为另一个密钥增强了网络的安全性,但是现在这个密钥将用于对称加密算法的(例如 DES RC4 IDEA )。(译者注:公钥算法在加密大信息量时开销比较大,所以在加密大信息量时一般采用对称加密算法,常规通讯使用公钥系统是不堪重负的。所以本文在身份验证后要利用公钥系统的可靠性交换一个对称加密的密钥,以后的通讯就采用对称加密算法进行保护。)因为是甲在发送给乙之前产生的密钥,所以甲知道这个密钥。乙也知道密钥,因为乙有私钥,能够解密甲的信息。由于他们都知道密钥,他们就都能够初始化一个对称加密算法,从开始发送(用对称加密算法)加密后的信息。下面是修定后的协议:

—— 〉乙:你好
—— 〉甲:嗨,我是乙,乙的证书
—— 〉乙:请证明
—— 〉甲:甲,我是乙 { 摘要 [ 甲,我是乙 ] } 乙的私钥
—— 〉乙:你好乙,这里是密钥

分享到:
评论

相关推荐

    Java加密和数字签名编程快速入门.rar_Java加密_java 数字 签名_java 数字签名_数字 签名_数字签名

    通过阅读"Java加密和数字签名编程快速入门",无论是初学者还是有一定经验的开发者,都能掌握Java中加密和数字签名的基本原理和实际应用。"www.pudn.com.txt"可能是提供额外链接或资源的文本文件,而"Java加密和数字...

    易语言验证微软数字签名源码

    通过实践这样的项目,不仅能深入理解数字签名的工作原理,还能提升你在易语言中的编程技巧。 总的来说,易语言验证微软数字签名源码是一个很好的学习项目,它涵盖了网络安全、公钥加密以及API调用等多个方面的知识...

    Java加密和数字签名编程快速入门

    4. 签名与证书:数字签名通常与X.509证书结合使用,证书包含公钥和颁发者的身份信息,确保公钥的来源可信。 三、示例代码 在学习过程中,通过编写实际的Java代码来练习加密和数字签名的使用,例如: - 创建一个简单...

    公钥基础设施 kpi 简介

    公钥基础设施(Public Key Infrastructure, 简称PKI)是一种用于验证数字证书持有者身份的技术,它在网络安全中扮演着至关重要的角色。KPI,即关键性能指标(Key Performance Indicator),在这里指的是评估PKI系统...

    pki(公钥基础设施)课件

    这一章节可能涵盖了非对称加密算法如RSA、DSA或ECC的工作原理,以及X.509数字证书的结构和作用。 **2. 密码学入门(第2章)** 密码学是PKI的理论基石,本章可能涉及对称加密、非对称加密、哈希函数和消息认证码...

    PKI基础知识入门,密码学,CA基础

    6. **数字证书**:数字证书由权威的第三方机构——认证中心(Certification Authority, CA)颁发,包含公钥、发布者信息以及CA的数字签名。证书使得用户可以信任公钥的合法性,确保通信的安全。 7. **CA基础**:CA...

    密码学原理与实践

    书中的内容可能还包括公钥基础设施(PKI)、证书和X.509标准,这些都是构建安全网络环境的关键组件。 在哈希函数部分,读者会学习到如何通过哈希函数检测数据篡改,以及如何结合公钥密码构造安全的数字签名。此外,...

    android安全机制文档

    数字证书是公钥基础设施(PKI)的一部分,它包含了一个实体的公钥以及由证书颁发机构(CA)签名的信息,如实体的名称。根证书是CA信任链的起点,安装根证书意味着信任该CA。当用户或系统接收一个数字证书时,会使用...

    PKI入门级介绍

    **公开密钥基础设施(PKI)**是一种基于公钥加密技术的系统,用于管理和验证用户的数字证书以及加密和解密信息。PKI主要由以下几个核心组成部分构成: - **数字证书**:用来验证用户或设备的身份。 - **证书颁发机构...

    openssl编程入门(含完整示例).rar

    3. **证书管理**:OpenSSL可以生成和管理X.509数字证书,这些证书用于验证网络服务器的身份,确保用户与正确的服务器进行交互。 4. **命令行工具**:OpenSSL提供了丰富的命令行工具,如`openssl s_client`用于检查...

    Java安全性编程实例.zip_java入门

    理解SSL的工作原理,包括证书、公钥和私钥的概念,以及如何创建和验证数字签名,对于安全编程至关重要。 HTTPS则是HTTP协议与SSL/TLS(Transport Layer Security,SSL的后续版本)的结合,提供了更高级别的安全保障...

    密码学入门,收集高能帖

    SSL/TLS利用了对称加密和非对称加密技术,以及数字证书来实现安全通信。 #### 六、总结 密码学作为信息安全的基础,对于现代社会的数据保护至关重要。通过对称加密、非对称加密和相关协议的学习与应用,我们可以更...

    IOS APP测试入门

    私钥用于创建数字签名,而公钥则用于验证签名的有效性。获取和配置这些证书和Provisioning是测试人员必须具备的技能之一。 测试辅助小工具的介绍是文件的另一个重要部分。iFile是一个文件管理器,可以用来浏览和...

    openssl入门好文

    - **证书管理**:服务器向客户端出示数字证书,证明其身份,客户端可以通过证书验证服务器的身份。 #### 三、OpenSSL介绍 **3.1 OpenSSL简介** OpenSSL是一个开源的软件库,提供了广泛的密码学功能,包括SSL/TLS...

    诺基亚2700C证书

    诺基亚2700C是一款经典的入门级手机,它在功能机时代广受欢迎,尤其在新兴市场中占据了显著地位。这款设备的“证书”主要指的是它的软件安全认证和相关配置文件,确保设备的安全性和可靠性。当我们谈论诺基亚2700C的...

    密码学课件PPT.zip

    同时,也会讨论非对称加密的公钥和私钥的概念,以及公钥基础设施(PKI)在数字证书中的应用。 3. 散列函数:散列函数是密码学中另一个重要的概念,用于数据完整性检查和消息认证。例如,MD5和SHA-1虽然已被认为不...

    密码学相关, 初入学习 图解密码技术

    PKI是一套用于管理和验证数字证书的系统,包括证书颁发机构(CA)、注册机构(RA)、证书存储和撤销列表(CRL)。它确保了公钥的安全分发和身份验证。 6. SSL/TLS协议: 用于互联网安全通信,实现服务器和客户端...

    密码学课程设计.7z

    4. **公钥基础设施(PKI)**:PKI是基于证书的系统,由证书颁发机构(CA)负责发放和管理数字证书,用于建立信任链路,保障网络通信的安全。 5. **SSL/TLS协议**:用于网络通信的加密协议,广泛应用于HTTPS,确保数据在...

    [密码学介绍]_it_密码学_

    它包括了证书颁发机构(CA)和证书注册机构(RA)等组成部分,负责管理用户的公钥和私钥,并确保数字证书的可信性。用户在通信过程中,通过验证对方的数字证书来确认身份,从而确保了通信的安全性。 密码学的范畴远...

    ASN1_BER_DER_编码子集入门指南

    这在需要确定性编码的场景中非常有用,例如数字签名验证过程中。 DER编码的主要约束包括: 1. **唯一性**:每个ASN.1值必须有一个唯一的DER编码。 2. **规范性**:遵循一系列规则来确保编码的规范性和简洁性。 3. ...

Global site tag (gtag.js) - Google Analytics