#aws-kms #google-cloud-platform #encryption-key #kms #aws #envelope #google

km-s-aead

为GCP/AWS KMS和Ring AEAD加密提供的KMS/AEAD信封加密

20个版本 (破坏性更新)

0.19.2 2024年7月20日
0.18.1 2024年6月6日
0.18.0 2024年1月2日
0.17.0 2023年10月1日
0.4.0 2022年7月31日

#164 in 加密学

Download history 84/week @ 2024-04-28 77/week @ 2024-05-05 383/week @ 2024-05-12 242/week @ 2024-05-19 177/week @ 2024-05-26 279/week @ 2024-06-02 142/week @ 2024-06-09 238/week @ 2024-06-16 241/week @ 2024-06-23 128/week @ 2024-06-30 381/week @ 2024-07-07 539/week @ 2024-07-14 428/week @ 2024-07-21 416/week @ 2024-07-28 320/week @ 2024-08-04 208/week @ 2024-08-11

每月 1,535 次下载
用于 3 个crate (2直接)

Apache-2.0

55KB
1K SLoC

Cargo tests and formatting security audit unsafe license

为Rust提供的GCP/AWS KMS和Ring AEAD的KMS/AEAD信封加密

特性

  • 使用自动生成或提供的加密数据密钥进行信封加密;
  • 提供基于Ring的AEAD加密的公开和简单实现,无需使用KMS;
  • 可选GCP和AWS的基于KMS的安全随机生成器,而不是使用Ring;

可用的KMS提供者

  • Google Cloud Platform KMS
  • Amazon Web Services KMS

快速入门

Cargo.toml

[dependencies]
kms-aead = { version = "0.19", features=["..."] }

有关版本的信息,请参阅下面的安全考虑事项。

可用的功能

  • gcp-kms-encryption 用于支持Google KMS信封加密
  • aws-kms-encryption 用于支持Amazon KMS信封加密
  • ring-aead-encryption 仅使用API进行Ring AEAD加密,不使用任何KMS信封加密

示例

 let kms_ref = kms_aead::providers::AwsKmsKeyRef::new(aws_account_id, aws_key_id);

 let encryption: KmsAeadRingEnvelopeEncryption<AwsKmsProvider> =
     kms_aead::KmsAeadRingEnvelopeEncryption::new(providers::AwsKmsProvider::new(&kms_ref).await?)
         .await?;

 let secret_value = SecretValue::from("test-secret");
 let test_aad = "test-aad".to_string();

 let cipher_text = encryption.encrypt_value(&test_aad, &secret_value).await?;

 let secret_value: SecretValue = encryption
     .decrypt_value(&test_aad, &cipher_text)
     .await?;

所有示例均可在示例目录中找到。

GCP/AWS安全随机生成器

要使用GCP/AWS KMS API进行安全随机生成,您应使用选项启用它。

对于AWS

    providers::AwsKmsProvider::with_options(
            &kms_ref,
            AwsKmsProviderOptions::new().with_use_kms_random_gen(true),
    ).await?

对于GCP

    providers::GcpKmsProvider::with_options(
            &kms_ref,
            GcpKmsProviderOptions::new().with_use_kms_random_gen(true),
    ).await?

安全考虑和风险

OSS

开源代码是通过软件开发者自愿合作创建的。原始作者许可代码,以便任何人都可以查看、修改和分发新版本。您应使用与用于商业产品的相同程序和工具来管理所有OSS。始终培训您的员工了解网络安全最佳实践,以帮助他们安全地使用和管理软件产品。您不应仅依赖于个人,特别是阅读敏感信息的此类项目。

版本

请勿使用广泛的版本依赖关系管理,以避免在没有审计更改的情况下自动包含依赖项的新版本。

安全实现细节和建议

该库默认使用96位随机数ChaCha20-Poly1305算法。

随机数生成方式(取决于选项)

  • 由加密伪随机数生成器生成的随机96位缓冲区;
  • (默认)由时间(UNIX纪元的最后48位)+ 由加密伪随机数生成器生成的随机48位缓冲区混合而成;

这是如何配置 GCP KMS 的非重复性和算法的示例。

let encryption = kms_aead::KmsAeadRingEnvelopeEncryption::with_algorithm_options(
        kms_aead::providers::GcpKmsProvider::new(&kms_ref).await?,
        &ring::aead::CHACHA20_POLY1305,
        KmsAeadRingEnvelopeEncryptionOptions::new().with_encryption_options(
            kms_aead::ring_encryption::RingAeadEncryptionOptions::new().with_nonce_kind(
                kms_aead::ring_encryption::RingAeadEncryptionNonceKind::Random
            )
        )
    )
    .await?;

许可证

Apache 软件许可协议 (ASL)

作者

阿卜杜拉·阿卜杜拉赫曼诺夫

依赖项

约 5-41MB
约 597K SLoC