如何安全使用加密套件?

本文涉及的产品
密钥管理服务KMS,1000个密钥,100个凭据,1个月
简介:

如何安全使用加密套件?

对称加密

  1. 首选 Chacha20-Poly1305 和 AES-GCM 算法(AEAD类算法)
  2. 不支持 AES-GCM 或 Chacha20-Poly1305 的场景下使用 AES-CBC,避免 ECB、CTR、CFB、OBF 模式
  3. 避免64bit块加密算法,例如 blowfish、TEA 等
  4. 不要使用RC4
  5. 不要自行设计加密算法,除非你在密码学领域是整个行业公认的专家
  6. 不要多次循环加密,加密强度取决于加密算法、秘钥长度,以及正确的实现加密过程。循环加密对加密强度没有实际意义的帮助

原因

  1. Chacha20-Poly1305,AEAD类算法;绕开了目前所有已知的漏洞;面向移动互联网优化;ARM架构上性能更佳
  2. AES-GCM,AEAD类算法;TLS 1.3 draft主要的算法;工业标准;现代CPU有AES-GCM的硬件指令

对称秘钥长度

  1. 对称秘钥长度不能低于128 bit,也即16字节
  2. 长度超过256 bit的对称秘钥没有实际意义
  3. 对称加密、RSA、ECC三种不同类型的算法中,同样的秘钥长度安全性也不同,下面表格中列出来同样强度情况下,对应不同算法的秘钥长度
  4. 对称秘钥生成规则参考本文的 "随机数生成规范"
Symmetric Key Size
(bits)
RSA and DH Key Size
(bits)
Elliptic Curve Key Size
(bits)
80 160 1024
112 224 2048
128 256 3072
192 384 7680
256 521 15360

以上数据来自:https://www.globalsign.com/en/blog/elliptic-curve-cryptography/

AES-CBC实现注意事项

必须使用符合加密算法安全的随机数生成器,cryptographically strong random number generator (RNG):https://en.wikipedia.org/wiki/Cryptographically_secure_pseudorandom_number_generator

  1. iv必须随机生成,不能固定;生成规则参考本文的 "随机数生成规范"
  2. 避免用秘钥代替iv
  3. 避免用 stdlib 系列伪随机数

随机数生成规范

随机生成的iv或者nonce要采用/dev/urandom生成,或者采用基于/dev/urandom实现的随机数生成器

  • 避免采用 stdlib 系列伪随机数
  • 避免 havaged,prngs,egd 等
  • 避免 /dev/random ,会因为熵池噪声数据不足而阻塞几秒甚至是十几秒,严重影响性能,参考:https://zh.wikipedia.org/zh-cn//dev/random

成熟的Library推荐

  1. iOS 可以采用 Randomization Services Reference:
  2. Android & 服务端Java可以使用 SecureRandom:https://docs.oracle.com/javase/7/docs/api/java/security/SecureRandom.html
  3. 其他场景:推荐使用libsodium库,或NaCL库封装,或者直接读取 /dev/urandom

非对称加密

建议椭圆曲线,避免RSA

主要考虑前向安全性、椭圆曲线性能,以及现代计算机对RSA攻击能力逐年提升

HMAC算法

使用SHA2类的算法:SHA-256,SHA-384,SHA-512,SHA512/256等

避免 SHA-1、MD5、MD6

加密库选择

  1. iOS:建议使用原生的 Common Crypto,来自 Apple 的建议: ;避免使用 OpenSSL,原因是 OpenSSL 接口不友好、漏洞频发、版本升级时向下兼容性不好
  2. Android:建议使用 javax.crypto,https://docs.oracle.com/javase/7/docs/api/javax/crypto/spec/package-summary.html
  3. PC & Mac: 优先使用libsodium和NaCL库;对应libsodium不支持的加密算法,考虑统一底层加密库,同时桌面版对包大小不敏感,可以使用OpenSSL

