Common service

1.1、加密与解密基础概念

 

1、加密与解密基础概念

SSL全称:Secure  Sockets  Layer,安全套接字层;

安全的目标:
1>保密性:confidentiality;
2>完整性:integrity;
3>可用性:availability;

攻击类型:
1>威胁保密性的攻击:窃听、通信量分析;
2>威胁完整性的攻击:更改、伪装、重放、否认;
3>威胁可用性的攻击:拒绝服务(DoS)

安全相关的加密和解密:
1>传统加密方法:替代加密、置换加密;
2>现代块加密方法:现代块加密机制;

安全相关的服务机制:
1>认证机制;
2>访问控制机制;

2、Linux系统上基于安全相关的协议或工具:OpenSSL(ssl协议)、GPG(gpg协议);

加密算法和协议:
1>对称加密:3DES,AES;
2>公钥加密:不常用,比对称加密要慢3个数量级,RSA,DSA;
3>单向加密:MD5,SHA1…;
4>密钥交换:RSA,DH(Deffie-Hellman),ECDH(椭圆曲线DH),ECDHE(临时椭圆曲线DH);

2.1  对称加密:

常用的对称加密算法:
DES:   Data  Encryption  Standard,数据加密标准;以64bits(8Byte)为一块进行56bits的秘钥进行加密和解密;
3DES:Triple  DES;
AES:   Advanced Encryption  Standard, 高级加密标准;有多种变长秘钥,128/192/256bits;
Blowfish;
Twofish;
RC6;
CAST5;

对称加密的特性:
1>加密和解密使用同一个秘钥;
2>将原始数据分隔成固定大小的块进行逐个进行加密;

对称加密的缺陷:
1>秘钥过多;
2>秘钥分发困难;

2.2  公钥加密:秘钥分为公钥与私钥;

公钥:pubkey,从私钥中提取产生,可以公开给所有人;
私钥:secret key,通过工具创建,使用者自己留存,必须保证其私密性;

公钥加密的特性:用公钥加密的数据,只能使用与之配对的私钥解密;反之亦然;

公钥加密的用途:
1>数字签名:主要在于让接收方确认发送方的身份;
2>秘钥交换:发送方用对方的公钥加密一个对称秘钥,并发送给对方;
3>数据加密解密;

公钥常用算法:RSA,DSA,ELGaml(商业加密算法);
RSA:数字签名+加密解密;
DSA:数字签名;Digital  Signature  Algorithm;

公钥加密的工作模式:

数据从用户Bob发送给Alice的数据加密过程:

1> Bob用单向加密算法对数据data计算并得出数据的特征码;
2> Bob用自己的私钥加密特征码,形成数字签名,并把数字签名信息附在data后面;
3> Bob用对称加密算法加密(一次性加密)上面内容(数据+数字签名);
4> Bob用Alice的公钥加密由对称加密得出的密钥,并将加密后的信息附在上面内容(加密后的数据+数字签名)后面;

Alice接收到加密数据后的解密过程:

1> Alice用自己的私钥解密(解密后得出:加密的数据+数字签名、由Bob生成的对称加密密钥);<保密性>
2> Alice用由Bob生成的对称加密密钥进行解密(解密后得出:数据+数字签名);<秘钥交换>
3> Alice用Bob公钥解密(解密后得出:数据、数据的特征码);<身份验证>
4> Alice用跟Bob相同的单向加密算法对数据进行加密,得出另一个特征码,用此特征码比对上面解密出来的特征码,如果相同,则表示数据的<完整性>;

2.3  单向加密:提取数据指纹(数据的特征码),只能加密,不能解密;

单向加密的特性:定长输出、有雪崩效应(初始数据的微小改变将导致加密结果的巨大变化);

单向加密的功能:完整性验证;

单向加密的算法:
md5: Message  Digest  5,128bits定长输出;
sha1: Secure  Hash  Algorithm  1,160bits定长输出;
sha常用的定长输出: sha224,sha256,sha384,sha512等;

2.4 密钥交换:IKE(Internet  Key  Exchange,互联网秘钥交换);

密钥交换常用的实现方法:
RSA;
DH(Deffie-Hellman);
ECDH(椭圆曲线DH);
ECDHE(临时椭圆曲线DH);

上图说明:

