AES加密最佳实践

1. AES

https://en.wikipedia.org/wiki/Advanced_Encryption_Standard

https://cloud.google.com/security/encryption-at-rest/default-encryption/#googles_common_cryptographic_library

2. AES 库

https://github.com/google/tink aes-gcm 加密库(go,cpp,java)

https://github.com/ARMmbed/mbedtls/blob/master/library/gcm.c aes-gcm 加密库(C)

https://github.com/ARMmbed/mbedtls/blob/master/include/mbedtls/gcm.h

https://github.com/google/crunchy aes-gcm 加密库( cpp java jni )

https://github.com/aws/aws-sdk-go/blob/master/service/s3/s3crypto/aes_gcm.go

https://github.com/aws/aws-sdk-java/blob/master/aws-java-sdk-s3/src/main/java/com/amazonaws/services/s3/internal/crypto/AesGcm.java

https://github.com/aws/aws-sdk-android/blob/master/aws-android-sdk-s3/src/main/java/com/amazonaws/services/s3/internal/crypto/AesGcm.java

3. AES 最佳实践

3.1 加密模式

3.2 秘钥轮换

1
2
加密最佳实践建议不要广泛重复使用加密密钥,
一般1年轮换一次 <https://docs.aws.amazon.com/zh_cn/kms/latest/developerguide/rotate-keys.html>

3.3 信封加密

1
2
3
4
5
6
7
8
9
10
11
12
一般针对不同的业务生成业务级别的业务级信封秘钥,然后业务内在针对每个实体生成实体级别的信封秘钥,
用实体级别的信封秘钥和数据秘钥对实体的敏感数据进行存加密储

oss 云端加密介绍 <https://help.aliyun.com/document_detail/31871.html>

oss 客户端加密介绍 <https://help.aliyun.com/document_detail/32259.html>

s3 云端加密介绍 <https://docs.aws.amazon.com/zh_cn/AmazonS3/latest/dev/UsingEncryption.html>

azure hls aes-128 <https://docs.azure.cn/zh-cn/media-services/media-services-protect-with-aes128>

aliyun hls aes-128 <https://yq.aliyun.com/articles/177637>

3.4 交叉使用云服务商的kms

1
2
主秘钥和业务秘钥的密文做跨云厂商交叉存储和加解密, 
比如业务秘钥的密文存放在阿里的则使用aws和gcp的kms, 业务秘钥的密文存放在aws的使用阿里云和gcp的kms

3.5 推荐使用的密码算法

  1. 对称加密-块加密算法(一次加密明文中的一个块):AES(密钥长度在128位及以上)(CBC或者GCM)
  2. 对称加密-流加密算法(一次加密明文中的一个位):AES(密钥长度在128位及以上)(OFB或CTR模式)
  3. 非对称加密算法:RSA(密钥长度在2048位及以上),ECC (密钥长度在256位及以上)
  4. 哈希算法:SHA2(256位及以上)
  5. 密钥交换算法:DH(2048位及以上)
  6. HMAC(基于哈希的消息验证码)算法:HMAC-SHA2

4. 嵌入式 TLS 和GCM加密库

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<https://www.mbed.com/zh-cn/technologies/security/mbed-tls/> , <https://tls.mbed.org/>

ARM® mbed™ 使开发人员可以非常轻松地在其(嵌入式)产品中加入加密和 SSL/TLS 功能,
并通过最大限度地减少代码占用空间来推动这一功能。

mbed TLS 库提供了一组可单独使用和编译的加密组件,您还可以使用单个配置头文件加入或排除这些组件。
mbed TLS 还提供了构建于加密组件上的中央 SSL/TLS 模块,以及为 SSL 和 TLS 提供完整协议实施的抽象层和支持组件。

从功能角度来看,该库分为三个主要部分:
- SSL/TLS 协议实施
- 一个加密库
- 一个 X.509 证书处理库

<https://github.com/ARMmbed/mbedtls/blob/master/library/gcm.c>
aes-gcm 加密库(C)<https://github.com/ARMmbed/mbedtls/blob/master/include/mbedtls/gcm.h>

5. 参考资料

  1. AES , https://en.wikipedia.org/wiki/Advanced_Encryption_Standard
  2. 对称加密算法 , https://www.bugbank.cn/q/article/59a6a07fcdf7e67d68fe3fc6.html