推荐连接
加密解密技术基础
网络基础
网络通信的实现方案有2套协议家族:OSI、TCP/IP
TCP/IP才是我们现实使用的模型,两个主机互相通信时是自上而下的数据包用于数据报文封装,另外一端则是实现自下而上的报文解封装;我们知道两台主机通信并不是计算机本身通信而是进程和进程之间通信的,进程是运行在用户空间上的,内核空间主要是实现更为通用的基本功能,用户空间则是实现某一具体应用相关的内容;
通信协议分为两层:
- 通信子网:为了完成报文安全无误送到到对端
- 资源子网:完成数据的组织和在应用层的交换
位于用户空间的是资源子网和位于内核空间的是通信子网;任何一个主机的数据报文为了完成通信都要通过网络来完成通信;
在内核空间中,通信资源中的功能是通过内核中的代码实现的(内核编译)
在用户空间中,资源子网靠什么来实现?
在用户空间每安装一款软件它都能作为协议的客户端或者服务器端互相通信使用;如安装了httpd,它从而就能为http协议端的服务端工作,浏览器就能作为http协议的客户端使用;
因此,在用户空间,所谓应用层协议是要靠一个又一个具体的能够进行网络通信的程序来实现,这个程序发起为进程之后可以通过向内核发起系统调用,调用内核中的通信子网,从而完成数据报文封装完成网络通信的;
应用层是一个泛称,其上可以实现多种协议,而每一种协议都可以靠一个或多个程序来实现;
TCP/IP五层体系结构
应用层(application layer) 直接为用户的应用进程提供服务 各应用层协议(HTTP,FTP,SMTP等) 运输层(transport layer) 负责向两个主机中进程之间的通信提供服务 TCP 和 UDP 协议的作用范围(提供进程之间的逻辑通信) 网络层(network layer) 负责为分组交换网上的不同主机提供通信服务 IP(Internet Protocol,因特网协议)(提供主机之间的逻辑通信) ARP(Address Resolution Protocol,地址解析协议) ICMP(?Internet Control Message Protocol,因特网控制消息协议) IPv6、ICMPv6、ND、MLD等 数据链路层(data link layer) 将源自网络层来的数据可靠地传输到相邻节点的目标机网络层 数据链路层的主要协议有: (1)PPP点对点协议(Point-to-Point Protocol); (2)以太网(Ethernet); (3)高级数据链路协议(High-Level Data Link Protocol); (4) 帧中继(Frame Relay); (5) 异步传输模式(Asynchronous Transfer Mode); 其他参考: 数据链路层 http://baike.baidu.com/link?url=_2clhMXrPgRoSdWi9-2ssuFObZJlPaNrXuAtaO3QArAXII0_Y2tucu98Ek8yVhi3Ivbg27X9ol2wth3Yg7SqVa 物理层(physical layer) 为数据端设备提供传送数据通路、传输数据
IPC:Inter Process Communication进程间通信
同一个主机上: signal #发现号 message queue:消息队列 shm:share memory #共享内存 semnphor #打手势 不同主机上: rpc:remote procecure call远程过程调用 socket:#套接字通信 cip:port <--> sip:port 注意:套接字有三类 SOCK_STREAM:基于TCP流式socket SOCK_DGRAM:基于UDP的数据报式socket SOCK_RAW:原始套接字,处理ICMP、IGMP等网络报文,可以编写内核不处理的IP数据包,还可以创建自定义的IP数据包首部;
不同主机上进程间通信:socket
真正建立通信时是一对套接字在进行通信
cip:port <--> sip:port
cip:55673 <-- --> sip:80
监听模式: LISTEN 无论有没有进程必须打开(ip:port)
有些常见的应用都有固定的port,如http 80端口;
各客户端用大于4W的随机端口进行通信
为什么需要数据加密
服务器一旦开启监听某端口上建立套接字通信,就意味着互联网上任何的都可以加载这里面的数据;当然绝大部分时候我们还是要避免这么情况的,通信双方其中一方在实现发报文时,如果能够让数据编码改成别人看不懂的形式,但对端能还原成能看懂的形式这样就可以了(加密解密)。
早期很多基础设施是没有加解密功能的,网络安全是不被重视的,比如FTP、SMPTP、POP3等,有些web服务是不具备加解密功能的,比如nginx,apache等
在应用层与传输层间加了半层库SSL,帮我们完成数据加解密功能;如果程序自带加解密功能,可以不经过这个过程一样可以实现数据安全;
如图:
加密解密技术基础
安全的目标:
保密性:confidentiality
确保通信信息不被任何无关的人看到;
完整性:integrity
实现通信双方的报文不会产生信息丢失;
数据完整性
系统完整性
可用性:availability
通信任何一方产生的信息应当对授权实体可用;
攻击类型:
威胁保密性的攻击:窃听、通信量分析;
威胁完整性的攻击:更改、伪装、重放、否认
重放:攻击者能截获双方通信的报文,并开始一遍遍发送
否认:通信的双方的某一方发送的,下订单说没下;
威胁可用性的攻击:拒绝服务(DoS)
解决方案
- 1、技术(加密和解密)
- 2、服务(用于抵御攻击的服务,也即是为了上述安全目标而特地设计的安全服务)
加密和解密:
传统加密方法:替代加密方法、置换加密方法
现代加密方法:现代块加密方法
现代块加密:把发送的整个数据切割固定成块,每块单独加密,前后两个块建立关联关系;
服务:
认证机制
访问控制机制
密钥算法和协议(实现上述加密和解密、服务的)有四大类:
- 对称加密
- 公钥加密
- 单向加密
- 认证协议
Linux系统上述功能解决方案:OpenSSL(ssl),GPG(pgp);GPG是gpg协议的实现,OpenSSL是ssl协议和加密加密库的实现
The GNU Privacy Guard GnuPG is a complete and free implementation of the OpenPGP standard as defined by RFC4880 (also known as PGP) https://www.gnupg.org/ GPG是基于pgp协议实现的非对称加密工具; 命令行工具:gpg 其他参考: GnuPG HOWTO (中文版) http://www.gnupg.org/howtos/zh/ GPG(pgp)加解密中文完整教程 http://www.alexgao.com/2009/01/24/gpg/
加密算法和协议
对称加密:加密和解密使用同一个密钥
说明:加密数据依赖与算法和密钥,安全性依赖于密钥。因为算法是公开的人人都可以得到,但是密钥只有通信的主机才有; DES:Data Encryption Standard IBM实验室研发;加密端64位明文产生64为密文,解密端64位密文还原64位明文,8个字节为一块,加密和解密使用56位密钥,DES使用16个迭代块实现,是现代加密算法; 3DES: Triple DES DES的增强版,比DES多3个数量级 AES: Advanced Data Encryption Standard; (128bits, 192bits, 256bits, 384bits) 3DES虽然现在是安全的,但随着计算机硬件的更新,总有一天要被攻破;AES算法欲取待3DES算法,他支持128,192和256位密钥长度,有效的密钥长度可达上千位。 更重要的是,AES算法采用了更为高效的编写方法,对CPU的占用率较少;目前广泛使用。 商业:Blowfish,twofish,IDEA,RC6,CAST5等等... 特性: 1、加密、解密使用同一个密钥 2、将原始数据分割成为固定大小的块,逐个进行加密; 缺陷: 1、密钥过多:作为服务器端需要与成千上万个人通信,每一个人都有密钥, 2、密钥分发困难:密钥交换困难
公钥加密:密钥分成公钥和与之配对的私钥
公钥:从私钥中提取产生;公共给所有人;pubkey 私钥:通过工具创建,使用者自己留存,必须保证其私密性;secret key; 特点:公钥和私钥都能对数据加密和解决;用公钥加密的数据,只能使用与之配对的私钥解密;反之亦然; 用途: 数组签名:主要在于让接收方确认发送方的身份,完成身份认证; 密钥交换:发送方用对方的公钥加密一个对称密钥,并发送给对方; 数据加密:很少使用,一般都是用来加密码对称加密的密码 用公钥加密的数据,只有私钥能解密,其保密性能到了保障;性能较差 用私钥加密的数据,只能用公钥解密,任何人都何以获得公钥,可以确认发送方身份(身份认证); 算法:RSA,DSA,ELGamal DSS: Digital Signature Standard DSA: Digital Signature Algorithm RSA:能实现签名,加密和解密, DSA:只能加密,只能做数字签名(身份认证) ELGamal:商业算法 就算法本身的实现来讲,公钥加密技术比对称加密技术的速度慢上差不多3个数量级,一个数量级就是10倍,所以3个数量级不是30倍,而是1000倍。因此,在加密数据时是很少用到公钥去加密的。
单向加密:即提取数据指纹;只能加密,不能机密
特性: 定长输出:无论原来的数据是多大级别,其加密结果长度一样; 雪崩效应:原始数据修小改变,将会导致结果巨大变化; 不可逆:不能通过特征码还原数据(就比如拿到一个人的指纹无法,还原一个人) 功能:完整性; 算法: 1、md5:message digest,128bits 2、sha1:secure hash algorithm,160bits 3、sha224:secure hash algorithm,256bits 4、sha256:secure hash algorithm,256bits 5、sha384:secure hash algorithm,384bits 6、sha512:secure hash algorithm,512bits 用途:保证数据完整性:如在一个网站下载软件,为了验证软件在下载过程中没有被第三方修改, 网站会提供一个MD5和软件的特征码,只要把MD5码下载下来和我们下载的软件进行运算就可以得到软件的特征码, 只要这个特征码和网站提供的一样,说明软件没有被修改,如果不一样,百分之百是被修改了。
密钥交换:IKE( internet Key Exchange)
密钥交换技术常见的2种: 1、公钥加密:通过非对称加密算法,加密对称加密算法的密钥,在用对称加密算法实际要传输的数据 2、DH(Deffie-Hellman) 前提发送方和接受方协商使用同一个大素数P和生成数g,各自产生的随机数X和Y。 发送方将g的X次方mod P产生的数值发送给接收方,接受方将g的Y次方mod P产生的数值发送给发送方,发送方再对接收的结果做X次方运算,接受方对接收的结果做Y次方运算,最终密码形成,密钥交换完成 A:p, g B:p, g A: x --> p^x%g ==> B A: (p^y%g)^x=p^yx%g B: y --> p^y%g ==> A B: (p^x%g)^y=p^xy%g 两种技术更倾向于后者,因为使用公钥发给对方,不管怎么讲这个密码是在网上传输了的,所以其他人有可能通过暴力方式破解; DH的优势在于能让双方使一个眼色而不用发密码,双方就能得到密码了;
BOb跟Alice进行通信,其加密过程:
B加密和发送过程 1、Bob生成数据,并用单向加密方式生成该数据的特征码; 2、Bob用自己的私钥加密特征码,并将结果附加该数据后面; 3、Bob生成一个临时对称密钥,并使用对称密钥加密整段数据; 4、Bob获取到Alice的公钥,并使用对方的公钥加密这个临时对称密钥而附加到加密的数据后面;然后把整段数据发送给Alice; A接收和解密过程 1、Alice接收到数据后,Alice用自己的私钥解密这段加密的一次性对称密钥; 2、Alice用对称密钥解密前面对称加密的内容,得到加密的特征码和原始数据; 3、Alice用Bob的公钥解密加密后的特征码;能解密,Alice的身份就得到验证; 4、Alice用Bob同样的单向加密重新计算数据的特征码,并与解密出来的特征码比较;相同,数据完整性得到验证; 用这种方法使保密性和完整性得到了验证,同时完成了身份验证; 缺陷:公钥在互联网上传输时,无法验证可信度,容易被劫持或者伪装,故需要第三方权威认证机构,即CA;