Security FAQ
X.509 vs PEM
都用于对证书进行编码
- X.509
- 一些列安全相关标准
- 只有 X.509 object presentation 与 PEM 相关
- 传输时基于 ASN.1 编码
- 要分析内容才知道编码的是什么
- bytes - 面向机器
- 后缀一般为 .der
- .cer 和 .crt 都是 ASN.1 编码 - 后缀用于标识作用,便于系统区分
- PEM - Privacy Enhanced Mail - RFC1421
- 提供额外嵌套对象标识信息
- 文本格式 - 面向人
- 后缀一般为 .pem
TLS vs SSL
都用于提供安全连接 - 认证、加密、完整性检查。
- SSL - Secure socket layer
- SSL 1.0 by Netscape - 1995
- 已废弃
- MD5, SHA1, MAC
- TLS - Transport layer security
- TLS 1.0 by IETF - 1999
- 继承 SSL - SSL 新版本
- 非对称加密
- HMAC - integrity
- AEAD - TLS 1.3
- Authenticated Encryption with Associated Data
time | SSL | TLS |
---|---|---|
1995-2011 | SSL 2.0 | |
1996-2015 | SSL 3.0 | |
1999-2020 | TLS 1.0 | |
2006-2020 | TLS 1.1 | |
2008- | TLS 1.2 | |
2018- | TLS 1.3 |
AES-CBC vs. AES-GCM vs. AES-CTR
- 并行计算 - 硬件优化 - CTR、GCM
- AES-CBC (Cipher Block Chaining)
- 需要前一块 - 性能差一点
- 任何错误都会影响后续所有分组
- 需要 padding
- 需要前一块 - 性能差一点
- AES-CTR (Counter Mode)
- 支持随机读写
- AES-GCM (Galois/Counter Mode)
- 包含消息认证码(MAC),可以检查数据完整性
- 需要对运算有硬件支持,实现相对复杂
- AES-ECB (Electronic Code Book)
- CFB - Cipher Feedback Mode
- OFB - Output Feedback Mode
- EAX
const key = await window.crypto.subtle.generateKey({ name: 'AES-CBC', length: 256 }, true, ['encrypt', 'decrypt']);
- https://crypto.stackexchange.com/questions/6029/aes-cbc-mode-or-aes-ctr-mode-recommended
- https://www.geeksforgeeks.org/block-cipher-modes-of-operation/
- https://en.wikipedia.org/wiki/Block_cipher_mode_of_operation
PKCS#7 Padding
- 用于 AES
- 补齐 BlockSize - 一般 32
- 最后一位记录 Padding 的长度
pkcs1 vs pkcs8
PKCS(Public-Key Cryptography Standards)是由 RSA 实验室制定的一系列公钥密码体系标准。PKCS#1 和 PKCS#8 是这些标准中的两个,它们分别定义了 RSA 密钥对的表示和私钥信息的表示。
-
PKCS#1(RSA Cryptography Standard): PKCS#1 是专门针对 RSA 密钥对的标准。它定义了 RSA 公钥和私钥的表示和编码。在 PKCS#1 标准中,私钥的表示通常包含以下信息:
- RSA 模数(n)
- 公钥指数(e)
- 私钥指数(d)
- 两个质数(p 和 q)
- 两个质数的乘法逆元(dp 和 dq)
- 系数 q 的逆元(qi) PKCS#1 格式的密钥通常用于与 RSA 密钥相关的操作,如加密、解密、签名和验证。
-
PKCS#8(Private-Key Information Syntax Standard): PKCS#8 是一种更通用的私钥表示标准,它适用于各种类型的非对称加密算法(例如 RSA、DSA 和 ECDSA 等)。PKCS#8 私钥通常包含以下信息:
- 私钥算法标识符
- 私钥本身
- 可选的属性集合 PKCS#8 格式的密钥可以用于与多种非对称加密算法相关的操作,而不仅仅是 RSA。
总之,PKCS#1 是专门针对 RSA 密钥对的标准,而 PKCS#8 是一种更通用的私钥表示标准,适用于各种非对称加密算法。