首页 > 代码库 > 软考——公钥和私钥

软考——公钥和私钥

  非对称加密算法需要两个密钥:公开密钥和私有秘钥。这两个是必须成对出现的,如果用的是公钥加密,那么就要私钥进行解密;如果使用私钥加密,同样的,只有对应的公钥进行解密。

信息摘要
  现在假设甲有两把钥匙,一把是公钥,一把是私钥,他将私钥进行保存,公钥对外进行公开,谁都可以获得。甲要给乙写信,甲通过自身的私钥对信息进行加密,然后传递给乙,乙通过甲的公钥进行解密。现在问题出现了,如果甲发给乙的信息被其他拥有甲公钥的人拦截了,那么乙如何确定甲发给乙的信息是否被其他拥有甲公钥的人篡改过呢???为了预防这种情况,出现了信息摘要(digest)

  甲写完信进行发送之前,用Hash函数对信息内容进行加密,生成了一个信息摘要,并再次使用自身的私钥对信息摘要进行加密,这就是所谓的数字签名,同样的乙根据同样的Hash函数对信件内容进行Hash加密,然后将两者对比,如果信件内容被修改过,那么两者肯定是不一致的,只有两者一致,才证明信息内容没有被修改过。

  所以,信息摘要的目的:检测所发送信息是否被第三方修改过
数字证书
  当然,仅仅通过信息摘要也不能保证信息的安全,因为会出现这种情况:丙想要欺骗乙,他偷偷的用自己的公钥替换了甲的公钥,从而冒充甲对乙进行发送消息。乙也头疼了,因为他无法确定公钥是否真的属于甲,他想到一个办法,要求甲去证书中心(CA),为自己的公钥进行认证。甲提交自己的个人信息+甲的公钥,然后证书中心用证书中心的私钥对甲所提交的个人信息+甲的公钥进行加密,并生成了一个数字证书(每个人的数字证书都是唯一确定的)。这样甲给乙写信的时候,附加上自己的数字证书,而乙收到信后,用CA给的公钥解开数字证书,就可以拿到甲的公钥,然后就能证明是甲而不是其他冒名顶替的人所发的信息。

用图说事



甲:

  1 给乙发送自身私钥加密的信息
  2 给认证中心发送(甲的身份证明,甲的公钥)
CA:
  1 用自身私钥对甲(身份证明,甲的公钥)进行加密,产生了数字证书
  2 给乙发送CA的公钥+甲的数字证书
乙:
  1 通过CA的公钥对数字证书解密,获取甲的公钥 
  2 获取甲发送过来的加密信息,通过获取到的甲的公钥对加密信息进行解密