加密与安全

本章主要描述加密算法的由来,特点以及在实践中的应用。

一、背景

TCP/IP协议诞生之初是为局域网服务的,安全方面的考虑不是重点,所以很多的协议如ftp,http,smtp,telnet都是明文的协议,通过抓包分析软件很容易得到用户的密码口令。

二、加密

一般来说,从三个方面来考虑数据的安全传输:机密性,完整性以及身份验证。

1.机密性

       从发送方言就是将明文数据根据某种转换规则转换为密文,接收方再根据这种转换规则把密文转换为明文,这种转换规则就是加密算法,在算法中,密钥是关键,因为一种通用的加密算法更换难度是非常大的,而更换密钥就相对容易。

       从保护数据机密性的角度来说,有对称加密算法和非对称加密算法两种。

1.1 对称加密算法特点

  • 加密和解密使用同一个密钥,效率高
  • 将原始数据分割成固定大小的块,逐个进行加密
  • 常见的有DES,3DES,AES等
  • 缺点是密钥过多,数据来源无法确认

1.2 非对称加密算法特点

  • 密钥是成对出现的,公钥:公开给所有的人;私钥:自已留存,必须保证其秘密性
  • 用公钥加密的数据只能使用与之配对的私钥解密;反之亦然
  • 缺点:密钥长,加密解密效率低下
  • 功能:数字签名:主要在于让接收方确认发送方身份;对称密钥交换:发送方用对方的公钥加密一个对称密钥后发送给对方
  • 常见的有RSA,DSA等

2. 完整性

      通过单向散列算法(又称hash算法)将任意数据缩小成固定大小的指纹

  • 任意长度输入
  • 固定长度输出
  • 若修改数据,指纹也会改变
  • 无法从指纹中重新生成数据
  • 常见算式:md5,sha1,sha224, sha256,sha384,sha512

3. 身份验证

 
    非对称算法的私钥可以用来作为身份验证,如图所示:
    传送者A:
  • 通过单向散列算法提取128bit的数字摘要(指纹)
  • 用自已的私钥对数字摘要加密(数字签名)
  • 用接收都B的公钥对数字摘要和原文加密(通常对对称的加密算法,因为加密和解密的效率高)
  • 发送给B

接收者B:

  • B用自己的私钥对密文解密
  • 用A的公钥把数字签名解密(如果用A的公钥无法解密数字签名,则说明数字签名已经经过第三方的篡改,B会丢弃所收到的数据)
  • 同时B用单向散列算法对原文进行128bit的数字摘要提取
  • 并且和用A的公钥解密后的数字签名作比对,如果一致,则证明数据的完整性,如果不一致,则说明数据有人篡改

     但是A和B如何能安全的收到对方的公钥,必须借助于第三方的工具如证书来解决。

三、CA和证书

1. 简介

      证书的本质上利用第三方的可信任机构颁发的证书来传输公钥。

如图所示,A和B分别获取对方公钥的流程:

  1. A向上级CA颁发机构申请证书,CA颁发机构分成各种不同的层级,无论如何,最后总是会追溯到根证书的颁发机构ROOTCA
  2. A在申请证书的过程中,需要提供自已的公钥
  3. 各级CA颁发机构分别用自己的私钥对A的公钥进行签名
  4. A得到的证书文件包含各CA颁发机构的公钥
  5. B重复同样的流程
  6. A、B在应用程序通信之前,已经内置了包含了各CA颁发机构公钥的证书
  7. 最终A、B通过这个证书链得到对方的公钥

CA和证书生成、管理、颁发、使用,存储,吊销是有PKI(PKI Key Infrsatrcture)来定义这一体系中的各种角色,策略,流程等,同时,证书遵循x.509协议标准,定义了定义了证书的结构以及认证协议标准,主要包括的内容有:

  1. 版本号
  2. 序列号
  3. 签名算法
  4. 颁发者
  5. 有效期限
  6. 主体名称

