多年来,关于密钥长度的研究已经有很多,其中包括学术界(例如Lenstra方程)和各种标准委员会(ECRYPT-CSA,德国BSI,美国NIST等)。
尽管在互联网上对这些材料进行了大量的报道,但这些资源在为软件开发人员和系统管理员起草建议时缺乏清晰度。
●关于密钥大小的重要说明
关于密钥大小在2019年最重要的一点是它们并不像普通大众所想的那样重要。
安全行业中的许多人完全专注于最大限度的提高暴力攻击的难度,前提是他们仍然可以实现自己的性能目标。他们选择符合目标基准的最大密钥,并且感觉更安全。与此同时,他们实际上并没有做出最佳的安全选择,实际上可能会伤害他们自己的安全。
实际上,超过一定的阈值(例如对称加密的96位安全级别),更长的密钥几乎不会给你带来什么。
●当密钥大小实际上损害了安全性时
考虑这两组密码; 哪个更安全?
Blowfish,支持最多448位密钥
AES,最多支持256位密钥。
如果选择Blowfish,你就陷入了陷阱。
Blowfish的块大小为64位,而AES的块大小为128位。
Blowfish因为它的块大小很容易受到攻击,而AES不会。
在现实世界中,AES具有硬件加速(AES-NI),使其速度非常快,同时不受缓存定时攻击的影响。Blowfish没有可用的硬件加速。
完全关注密钥大小,而忽略这些算法的其他重要属性,可能导致做出次优的安全决策。
但是,如果你有一个其他条件相似的场景,你总是使用AES,但决定在你的应用程序中使用128位和256位密钥。你应该总是选择更大长度的密钥吗?
AES-128和AES-256的安全性之间唯一有意义的区别是量子计算机的威胁。
如果开发出实用的量子计算机,Grover的算法会破坏128位AES而不是256位AES。但在大多数协议中,您的非对称加密速度下降得更快(2048位RSA和256位ECC略多于2^32次,而AES则为2^64次)。
由于大多数AES密钥是使用非对称加密进行密钥交换的,因此选择256位密钥可能不足以保护您的消息机密性免受量子攻击者的攻击。
●密钥大小和算法建议
如果您的团队中有加密专家不同意这些建议,请听取您的专家的意见。他们可能知道这个博客文章没有的特定于您的需求的东西。
●非对称(“公钥”)加密
按优先顺序使用:
X25519(密钥大小永不改变)
对称加密:使用secp256r1的ECDH(密钥大小永远不会改变)
对称加密:带有2048位密钥的RSA
即使使用3072位RSA,256位椭圆曲线加密密钥的安全性也是如此。
虽然许多组织建议在未来几年内从2048位RSA迁移到3072位RSA(甚至4096位RSA),但不要遵循该建议。而是从RSA迁移到椭圆曲线加密,然后放松,同时留意后量子密码学的建议。
此外,要保证RSA加密的安全性还有许多复杂的问题要考虑,但这是一个棘手的问题,不值得在本文中重新讨论。如果你能帮上忙的话,最好不要使用RSA。
ECDH:256位密钥
RSA:2048位密钥
●对称密钥加密
按优先顺序使用:
XChaCha20-Poly1305或XSalsa20-Poly1305(始终具有256位密钥)
AES-GCM-SIV(无论密钥大小)
ChaCha20-Poly1305(始终具有256位密钥)
AES-GCM(无论密钥大小)
如果您正在使用信誉良好的TLS库(OpenSSL是最常见的),那么这些选项中的任何一个都可以。您可以随意使用256位密钥,但如果您不得不使用128位密钥,请不要担心太糟糕。
对于应用层对称密钥加密,应考虑两个附加选项。
AES-CTR(无论密钥大小)+ HMAC-SHA2(加密然后MAC)
AES-CBC(无论密钥大小)+ HMAC-SHA2(加密然后MAC)
如果您想使用其他内容,请询问密码学家。如果您没有密码学家,请雇用一名。除非你的团队中有一个加密专家,否则不要试图加密太多。
即便如此,还请谨慎行事。
128位或256位都可以,只要您使用此列表中的一个选项。
●对称密钥认证
将HMAC与SHA2族哈希函数一起使用,密钥大小等于哈希函数大小。
这里有很多不错的选择。只需确保您使用至少224位密钥用于SHA-224。
更重要的是,不要使用哈希函数设计自己的消息身份验证协议。去使用HMAC。
如果您的对称加密包括Poly1305身份验证,这是很好的,但它需要个专家小心使用它的安全性。除非你是专家,否则不要单独使用Poly1305。
如果算法合理,224位,256位,384位,512位都是很好的密钥大小。
●特定协议的建议HTTPS / TLS
简易模式:使用Mozilla的服务器端TLS配置生成器。
复杂模式:仔细构建您的密码套件,包括ECDHE,CHACHA20-POLY1305和AES-GCM,然后使用Qualys SSL Labs等工具验证您的配置。
更重要的是,如果您能提供帮助,请尝试仅支持TLS 1.2或更新版本。
●SSH
简易模式:遵循Mozilla的OpenSSH服务器配置指南。
此外,请确保您使用的是Ed25519密钥。您可以通过将-t ed25519传递给ssh-keygen来完成此操作。
●VPN
只需使用WireGuard。
如果您被迫使用OpenVPN,可以遵循一些步骤来强化您的OpenVPN配置。只要知道,一般来说,OpenVPN的默认设置对安全性来说太糟糕了。例如,默认加密方法是Blowfish。
WireGuard在2019年领先于任何其他VPN软件。
2019年密钥大小和加密算法指南mp.weixin.qq.com文章首发在微信公众号:btc201800知识星球ID:28018093
音频发布在喜马拉雅上“区块链杂谈 (第2季)” http://xima.tv/Bjq4se
解读区块链白皮书 http://xima.tv/RNU1Q8
宁波格密链网络科技有限公司,专注于区块链上的密码技术研发。