加密解密及算法详解

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了加密解密及算法详解相关的知识,希望对你有一定的参考价值。

1、简介

??今天我要给大家分享的是互联网通信中用到的各种加密解密算法,在我们介绍加解密知识前,首先我们了解一下密码学、密码、加密、数字签名、密钥交换等相关术语的含义。

1.1 密码学

??密码学是研究编制密码和破译密码的技术科学。研究密码变化的客观规律,应用于编制密码以保守通信秘密的,称为编码学;应用于破译密码以获取通信情报的,称为破译学,总称密码学。

1.2 密码

??密码是通信双方按约定的法则进行信息特殊变换的一种重要保密手段。依照这些法则,变明文为密文,称为加密变换;变密文为明文,称为脱密变换。密码在早期仅对文字或数码进行加、脱密变换,随着通信技术的发展,对语音、图像、数据等都可实施加、脱密变换。

加密:加密是一种以密码方式发送信息的方法。只有拥有正确密钥的人才能解开这个信息的密码。对于其他人来说,这个信息看起来就像是一系列随机的字母、数字和符号。如果你要发送不应该让其他人看的敏感信息时,加密是特别重要的。

数字签名:数字签名是一种类似写在纸上的普通的物理签名,但是使用了公钥加密领域的技术实现,用于鉴别数字信息的方法。一套数字签名通常定义两种互补的运算,一个用于签名,另一个用于验证。

密钥交换:双方使用密钥交换算法确定对称密钥,然后用这个密钥进行加密和解密。这个密钥交换协议/算法只能用于密钥的交换, 而不能进行消息的加密和解密。

2、加密算法

2.1 加密算法的特点

对称加密:加密和解密使用同一个密码
公钥加密:
1)每个密码都成对儿出现,一个为私钥(secret key),一个为公钥(public key)
2)公钥加密算法很少用来加密数据,速度太慢 比对称加密算法加密数据的速度慢上3个数量级,1000倍左右
单向加密即散列加密:提取数据特征码,常用于数据完整性校验
1)雪崩效应,输入的微小改变,将会引起结果的巨大改变。不可逆,无法根据特征码还原原来的数据
2) 定长输出,无论原始数据是多大,结果大小都是相同的。输入一样,输出必然相同

2.2 加密解密技术常用的功能及算法:

对称加密

  • 算法:DES, 3DES, AES, Blowfish, Twofish, RC6, CAST5
  • 工具:gpg, openssl enc
  • 加密算法 + 口令
  • 密钥交换
  • 用户身份认证
  • 数据完整性

非对称加密

  • 算法:RSA, EIGamal, DSA
  • 工具:openssl
  • 密钥交换
  • 身份认证

单向加密

  • 算法:MD5, SHA1, SHA512, CRC-32
  • 工具:sha1sum, md5sum, cksum, openssl dgst
  • 完整性

MAC:消息摘要码,单向加密的延伸应用

  • 应用:用于实现在网络通信中保证所传输的数据完整性
  • 机制:
  • CBC-MAC
  • HMAC:使用md5和sha1算法

密钥交换(IKE: Internet Key Exchange):

  • 算法: DH,公钥加密 [并没有在互联网传输,比较安全]
  • Diffie-Hellman
    公钥加密:公钥加密、私钥解密,反之亦然
  • 公钥:pkey
  • 私钥:skey
  • 算法:RSA, EIGamal
  • 工具:gpg, openssl rsautl

数字签名:电子签名私钥用来加密,公钥用来解密

  • 算法: RSA, EIGamal, DSA [DSA只能用来签名,无法用来加密]

数字证书:

*       证书格式:x509、pkcs【x509、pkcs12】
*       x509格式:
*               公钥和有效期限;
*               证书的合法拥有者;(主机名)
*               证书的使用方式;
*               CA的信息;
*               CA的数字签名;(CA签名的校验码)
*       谁给CA发证:自签署证书

3、PKI

PKI: Public Key Infrastructure 公钥基础设施
CA: Certificate Authority CA证书权威机构
自建CA并完成对服务器发证:

