博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ssh认证原理
阅读量:5266 次
发布时间:2019-06-14

本文共 802 字,大约阅读时间需要 2 分钟。

所谓的密钥认证,实际上是使用一对加密字符串,一个称为公钥(public key), 任何人都可以看到其内容,用于加密;另一个称为密钥(private key),只有拥有者才能看到,用于解密。 通过公钥加密过的密文使用密钥可以轻松解密,但根据公钥来猜测密钥却十分困难。

ssh 的密钥认证就是使用了这一特性。服务器和客户端都各自拥有自己的公钥和密钥。 为了说明方便,以下将使用这些符号。

Ac 客户端公钥
Bc 客户端密钥
As 服务器公钥
Bs 服务器密钥

在认证之前,客户端需要通过某种方法将公钥 Ac 登录到服务器上。

认证过程分为两个步骤。

1. 会话密 钥(session key)生成

1. 客户端 请求连接服务器,服务器将 As 发送给客户端。
2. 服务器生成会话ID(session id),设为 p,发送给客户端。
3. 客户端生成会话密钥(session key),设为 q,并计算 r = p xor q。
4. 客户端将 r 用 As 进行加密,结果发送给服务器。
5. 服务器用 Bs 进行解密,获得 r。
6. 服务器进行 r xor p 的运算,获得 q。
7. 至此服务器和客户端都知道了会话密钥q,以后的传输都将被 q 加密。
2. 认证
1. 服务器 生成随机数 x,并用 Ac 加密后生成结果 S(x),发送给客户端
2. 客户端使用 Bc 解密 S(x) 得到 x
3. 客户端计算 q + x 的 md5 值 n(q+x),q为上一步得到的会话密钥
4. 服务器计算 q + x 的 md5 值 m(q+x)
5. 客户端将 n(q+x) 发送给服务器
6. 服务器比较 m(q+x) 和 n(q+x),两者相同则认证成功

转载于:https://www.cnblogs.com/xusongwei/archive/2012/10/29/2745372.html

你可能感兴趣的文章
URL传递中文参数,大坑一枚,Windows与Linux效果竟然不一致(两种解决方法)
查看>>
使用jquery-validationEngine框架,4步实现前端JS校验
查看>>
你是如何看待技术的
查看>>
我在群硕实习的日子
查看>>
我的10年软件情缘--2001到2011
查看>>
阿里在线笔试题 折半方法求最接近sum值
查看>>
python-字符串
查看>>
Rust初步(六):在C#中使用Rust组件
查看>>
final修饰符
查看>>
django-admin 配置
查看>>
函数的进阶
查看>>
一个简单的网页服务器
查看>>
对百度杀毒软件的评价
查看>>
高级程序设计第六章(2)--创建对象
查看>>
微信上传素材返回 '{"errcode":41005,"errmsg":"media data missing"}',php5.6返回
查看>>
2017年11月Dyn365/CRM用户社区活动报名
查看>>
mysql 数据库磁盘占用量统计
查看>>
七七四十九劫,九九八十一难
查看>>
C++中的链接错误
查看>>
linux 安装 ArcSDE10.1
查看>>