ssh 公钥私钥原理

这篇具有很好参考价值的文章主要介绍了ssh 公钥私钥原理。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

SSH(Secure Shell,安全外壳)是一种网络安全协议,通过加密和认证机制实现安全的访问和文件传输等业务。传统远程登录或文件传输方式,例如Telnet、FTP,使用明文传输数据,存在很多的安全隐患。随着人们对网络安全的重视,这些方式已经慢慢不被接受。SSH协议通过对网络数据进行加密和验证,在不安全的网络环境中提供了安全的登录和其他安全网络服务。作为Telnet和其他不安全远程shell协议的安全替代方案,目前SSH协议已经被全世界广泛使用,大多数设备都支持SSH功能。

ssh主要有两种登录方式:第一种为密码口令登录,第二种为公钥登录
一、密码登录

(1)远程主机收到用户的登录请求,把自己的公钥发给用户。
(2)用户使用这个公钥,将登录密码加密后,发送到远程主机。(客户端输入密码的过程)
(3)远程主机用自己的私钥,解密登录密码,如果密码正确,就同意用户登录。

这个过程本身是安全的,但是实施的时候存在一个风险:如果有人截获了登录请求,然后冒充远程主机,将伪造的公钥发给用户,那么用户很难辨别真伪。因为不像https协议,SSH协议的公钥是没有证书中心(CA)公证的,也就是说,都是自己签发的。

可以设想,如果攻击者插在用户与远程主机之间(比如在公共的wifi区域),用伪造的公钥,获取用户的登录密码。再用这个密码登录远程主机,那么SSH的安全机制就荡然无存了。这种风险就是著名的"中间人攻击"(Man-in-the-middle attack)。

如果你是第一次登录对方主机,系统会出现下面的提示:

$ ssh user@host
 
The authenticity of host 'host (12.18.429.21)' can't be established.
 
RSA key fingerprint is 98:2e:d7:e0:de:9f:ac:67:28:c2:42:2d:37:16:58:4d.
 
Are you sure you want to continue connecting (yes/no)?

这段话的意思是,无法确认host主机的真实性,只知道它的公钥指纹,问你还想继续连接吗?

所谓"公钥指纹",是指公钥长度较长(这里采用RSA算法,长达1024位),很难比对,所以对其进行MD5计算,将它变成一个128位的指纹。上例中是98:2e:d7:e0🇩🇪9f:ac:67:28:c2:42:2d:37:16:58:4d,再进行比较,就容易多了。

很自然的一个问题就是,用户怎么知道远程主机的公钥指纹应该是多少?回答是没有好办法,远程主机必须在自己的网站上贴出公钥指纹,以便用户自行核对。

假定经过风险衡量以后,用户决定接受这个远程主机的公钥。

当远程主机的公钥被接受以后,它就会被保存在文件$HOME/.ssh/known_hosts之中。下次再连接这台主机,系统就会认出它的公钥已经保存在本地了,从而跳过警告部分,直接提示输入密码。

每个SSH用户都有自己的known_hosts文件,此外系统也有一个这样的文件,通常是/etc/ssh/ssh_known_hosts,保存一些对所有用户都可信赖的远程主机的公钥。

二、公钥登录
  公钥登录是为了解决每次登录服务器都要输入密码的问题,流行使用RSA加密方案,主要流程包含:
1、客户端生成RSA公钥和私钥
2、客户端将自己的公钥存放到服务器
3、客户端请求连接服务器,服务器将一个随机字符串发送给客户端
4、客户端根据自己的私钥加密这个随机字符串之后再发送给服务器
5、服务器接受到加密后的字符串之后用公钥解密,如果正确就让客户端登录,否则拒绝。这样就不用使用密码了。

公钥和私钥:

一个公钥对应一个私钥。
密钥对中,让大家都知道的是公钥,不告诉大家,只有自己知道的,是私钥。
如果用其中一个密钥加密数据,则只有对应的那个密钥才可以解密。
如果用其中一个密钥可以进行解密数据,则该数据必然是对应的那个密钥进行的加密。

RSA算法的作用:
1、加密:公钥加密私钥解密

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

A在自己电脑上生成RSA钥匙文件,一个私钥文件一个公钥文件,并将他的公钥传送给B。
此时B要传送信息给A,于是B用A的公钥加密他的消息,然后传送给A。【网络上传输的密文,没有A的私钥无法解密,其他人获取之后也没用】
A用他的私钥解密B的消息。

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

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

1、B将自己公钥给A
2、B将文件用自己私钥加密传送给A
3、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)当该用户发送文件时,用私钥签名,别人用他给的公钥验证签名,可以保证该信息是由他发送的。当该用户接受文件时,别人用他的公钥加密,他用私钥解密,可以保证该信息只能由他接收到。

参考文献:https://www.cnblogs.com/fengfengyang/p/15519311.html
参考文献:https://www.ruanyifeng.com/blog/2011/12/ssh_remote_login.html文章来源地址https://www.toymoban.com/news/detail-606768.html