3.1 自建CA(CA端)

    生成一对儿密钥
    生成自签证书

命令:
#(umask 077; openssl genrsa -out private/cakey.pem 2048) 【生成CA私钥】
#openssl req -new -x509 -key private/cakey.pem -out cacert.pem 【生成自签证书】(.pem)

3.2 证书申请(客户端)

    生成一对儿密钥
    生成证书申请(.csr)
    将申请发送给CA

命令:
#(umask 077; openssl genrsa -out httpd.key 2048) 生成密钥
#openssl req -new -key httpd.key -out httpd.csr 生成证书申请 证书签署请求(.csr)

3.3 发证(CA端)

    签署证书
    传送给客户端

命令:
#openssl ca -in httpd.csr -out httpd.crt -days 365 签署证书(.crt)

3.4 PKI的实现

PKI: TLS/SSL: x509
第一种实现:互联网著名的安全机制TLS/SSL使用的是x509证书
PKI: OpenGPG
第二种实现:这是PKI的另外一种实现,它们实现证书的管理的机制不同,CA的信认关系传递机制略有不同。在Linux 上OpenGPG也是一种证书管理机制,或者PKI的实现架构。

SSL: Secure Socket Layer是由Netscape公司开发的一套Internet数据安全协议,当前版本为3.0。

  • NetScape 网景
  • Secure Socket Layer
  • SSLv2, SSLv3

TLS: Transport Layer Security 是国际标准化组织开发的一个通用性协议,当前版本为1.2。

  • TLSv1
  • http --> https
  • ldap --> ldaps
  • ftp --> ftps
  • smtp --> smtps
  • pop3 --> pop3s
  • imap --> imaps
    OpenSSL是SSL的开源实现
  • libcrpto: 通用加密库
  • libssl: TLS/SSL的实现
  • 基于会话的、实现了身份认证、数据机密性和会话完整性的TLS/SSL库
  • openssl: 多用途命令行工具,可以实现单向加密、对称加密、非对称加密、实现私有证书颁发机构

3.5 SSL通信原理:

技术分享图片
SSL的握手过程为:

  • (1) SSL客户端通过Client Hello消息将它支持的SSL版本、加密算法、密钥交换算法、MAC算法等信息发送给SSL服务器。
  • (2) SSL服务器确定本次通信采用的SSL版本和加密套件,并通过Server Hello消息通知给SSL客户端。如果SSL服务器允许SSL客户端在以后的通信中重用本次会话,则SSL服务器会为本次会话分配会话ID,并通过Server Hello消息发送给SSL客户端。
  • (3) SSL服务器将携带自己公钥信息的数字证书通过Certificate消息发送给SSL客户端。
  • (4) SSL服务器发送Server Hello Done消息,通知SSL客户端版本和加密套件协商结束,开始进行密钥交换。
  • (5) SSL客户端验证SSL服务器的证书合法后,利用证书中的公钥加密SSL客户端随机生成的premaster secret,并通过Client Key Exchange消息发送给SSL服务器。
  • (6) SSL客户端发送Change Cipher Spec消息,通知SSL服务器后续报文将采用协商好的密钥和加密套件进行加密和MAC计算。
  • (7) SSL客户端计算已交互的握手消息(除Change Cipher Spec消息外所有已交互的消息)的Hash值,利用协商好的密钥和加密套件处理Hash值(计算并添加MAC值、加密等),并通过Finished消息发送给SSL服务器。SSL服务器利用同样的方法计算已交互的握手消息的Hash值,并与Finished消息的解密结果比较,如果二者相同,且MAC值验证成功,则证明密钥和加密套件协商成功。
  • (8) 同样地,SSL服务器发送Change Cipher Spec消息,通知SSL客户端后续报文将采用协商好的密钥和加密套件进行加密和MAC计算。
  • (9) SSL服务器计算已交互的握手消息的Hash值,利用协商好的密钥和加密套件处理Hash值(计算并添加MAC值、加密等),并通过Finished消息发送给SSL客户端。SSL客户端利用同样的方法计算已交互的握手消息的Hash值,并与Finished消息的解密结果比较,如果二者相同,且MAC值验证成功,则证明密钥和加密套件协商成功。

