在应用开发项目中如何安全实现密码学算法
黄玮
TL; DR
Too Long; Don’t Read
LibSodium
LibSodium
LibSodium
为什么不推荐使用 XXX
PHP - Mcrypt
?
OpenSSL
?
Java / C# - Bouncy Castle
?
Google 出品 KeyCzar
?
pycrypto
?
XXX 普遍存在的问题
提供已证明不安全的密码学算法的实现且未给予相应的易于理解警示或警告
MD5 / SHA-1 / DES / ECB 模式的对称加密算法
提供的是不规范、不健壮的密码学算法实现
Mcrypt 提供的对称加密算法使用
NULL
字符填充
消息验证码验证算法存在「Timing Attack」缺陷
,
提供的是
最基础
的密码学算法实现,对于没有密码学专业背景的程序员来说容易编写出存在缺陷的密码学算法
缺少提供符合
AEAD
标准的数据加密算法 API
停止更新或长时间无人维护更新
pycrypto
Mcrypt Known Open Bugs
为什么没有首先推荐
NaCl
优秀的加密算法实现库
除非你
使用 C/C++ 开发的应用
使用 Python 开发的应用可以使用
PyNaCl
延伸阅读 - Python 的密码学算法选型依据
LibSodium
是基于 NaCl 开发的,与 NaCl
100%
API 兼容,扩充了一些新特性,提供
更好的跨平台移植性
PHP 是主流编程语言里第一个在语言标准库里内置集成了对
LibSodium
的 API 绑定实现支持
为什么强烈推荐 LibSodium
顶尖专业团队出品
基于 NaCl 开发,而 NaCl 作者团队拥有三位顶尖密码学专家
Dan Bernstein
椭圆曲线加密和签名算法 Curve25519, Ed25519 的作者,开发了 qmail, djbdns 等知名以安全著称的流行开源互联网基础设施软件
Tanja Lange
椭圆曲线加密和签名算法专家
Peter Schwabe
擅长密码学侧信道分析
LibSodium 的项目领导者
Frank Denis
是一名活跃的优秀开源软件开发者和安全专家。
强烈推荐阅读 Frank Denis 在 2017 年 hack.lu 上的一次关于「密码学算法实现 API 设计方法」的技术分享
在该项目
算法设计者和开发者名单里
我们依然可以看到 NaCl 的三位作者(特别是
Dan Bernstein
)均赫然在列。
优秀的算法设计 +
健壮的代码实现
具备健壮性和一致性密码学特征的简单接口
每一步计算操作均采用了「常量化」耗时处理(对抗「Timing Attack」)
与
WebCrypto
这种由「委员会」票选出来的一堆流行密码学算法大杂烩不同,libsodium 的密码原语和构造都经过精心挑选,并且明确声明了它们的真实世界软件应用的安全属性
libsodium 的实际安全性能表现优于美国国家标准技术研究所(NIST)的联邦信息处理标准 (Federal Information Processing Standard, FIPS) 标准
哪些情况下你无法选择 libsodium
各个国家的密码学算法标准合规性要求实现的算法在 libsodium 中没有获得实现支持
你选择的编程语言还没有对应的封装 API 可用
强加密算法使用属于违法行为的某些场景
强制兼容老旧不安全密码学算法的需求场景
PHP
Frank Denis 亲自操刀主持的 libsodium PHP 移植实现
PHP Libsodium 最详细文档 by Paragon Initiative Enterprises
密码学意义上的 PHP 安全开发 by Paragon Initiative Enterprises 2017-02-09
Halite - libsodium PHP 实现的更进一步封装 API
在基础 libsodium 功能的基础上进一步封装了
常用 Web 服务端功能 API
:Cookie加密与解密、文件加密与解密、口令存储与验证
Python
常见密码学算法 Python 版示例
其他主流编程语言的密码学库
C++ - Crypto++
跨平台第三方支持,丰富且持续更新的现代密码学 API 实现和完善文档
Java Cryptography Architecture (JCA)
不愧为企业级开发市场的王者,官方支持的丰富且持续更新的现代密码学 API 实现和完善文档
Javascript - Web Crypto API(W3C Recommendation 2018.6)
|
libsodium.js
浏览器即将提供原生的现代密码学 API 支持,部分现代浏览器已提供了 API 实现
.NET - System.Security.Cryptography
现代密码学 API 支持并不完善(例如不支持 AES-GCM)
其他主流平台的安全编程实践
安全 Windows 应用开发简介 from MSDN
苹果公司的密码学相关服务开发指南 from developer.apple.com
Android App 开发最佳安全实践 from developer.android.com