到了这里,关于ssh 公钥私钥原理的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 怎么验证公钥和私钥是一对

    公钥和私钥都是一串字符,长得也没有什么关联性,那么当拿到一个公钥和一个私钥后怎么验证它们两个是一对呢?先说说为什么会有这个疑问,最近在对接一些SDK时经常需要做签名和验证签名的工作,双方要相互提供公钥来完成后续的身份验证,测试过程中生成了多个密钥

    2024年02月04日
    浏览(76)
  • 【Android】查看keystore的公钥和私钥

            查看前准备好.keystore文件,安装并配置openssl、keytool。文件路径中不要有中文。 1.从keystore中获取MD5证书 2.导出公钥文件   输入完成后回车,会提示输入一次密码,输入密码后回车,就能生成cer文件了。 3.转换成pem证书 4.查看公钥 输入指令,回车后输入密码,再回

    2024年01月24日
    浏览(60)
  • 使用 OpenSSL 扩展来实现公钥和私钥加密

    首先,你需要生成一对公钥和私钥。可以使用 OpenSSL 工具来生成: 1、生成私钥 2、从私钥生成公钥: 现在你有了一个私钥( private_key.pem )和一个对应的公钥( public_key.pem )。下面是如何在 PHP 中使用它们进行加密和解密: 3、检测是否支付OPENSSL,或用phpinfo(); 上述代码中,

    2024年02月03日
    浏览(60)
  • 区块链知识习题测试:公钥和私钥、公有链、元宇宙

    1、比特币水龙头是什么? • A、是一个水龙头的品牌名称 • B、是一个民间组织 • C、是一个网站 • D、是一个黑客的代号 正确答案:C 答案解析:在刚诞生那几年,比特币很2113便宜,并5261且非常容易获得。2010年年底,为了让更4102多人知道并尝试使用比特1653币,程序员加

    2024年02月05日
    浏览(49)
  • 代码管理git生成ssh key (公钥私钥)配置GitLab

    git在我们日常项目管理中起了很大的作用,是我们能够更好地管理我们的代码,git的管理是基于ssh密钥进行的,所以在使用前我们需要进行ssh配置。 首先我们需要配置user name和email 配置完成我们需要去查看我们本地是否已经存在.ssh文件夹(一般存在c盘用户下面,也可使用命令

    2024年02月16日
    浏览(65)
  • jdk 中的 keytool 的使用,以及提取 jks 文件中的公钥和私钥

    这里暂时只需要知道如何使用就可以了。 首先是生成一个密钥, 解释一下这里的选项, -alias 密钥对的名称 -keypass 密钥密码 -validity 有效期,这里是以天为单位 -storepass 存储库的密码 -keystore 指定生成的密钥文件存放的位置,这里的  fanyfull.jks  表示的是当前目录下的  fan

    2024年02月08日
    浏览(61)
  • C语言实现:从sm2 PEM文件中提取公钥和私钥因子

    快速链接: . 👉👉👉 个人博客笔记导读目录(全部) 👈👈👈 付费专栏-付费课程 【购买须知】: 密码学实践强化训练–【目录】 👈👈👈 我们知道使用openssl命令行从国密sm2的pem中提公钥私钥因子的命令行如下: openssl ec -in sm2_test_priv.pem -text -noout 从私钥pem提取私钥 openssl

    2024年02月11日
    浏览(52)
  • 【git】git ssh 公钥私钥 在 windows和mac 双系统分别如何生成 以及对接各个平台说明

    win和mac 双系统分别如何生成 git ssh windows版本需要下载git bash:https://gitforwindows.org/ 在 git bash 中输入如下指令: 这里需要注意这条指令 ssh-keygen -t rsa -C \\\"xx@qq.com\\\" 如果一路回车则生成的默认为一个私钥 id_rsa 和公钥 id_rsa.pub,且路径为 /c/Users/你的用户名/.ssh/ ,一旦我们指定名称

    2024年02月17日
    浏览(61)
  • RSA算法习题 (采用RSA算法,其中e=7,p=11,q=13,求出公钥和私钥,并求出明文85进行加密后的密文。)

    1、采用RSA算法,其中e=7,p=11,q=13,求出公钥和私钥,并求出明文85进行加密后的密文。 2. 找出质数 P、Q P=11 Q=13 3. 计算公共模数 N = P * Q = 143 4. 欧拉函数 Φ(N) = (P-1)*(Q-1) = 10 *12 = 120 5. 计算公钥E 1Eφ(N) 所以1E120 E的取值范围{3,7,9,11,13,17,19,...,117,119} E的取值必须和φ(N)互质 取

    2024年02月09日
    浏览(97)
  • gitee 配置ssh 公钥(私钥)

    步骤1:添加/生成SSH公钥,码云提供了基于SSH协议的Git服务,在使用SSH协议访问项目仓库之前,需要先配置好账户/项目的SSH公钥。 绑定账户邮箱: 利用下面命令生成sshkey: 步骤2: 步骤3:查看公钥信息命令 把ssh密钥添加到码云,打开C盘–用户–你的用户名–找到.ssh文件夹

    2024年02月06日
    浏览(42)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包