3.6 互联网应用安全通信必须要满足以下特性

   1、私密性
   2、身份认证
   3、完整性

技术分享图片

openssl补充材料:

  • openssl中有如下后缀名的文件
  • .key格式:私有的密钥
  • .crt格式:证书文件,certificate的缩写
  • .csr格式:证书签名请求(证书请求文件),含有公钥信息,certificate signing request的缩写
  • .crl格式:证书吊销列表,Certificate Revocation List的缩写
  • .pem格式:用于导出,导入证书时候的证书的格式,有证书开头,结尾的格式

  • 常用证书协议
  • x509v3: IETF的证书标准
  • x.500:目录的标准
  • SCEP: 简单证书申请协议,用http来进行申请,数据有PKCS#7封装,数据其实格式也是PKCS#10的
  • PKCS#7: 是封装数据的标准,可以放置证书和一些请求信息
  • PKCS#10: 用于离线证书申请的证书申请的数据格式,注意数据包是使用PKCS#7封装这个数据
  • PKCS#12: 用于一个单一文件中交换公共和私有对象,就是公钥,私钥和证书,这些信息进行打包,加密放在存储目录中,
  • CISCO放在NVRAM中,用户可以导出,以防证书服务器挂掉可以进行相应恢复。思科是.p12,微软是.pfx

4、总结

算法分类总结

一、单向散列算法: 属于摘要算法,不是一种加密算法,作用是把任意长的输入消息串变化成固定长的输出串的一种函数

  • BASE64(严格地说,属于编码格式,而非加密算法)
  • MD5(Message Digest algorithm 5,信息摘要算法)
  • SHA(Secure Hash Algorithm,安全散列算法)
  • HMAC(Hash Message Authentication Code,散列消息鉴别码)
  • CRC(Cyclical Redundancy Check,循环冗余码校验)
  • 二、对称加密算法: 加密密钥与解密密钥相同

  • DES(Data Encryption Standard,数据加密标准算法)
  • AES(Advanced Encryption Standard,高级加密标准)
  • PBE(Password-based encryption,基于密码验证)
  • RC5(参数可变的分组密码算法 )
  • BLOWFISH(对称密钥分组加密算法)
  • 三、非对称加密算法 :加密密钥与解密密钥不相同

  • RSA(算法的名字以发明者的名字命名:Ron Rivest, AdiShamir 和Leonard Adleman)
  • DH(Diffie-Hellman算法,密钥一致协议)
  • Elgamal(既能用于数据加密也能用于数字签名)
  • DSA(Digital Signature Algorithm,数字签名)
  • ECC(Elliptic Curves Cryptography,椭圆曲线算法)
  • Merkle-Hellman(背包算法)
  • Miller Rabin算法(素数测试算法)
    ??学习完加密及各种算法后日常最多用到的场景就是加密、验签、密钥交换。非对称加密算法比对称加密算法的速度慢3个数量级,当我们需要加密大量的数据时,建议采用对称加密算法,提高加解密速度。非对称加密算法通常做签名。对称加密算法的钥管理是一个复杂的过程,密钥的管理直接决定着他的安全性,因此当数据量很小时,我们可以考虑采用非对称加密算法。
    ??在业务使用中,我们通常采用的方式是:非对称加密算法管理对称算法的密钥,然后用对称加密算法加密数据,这样就集成了两种加密算法的优点,既有了加密速度快的优点,又有了安全方便管理密钥的优点。RSA建议采用1024位的数字,ECC建议采用160位,AES采用128为即可。

以上是关于加密解密及算法详解的主要内容,如果未能解决你的问题,请参考以下文章

Go-AES算法详解与代码

sha256加密原理及代码实现

IPv6详解:SHA1算法实现及详解

(转) Java中的负数及基本类型的转型详解

Go-ecc加密解密详解与代码

技术 | RSA非对称加密算法详解