密码学算法

  1. 密码学概述

    • 基本认知

      1. 科学

        • 密码学是科学、有严格的规范,设计密码学算法需要具备深厚的数学知识

      2. 公开

        • 密码学算法的实现原理是公开的,经过长时间的考验

      3. 相对安全

        • 计算机处理速度越来越快,某个密码学算法的数学基础可能受到挑战,现阶段安全密码算法,未来可能就不安全了

      4. 攻击方法多样

        • 大部分密码学算法需要秘钥,最简单的破解方法就是获取秘钥(暴力破解、彩虹表等)

      5. 应用标准

        • 未来正确使用密码学算法,并依据标椎使用(比如:PKCS),可以不了解密码学算法原理,但必须掌握应用标准

      6. 不比具备很强数学知识

        • 很多密码学算法并非计算机专家创建,而是数学家.(不妨碍我们使用密码学算法)

      7. 解决特定问题

        • 每种算法都有应用场景,解决特定的问题

    • 目标

      1. 机密性

        • 信息在存储,运输、处理过程中的安全保密,要求信息不会泄露给未经授权的人.对称加密算法和公开秘钥算法都能保护机密性

      2. 完整性

        • 接受方接受到的信息就是发送方发送的原始信息,如数据被篡改,接受方有策略数据被篡改,那传输的数据就具备完整性.在密码学中,主要使用消息验证码(MAC)算法保证完整性

      3. 不可抵赖性

        • 在密码学中,使用数字签名技术避免抵赖

      4. 身份验证

        • 通信双方(发送方、接收方)必须确保对端就是通信对象.在密码学中,一般使用数字签名确认身份

    • 常用密码库

      1. MIRACL

        • 由Shamus软件公司开发,包括了:RSA、AES、DSA、ECC和Diffie-Hellman秘钥交换算法

      2. CryptoAPI

        • 微软在Windows中的一个安全加密应用框架

        • 密码应用程序接口,密码服务提供者模块

      3. OpenSSL

        • 开放源代码的软件库包,三个只要的功能部分:SSL协议库、应用程序以及密码算法库

  2. 密码学算法分类

    • 类型

      • 哈希算法(Hash)

        1. 国内:SM3

        2. 国际:MD5、SHA-1、SHA-2、SHA-3

        3. 说明:SM3的256位保密强度高于MD5

      • 对称加密算法

        1. 国内:SM1、SM4、ZUC

        2. 国际:DES、3DES、AES

        3. 说明:SM1的128位保密强度和性能与AES相当,SM4的128位已升级为国际标准

      • 公开秘钥算法

        1. 国内:SM2

        2. 国际:RSA、ECC

        3. 说明:SM2的256位基于ECC算法,安全性比RSA1024有明显优势

    • 随机数

      • 类型

        1. 真正的随机数生成器

          • 硬件生成

          • 效率高、随机性、不可预测性、不可重现性

          • 需要物理设备获取

        2. 伪随机数生成器

          • 软件生成

          • 效率高、随机性

          • 通过算法获取

        3. 密码学伪随机数生成器

          • 软件生成

          • 效率高、随机性、不可预测性

          • 用于密码学

      • 工作原理

        1. 生成器内部维护一个状态(internal state),其数值来源于外部,成为熵:动态时间、温度、声音变化等

        2. 伪随机数内部状态来源模拟的数值,称为种子(seed)

      • 可生成密码学随机数的算法

        1. 块密码算法CTR模式:对称加密算法

        2. 摘要函数:单向性

        3. 流密码算法:对称加密算法

      • 用途

        1. 密钥

          • 对称加密算法、公开密钥算法、MAC算法都会用到密钥,密钥本质上是一个随机数

        2. 初始化向量(IV)

          • 块密码算法中很多迭代模式会使用(IV)

        3. nonce

          • 块密码算法中的CTR模式、AEAD加密模式也会用到nonce

        4. salt

          • 基于口令的加密算法会用到,通过salt生成一个密钥

    • Hash函数

      • 加密基元

        1. 基于密码学Hash算法产生的其他密码算法:MAC消息验证码、伪随机数生成器、基于口令的加密算法、数字签名等等

      • Hash特性

        1. 摘要/散列/指纹=hash(消息)

        2. 相同的消息获得相同摘要值、速度快、单向性(不可逆)、原始消息变化摘要值也会变化、不同摘要值不同

      • Hash算法用途

        1. 文件比较

        2. 身份校验

      • Hash算法分类

        1. MD5

          • 算法:MD5、输出值长度:128比特、输入值最大长度:无限制、说明:实践中已经产生碰撞,理论上不具备弱抗碰撞性

        2. SHA-1

          • 算法:SHA-1、输出值长度:160比特、输入值最大长度:2的64次方减一比特、说明:实践中已经产生碰撞

        3. SHA-2

          • 算法:SHA-256、输出值长度:256比特、输入值最大长度:2的64次方减一比特、说明:安全使用

          • 算法:SHA-512、输出值长度:512比特、输入值最大长度:2的128次方减一比特、说明:安全使用

          • 算法:SHA-224、输出值长度:224比特、输入值最大长度:2的64次方减一比特、说明:安全使用

          • 算法:SHA-384、输出值长度:384比特、输入值最大长度:2的128次方减一比特、说明:安全使用

        4. SHA-3

          • 算法:SHA3-256、输出值长度:256比特、输入值最大长度:2的64次方减一比特、说明:安全使用

          • 算法:SHA3-512、输出值长度:512比特、输入值最大长度:2的128次方减一比特、说明:安全使用

          • 算法:SHA3-224、输出值长度:224比特、输入值最大长度:2的64次方减一比特、说明:安全使用

          • 算法:SHA3-384、输出值长度:384比特、输入值最大长度:2的128次方减一比特、说明:安全使用

    • 对称加密算法

      • 原理

        1. 密文=E(明文、算法、秘钥)

        2. 明文=D(密文、算法、秘钥)

      • 分类

        1. 块密码算法:DES、3DES、AES

        2. 流密码算法:RC4

      • 模式

        1. ECB(Electronic Codebook)、特点:运算快速,支持并行处理,需要填充、说明:不推荐使用

        2. CBC(Cipher Block Chaining)、特点:支持并行处理,需要填充、说明:推荐使用

        3. CFB(Cipher Feedback)、特点:支持并行处理,不需要填充、说明:不推荐使用

        4. OFB(Output Feedback)、特点:迭代运算使用流密码模式,不需要填充、说明:不推荐使用

        5. CTR(Counter)、特点:迭代运算使用流密码模式,支持并行处理,不需要填充、说明:推荐使用

        6. XTS(XEX-based tweaked-codebook)、特点:不需要填充、说明:用于本地硬盘存储解决方案中

      • 标准

        1. 填充标准:明文长度必须是分组长度的倍数,如不是倍数,则必须有填充机制

        2. PKCS#7填充:可处理的分组长度是1到255个字节

        3. AES算法使用标准,比如:AES-128-CBC-PKCS#7,其中秘钥长度128,分组模式CBC,填充标准PKCS#7,AES算法默认分组128bit

    • 消息验证码

      • Hash算法能够完成密码学目标之一的完整性校验,但却不能避免消息被篡改,为避免消息被篡改,需要用到消息验证码.消息验证码非常重要,一般结合加密算法一起使用

      • 消息验证码的模型:MAC值 = mac(消息、密钥)

      • MAC一般和原始消息一起传输,原始消息可以选择加密,也可以选择不加密,通信双方会以相同的方式生成MAC值,然后进行比较

      • MAC算法种类:CBC-MAC算法和HMAC算法,http中使用最多的为HMAC算法.

        1. CBC-MAC算法:CBC-MAC算法从块密码算法的CBC分组模式演变而来,简单的说就是最后一个密钥分组的值就是MAC值

        2. HMAC算法:使用Hash算法作为加密基元,结合Hash算法有多种变种(HMAC-SHA-1、HMAC-SHA256、HMAC-SHA512)

    • 对称算法和MAC算法结合

      • 加密算法不能提供完整性,加密的同时必须引入MAC算法避免消息被篡改

      • 结合对称加密算法和MAC算法提供机密性额完整性的模式叫Authenticated Encryption(AE)加密模式,有三种:

        1. E&M模式:消息分别进行加密运算和MAC运算,然后将两个运算结果结合起来发送

        2. MtE模式:先对消息进行MAC计算,然后将消息和MAC值组合,再进行加密,最终加密值发送出去(http使用)

        3. EtM模式:先对消息进行加密得到密文,然后对密文再计算MAC值,最终将密文和MAC值组合在一起发送

      • 保证数据加密和完整性的三种模式:

        1. AEAD模式:在底层组合了加密算法和MAC算法,同事保证数据加密和完整性.

        2. CCM模式:使用CBC-MAC算法保证完整性,使用AES算法CTR模式保证加密

        3. GCM模式:GHASH进行MAC运算,AES算法CTR模式进行加密运算,拥有十分不错的效率和性能

    • 公开密钥算法

      • 特点:

        1. 功能不一样:对称算法主要用于加密和解密,而公开秘钥算法可以用于加密解密、秘钥协商、数字签名

        2. 运算速度很慢:相比对称加密算法来说,公开秘钥算法尤其是RSA算法运算非常慢

        3. 秘钥是一对:对称加密算法中,密钥是一串数字,加密者和解密者使用同样的密钥.公开密钥算法是一对,分别为公钥和私钥

      • 标准:

        1. RSA算法主要使用PKCS#I定义了两种机制处理填充问题,从而保证同样的明文、同样的密钥经过RSA加密,每次的密文都是不一样的

        2. 两种填充机制分别是RSAES-PKCSI-VI_5和RSAES-OAEP,目前推荐使用的填充标准是RSAES-OAEP,OpenSSL命令行默认使用的标准是RSAES-PKCSI-VI_5

    • 秘钥(安全性)

      • 是什么?

        1. 对称加密算法、MAC算法使用的密钥就是一串数字

        2. 公开密钥算法中的密钥四一对,由多个部分组成,但是本质上也可以认为由多个数字组成

      • 作用

        1. 名称:对称加密算法秘钥、作用:加密解密、说明:秘钥不能泄露

        2. 名称:非对称加密算法秘钥、作用:加密解密、说明:公钥可以公开,秘钥不能泄露

        3. 名称:MAC算法加密、作用:消息验证、说明:秘钥不能泄露

        4. 名称:数字签名算法秘钥、作用:身份验证、说明:公钥可以公开,秘钥不能泄露

        5. 名称:会话秘钥、作用:加密解密、说明:密钥不能泄密,该密钥一般配合对称加密算法进行加密解密

        6. 名称:基于口令的密钥、作用:进行权限校验,加密解密等、说明:口令不能泄密

      • 生命周期

        1. 生成(伪随机数生成器口令加密[PBE]算法、伪随机数生成器)

        2. 存储(静态秘钥[长期秘钥]、动态秘钥[会话秘钥])

        3. 解密

        4. 传输(硬编码在代码中口头、邮件)(秘钥协商算法[不用存储])

      • 秘钥协商算法

        • 密钥协商算法就是为解决密钥分配、存储、传输等问题,其也是公开秘钥算法的一种

      • 秘钥协商算法种类

        1. RSA秘钥协商算法:

          • 首先使用客户端生成一个会话秘钥,然后使用公钥加密发哥服务器,服务器解密会话秘钥.接下来服务端和客户端使用对称加密算法和会话秘钥加解密数据.

        2. DH秘钥协商算法:

          • DH算法在进行密钥协商的时候,通信双方的任何一方无法独自计算出会话密钥,通信双方各自保留一部分关键信息,再将另外一部分信息告诉对方,双方有了全部信息告诉对方,双方有了全部信息才能共同计算出相同的会话密钥.

    • ECC

      1. 为了保证DH的密钥对不被破解,提升安全性的主要手段就是增加密钥对的长度,但是长度越长,性能越低.为了解决性能问题,就有了椭圆曲线密码学(Elliptic Curv e Cryptography),简称ECC.

      2. ECC是新一代公开秘钥算法,主要优点就是安全性,极短的密钥能够提供很大的安全性,同时性能也很高.比如224比特的ECC密钥和2048比特的RSA密钥可以达到同样的安全水平,由于ECC密钥具有很短的长度,运算速度非常快.

      3. 在具体应用的时候,ECC可以结合其他公开密钥算法形成更快、更安全的公开密钥算法,比如结合DH密钥协商算法组成ECDH密钥协商算法,结合数学签名DSA算法组成ECDSA数字签名算法.

      4. ECC本质上就是一个数学公式,任何人基于公式都可以设计出椭圆曲线.[尽量选择性能更高、安全系数更高的命名曲线]

    • 数字签名

      1. 公开密钥算法的另外一种用途就是数字签名技术

      2. 解决方案:

        • RSA签名算法

        • DSA签名算法

      3. 数字签名用途

        • 防篡改:数据不会被修改,MAC算法也有这个特点

        • 防抵赖:消息签署者不能抵赖

        • 防伪造:发送的消息不能够伪造,MAC算法也有这个特点

      4. 数字签名流程:

        • 生成流程

          1. 发送者对消息计算摘要值

          2. 发送者用私钥对摘要值进行签名得到签名值

          3. 发送者将原始消息和签名值一同发给接受者

        • 验证流程

          1. 接收者接收到消息后,拆分出消息和消息签名值A

          2. 接收者使用公钥对消息进行运算得到摘要值B

          3. 接收者对摘要值B和签名值A进行比较,如果相同表示签名验证成功,否则就会验证失败

  3. 密码学算法应用场景

    • 算法安全预测

      • 摩尔定律

    • 应用场景

      • Hash算法(信息摘要算法)

        1. 算法:MD5、SHA-1、SHA-2、SHA-3

        2. 性能:机密性、完整性

        3. 应用场景:

          • 存储账号和口令(hash算法加salt)

          • 生成信息摘要,校验数据完整

      • 对称加密算法

        1. 算法:DES、3DES、AES、RC4

        2. 性能:机密性

        3. 应用场景:

          • 对效率有要求的实时数据加密通信(使用VPN或者代理进行加密通信时)

          • 大批量数据加密时

          • HTTP加密通讯时

      • 公开秘钥算法

        1. 算法:RSA、DSA、ECC

        2. 性能:机密性

        3. 应用场景:

          • 秘钥加密

          • 数字签名

          • 单向加密

          • 双向加密

      • 消息验证码(MAC)

        1. 算法:CBC-MAC、HMAC

        2. 性能:完整性

        3. 应用场景:

          • 对机密性要求不高,只保障完整性和不被篡改时

      • 数字签名算法

        1. 算法:RSA数字签名算法、DSA数字签名算法、ECDSA数字签名算法

        2. 性能:身份验证、不可抵赖性

        3. 应用场景:

          • 防篡改

          • 防抵赖

          • 防伪造

  4. 密码学算法安全性和性能

    • 秘钥长度与算法安全

      • 安全的关键要素是秘钥的长度,理论上秘钥越长就越安全,但是秘钥越长性能就下降很多

    • 密码学算法性能

      • 性能和安全是密码学算法重要指标,在选择时尽量选择安全性高的算法,在此基础上在选择性能高的算法

  5. 总结

    • 机密性

      • 对称算法

      • 公开秘钥算法

    • 完整性

      • Hash函数算法

      • MAC:基于Hash函数算法、基于对称算法(CBC)

      • 数字签名算法

    • 身份验证

      • HMAC

      • 数字签名算法

    • 不可抵赖性

      • 数字签名算法

posted @ 2020-08-28 14:19  泡面达人  阅读(1143)  评论(0编辑  收藏  举报