开发者社区> 问答> 正文

OSS如何客户端加密?

OSS如何客户端加密?

展开
收起
请回答1024 2020-03-26 18:24:18 1457 0
1 条回答
写回答
取消 提交回答
  • 数据保护是指数据传输(上传数据至OSS、从OSS下载数据)过程中和处于静止状态(数据存储在OSS数据中心磁盘)期间保护数据。传输中的数据可以通过SSL或者客户端加密进行保护。静态数据可以通过以下方式进行保护:

    服务器端加密

    OSS将数据保存到数据中心的磁盘之前进行加密,并且在下载对象时自动进行解密。

    客户端加密

    可以使用客户端加密SDK,在本地进行数据加密,并将加密后的数据上传到OSS。在这种场景下,用户需要管理加密过程以及加密密钥。

    说明:目前只有Python SDK支持客户端加密。代码示例请参见Python SDK客户端加密。

    采用客户端加密SDK保护数据

    客户端加密是指将数据发送到OSS之前在用户本地进行加密,对于数据加密密钥的使用,目前支持如下两种方式:

    • 使用KMS托管用户主密钥
    • 使用用户自主管理密钥

    使用KMS托管用户主密钥

    当使用KMS托管用户主密钥用于客户端数据加密时,无需向OSS加密客户端提供任何加密密钥。只需要在上传对象时指定KMS用户主密钥ID(也就是CMK ID)。其具体工作原理如下图所示。

    1.png

    1. 上传对象。 通过使用CMK ID,客户端首先向KMS发送一个请求,申请1个用于加密对象的数据密钥(Data Key)。作为响应,KMS会返回一个随机生成的数据明文密钥(Data Key)以及一个数据密文密钥(Encrypted Data Key)。

    2. 本地加密数据。 本地客户端接收到KMS返回的数据明文密钥以及数据密文密钥后,将使用数据明文密钥进行本地加密,并且将加密后的对象以及数据密文密钥上传至OSS。 下载对象。

    3. 客户端首先会从OSS服务端下载加密的对象以及作为对象元数据存储的数据密文密钥。 解密数据。

    4. 客户端将数据密文密钥以及CMK ID发送至KMS服务器。作为响应,KMS将使用指定的CMK解密,并且将数据明文密钥返回给本地加密客户端。

    使用用户自主管理密钥

    使用用户自主管理密钥,需要用户自主生成并保管加密密钥。当用户本地客户端加密时,由用户自主上传加密密钥(对称加密密钥或者非对称加密密钥)至本地加密客户端。其具体加密过程如下图所示。

    2.png

    1. 上传对象。

    用户首先向本地加密客户端提供1个用户主密钥(对称密钥或者非对称密钥)。客户端只使用此主密钥加密其随机生成的数据密钥。该过程如下:

    OSS本地加密客户端在本地生成一个一次性的对称密钥,即数据密钥(Data Key)。它将用于加密单个对象(针对每个对象,客户端都会随机生成1个数据密钥)。 客户端使用数据密钥加密对象。 客户端使用用户提供的主密钥来加密数据密钥。 客户端将加密的数据密钥(Encrypted Data Key)作为对象元数据的一部分上传至OSS。

    1. 下载对象。

    下载对象时,客户端首先从OSS下载加密的对象以及元数据。通过使用元数据中的材料,客户端将授权确定使用哪个主密钥来解密加密的数据密钥。客户端使用解密后的数据密钥来解密对象。

    2020-03-26 18:26:27
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
OSS运维进阶实战手册 立即下载
《OSS运维基础实战手册》 立即下载
OSS运维基础实战手册 立即下载