转自: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的公钥解密的特正码比较,相同,保证数据的完整性