RSA - liutao932/c GitHub Wiki

Welcome to the c wiki! RSA的讲解 公钥和私钥 在现代密码体制中加密和解密是采用不同的密钥(公开密钥),也就是非对称密钥密码系统,每个通信方均需要两个密钥,即公钥和私钥,这两把密钥可以互为加解密。公钥是公开的,不需要保密,而私钥是由个人自己持有,并且必须妥善保管和注意保密。

  公钥私钥的原则:

一个公钥对应一个私钥。 密钥对中,让大家都知道的是公钥,不告诉大家,只有自己知道的,是私钥。 如果用其中一个密钥加密数据,则只有对应的那个密钥才可以解密。 如果用其中一个密钥可以进行解密数据,则该数据必然是对应的那个密钥进行的加密。   非对称密钥密码的主要应用就是公钥加密和公钥认证,而公钥加密的过程和公钥认证的过程是不一样的,稍后将详细讲解一下两者的区别。

加密和认证

加密是将数据资料加密,使得非法用户即使取得加密过的资料,也无法获取正确的资料内容,所以数据加密可以保护数据,防止监听攻击。其重点在于数据的安全性。身份认证是用来判断某个身份的真实性,确认身份后,系统才可以依不同的身份给予不同的权限。其重点在于用户的真实性。两者的侧重点是不同的。

认证中最典型的就是数字证书签名咯,稍后一起讲解。

数字证书的原理

数字证书采用公钥体制,即利用一对互相匹配的密钥进行加密、解密。每个用户自己设定一把特定的仅为本人所知的私有密钥(私钥),用它进行解密和签名;同时 设定一把公共密钥(公钥)并由本人公开,为一组用户所共享,用于加密和验证签名。当发送一份保密文件时,发送方使用接收方的公钥对数据加密,而接收方则使 用自己的私钥解密,这样信息就可以安全无误地到达目的地了。通过数字的手段保证加密过程是一个不可逆过程,即只有用私有密钥才能解密. 在公开密钥密码体制中,常用的一种是RSA体制。 用户也可以采用自己的私钥对信息加以处理,由于密钥仅为本人所有,这样就产生了别人无法生成的文件,也就形成了数字签名。采用数字签名,能够确认以下两点: (1)保证信息是由签名者自己签名发送的,签名者不能否认或难以否认; (2)保证信息自签发后到收到为止未曾作过任何修改,签发的文件是真实文件。

简单的理解就是:

每个用户都有一对私钥和公钥。 私钥用来进行解密和签名,是给自己用的。 公钥由本人公开,用于加密和验证签名,是给别人用的。

当该用户发送文件时,用私钥签名,别人用他给的公钥解密,可以保证该信息是由他发送的。即数字签名。 当该用户接受文件时,别人用他的公钥加密,他用私钥解密,可以保证该信息只能由他接收到。可以避免被其他人看到。

数字证书

是 数字形式的标识,与护照或驾驶员执照十分相似。数字证书则是由证书认证机构(CA)对证书申请者真实身份验证之后,用CA的根证书对申请人的一些基本信息以及申请人的公钥进行签名(相当于加盖发证书机构的公章)后形成的一个数字文件。数字证书包含证书中所标识的实体的公钥(就是说你的证书里有你的公钥),由于证书将公钥与特定的个人匹配,并且该证书的真实性由颁发机构保证(就是说可以让大家相信你的证书是真的),因此,数字证书为如何找到用户的公钥并知道它是否有效这一问题提供了解决方案。

