您的位置:首页 > 理论基础 > 计算机网络

网络数据传输的安全基础

2016-04-07 21:39 399 查看
网络层级结构




TCP/IP模型中结构没有显示物理层,其物理层在网络接口层以下。网络接口层及其以下对应OSI中的物理层及数据链路层,所有有时候可以将TCP/IP模型折中表示为下面这个模型。



通常我们又可以将其划分为通信子网和资源子网。
运输层以上为资源子网。通过运行在用户空间的进程各种协议实行。
而通信子网则是通过内核空间中的各种协议实现。
所以网络中通信其实各个主机中的进程间的通信:进程将资源加工处理后再通过调用内核完成资源的传输。

通信子网中这些协议只是负责完成资源传输。对资源的加工都是在资源子网层完成。通过应用层的协议实现。例如:HTTP、FTP、Telnet等等。但是这些协议中并没有对资源进行加密等保密措施的功能。如果就这样传输,在传输过程中,资源的保密性和完整性将无法得到保障,在通信过程中,网络上的任何人都可以窃听和修改你的资源。因为这方面的需求,就在传输层(TCP/IP)和应用层(HTTP、FTP、Telnet等应用层协议)之间加了一个半层:传输层安全协议。
通过这个协议对资源进行各种加工,可以保障通信中的保密性和完整性,但是这些加工操作都是需要消耗CPU资源的,所以只是一个半层,可以选择是否通过此半层协议来保障安全和私密性,例如:https(http --> ssl --> https)。或者不通过这半层完成通信,例如http。

传输层安全协议(Transport Layer Security,缩写:TLS),及其前身安全套接层(Secure Sockets Layer,缩写:SSL)是一种安全协议,目的是为互联网通信,提供安全及数据完整性保障。

网景公司(Netscape)在1994年推出首版网页浏览器,网景导航者时,推出HTTPS协议,以SSL进行加密,这是SSL的起源。IETF将SSL进行标准化,1999年公布了第一版TLS标准文件。在浏览器、电子邮件、即时通讯、VoIP、网络传真等应用程序中,广泛支持这个协议。主要的网站,如Google、Facebook等也以这个协议来创建安全连接,发送数据。目前已成为互联网上保密通讯的工业标准。SSL包含记录层(Record Layer)和传输层,记录层协议确定了传输层数据的封装格式。传输层安全协议使用X.509认证,之后利用非对称加密演算来对通讯方做身份认证,之后交换对称密钥作为会谈密钥(Session key)。这个会谈密钥是用来将通讯两方交换的数据做加密,保证两个应用间通信的保密性和可靠性,使客户与服务器应用之间的通信不被攻击者窃听。SSL: Secure Sockets Layer
版本:V1.0, V2.0, V3.0(现在任然是主流,但是2014,谷歌发布了此版本的漏洞,现在陆续有很多公司的产品已经禁用此版本了)
TLS: Transport Layer Security
版本:V1.0, V1.1, V1.2, V1.3(目前此版未完成,处于草案阶段)

安全协议要保障的目标
保密性:confidentiality
完整性:integrity
可用性:availability

实现方案的技术(加密和解密)
加密和解密:1,传统加密方法:替代加密方法、置换加密方法
2,现代加密方法:现代块加密方法

密钥算法:
1,对称加密:加密和解密使用同一个密钥
特性:1、加密、解密使用同一个密钥;
2、将原始数据分割成为固定大小的块,逐个进行加密;
功能:数据加密(保密性)
缺陷:1、密钥过多;
2、密钥分发困难;
算法:DES:Data Encryption Standard;
3DES:Triple DES;
AES:Advanced Encryption Standard; (128bits, 192bits, 256bits, 384bits)
Blowfish
Twofish
IDEA
RC6
CAST52
2.公钥加密:密钥分为公钥与私钥
公钥:从私钥中提取产生;可公开给所有人;pubkey
私钥:通过工具创建,使用者自己留存,必须保证其私密性;secret key;
特性:用公钥加密的数据,只能使用与之配对儿的私钥解密;反之亦然;
用途:
数字签名:主要在于让接收方确认发送方的身份;
密钥交换:发送方用对方公钥加密一个对称密钥,并发送给对方;
数据加密(不常用,比对称加密要慢3个数量级)
算法:RSA, DSA, ELGamal
DSS: Digital Signature Standard
DSA:Digital Signature Algorithm
3.单向加密:即提出数据指纹,只能加密,不能解密;
特性:定长输出、雪崩效应;
用途:验证资源完整性;
算法:md5:Message Digest 5, 128bits
sha1:Secure Hash Algorithm 1, 160bits
sha224, sha256, sha384, sha512
4.密钥交换: IKE(Internet Key Exchange)

