SSH公钥登陆原理

在平时工做中咱们常常要远程登陆服务器,这就要用到SSH协议:html

$ ssh user@host

主要有两种登陆方式:第一种为密码口令登陆,第二种为公钥登陆算法

密码口令登陆安全

  经过密码进行登陆,主要流程为:服务器

    一、客户端链接上服务器以后,服务器把本身的公钥传给客户端网络

    二、客户端输入服务器密码经过公钥加密以后传给服务器ssh

    三、服务器根据本身的私钥解密登陆密码,若是正确那么就让客户端登陆post

公钥登陆加密

  公钥登陆是为了解决每次登陆服务器都要输入密码的问题,流行使用RSA加密方案,主要流程包含:url

    一、客户端生成RSA公钥和私钥spa

    二、客户端将本身的公钥存放到服务器

    三、客户端请求链接服务器,服务器将一个随机字符串发送给客户端

    四、客户端根据本身的私钥加密这个随机字符串以后再发送给服务器

    五、服务器接受到加密后的字符串以后用公钥解密,若是正确就让客户端登陆,不然拒绝。这样就不用使用密码了。

   具体作法请参考:Linux使用ssh公钥实现免密码登陆Linux

   下面主要说说RSA

  先介绍两个概念:

    对称加密:对称加密是最快速、最简单的一种加密方式,加密(encryption)与解密(decryption)用的是一样的密钥(secret key)。对称加密有不少种算法,因为它效率很高,因此被普遍使用在不少加密协议的核心当中。对称加密一般使用的是相对较小的密钥,通常小于256 bit。由于密钥越大,加密越强,但加密与解密的过程越慢。若是你只用1 bit来作这个密钥,那黑客们能够先试着用0来解密,不行的话就再用1解;但若是你的密钥有1 MB大,黑客们可能永远也没法破解,但加密和解密的过程要花费很长的时间。密钥的大小既要照顾到安全性,也要照顾到效率。对称加密的一大缺点是密钥的管理与分配,换句话说,如何把密钥发送到须要解密你的消息的人的手里是一个问题。在发送密钥的过程当中,密钥有很大的风险会被黑客们拦截。现实中一般的作法是将对称加密的密钥进行非对称加密,而后传送给须要它的人。

    非对称加密:非对称加密为数据的加密与解密提供了一个很是安全的方法,它使用了一对密钥,公钥(public key)和私钥(private key)。私钥只能由一方安全保管,不能外泄,而公钥则能够发给任何请求它的人。非对称加密使用这对密钥中的一个进行加密,而解密则须要另外一个密钥。好比,你向银行请求公钥,银行将公钥发给你,你使用公钥对消息加密,那么只有私钥的持有人--银行才能对你的消息解密。与对称加密不一样的是,银行不须要将私钥经过网络发送出去,所以安全性大大提升。目前最经常使用的非对称加密算法是RSA算法。虽然非对称加密很安全,可是和对称加密比起来,它很是的慢,因此咱们仍是要用对称加密来传送消息,但对称加密所使用的密钥咱们能够经过非对称加密的方式发送出去。

  公钥和私钥:

  1. 一个公钥对应一个私钥。
  2. 密钥对中,让你们都知道的是公钥,不告诉你们,只有本身知道的,是私钥。
  3. 若是用其中一个密钥加密数据,则只有对应的那个密钥才能够解密。
  4. 若是用其中一个密钥能够进行解密数据,则该数据必然是对应的那个密钥进行的加密。

   RSA算法的做用:
    一、加密:公钥加密私钥解密

        主要用于将数据资料加密不被其余人非法获取,保证数据安全性。使用公钥将数据资料加密,只有私钥能够解密。即便密文在网络上被第三方获取因为没有私钥则没法解密。从而保证数据安全性。     

      1. A在本身电脑上生成RSA钥匙文件,一个私钥文件一个公钥文件,并将他的公钥传送给B。
      2. 此时B要传送信息给A,因而B用A的公钥加密他的消息,而后传送给A。【网络上传输的密文,没有A的私钥没法解密,其余人获取以后也没用】
      3. A用他的私钥解密B的消息。

    二、认证:私钥加密公钥解密

        主要用于身份验证,判断某个身份的真实性。使用私钥加密以后,用对应的公钥解密从而验证身份真实性。

          A要验证B是不是真实用户

          一、B将本身公钥给A

                                二、B将文件用本身私钥加密传送给A

          三、A根据B的公钥解密,若是成功则为真实身份用户

 

      SSH公钥登陆则用的是第二种功能。

      安全性: 这种算法很是可靠,密钥越长,它就越难破解。根据已经披露的文献,目前被破解的最长RSA密钥是768个二进制位。也就是说,长度超过768位的密钥,还没法破解(至少没人公开宣布)。所以能够认为,1024位的RSA密钥基本安全,2048位的密钥极其安全。因此咱们在用ssh-keygen命令时候要注意密钥长度,具体参数为:

 

-b bits
   指定密钥长度。对于RSA密钥,最小要求768位,默认是2048位。DSA密钥必须刚好是1024位(FIPS 186-2 标准的要求)。

 

  至少不能少于768。通常不用写默认就是2048了。哈哈!

 

      总结:

 公钥与私钥使用场景: (1)私钥用来进行解密和签名,是给本身用的。 (2)公钥由本人公开,用于加密和验证签名,是给别人用的。   (3)当该用户发送文件时,用私钥签名,别人用他给的公钥验证签名,能够保证该信息是由他发送的。当该用户接受文件时,别人用他的公钥加密,他用私钥解密,能够保证该信息只能由他接收到。