zoukankan      html  css  js  c++  java
  • 关于公钥和私钥的区别

    今天在解决使用putty免密登陆树莓派的问题,在使用了puttygen生成了两个密钥后,有了一个疑惑:我该在树莓派上面放我本地的哪个密钥,公钥还是私钥?

      1.搜索了一下大脑里面存了很久没用到的知识,私钥是留给自己的,公钥是可以公开的。既然是我在当前电脑上面生成的key,那么私钥我就不能随便给别人,那么放到树莓派上面的必然就是公钥。并且从设计的角度来说,我当前电脑是允许使用使用ssh免密登陆多个电脑的,此时的对应关系是1台我的电脑对应n台我需要远程的电脑。那么对比密钥的自己持有(1个)和公开(n个)有的区别,那么可以佐证我放在树莓派上面的应该是公钥。

      2.接着我又有了一个疑惑,公钥和私钥,是用于加密和解密的。那么谁被用于加密,谁被用于解密?通过公钥和私钥来进行身份认证的流程又是怎么样的呢?

      我提出以下猜想:

        a.私钥是用于加密的,公钥是用来解密的(源于私和共两个字的猜想,这个猜想是错误的)。那么这个身份认证的流程就是我私钥加密一个签名,发送到树莓派上面去。然后树莓派使用公钥解密,确认私钥的发送者是合法的用户。因为私钥是保密的,发送给树莓派的签名被正确解密的话,可以确认发送者的身份是正确的。但是这有一个问题,就是公钥是公开的,那么这个发送给树莓派的签名就可能被网络中监听的程序所解密,从而不经过我允许而获取我加密的内容。因此这个身份认证的流程是有问题的。

        b.公钥用于加密,私钥用于解密。因为我本机持有的是自己的私钥,如果私钥用于解密的话,那么我首先要获得一个加密的信息,才能用于解密。那么身份认证的流程就可能是:笔记本向树莓派请求身份认证。树莓派发送用公钥加密后的信息,我这边用公钥解密以后,那么我该怎么向树莓派证明我已经正确的解密了这个被加密的信息呢?直接发送的话,很容易被监听窃取。监听者可以直接拦截我的报文,然后发送一个和我一样的内容的报文给树莓派,这样树莓派还是无法确认谁是身份合法的。因此这个流程也有问题。

      好吧,我已经烦了,不想再去思考了,我准备直接爬到巨人的肩膀上去直接看结果了(题目不会直接翻答案)。百度非对称加密如下:


    非对称加密算法需要两个密钥:公开密钥(publickey:简称公钥)和私有密钥(privatekey:简称私钥)。公钥与私钥是一对,如果用公钥对数据进行加密,只有用对应的私钥才能解密。因为加密和解密使用的是两个不同的密钥,所以这种算法叫作非对称加密算法。 非对称加密算法实现机密信息交换的基本过程是:甲方生成一对密钥并将公钥公开,需要向甲方发送信息的其他角色(乙方)使用该密钥(甲方的公钥)对机密信息进行加密后再发送给甲方;甲方再用自己私钥对加密后的信息进行解密。甲方想要回复乙方时正好相反,使用乙方的公钥对数据进行加密,同理,乙方使用自己的私钥来进行解密。


      蓝色的部分是重点,唉,这个是大学密码学课程的基础内容。这个遇到了点问题,准备翻书补密码学的课程了。准备补一下基础知识再解决这个内容。

        

  • 相关阅读:
    PAT 1006 Sign In and Sign Out
    PAT 1004. Counting Leaves
    JavaEE开发环境安装
    NoSql数据库探讨
    maven的配置
    VMWARE 下使用 32位 Ubuntu Linux ,不能给它分配超过3.5G 内存?
    XCODE 4.3 WITH NO GCC?
    在苹果虚拟机上跑 ROR —— Ruby on Rails On Vmware OSX 10.7.3
    推荐一首让人疯狂的好歌《Pumped Up Kicks》。好吧,顺便测下博客园可以写点无关技术的帖子吗?
    RUBY元编程学习之”编写你的第一种领域专属语言“
  • 原文地址:https://www.cnblogs.com/kgtone/p/10958069.html
Copyright © 2011-2022 走看看