------------------------------------------------------------------分割线----------------------------------------------------------------------

  文件加密

  我们知道加密的目的就是在于证明用户身份,防止别人偷截你的文件或内容。我们同样知道现在网络还存在许多不安全因素,在我们发送电子邮件或传输文件时或许有很多人在别处密切监视着我们,特别是对一些大公司伟输一些机密文件时,怎样实现安全传输呢?在WIN2000中为我们提供了具有相当安全级别的加密措施,那就是用个人的公钥和私钥配对使用加密或解密。下面就以一个具体例子来讲解加密和解密,以及保护加密文件的过程。

  现假设有A公司的老板名叫BOb,B公司的老板名叫Alice,现BOb想传输一个文件File BS给Alice,这个文件是有关于一个合作项目标书议案,属公司机密,不能给其它人知道,而恰好有一个C公司的老板Linda对A和B公司有关那项合作标书非常关注,总想取得A公司的标书议案,于是他时刻监视他们的网络通信,想如果Bob通过网络传输这份标书议案时从网络上截取它。为了防止Linda截取标书议案,实现安全传输,我们可以采用以下步骤:

  1、首先Alice把自己的公钥(设为Public Key A)通过网络传给Bob;

  2、Bob用Alice的公钥(Public Key)给标书议案文件File BS加密;

  3、Bob把经过加密的文件传给Alice;

  4、Alice收到Bob传来的File BS后再用自己的私钥(设为 Private Key)来解密。

  或许有朋友会要问,在第一步中C公司的老板Linda同样可以截取Alice的公钥(Public Key),且在第3步中也可以截取加密后的标书议案文件File BS,但首先要知道这都没有任何意义。因为虽然Linda获取了Alice的公钥和标书议案文件File BS,但用Alice公钥加密后的文件只能用Alice的私钥来解开,即使使用Alice的公钥也无法自己解密,因为公钥和私钥必须配对使用,这就是发明这种加密方法的绝妙之处。所以在这个传输中可算是比较安全的,当然安全是相对的,据说曾经有黑客专家宣称可以利用个人的公钥推算出其私钥,结果事实证明可能性几乎为零,即使可能也要10000年后才可以,你说这又有什么意义呢?至于这个人公钥和私钥如何获得我下面将详细介绍,在此不作重叙。

  数字签名

  数字签名也主要是为了证明发件人身份,就象我们来看到的某文件签名一样,但现在要说的签名是采取数字的方式,它可以防止别人仿签,以过加密后的签名就变得面目全非,别人根本不可能看到真正的签名样子,它与前面所讲的文件加密机理是一样的,但方法不太一样,下面介绍如下。

  仍就和文件加密所举的例子一样,Bob要在所发的文件File BS后面要加以签名,以证明这份标书的有效性(因为Bob是A公司的老板),同样是发给B公司的老板Alice,公司C的老板如果想要假冒Bob的签名发另一份标书给Alice,以达到破坏A公司中标的目的。

  1、Bob首先把自己的公钥发给Alice;

  2、Bob再要对File BS文件签名以Bob的私钥进行加密,加密后再发给Alice;

  3、Bob把经过加密的签名文件传给Alice;

  4、Alice在收到加密后签名文件File BS后用Bob的公钥进行解密。

  因为File BS已经用加密方式进行加密,同上例,我们知道Linda无法获得Alice的私钥,也就无法阅读到文件内容,但它可以用Bob的公钥解读File BS的签名。但这同样没有意义,因为如果Linda要仿冒Bob的数字签名必须要有Bob的私钥,否则Alice无法用Bob的公钥对签名进行解密,或许你又要说如果Linda也把自己的公钥发给Alice,那么Alice怎样区别哪一个公钥是真正的Bob的公钥呢?这就要涉及到后面要讲的公钥的获得途径了,先要说的就是Alice可以到发证机关进行查询来辨别,就这样Linda的阴谋也就不能得逞。

如果鉴别公钥,就涉及到认证的问题,一般都是权威机构去做个事,当然是需要money的;例如CA机构等,如果只是自己用,也可以自己做CA。

================================================================

根证书

   根证书是CA认证中心给自己颁发的证书,是信任链的起始点。安装根证书意味着对这个CA认证中心的信任。

总结

  根据非对称密码学的原理,每个证书持有人都有一对公钥和私钥,这两把密钥可以互为加解密。公钥是公开的,不需要保密,而私钥是由证书持人自己持有,并且必须妥善保管和注意保密。

  数字证书则是由证书认证机构(CA)对证书申请者真实身份验证之后,用CA的根证书对申请人的一些基本信息以及申请人的公钥进行签名(相当于加盖发证书机构的公章)后形成的一个数字文件。CA完成签发证书后,会将证书发布在CA的证书库(目录服务器)中,任何人都可以查询和下载,因此数字证书和公钥一样是公开的。  

  可以这样说,数字证书就是经过CA认证过的公钥,而私钥一般情况都是由证书持有者在自己本地生成的,由证书持有者自己负责保管。具体使用时,签名操作是发送方用私钥进行签名,接受方用发送方证书来验证签名;加密操作则是用接受方的证书进行加密,接受方用自己的私钥进行解密。