功能:完成双方密钥交换
两种方式: 1.公钥加密 2.DH(Deffie-Hellman)

安全协议分层设计
1、最底层:基础算法原语的实现,aes, rsa, md5
2、向上一层:各种算法的实现;
3、再向上一层:组合算法实现的半成品;
4、用各种组件拼装而成的各种成品密码学协议软件;

安全协议的开源实现
Linux系统:OpenSSL(ssl), GPG(pgp)

OPENSSL
由三部分组成:libencrypto库,libssl库,openssl多用途命令行工具

SSL实现过程简要描述:A,B双方通信
A需要和B进行通信,完成双方交换资源的目的。
1,A向B建立通信并索要B的公钥,将A自己的公钥发给B。然后B公钥发送给A。
2,A收到B的公钥,首先对要发送给B的资源(此后将其称为file)进行单向加密计算,得到此资源的特征码。然后用A自己的私钥对这段特征码进行加密,加密后的文件即为数字签名(此后将其称为sign)。再使用对称加密的方式把数字签名sigh和资源file进行加密,得到加密后的文件(file.crypt),然后使用B的公钥把之前用于对称加密的秘钥进行加密,得到文件(key)。最后将file.crypt和key发送给B。
3,B收到file.crypt和key之后,首先使用自己的私钥解密文件key,得到用于对称加密的密钥。然后使用此秘钥对文件file.crypt进行对称解密,得到数字签名sign和资源file。此过程保证了资源的保密性。然后使用A的公钥对数字签名sign进行解密。得到一段文件特征码。再对资源file进行单向加密得到一段特征码。两个特征码进行比对。一致的话,则文件完整。此过程保证了资源的完整性。

上面这段描述不够精确,但有助于理解SSL会话过程。从上面可以看出,这样的方式可以保证会话中资源的保密和完整性。但这一切的基础都是建立在,AB双方彼此可确认对方的公钥和其主体身份吻合的情况下,不然一切安全都无从谈起。例如:当AB之间相进行的通信的时候,C知道了,他同时冒充A和B,和另一方完成了上述的通信过程。这样AB需要进行通信的资源,C全部都窃听到了,并且AB通过交换获得的资源也全部由C决定(这种称为中间人攻击)。因此为了保证通信主体及其公钥可信度,需要一个第三方机构(Trusted third party,TTP)来完成这一工作。这个就是pki。

PKI(Public Key Infrastructure):公钥基础设施
由以下组成:
签证机构:CA
注册机构:RA
证书吊销列表:CRL
证书存取库:

CA其颁布的证书规格:X.509v3X.509v3:定义了证书的结构以及认证协议标准证书格式:
版本号
序列号
签名算法ID
发行者名称
有效期限
主体名称
主体公钥
发行者的惟一标识
主体的惟一标识
扩展
发行者的签名

在此基础上我们可以再描述以下SSL会话的过程:



SSL会话主要三步:客户端向服务器端索要并验正证书;
双方协商生成“会话密钥”;
双方采用“会话密钥”进行加密通信;SSL Handshake Protocol:

第一阶段:ClientHello:
支持的协议版本,比如tls 1.2;
客户端生成一个随机数,稍后用户生成“会话密钥”
支持的加密算法,比如AES、3DES、RSA;
支持的压缩算法;

第二阶段:ServerHello:
确认使用的加密通信协议版本,比如tls 1.2;
服务器端生成一个随机数,稍后用于生成“会话密钥”
确认使用的加密方法;
服务器证书;

第三阶段:验正服务器证书,在确认无误后取出其公钥;(发证机构、证书完整性、证书持有者、证书有效期、吊销列表)
发送以下信息给服务器端:一个随机数;编码变更通知,表示随后的信息都将用双方商定的加密方法和密钥发送;客户端握手结束通知;

第四阶段:收到客户端发来的第三个随机数pre-master-key后,计算生成本次会话所有到的“会话密钥”;
向客户端发送如下信息:
编码变更通知,表示随后的信息都将用双方商定的加密方法和密钥发送;
服务端握手结束通知;

