全部产品
阿里云办公

客户端加密SDK介绍

更新时间:2018-08-07 18:16:22

数据保护是指数据传输(上传数据至OSS、从OSS下载数据)过程中和处于静止状态(数据存储在OSS数据中心磁盘)期间保护数据。传输中的数据可以通过SSL或者客户端加密进行保护。静态数据可以通过以下方式进行保护:

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

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

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

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

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

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

使用KMS托管用户主密钥

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

1

  1. 上传对象。
    通过使用CMK ID,客户端首先向KMS发送一个请求,申请1个用于加密对象的数据密钥(Data Key)。作为响应,KMS会返回一个随机生成的数据明文密钥(Data Key)以及一个数据密文密钥(Encrypted Data Key)。
  2. 本地加密数据。
    本地客户端接收到KMS返回的数据明文密钥以及数据密文密钥后,将使用数据明文密钥进行本地加密,并且将加密后的对象以及数据密文密钥上传至OSS。
  3. 下载对象。
    客户端首先会从OSS服务端下载加密的对象以及作为对象元数据存储的数据密文密钥。
  4. 解密数据。
    客户端将数据密文密钥以及CMK ID发送至KMS服务器。作为响应,KMS将使用指定的CMK解密,并且将数据明文密钥返回给本地加密客户端。

注意:

  • 本地加密客户端为每一个上传的对象获取一个唯一的数据加密密钥。
  • 为了保证数据的安全性,建议CMK定期轮换或者更新。
  • 客户需要维护CMK ID与对象之间的映射关系。

使用用户自主管理密钥

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

2

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

    1. OSS本地加密客户端在本地生成一个一次性的对称密钥,即数据密钥(Data Key)。它将用于加密单个对象(针对每个对象,客户端都会随生成1个数据密钥)。
    2. 客户端使用数据密钥加密对象。
    3. 客户端使用用户提供的主密钥来加密数据密钥。
    4. 客户端将加密的数据密钥(Encrypted Data Key)作为对象元数据的一部分上传至OSS。
  2. 下载对象。
    下载对象时,客户端首先从OSS下载加密的对象以及元数据。通过使用元数据中的材料,客户端将授权确定使用哪个主密钥来解密加密的数据密钥。客户端使用解密后的数据密钥来解密对象。

注意:

  • OSS本地加密客户端不会将用户主密钥以及未加密的数据发送至OSS。所以,请务必妥善保管加密密钥,如果密钥丢失,将无法解密数据。
  • 数据密钥由本地加密客户端随机生成。