XuLizhao 's Notes

时光,漫步


  • 首页

  • 技术

  • 文档

  • 关于

  • 搜索
close

加解密算法学习

时间: 2019-10-24 更新于: 2020-11-09   |   分类: tech     |   阅读: 1794 字 ~4分钟

关于SSL,TLS,对称加密,非对称(公私钥)加密等的学习笔记。

密码学基础

大纲:

  • 对称加密
  • 非对称加密
  • 混合加密HTTPS
  • 哈希算法
  • 国密
  • 数字签名和CA认证

词汇表

名称 中文 说明
ciphertext 密文 编码后的数据, 非用户可读
encryption 加密 把明文转换成密文的过程
decryption 解密 把密文转换成明文的过程
key 密钥 使用改密钥加密敏感数据(必须被私密保存,不能被知晓)
nonce 随机数 必须唯一且只被使用一次,通常是随机数或伪随机数
plaintext 明文 用户可读数据
public key 公钥 用公钥加密消息; 验证签名
private key 私钥 解密消息; 创建签名
prime 素数
asymmetric cryptography 非对称加密 加密和解密用不同的key
symmetric cryptography 对称加密 加密和解密用相同的key
MAC Message Authentication Code 消息认证码,基于密钥的一个签名
HMAC MAC based on hash function 数据签名,确保数据没有被修改和替换
MITM(Man In The Middle) Attack 中间人攻击
ECC Elliptic Curve Crypto systems 椭圆曲线密码体制

对称加密/分组加密

也称作共享密钥加密,即用相同的密钥加密和解密。双方需要保证共享密钥的传输不被截获(会用到密钥交换算法)。

每次处理固定长度的明文/Block Cipher(加密固定长度blocks),过长的内容需要用一定工作模式加密。

经典算法

  • 不够安全的 DES(Data Encryption Standard),3DES
  • AES(Advanced Encryption Standard): 适用于大数据量加解密,需提前分发密钥
    • 块128位,密钥128+
    • AES-128-CBC

工作模式

常用的工作模式有:

  • EBC (Electronic Code Book Mode) 把stream分为多个blocks
    • encryption oracle - 可能被有限次尝试后破解
  • 密文分组链接/CBC (Cipher Block Chaining)
    • 明文块和前一个加密块XOR
    • IV(Initialization Vectors ) 和第一个明文块XOR : 随机数
      • 需要不可预知
      • 不一定保密,通常以明文形式添加到密文
      • 必须保证攻击者在IV给出前不能提前预知
      • 不能使用密钥做IV
    • TLS 1.0 使用
  • 计数器/CTR

工作模拟用到的一些算法和概念:

XOR

用相同的one-time pad加密

  • 两条消息: 两个密文直接XOR,可得出明文
  • 几条消息: 如果猜出一个明文,则可以知道key是什么
  • 猜到部分cribs,可以根据上下文语境等猜出更多

Padding/填充

  • PKCS5/PKCS7
    • PKCS5只讨论了8字节(64位)块的加密填充
    • AES等算法把块大小扩充到16字节, 如果采用PKCS5实质上采用的是PKCS7

非对称加密

即公私钥对加解密,私钥是钥匙,而公钥是锁,可以把锁公开出去,让别人把数据锁起来发给我;而钥匙一定要留在自己手里,用于解锁。

两种用途:

  • 加密:把公钥发布出去用于加密,只有自己的私钥可以解密,保证了数据的机密性;

  • 数字签名,把公钥发布出去后,用私钥加密数据作为签名,以证明该数据由私钥持有者所发送。

  • RSA加解密算法:公钥加密、私钥解密。

  • DH密钥交换算法:生成共享密钥K,交换的安全性基于求有限域上离散对数的难度。

  • 数字签名算法:生成摘要,然后对摘要签名。

注: 椭圆曲线算法/ECC,一般适用于签名或密钥协商,不适用于大量数据的加解密:

密钥交换算法

一定程度解决密钥配送问题,但是无法验证核实通信方的身份,可能受到中间人攻击。所以执行密钥交换算法之前一般要核实对方身份,比如使用数字签名。

常用算法:

  • 不够安全的RSA: 大素数分解,利用极大因数分解的计算量极大这一特点
  • Diffie-Hellman Key Exchange
  • DHE/EDH 是DH的Ephemeral(临时)增强形式
  • ECDH是基于ECC的DH( Diffie-Hellman)密钥交换算法,交换双方可以在不共享任何秘密的情况下协商出一个密钥

安全性对比:

名称 安全性 备注
RSA 低,有RSA私钥就可以解密 已有公私钥,只执行一次模幂
DHE 较高,RSA私钥泄露不影响 每次随机生成大素数,模幂两次
ECDHE 很高 每次生成大数,计算椭圆方程的乘法两次,得到公钥

说明:

  • 如果开启完全正向保密协议/perfect forward secrecy,客户端和服务端会使用Diffie-Hellman (DH)协商一个共享会话密钥; 服务端私钥只用来签名.
  • 如果不支持完全正向保密协议(假定服务端使用RSA密钥), 客户端会使用服务端公钥加密共享会话密钥, 同理也就可以使用服务端私钥解密(被服务端或Wireshark).

数字签名

证实完整性和来源(不可抵赖)

签名算法:

  • RSA
  • DSA/(Digital Signature Algorithm)
  • ECDSA: 数字签名算法DSA的变体

工具

安全

  • Qubes OS: 安全操作系统,每个软件运行在虚拟机(Xen)
  • Tails: 基于Debian和Tor(匿名网络)

磁盘

  • Windows: bitlocker
  • Mac: FileVault
  • VeraCrypt: 磁盘加密,基于 TrueCrypt,支持全系统
  • 消息文件加密: PGP

Java

  • JCE8 Unlimited Strength Jurisdiction Policy:装到JRE目录
  • Bouncy Castle加密库
# JDK默认限制密码算法密钥长度,需要使用无限制权限策略文件替换JDK相关策略文件后本密码基础套件才可正常运行
# 出错信息
Caused by: java.security.InvalidKeyException: could not encrypt message

# 路径
/usr/java/jdk1.8.0_92/jre/lib/security

扩展阅读

  • crypto101
  • jsrsasign:JavaScript 加密库
  • 非对称加密(RSA、DH密钥交换算法、数字签名)
  • 本文作者: xulizhao
  • 本文链接: https://xulizhao.com/blog/crypto/
  • 版权声明: 本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
#security#
DDD/领域驱动设计
sipp压测工具介绍
  • 文章目录
  • 站点概览

xulz

时光,漫步

56 日志
3 分类
28 标签
  • 密码学基础
    • 词汇表
  • 对称加密/分组加密
    • 经典算法
    • 工作模式
  • 非对称加密
    • 密钥交换算法
    • 数字签名
  • 工具
    • 安全
    • 磁盘
    • Java
  • 扩展阅读
© 2017 - 2023 XuLizhao 's Notes
Powered by - Hugo/ NexT
津ICP备17010344号-1
0%