openSSL工具的运用:组件:libcrypto, libssl主要由开发者使用;
openssl:多用途命令行工具;
使用格式:openssl command [ command_opts ] [ command_args ]
可使用 openssl version查看当前版本。
多个子命令,分为三类: 标准命令
消息摘要命令(dgst子命令)
加密命令(enc子命令)

标准命令: enc:加密解密
ca:证书
req:申请
genrsa:生成私钥
...
使用示例:
1,对称加密:
工具:openssl enc
支持的算法:3des, aes, blowfish, towfish

获取使用帮助:openssl enc --help

以/etc/passwd为例:
加密:



解密:





2,单向加密:
工具:openssl dgst
算法:md5sum, sha1sum, sha224sum, ...




生成用户密码:工具:passwd, openssl passwd



3.生成随机数:
工具:openssl rand
~]# openssl rand -hex NUM
~]# openssl rand -base NUM

4.生成密钥:
生成私钥: ~]# (umask 077; openssl genrsa -out /PATH/TO/PRIVATE_KEY_FILE NUM_BITS)


提出公钥: ~]# openssl rsa -in /PATH/FROM/PRIVATE_KEY_FILE -pubout




5.密钥交换:
公钥加密

算法:RSA,ELGamal
工具:openssl rsautl




私钥解密:



6.数字签名:

私钥签名:

算法:RSA, DSA, ELGamal
工具:openssl rsautl


公钥解密



CA
CA:公共信任的CA,
私有CA;仅供内部使用

建立私有CA
工具: openssl,openssl ca

配置文件:/etc/pki/tls/openssl.cnf

构建私有CA:在确定配置为CA的服务器上生成一个自签证书,并为CA提供所需要的目录及文件即可;

步骤:(1) 生成私钥;
~]# (umask 077; openssl genrsa -out /etc/pki/CA/private/cakey.pem 4096) (此命令的含义是使生成的私钥权限为:600,只有属主有权限读写,也可先生成密钥,再修改其权限为600)
(2) 生成自签证书;
~]# openssl req -new -x509 -key /etc/pki/CA/private/cakey.pem -out /etc/pki/CA/cacert.pem -days 365
-new:生成新证书签署请求;
-x509:生成自签格式证书,专用于创建私有CA时;
-key:生成请求时用到的私钥文件路径;
-out:生成请求证书的文件路径;如果自签操作将直接生成签署过的证书;
-days:证书的有效时长,单位是day;

(3) 为CA提供所需的目录及文件;
~]# mkdir -pv /etc/pki/CA/{certs,crl,newcerts}
~]# touch /etc/pki/CA/{serial,index.txt}
~]# echo 01 > /etc/pki/CA/serial





要用到证书进行安全通信的服务器,需要向CA请求签署证书
步骤:(以httpd为例)
(1) 用到证书的主机生成私钥;
~]# mkdir /etc/httpd/ssl
~]# cd /etc/httpd/ssl
~]# (umask 077; openssl genrsa -out /etc/httpd/ssl/httpd.key 4092)
(2) 生成证书签署请求
~]# openssl req -new -key /etc/httpd/ssl/httpd.key -out /etc/httpd/ssl/httpd.csr -days 365
(3) 将请求通过可靠方式发送给CA主机;
(4) 在CA主机上签署证书;
~]# openssl ca -in /tmp/httpd.csr -out /etc/pki/CA/certs/httpd.crt -days 365









查看证书中的信息:
~]# openssl x509 -in /etc/pki/CA/certs/httpd.crt -noout -serial -subject



吊销证书:
步骤:
(1) 客户端获取要吊销的证书的serial(在使用证书的主机执行):
~]# openssl x509 -in /etc/pki/CA/certs/httpd.crt -noout -serial -subject
(2) CA主机吊销证书
先根据客户提交的serial和subject信息,对比其与本机数据库index.txt中存储的是否一致;
吊销:
# openssl ca -revoke /etc/pki/CA/newcerts/SERIAL.pem (其中的SERIAL要换成证书真正的序列号)



(3) 生成吊销证书的吊销编号(第一次吊销证书时执行)
# echo 01 > /etc/pki/CA/crlnumber

(4) 更新证书吊销列表
# openssl ca -gencrl -out thisca.crl



查看crl文件:
# openssl crl -in /PATH/FROM/CRL_FILE.crl -noout -text




参考:维基百科SSL条目,马哥教育课堂笔记
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  SSL