zoukankan      html  css  js  c++  java
  • KMS 加密解密

    KMS 加密解密
    2019/07/04 Chenxin

    参考:
    https://docs.aws.amazon.com/zh_cn/kms/index.html
    https://docs.aws.amazon.com/zh_cn/kms/latest/developerguide/kms-dg.pdf (PDF在磁盘里).
    https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/kms.html#kms (API,SDK参考)
    https://boto3.amazonaws.com/v1/documentation/api/latest/index.html (BOTO3参考)

    术语和概念

    KMS
    Key Management Service (AWS KMS)

    CMK
    Customer Master Key 客户主密钥 (CMK).通过KMS来管理你的CMK.AWS 账户中有三种类型的 CMK:客户托管 CMK(我们需要用的)、AWS 托管 CMK(用户可见,但不可管理.aws一些服务自带的) 和 AWS 拥有的 CMK(用户不可见的)。

    信封加密
    (对明文密钥1次或多次进行加密)AWS KMS 中的主要资源是客户主密钥 (CMK)。可以使用 CMK 加密和解密最多 4 KB(4096 字节)的数据。通常情况下,您可以使用 CMK 生成/加密/解密 数据密钥,您在 AWS KMS 之外使用这些密钥来加密您的数据。此策略称为信封加密。
    信封加密 是一种加密方法,它使用 数据密钥 对 玩家明文数据 进行加密,然后使用 其他密钥 对 该明文数据密钥 再进行加密。
    您也可以使用 其他加密密钥 对 数据加密密钥 进行再加密,并且在 另一个加密密钥下 加密 此加密密钥。但是,最后,一个密钥一定会以明文形式保留,以便您可以 解密密钥和数据。此顶层明文密钥(加密密钥)称为主密钥CMK。
    AWS KMS 可通过安全地 存储和管理 主密钥 来帮助您保护它们。存储在 KMS 中的 主密钥(称为客户主密钥(CMK))绝不会让 AWS KMS 经 FIPS 验证的硬件安全模块 处于不加密状态。要使用 CMK,您必须调用 KMS。

    信封加密可提供以下多种优势:

    • 保护数据密钥: 加密数据密钥时,您无需担心存储 加密数据密钥(因为它本身就受到加密保护)。您可以安全地将 加密数据 与 加密数据密钥 一起存储。
    • 使用多个主密钥加密相同数据: 加密操作可能非常耗时。您可以 只重新加密保护 原始数据的数据密钥 ,而无需使用不同的密钥多次重新加密原始数据。
    • 结合多种算法的优势: 对称密钥算法 比 公有密钥算法 速度更快,且生成的密文也较小.但公有密钥算法可提供 固有的角色分离和 更轻松的密钥管理。信封加密可以把每种策略的优势结合起来。

    数据密钥
    数据密钥 是可用于加密数据的加密密钥,包括 大量数据 和 其他数据 加密密钥 。
    您可以使用 AWS KMS 客户主密钥 (CMK) 生成、加密和解密 数据密钥。AWS KMS 不会存储、管理或跟踪您的数据密钥,也不会使用数据密钥执行加密操作。您必须在 AWS KMS 之外使用和管理数据密钥。

    创建数据密钥
    要创建数据密钥,请调用 GenerateDataKey 操作。AWS KMS 使用您指定的 CMK 来生成数据密钥。
    此操作会返回 数据密钥的明文副本 和 借助CMK加密的数据密钥的副本 .
    KMS 利用 CMK ->通过 Encryption Algorithm (加密算法) -> 数据密钥的明文副本+数据密钥的密文副本(可以再通过KMS来解密得到明文的).

    使用数据密钥加密数据
    AWS KMS 无法使用数据密钥来加密数据,但您可以在 KMS 之外使用数据密钥,例如使用 OpenSSL 或 AWS 加密 SDK 等加密库。也就是用户用KMS的CMK来加密用户的 数据密钥(可以是密文密钥或明文密钥,密文密钥可以通过KMS解密获得明文密钥).用户通过用户的数据密钥(明文)来加密自己的数据.
    用户在使用明文数据密钥加密数据后,请尽快从内存中将其删除。以防被黑客获取.
    您可以在S3上安全地存储加密数据密钥(必须通过KMS的CMK才能解密)及加密数据(必须通过用户密钥才能解密),以便其可根据需要用于解密数据。

    使用数据密钥解密数据
    要解密数据(玩家数据),请将 加密数据密钥 传递至 Decrypt 操作。AWS KMS 使用您的 CMK 解密数据密钥,然后该函数返回纯文本数据密钥。
    然后,使用 明文数据密钥 解密数据(并尽快从内存中删除该明文数据密钥).

    KMI
    加密术的主要问题之一是很难保持密钥的私密性。这通常是密钥管理基础设施 (KMI) 的工作。AWS KMS 可为您操作 KMI。AWS KMS 会创建并安全地存储称为 CMK 的主密钥。

    创建CMK
    控制台操作(步骤略)
    以下是策略视图,在控制台上可以切换到图像视图(更直观).
    {
    "Id": "key-consolepolicy-3",
    "Version": "2012-10-17",
    "Statement": [
    {
    "Sid": "Enable IAM User Permissions",
    "Effect": "Allow",
    "Principal": {
    "AWS": "arn:aws:iam::923956230349:root"
    },
    "Action": "kms:",
    "Resource": "
    "
    },
    {
    "Sid": "Allow access for Key Administrators",
    "Effect": "Allow",
    "Principal": {
    "AWS": "arn:aws:iam::923956230349:user/private_chenxin"
    },
    "Action": [
    "kms:Create",
    "kms:Describe
    ",
    "kms:Enable",
    "kms:List
    ",
    "kms:Put",
    "kms:Update
    ",
    "kms:Revoke",
    "kms:Disable
    ",
    "kms:Get",
    "kms:Delete
    ",
    "kms:TagResource",
    "kms:UntagResource",
    "kms:ScheduleKeyDeletion",
    "kms:CancelKeyDeletion"
    ],
    "Resource": ""
    },
    {
    "Sid": "Allow use of the key",
    "Effect": "Allow",
    "Principal": {
    "AWS": [
    "arn:aws:iam::923956230349:user/private_test",
    "arn:aws:iam::923956230349:user/private_chenxin"
    ]
    },
    "Action": [
    "kms:Encrypt",
    "kms:Decrypt",
    "kms:ReEncrypt
    ",
    "kms:GenerateDataKey",
    "kms:DescribeKey"
    ],
    "Resource": "
    "
    },
    {
    "Sid": "Allow attachment of persistent resources",
    "Effect": "Allow",
    "Principal": {
    "AWS": [
    "arn:aws:iam::923956230349:user/private_test",
    "arn:aws:iam::923956230349:user/private_chenxin"
    ]
    },
    "Action": [
    "kms:CreateGrant",
    "kms:ListGrants",
    "kms:RevokeGrant"
    ],
    "Resource": "*",
    "Condition": {
    "Bool": {
    "kms:GrantIsForAWSResource": "true"
    }
    }
    }
    ]
    }

    CMK的访问
    CMK的访问不同于访问AWS其他服务(其他服务只需要IAM授权即可).CMK必须要有密钥策略.(另外,还可以选择结合IAM.)
    密钥策略,就是上面的那个JSON文件.

    KMS API 使用
    关于KMS API 的使用,请参考python脚本(脚本文件在aws kms 项目里)

  • 相关阅读:
    分页SQL 和Oracle 存储过程
    什么是SilverLight
    opendpi 源码分析(一)
    Multiway arrays
    循环链表
    轮询算法 这是一个印度人写的,学习下。 来自 codeproject
    Friday the Thirteenth
    通过命令行指定监听的IP和端口
    pthread_key_t
    贝叶斯网络 未学习前数据结构
  • 原文地址:https://www.cnblogs.com/chanix/p/12739024.html
Copyright © 2011-2022 走看看