Cryptographic Right Answers备忘
Cryptographic Right Answers一些准则,遵守就好
数据加密¶
If you’re hiding information from users or the network.
推荐¶
- KMS1
- XSalsa20-Poly1305
避免¶
- AES-CBC、单独使用的 AES-CTR
- 64bit 分组的加密算法——尤其是 Blowfish
- OFB 模式
- RC4
对称密钥¶
you’re using cryptography.
推荐¶
256bit足已
避免¶
- 超长密钥
- 多重加密?
- 128bit 密钥
对称签名¶
you’re securing an API, encrypting session cookies, or are encrypting user data but, against medical advice, not using an AEAD construction.
推荐¶
HMAC
避免¶
- 自定义“密钥哈希”
- HMAC-MD5、HMAC-SHA1
- 复杂的多项式 MAC
- 把哈希再加密
- CRC
哈希算法¶
推荐¶
SHA-2(SHA-512/256)2够用,没必要SHA-3
避免¶
- SHA-1
- MD5/MD6
随机数生成¶
推荐¶
256bit from /dev/urandom
避免¶
- 用户态的随机数生成器
- OpenSSL 的 RNG
- havaged
- prngd
- egd
- /dev/random3
密钥存储¶
you accept passwords from users or, anywhere in your system, have human-intelligible secret keys. 这里强调的是用户密码可能被内部人员读取
推荐¶
按顺序依次:
- scrypt
- argon2
- bcrypt
- PBKDF2
避免¶
- 构建复杂的密码哈希切换机制
- SHA-3
- 裸用(不加盐)SHA-2, SHA-1, MD5
非对称密钥¶
由于效率问题?一般用在异步或者离线场景
推荐¶
避免¶
- RSA
- RSA-PKCS1v15
- ElGamal
非对称签名¶
需要数据完整性+身份验证的场合:加密货币、签名、验证完整性真实性、消息
推荐¶
Ed25519(Nacl的默认实现)
避免¶
- RSA,RSA-PKCS1v15
- 尤其避免ECDSA、DSA
- RSA
Diffie-Hellman¶
密钥协商
推荐¶
- 优选Nacl,甚至不用关心Nacl具体做了啥
- Curve25519备选
避免¶
- DH
- SRP
- J-PAKE
- 握手和协商
- 仅使用块的密钥(block ciphers)协商方案
- srand(time())。
参考¶
- Noise Protocol Framework
网站安全¶
主要针对tls, https?
推荐¶
- 优选AWS ALB/ELB
- 不想花钱,OpenSSL + LetsEncrypt凑合
避免¶
- 冷门的 TLS 库,如 PolarSSL、GnuTLS 和 MatrixSSL
客户端服务器通信¶
推荐¶
同网站安全:
- AWS ALB/ELB
- OpenSSL + LetsEncrypt凑合
避免¶
- 设计自己的加密传输;
- 使用 TLS 但采用默认配置,如curl5、IPSEC
在线备份¶
很稳,Tarsnap就够了
- Tarsnap
- PMAC-SIV-encrypted arc files to S3, save fingerprints of your backups to an ERC20-compatible blockchain
几篇Latacora 的文章