Chinaunix首页 | 论坛 | 博客
  • 博客访问: 3162752
  • 博文数量: 797
  • 博客积分: 10134
  • 博客等级: 上将
  • 技术积分: 9335
  • 用 户 组: 普通用户
  • 注册时间: 2006-06-22 22:57
个人简介

1

文章分类

全部博文(797)

文章存档

2022年(1)

2021年(2)

2017年(2)

2016年(1)

2015年(4)

2014年(1)

2013年(6)

2012年(6)

2011年(10)

2010年(26)

2009年(63)

2008年(61)

2007年(51)

2006年(563)

我的朋友

分类: LINUX

2006-07-22 15:27:14

说明:环境:debian3.1r2+gnome+gedit+dia(建图工具)
原文发表于http://my.opera.com/cloudislet/blog/
由于图的问题(没办法发那么多图),也建议到我的博客上看原文

现在我总结了ssh2的一些笔记,其中大部分内容来源于《ssh权威指南》一书(OReilly出版社)

ssh是一种协议,分为不兼容的ssh1和ssh2。
特点:
SSH协议的主要特性和优点:
1、 使用强加密技术来保证数据的私密性。端到端通信用随机密钥进行加密,随机密钥为会话进行安全协商,会话结束后被丢弃。支持的算法有ARCFOUR,Blowfish,DES,IDEA,3DES等。
2、通信完整性,确保通信不会被修改。SSH-2基于MD5 AND SHA-1的加密hash算法。
3、认证,即发送者和接收者的身份证明。客户机和服务器双向认证。
4、授权,即对账号进行访问控制。
5、使用转发或隧道技术对其它基于tcp/ip的会话进行加密。支持三种转发,tcp端口转发,X转发,代理转发。

今天我就讲讲密钥的一些理解:

加密是为了防止未授权者读取数据而对数据增加不规则性的过程。加密算法是对增加数据不规则性所采用的方法,最初为明文,也就是“读取有意义”的数据,加密后为密文。
加密过程:使用密钥为参数,密钥是一个字符串(可能是非常长的字符串),通常只有联通的双方持有。
(摘自《ssh权威指南》一书)

个人理解:对于对称加密,只有持有密钥的双方才能互相通信,密钥既用做加密也用于解密。对于非对称加密,一方使用公钥加密,只有持有对应私钥的一方才能解密。也就是说,对称加密是“双方信任关系”(你如果能和我连接说明你也一定持有相同的密钥),非对称加密是“单方面信任关系”(也就是持有公钥的一方,信任持有密钥的一方,因为你能解密我的密文,说明你一定持有密钥,而密钥是“身份”的证明,说明你就是我要联系的人,由于公钥是公开的,持密钥的人不能信任持公钥的人)



对称加密
在对称加密(或叫单密钥加密)中,只有一个密钥用来加密和解密信息。尽管单密钥加密是一个简单的过程,但是双方都必须完全的相信对方,并都持有这个密钥的备份。但要达到这种信任的级别并不是想像中的那么简单。当双方试图建立信任关系时可能一个安全破坏已经发生了。首先密钥的传输就是一个重要问题,如果它被截取,那么这个密钥以及相关的重要信息就没有什么安全可言了。对称加密算法有ides,des,3des,4rc,blowfish等。

非对称加密
非对称加密在加密的过程中使用一对密钥,而不像对称加密只使用一个单独的密钥。一对密钥中一个用于加密,另一个用来解密。如用A加密,则用B解密;如果用B加密,则要用A解密。公钥可以公开,密钥是个人身份证明。
 重要的概念是在这对密钥中一个密钥用来公用,另一个作为私有的密钥;用来向外公布的叫做公钥,另一半需要安全保护的是私钥。非对称加密的一个缺点就是加密的速度非常慢,因为需要强烈的数学运算程序。如果一个用户需要使用非对称加密,那么即使比较少量的信息可以也要花上几个小时的时间。非对称算法有 rsa,dsa。
(上面摘自网络)
《ssh权威指南》对此解释:非对称加密使用一对相关密钥(公钥,密钥),公钥和密钥使用一种“很聪明”的数学方法联系起来:使用公钥加密的数据可以用对应的密钥来解密;虽然私钥的发布是不可能的,公钥可以发布。