证书的类型有:

  1. 证书授权机构的证书
  2. 服务器证书
  3. 用户证书

获取证书的两种方法

  1. 使用证书授权机构(是一种商业行为,根据证书的不同等级费用不一),主要步骤有:生成签名请求(csr);将csr发送给CA;从CA处接收签名
  2. 自签名证书:顾名思义用自己的私钥签发自已的公钥,是免费的,可以用在公司内部一些安全级别要求较高的应用服务上

2. 用openssl来生成自签名证书的步骤

向CA申请证书书:

1. 建立Root CA

1)生成私钥

cd /etc/pki/CA/

(umask 077;openssl genrsa -out private/cakey.pem 4096)

2) 自签名证书

openssl req -new -x509 -key private/cakey.pem  -out cacert.pem -days 3650(参数-x509表示自签名,不带此参数代表申请证书)

openssl x509 -in cacert.pem -noout -text(以text方式查看证书)

2. 用户或服务器

1) 生成私钥

(umask 077;openssl genrsa -out app.key 1024)

2) 生成证书申请文件

openssl req -new -key app.key -out app.csr

3) 将申请文件发给CA

scp app.csr [email protected]:/etc/pki/CA

3. CA颁发证书

touch index.txt

echo 0F > serial

ca -in app.csr -out certs/app.crt -days 100

/etc/pki/tls/openssl.cnf(可以修改此文件中的policy)

4. 证书发送给客户端

  把生成的证书发给客户端app.crt

3. openssl用法:

openssl paswd -1(生成以md5加密的密码)

openssl rand -hex 3(3代表字符,一个字符占8位,每一位16进制占4bit,所以输出是6个16进制的字符)

openssl rand -base64 3(3代表字符,一个字符占8位,base64每一个字符占6bit,所以输出为4个base64编码的字符,如果无法整除,如4个字符,则用=补齐) 

(umask 066;openssl genrsa -out private.key -des 1024) 生成带口令的私钥

openssl rsa -in private.key -out private.key2(输出一个不带口令的私钥)

openssl rsa -in private.key -pubout -out public.key(从私钥中生成公钥)

四、SSL/TLS安全协议

如上图所示SSL/TSL工作于传输层之上,主要功能实现数据传输的机密性,认证,完整性,重放保护等。

此协议分为握手阶段和应用阶段:

  • 握手阶段(协商阶段):客户端和服务器端认证对方身份(依赖于PKI体系,利用数字证书进行身份认证),并协商通信中使用的安全参数、密码套件以及主密钥。后续通信使用的所有密钥都是通过MasterSecret生成
  • 应用阶段:在握手阶段完成后进入,在应用阶段通信双方使用握手阶段协商好的密钥进行安全通信

结全TCP/IP的三次握手过程,在完成三次握手之后,还需要根据上述流程完成SSL协议的通信。基中:

  • Handshake协议:包括协商安全参数和密码套件、服务器身份认证(客户端身份认证可选)、密钥交换
  • ChangeCipherSpec 协议:一条消息表明握手协议已经完成
  • Alert 协议:对握手协议中一些异常的错误提醒,分为fatal和warning两个级别,fatal类型错误会直接中断SSL链接,而warning级别的错误SSL链接仍可继续,只是会给出错误警告
  • Record 协议:包括对消息的分段、压缩、消息认证和完整性保护、加密等

其中,常用的HTTPS 协议:就是“HTTP 协议”和“SSL/TLS 协议”的组合。HTTP over SSL”或“HTTP over TLS”,对http协议的文本数据进行加密处理后,成为二进制形式传输

总之,在加密与安全方面,用户私钥的管理是至关重要的,通常我们用加密码的方式对私钥进行加密,这样,即使用第三非法提到私钥,也会为因为没有密码导致没法获取私钥的明文,大大增加了系统的安全性。

猜你喜欢

转载自www.cnblogs.com/liangjindong/p/9063973.html