参考资料

  1. Apple Cryptographic Libraries:
  2. javax.crypto: https://docs.oracle.com/javase/7/docs/api/javax/crypto/spec/package-summary.html
  3. 现代密码学实践指南[2015年]:https://blog.helong.info/blog/2015/06/05/modern-crypto/
目录
相关文章
|
3月前
|
存储 安全 API
如何对 API 进行安全加密?
对API进行安全加密是保障数据安全和系统稳定的重要措施
231 56
|
4月前
|
存储 安全 5G
|
4月前
|
安全 算法 网络安全
网络安全与信息安全:守护数字世界的坚盾在这个高度数字化的时代,网络安全和信息安全已成为全球关注的焦点。无论是个人隐私还是企业数据,都面临着前所未有的风险和挑战。本文将深入探讨网络安全漏洞、加密技术以及安全意识的重要性,旨在为读者提供实用的知识,帮助构建更加安全的网络环境。
【10月更文挑战第4天】 在数字化浪潮中,网络安全与信息安全成为不可忽视的议题。本文通过分析网络安全漏洞的类型与成因,探讨加密技术的原理与应用,并强调提升安全意识的必要性,为读者提供一套全面的网络安全知识框架。旨在帮助个人和企业更好地应对网络威胁,保护数字资产安全。
181 65
|
3月前
|
安全 网络协议 网络安全
【Azure 环境】从网络包中分析出TLS加密套件信息
An TLS 1.2 connection request was received from a remote client application, but non of the cipher suites supported by the client application are supported by the server. The connection request has failed. 从远程客户端应用程序收到 TLS 1.2 连接请求,但服务器不支持客户端应用程序支持的任何密码套件。连接请求失败。
|
4月前
|
存储 安全 前端开发
端到端加密:确保数据传输安全的最佳实践
【10月更文挑战第12天】端到端加密(E2EE)是确保数据传输安全的重要手段,通过加密技术保障数据在传输过程中的隐私与完整性,防止第三方窃听和篡改。本文介绍E2EE的工作原理、核心优势及实施步骤,并探讨其在即时通讯、文件共享和金融服务等领域的应用,强调了选择加密协议、密钥管理、数据加密及安全接口设计的重要性,旨在帮助企业和开发者有效保护用户数据,满足数据保护法规要求。
|
4月前
|
安全 数据安全/隐私保护 CDN
阿里云国际站:海外视频安全的DRM
阿里云国际站:海外视频安全的DRM加密
|
4月前
|
安全 数据安全/隐私保护 CDN
阿里云海外视频安全的DRM
阿里云海外视频安全的DRM加密
|
4月前
|
安全 大数据 网络安全
网络安全与信息安全:守护数字世界的坚盾在数字化浪潮席卷全球的今天,网络安全已成为维系社会稳定、促进经济发展的重要基石。本文旨在深入探讨网络安全漏洞、加密技术及安全意识等核心议题,通过分享前沿知识与实用策略,助力构建更加安全可靠的网络环境。
【10月更文挑战第8天】 本文聚焦网络安全领域的关键要素,包括安全漏洞的识别与防御、加密技术的演进与应用,以及安全意识的培养与提升。通过对最新研究成果和实际案例的分析,文章揭示了网络安全威胁的多样性和复杂性,强调了综合防护策略的重要性。同时,倡导社会各界共同参与,形成全民网络安全意识,共筑数字空间的安全防线。
96 0
|
2月前
|
安全 算法 网络协议
【网络原理】——图解HTTPS如何加密(通俗简单易懂)
HTTPS加密过程,明文,密文,密钥,对称加密,非对称加密,公钥和私钥,证书加密
|
2月前
|
存储 SQL 安全
网络安全与信息安全:关于网络安全漏洞、加密技术、安全意识等方面的知识分享
随着互联网的普及,网络安全问题日益突出。本文将介绍网络安全的重要性,分析常见的网络安全漏洞及其危害,探讨加密技术在保障网络安全中的作用,并强调提高安全意识的必要性。通过本文的学习,读者将了解网络安全的基本概念和应对策略,提升个人和组织的网络安全防护能力。