1>  Alice和Bob协商生成2个公共数据:大素数p,整数g,整数g是大素数p的本原根;
2>  Alice选择一个密钥数字a,明文发送A给Bob,其中A=g^a%p;
3>  Bob选择一个密钥数字b,明文发送B给Alice,其中B=g^b%p;
4>  Alice计算密钥值s,s=(g^b%p)^a%p;
5>  Bob计算密钥值s,s=(g^a%p)^b%p;
6>  至此,Alice和Bob拥有一个相同的秘钥s;

4、PKI:Public  Key  Infrastructrue,公钥基础设施;

PKI的组成部分:
  1> 签证机构:CA;
  2> 注册机构:RA;
  3> 证书吊销列表:CRL;
  4> 证书存取库:CB;

X.509:目前版本是v3;
被广泛使用的数字证书标准,是由国际电联电信委员会(ITU-T)为单点登录(SSO-Single Sign-on)
和授权管理基础设施(PMI-Privilege Management Infrastructure)制定的PKI标准;

X.509 v3证书数据结构:
Certificate:证书
Version :版本
Serial Number :序列号
Algorithm ID :算法标识
Issuer :颁发者,一般是CA机构
Validity :有效期
Not Before :有效起始日期
Not After :有效终止日期
Subject :使用者
Subject Public Key Info :使用者公钥信息
Public Key Algorithm :公钥算法
Subject Public Key :公钥
Issuer Unique Identifier (Optional) :颁发者唯一标识
Subject Unique Identifier (Optional) :使用者唯一标识
Extensions (Optional) :扩展

Certificate Signature Algorithm :证书签名算法
Certificate Signature :证书签名

检查证书的5个环节:
1>确认认可签发证书的CA机构;
2>证书内容没问题;
3>证书在有效期内;
4>证书上的名字与当前通信的主机名字一致;
5>证书没有被吊销;

5、SSL/TLS

SSL:Secure  Sockets  Layer,安全套接字层;<版本:ssl 1.0 , ssl 2.0 , ssl 3.0>
TLS:Transport  Layer  Security,传输层安全;<版本:tls 1.0 , tls 1.1 , tls 1.2 , tls 1.3>

SSL/TLS分层设计:
1> 最底层:基础算法原语的实现,比如定义aes,rsa,md5等的功能;
2> 向上一层:各种算法的实现;
3> 再向上一层:组合算法实现的半成品;
4> 最高层:用各种组件拼装而成的各种成品的密码学协议软件;

用于实现SSL/TLS功能的程序中,常用的是:OpenSSL;

OpenSSL的组成部分:
1> libcrypto:用于实现加密解密的库;
2> libssl:      用于实现SSL安全通信的库;
3> openssl: 命令行工具;

双向证书认证的SSL握手过程(SSL_handshake_with_two_way_authentication_with_certificates):

上图说明:

phase 1:
1> client:生成一个随机数,RNc;
2> client —> server:发送 Client  Hello 消息,这个消息里包含了一个客户端生成的随机数 RNc、客户端支持的加密套件(Support  Ciphers)和 SSL  Version 等信息;

3> server:生成一个随机数,RNs;
4> server —> client:发送 Server  Hello 消息,这个消息会从 Client  Hello 传过来的 Support  Ciphers 里确定一份加密套件,这个套件决定了后续加密和生成摘要时具体使用哪些算法,另外还会生成一份随机数 RNs;

phase 2:
1> server —> client:发送server端证书;
2> server —> client:要求客户端发送client证书;
3> client:验证服务端证书;验证通过后,提取出服务端的公钥;

phase 3:
1> client —> server:发送client证书;
2> server:验证客户端证书;验证通过后,提取出客户端的公钥;

3> client —> server:发送用客户端私钥加密的证书;
4> server:验证加密的客户端证书;用客户端公钥进行解密;

5> client:生成随机数,pre-master-secret;
6> client —> server:客户端用服务端的公钥加密随机数pre-master-secret,发送给服务端;

7> client,server:根据三个随机数(RNc,RNs,PMS)计算出对称加密秘钥MS;

phase 4
1> client —> server:使用相同的对称加密密钥MS建立加密连接;
2> client —> server:结束SSL  handshake;

3> server —> client:使用相同的对称加密密钥MS建立加密连接;
4> server —> client:结束SSL  handshake;

 

Leave a Reply

Your email address will not be published. Required fields are marked *