在应用开发项目中如何安全实现密码学算法

黄玮

TL; DR

Too Long; Don’t Read

LibSodium

LibSodium

LibSodium

为什么不推荐使用 XXX

XXX 普遍存在的问题

为什么没有首先推荐 NaCl

为什么强烈推荐 LibSodium

顶尖专业团队出品

基于 NaCl 开发,而 NaCl 作者团队拥有三位顶尖密码学专家

  • Dan Bernstein 椭圆曲线加密和签名算法 Curve25519, Ed25519 的作者,开发了 qmail, djbdns 等知名以安全著称的流行开源互联网基础设施软件
  • Tanja Lange 椭圆曲线加密和签名算法专家
  • Peter Schwabe 擅长密码学侧信道分析

优秀的算法设计 + 健壮的代码实现

  • 具备健壮性和一致性密码学特征的简单接口
  • 每一步计算操作均采用了「常量化」耗时处理(对抗「Timing Attack」)
  • WebCrypto 这种由「委员会」票选出来的一堆流行密码学算法大杂烩不同,libsodium 的密码原语和构造都经过精心挑选,并且明确声明了它们的真实世界软件应用的安全属性
  • libsodium 的实际安全性能表现优于美国国家标准技术研究所(NIST)的联邦信息处理标准 (Federal Information Processing Standard, FIPS) 标准

哪些情况下你无法选择 libsodium

  • 各个国家的密码学算法标准合规性要求实现的算法在 libsodium 中没有获得实现支持
  • 你选择的编程语言还没有对应的封装 API 可用
  • 强加密算法使用属于违法行为的某些场景
  • 强制兼容老旧不安全密码学算法的需求场景

PHP

Python

其他主流编程语言的密码学库

  • C++ - Crypto++
    • 跨平台第三方支持,丰富且持续更新的现代密码学 API 实现和完善文档
  • Java Cryptography Architecture (JCA)
    • 不愧为企业级开发市场的王者,官方支持的丰富且持续更新的现代密码学 API 实现和完善文档

其他主流平台的安全编程实践