如何安全使用加密套件?

简介:

如何安全使用加密套件?

对称加密

  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/
目录
相关文章
|
11月前
|
存储 安全 API
如何对 API 进行安全加密?
对API进行安全加密是保障数据安全和系统稳定的重要措施
955 60
|
3月前
|
安全 算法 量子技术
量子来了,DeFi慌了吗?——聊聊量子安全加密对去中心化金融的“革命冲击”
量子来了,DeFi慌了吗?——聊聊量子安全加密对去中心化金融的“革命冲击”
75 0
|
4月前
|
存储 安全 Cloud Native
云原生安全必修课:RDS透明加密(TDE)与数据脱敏联动实施方案
云原生环境下,数据泄露风险日益严峻,传统安全方案面临加密与脱敏割裂、保护不连续、权限控制粗放三大挑战。本方案融合TDE透明加密与动态数据脱敏技术,构建存储-传输-计算全链路防护体系,通过SQL级加密与角色化脱敏规则,实现细粒度数据保护。结合密钥管理、权限控制与多云适配,提升安全性与性能,广泛适用于金融、医疗等高安全要求场景。
138 3
|
7月前
|
存储 安全 数据安全/隐私保护
Hyper V文件复制安全:加密与访问控制
在Hyper-V环境中,确保文件复制的安全性至关重要。主要措施包括:启用数据加密、使用HTTPS协议和磁盘加密技术(如BitLocker)保护数据传输和存储;通过身份验证、权限管理和审核日志控制访问;定期更新补丁、实施网络隔离及制定备份恢复策略。这些多层次的安全措施共同防止未经授权的访问和数据泄露,保障数据安全。
Hyper V文件复制安全:加密与访问控制
|
8月前
|
安全 算法 物联网
SSL/TLS:互联网通信的加密基石与安全实践
**简介:** 在数字化时代,互联网每天传输海量敏感数据,网络攻击频发。SSL/TLS协议作为网络安全的基石,通过加密技术确保数据安全传输。本文解析SSL/TLS的技术架构、密码学原理、应用场景及常见误区,探讨其在未来的发展趋势,强调持续演进以应对新型威胁的重要性。 SSL/TLS不仅保障Web安全,还广泛应用于API、邮件、物联网等领域,并遵循合规标准如PCI DSS和GDPR。
|
8月前
|
算法 安全 Java
即时通讯安全篇(一):正确地理解和使用Android端加密算法
本文主要讨论针对Android这样的移动端应用开发时,如何正确的理解目前常用的加密算法,为诸如即时通讯应用的实战开发,如何在合适的场景下选择适合的算法,提供一些参考。
222 0
|
11月前
|
安全 网络协议 网络安全
【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 连接请求,但服务器不支持客户端应用程序支持的任何密码套件。连接请求失败。
293 2
|
8月前
|
云安全 安全 数据建模
《数字证书:互联网世界的"身份证"与"防盗门"》 ——揭秘网络安全背后的加密江湖
在2023年某深夜,上海陆家嘴金融公司机房遭遇黑客攻击,神秘青铜大门与九大掌门封印的玉牌突现,阻止了入侵。此门象征数字证书,保障网络安全。数字证书如验钞机识别假币,保护用户数据。它通过SSL/TLS加密、CA认证和非对称加密,构建安全通信。证书分为DV、OV、EV三类,分别适合不同场景。忽视证书安全可能导致巨额损失。阿里云提供一站式证书服务,助力企业部署SSL证书,迎接未来量子计算和物联网挑战。
|
10月前
|
安全 算法 网络协议
【网络原理】——图解HTTPS如何加密(通俗简单易懂)
HTTPS加密过程,明文,密文,密钥,对称加密,非对称加密,公钥和私钥,证书加密