转自:http://blog.sina.com.cn/s/blog_14d6469020102vmzx.html

TCP/IP 安全
机密性: 明文传输(ftp,http,smtp,telnet)
完整性
身份验证

机密性:plaintext-->转换规则-->ciphertext
ciphertext-->转换规则-->plaintext

转换算法:密钥

对称加密:加密和解密都是用同一个密钥    安全性完全依赖于密钥,加密算法都是公开的
与不同的用户通信,使用不同的密钥,导致密钥太多,无法记住管理

数据完整性:
单项加密算法:提取数据特征码
输入一样  输出必然相同
雪崩效应:输入的微笑改变将引起结果的巨大改变
定长输出:无论原始数据多大,结果大小都是相同的
不可逆:无法根据特征码还原原来的数据
A:plaintext:footprint -->B    
B:    使用同样的加密算法  去计算收到的段明文的特征码 与A发过来的特征码比较

中间人攻击:
A:plaintext:footprint -->B  
C:plaintext:footprint-->B   C截取A发给B的内容
B以为C是A     

解决中间人攻击:
A:plaintext:(footprint) -->B    A用密钥给特征码加密
                  B用相同的密钥给特征码解密

但A和B如何商定并传送给特征码加密的密钥:

密钥交换(IKE  internet key exchange):双方协商生成密码
需要互联网协议支撑

Diffie-Hellman算法
A-->B
p(大素数),g(生成数)

A: 在本机内部选择一个随机数x
B:在本机内选择一个随机数y
A:g^x%p -->B
B: g^y%p -->A

互联网上只传送 g,p,g^x%p, g^y%p

A: (g^y%p)^x=g^yx%p
B:(g^x%p)^y=g^xy%p

双方协商生成密码又带来中间人问题,因为密码不是事先双方约定的

公钥加密算法(非对称加密算法)
密钥对:
公钥:任何人都知道   是从私钥中提取出来的
私钥:只有自己知道

如果A写好一封邮件用自己的私钥加密,那么B和C 都能用A的公钥解密  因为公钥大家都知道
如果A用B的公钥加密自己的邮件,那么只有B可以用自己的私钥解密,C是解密不了的,因为C没有B的私钥

A用自己的私钥加密,可以确定身份认证,因为只有A知道自己的私钥,能用公钥解密必然确定发送方为A
A用B公钥加密,可以保证数据机密性

公钥加密算法很少用来加密数据,速度太慢,比对称加密慢上三个数量级

A用自己的私钥加密特征码,就算C截取A的并修改特征码,但他无法用A的密钥来加密特征码,B用A的公钥解密收到的特征码,
因为特征码不是用A的私钥加密的,B就确定该文件不是A发来的

获取A公钥的方法:
问题:    倘若A和B第一次通信时,A发给B的公钥被C截获,C以A的身份将自己的公钥发给B
解决:     由第三方权威机构,将A的公钥信息记录,并由权威机构用自己的私钥加密该记录,存放在该证书上.
该机构也得有公钥和私钥

B用该机构的公钥解密该证书,能解密即可确定是真的机构的证书
再确定证书里A的公钥没问题,即可确定是A

完美解决:双方要事先互相拥有对方的公钥和私钥

A用自己的私钥加密数据的特征码,再自己产生一个随机密码,用B的公钥加密,用该加密的密码加密数据和特征码
B收到后用自己的私钥解密该密码 可确定数据的机密性
再用A的公钥解密特征码 能解密 即可完成身份的确认信
用用单向算法重新计算数据的特征码 与用A的公钥解密的特正码比较,相同,保证数据的完整性