个人理解:在对称加密中,比如数学式子y=f(x,a),对应的反解函数x=g(y,a),其中双方A,B,如果只有A,B知道系数(也就是a,可以理解为对称密钥),那么x为明文,y为密文,A把数据x以y的形式传输,即使被第三方C拦截,C不知道系数a,也就没方法把y反解为x。如果a系数足够复杂,我们可以认为比较安全(注意,f(),g()我们应该理解为复杂的数学式子)。

举个例子,发送一段数据(先假设都是字符a-z,A-Z),为了破坏规则性,可以在原文每三个字符加入一个新字符,新加的字符从另一个字符串按顺序提取(这一个字符串相当于系数a,引入系数)。如果约定26个英文字符中,按照原来排列a--z顺序,每一个对应接下去第三个字符(这一步可以认为是引入函数 f()),如a,b,c,d,e,f,g,h,i,j,k,......其中a-d,b-e,c-f...这样的对应,把字符串改变,如你发送了 “hello”,接受方就显示“khoor”(h对应k,e对应h,l对应o等等),这样数据就“不规则”了。

非对称中,有公钥a,密钥b,假设数学式子y=f(x,a),解密时x=g(x,b),其中a(公钥)加密的数据y,只能由b(私钥)来解密为原来的x, f()与g()对应(我认为f,g即“很聪明的数学方法联系起来”合成非对称算法,如rsa,dsa),a与b对应。(大家应该把f(),g()看成复杂的数学运算,a,b为参数)

其实,ssh协议特别简单,围绕着主要问题是怎么样“安全的传送对称密钥”(一旦对称密钥由一方安全发送到另一方,安全连接就建立起来了,以后所有数据就是经过加密的)。不过,对称密钥的“发布”是一个大问题,在对称密钥还没有到达对方时(这时就还没有启动加密),你如何“安全”的把对称密钥“给对方” 呢?可以想引入另为一个密钥,那又如何保证另一个密钥的安全呢?如果能见一面就好了,不过网络环境不可能。这就是所谓的“对称密钥分布问题”(如果对称密钥泄露了,也就无所谓安全了),即怎样来保证对称密钥的安全。

这个问题怎么解决呢?这就是非对称加密的作用了。
其实ssh直接的加密解密还是使用对称密钥的(使用好几个密钥来加密,每一个有不同的作用),因为非对称性加密速度上有缺陷。我们可以引入一个假设关系: A-B,假设A能单方面安全发送数据到B,那么我们可以这么做,A生成一个对称密钥,把对称密钥安全发送给B,然后,建立起了安全连接(对称密钥已经发送去,使用对称密钥来加解密),这时候就是双方安全连接,同时说明A能单方面信任B。在安全连接下,再来验证B对A的信任关系。
“A能单方面安全发送数据到B”,这一步非常关键,而这一步就是由“非对称密钥”来实现的。

下面结合图形及解释来说明:
一 假设A已经获得B的公钥,A可以通过公钥安全发送数据(A单方面安全连接B)
A可以验证B是否有对应私钥:开始连接时,A使用一个公钥B_key_pub,把自己生成的对称密钥H通过公钥(ssh1还有一个服务器非对称密钥, ssh2通过另一种密钥协商算法)加密发送给B,如果B能够解密得到对称密钥H,那么可以解决两个问题:1,B有对应A公钥B_key_pub的私钥 B_key_priv(因为B能够解密得到对称密钥H),说明A是可以信任B的,解决了A单方面信任B,如果B没有私钥,不能解密H,得不到H那么以后连接也没办法解密A的数据;2,通过这种单方面安全的连接,把密钥送到了B。
注意协议中有一步,B需要发送一个确认消息给A,A用这个消息来验证B是否能不能解密数据(即B有没有私钥),如果不能,A就不能信任B,将断开连接。

二如果都通过,此时已经是安全连接。这是A信任B,现在验证B信任A,在B的一方,也应该有A的公钥A_key_pub,此时B可以随机选择一字符串,使用 A的公钥加密,通过数学计算发送给A;如果A能使用私钥A_key_priv解密,把数据解密,把结果通过数学计算发给B,B对应原文,如果能匹配,说明 A有A_key_priv,也就是B能信任A了。

三 双方互相信任,通过协商的对称密钥来安全连接。

总结:非对称密钥其实可以说是为对称密钥服务的,起作用就是解决“对称密钥分布问题”,建立起信任并安全传输对称密钥,可以假设,如果能面对面交换对称密钥,协商密钥细节,那么可以说是不需要非对称密钥的。

这是这几天学习ssh的笔记,本人肯定是初手,各位参考,不对的地方来信指正
阅读(1214) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~