密码学算法
-
-
基本认知
-
科学
-
密码学是科学、有严格的规范,设计密码学算法需要具备深厚的数学知识
-
-
公开
-
密码学算法的实现原理是公开的,经过长时间的考验
-
-
相对安全
-
计算机处理速度越来越快,某个密码学算法的数学基础可能受到挑战,现阶段安全密码算法,未来可能就不安全了
-
-
攻击方法多样
-
大部分密码学算法需要秘钥,最简单的破解方法就是获取秘钥(暴力破解、彩虹表等)
-
-
应用标准
-
未来正确使用密码学算法,并依据标椎使用(比如:PKCS),可以不了解密码学算法原理,但必须掌握应用标准
-
-
不比具备很强数学知识
-
很多密码学算法并非计算机专家创建,而是数学家.(不妨碍我们使用密码学算法)
-
-
解决特定问题
-
每种算法都有应用场景,解决特定的问题
-
-
-
目标
-
机密性
-
信息在存储,运输、处理过程中的安全保密,要求信息不会泄露给未经授权的人.对称加密算法和公开秘钥算法都能保护机密性
-
-
完整性
-
接受方接受到的信息就是发送方发送的原始信息,如数据被篡改,接受方有策略数据被篡改,那传输的数据就具备完整性.在密码学中,主要使用消息验证码(MAC)算法保证完整性
-
-
不可抵赖性
-
在密码学中,使用数字签名技术避免抵赖
-
-
身份验证
-
通信双方(发送方、接收方)必须确保对端就是通信对象.在密码学中,一般使用数字签名确认身份
-
-
-
常用密码库
-
MIRACL
-
由Shamus软件公司开发,包括了:RSA、AES、DSA、ECC和Diffie-Hellman秘钥交换算法
-
-
CryptoAPI
-
微软在Windows中的一个安全加密应用框架
-
密码应用程序接口,密码服务提供者模块
-
-
OpenSSL
-
开放源代码的软件库包,三个只要的功能部分:SSL协议库、应用程序以及密码算法库
-
-
-
-
密码学算法分类
-
类型
-
哈希算法(Hash)
-
国内:SM3
-
国际:MD5、SHA-1、SHA-2、SHA-3
-
说明:SM3的256位保密强度高于MD5
-
-
对称加密算法
-
国内:SM1、SM4、ZUC
-
国际:DES、3DES、AES
-
说明:SM1的128位保密强度和性能与AES相当,SM4的128位已升级为国际标准
-
-
公开秘钥算法
-
国内:SM2
-
国际:RSA、ECC
-
说明:SM2的256位基于ECC算法,安全性比RSA1024有明显优势
-
-
-
随机数
-
类型
-
真正的随机数生成器
-
硬件生成
-
效率高、随机性、不可预测性、不可重现性
-
需要物理设备获取
-
-
伪随机数生成器
-
软件生成
-
效率高、随机性
-
通过算法获取
-
-
密码学伪随机数生成器
-
软件生成
-
效率高、随机性、不可预测性
-
用于密码学
-
-
-
工作原理
-
生成器内部维护一个状态(internal state),其数值来源于外部,成为熵:动态时间、温度、声音变化等
-
伪随机数内部状态来源模拟的数值,称为种子(seed)
-
-
可生成密码学随机数的算法
-
块密码算法CTR模式:对称加密算法
-
摘要函数:单向性
-
流密码算法:对称加密算法
-
-
用途
-
密钥
-
对称加密算法、公开密钥算法、MAC算法都会用到密钥,密钥本质上是一个随机数
-
-
初始化向量(IV)
-
块密码算法中很多迭代模式会使用(IV)
-
-
nonce
-
块密码算法中的CTR模式、AEAD加密模式也会用到nonce
-
-
salt
-
基于口令的加密算法会用到,通过salt生成一个密钥
-
-
-
-
Hash函数
-
加密基元
-
基于密码学Hash算法产生的其他密码算法:MAC消息验证码、伪随机数生成器、基于口令的加密算法、数字签名等等
-
-
Hash特性
-
摘要/散列/指纹=hash(消息)
-
相同的消息获得相同摘要值、速度快、单向性(不可逆)、原始消息变化摘要值也会变化、不同摘要值不同
-
-
Hash算法用途
-
文件比较
-
身份校验
-
-
Hash算法分类
-
MD5
-
算法:MD5、输出值长度:128比特、输入值最大长度:无限制、说明:实践中已经产生碰撞,理论上不具备弱抗碰撞性
-
-
SHA-1
-
算法:SHA-1、输出值长度:160比特、输入值最大长度:2的64次方减一比特、说明:实践中已经产生碰撞
-
-
SHA-2
-
算法:SHA-256、输出值长度:256比特、输入值最大长度:2的64次方减一比特、说明:安全使用
-
算法:SHA-512、输出值长度:512比特、输入值最大长度:2的128次方减一比特、说明:安全使用
-
算法:SHA-224、输出值长度:224比特、输入值最大长度:2的64次方减一比特、说明:安全使用
-
算法:SHA-384、输出值长度:384比特、输入值最大长度:2的128次方减一比特、说明:安全使用
-
-
SHA-3
-
算法:SHA3-256、输出值长度:256比特、输入值最大长度:2的64次方减一比特、说明:安全使用
-
算法:SHA3-512、输出值长度:512比特、输入值最大长度:2的128次方减一比特、说明:安全使用
-
算法:SHA3-224、输出值长度:224比特、输入值最大长度:2的64次方减一比特、说明:安全使用
-
算法:SHA3-384、输出值长度:384比特、输入值最大长度:2的128次方减一比特、说明:安全使用
-
-
-
-
对称加密算法
-
原理
-
密文=E(明文、算法、秘钥)
-
明文=D(密文、算法、秘钥)
-
-
分类
-
块密码算法:DES、3DES、AES
-
流密码算法:RC4
-
-
模式
-
ECB(Electronic Codebook)、特点:运算快速,支持并行处理,需要填充、说明:不推荐使用
-
CBC(Cipher Block Chaining)、特点:支持并行处理,需要填充、说明:推荐使用
-
CFB(Cipher Feedback)、特点:支持并行处理,不需要填充、说明:不推荐使用
-
OFB(Output Feedback)、特点:迭代运算使用流密码模式,不需要填充、说明:不推荐使用
-
CTR(Counter)、特点:迭代运算使用流密码模式,支持并行处理,不需要填充、说明:推荐使用
-
XTS(XEX-based tweaked-codebook)、特点:不需要填充、说明:用于本地硬盘存储解决方案中
-
-
标准
-
填充标准:明文长度必须是分组长度的倍数,如不是倍数,则必须有填充机制
-
PKCS#7填充:可处理的分组长度是1到255个字节
-
AES算法使用标准,比如:AES-128-CBC-PKCS#7,其中秘钥长度128,分组模式CBC,填充标准PKCS#7,AES算法默认分组128bit
-
-
-
消息验证码
-
Hash算法能够完成密码学目标之一的完整性校验,但却不能避免消息被篡改,为避免消息被篡改,需要用到消息验证码.消息验证码非常重要,一般结合加密算法一起使用
-
消息验证码的模型:MAC值 = mac(消息、密钥)
-
MAC一般和原始消息一起传输,原始消息可以选择加密,也可以选择不加密,通信双方会以相同的方式生成MAC值,然后进行比较
-
MAC算法种类:CBC-MAC算法和HMAC算法,http中使用最多的为HMAC算法.
-
CBC-MAC算法:CBC-MAC算法从块密码算法的CBC分组模式演变而来,简单的说就是最后一个密钥分组的值就是MAC值
-
HMAC算法:使用Hash算法作为加密基元,结合Hash算法有多种变种(HMAC-SHA-1、HMAC-SHA256、HMAC-SHA512)
-
-
-
对称算法和MAC算法结合
-
-
结合对称加密算法和MAC算法提供机密性额完整性的模式叫Authenticated Encryption(AE)加密模式,有三种:
-
E&M模式:消息分别进行加密运算和MAC运算,然后将两个运算结果结合起来发送
-
MtE模式:先对消息进行MAC计算,然后将消息和MAC值组合,再进行加密,最终加密值发送出去(http使用)
-
EtM模式:先对消息进行加密得到密文,然后对密文再计算MAC值,最终将密文和MAC值组合在一起发送
-
-
保证数据加密和完整性的三种模式:
-
AEAD模式:在底层组合了加密算法和MAC算法,同事保证数据加密和完整性.
-
CCM模式:使用CBC-MAC算法保证完整性,使用AES算法CTR模式保证加密
-
-
-
-
公开密钥算法
-
特点:
-
功能不一样:对称算法主要用于加密和解密,而公开秘钥算法可以用于加密解密、秘钥协商、数字签名
-
运算速度很慢:相比对称加密算法来说,公开秘钥算法尤其是RSA算法运算非常慢
-
秘钥是一对:对称加密算法中,密钥是一串数字,加密者和解密者使用同样的密钥.公开密钥算法是一对,分别为公钥和私钥
-
-
标准:
-
RSA算法主要使用PKCS#I定义了两种机制处理填充问题,从而保证同样的明文、同样的密钥经过RSA加密,每次的密文都是不一样的
-
两种填充机制分别是RSAES-PKCSI-VI_5和RSAES-OAEP,目前推荐使用的填充标准是RSAES-OAEP,OpenSSL命令行默认使用的标准是RSAES-PKCSI-VI_5
-
-
秘钥(安全性)
-
是什么?
-
对称加密算法、MAC算法使用的密钥就是一串数字
-
公开密钥算法中的密钥四一对,由多个部分组成,但是本质上也可以认为由多个数字组成
-
-
作用
-
名称:对称加密算法秘钥、作用:加密解密、说明:秘钥不能泄露
-
名称:非对称加密算法秘钥、作用:加密解密、说明:公钥可以公开,秘钥不能泄露
-
名称:MAC算法加密、作用:消息验证、说明:秘钥不能泄露
-
名称:数字签名算法秘钥、作用:身份验证、说明:公钥可以公开,秘钥不能泄露
-
名称:会话秘钥、作用:加密解密、说明:密钥不能泄密,该密钥一般配合对称加密算法进行加密解密
-
名称:基于口令的密钥、作用:进行权限校验,加密解密等、说明:口令不能泄密
-
-
生命周期
-
生成(伪随机数生成器口令加密[PBE]算法、伪随机数生成器)
-
存储(静态秘钥[长期秘钥]、动态秘钥[会话秘钥])
-
解密
-
传输(硬编码在代码中口头、邮件)(秘钥协商算法[不用存储])
-
-
秘钥协商算法
-
密钥协商算法就是为解决密钥分配、存储、传输等问题,其也是公开秘钥算法的一种
-
-
秘钥协商算法种类
-
RSA秘钥协商算法:
-
首先使用客户端生成一个会话秘钥,然后使用公钥加密发哥服务器,服务器解密会话秘钥.接下来服务端和客户端使用对称加密算法和会话秘钥加解密数据.
-
-
DH秘钥协商算法:
-
DH算法在进行密钥协商的时候,通信双方的任何一方无法独自计算出会话密钥,通信双方各自保留一部分关键信息,再将另外一部分信息告诉对方,双方有了全部信息告诉对方,双方有了全部信息才能共同计算出相同的会话密钥.
-
-
-
-
ECC
-
为了保证DH的密钥对不被破解,提升安全性的主要手段就是增加密钥对的长度,但是长度越长,性能越低.为了解决性能问题,就有了椭圆曲线密码学(Elliptic Curv e Cryptography),简称ECC.
-
ECC是新一代公开秘钥算法,主要优点就是安全性,极短的密钥能够提供很大的安全性,同时性能也很高.比如224比特的ECC密钥和2048比特的RSA密钥可以达到同样的安全水平,由于ECC密钥具有很短的长度,运算速度非常快.
-
在具体应用的时候,ECC可以结合其他公开密钥算法形成更快、更安全的公开密钥算法,比如结合DH密钥协商算法组成ECDH密钥协商算法,结合数学签名DSA算法组成ECDSA数字签名算法.
-
ECC本质上就是一个数学公式,任何人基于公式都可以设计出椭圆曲线.[尽量选择性能更高、安全系数更高的命名曲线]
-
-
数字签名
-
公开密钥算法的另外一种用途就是数字签名技术
-
解决方案:
-
RSA签名算法
-
DSA签名算法
-
-
数字签名用途
-
防篡改:数据不会被修改,MAC算法也有这个特点
-
防抵赖:消息签署者不能抵赖
-
防伪造:发送的消息不能够伪造,MAC算法也有这个特点
-
-
数字签名流程:
-
生成流程
-
发送者对消息计算摘要值
-
发送者用私钥对摘要值进行签名得到签名值
-
发送者将原始消息和签名值一同发给接受者
-
-
验证流程
-
接收者接收到消息后,拆分出消息和消息签名值A
-
接收者使用公钥对消息进行运算得到摘要值B
-
接收者对摘要值B和签名值A进行比较,如果相同表示签名验证成功,否则就会验证失败
-
-
-
-
-
密码学算法应用场景
-
算法安全预测
-
摩尔定律
-
-
应用场景
-
Hash算法(信息摘要算法)
-
算法:MD5、SHA-1、SHA-2、SHA-3
-
性能:机密性、完整性
-
应用场景:
-
存储账号和口令(hash算法加salt)
-
生成信息摘要,校验数据完整
-
-
-
对称加密算法
-
算法:DES、3DES、AES、RC4
-
性能:机密性
-
应用场景:
-
对效率有要求的实时数据加密通信(使用VPN或者代理进行加密通信时)
-
大批量数据加密时
-
HTTP加密通讯时
-
-
-
公开秘钥算法
-
算法:RSA、DSA、ECC
-
性能:机密性
-
应用场景:
-
秘钥加密
-
数字签名
-
单向加密
-
双向加密
-
-
-
消息验证码(MAC)
-
算法:CBC-MAC、HMAC
-
性能:完整性
-
应用场景:
-
对机密性要求不高,只保障完整性和不被篡改时
-
-
-
数字签名算法
-
算法:RSA数字签名算法、DSA数字签名算法、ECDSA数字签名算法
-
性能:身份验证、不可抵赖性
-
应用场景:
-
防篡改
-
防抵赖
-
防伪造
-
-
-
-
-
密码学算法安全性和性能
-
秘钥长度与算法安全
-
安全的关键要素是秘钥的长度,理论上秘钥越长就越安全,但是秘钥越长性能就下降很多
-
-
密码学算法性能
-
性能和安全是密码学算法重要指标,在选择时尽量选择安全性高的算法,在此基础上在选择性能高的算法
-
-
-
总结
-
机密性
-
对称算法
-
公开秘钥算法
-
-
完整性
-
Hash函数算法
-
MAC:基于Hash函数算法、基于对称算法(CBC)
-
数字签名算法
-
-
身份验证
-
HMAC
-
数字签名算法
-
-
不可抵赖性
-
-