我想保护结构化数据

Tink API 会将任意二进制 blob 作为输入。这意味着,如果要加密结构化数据(如协议缓冲区),需要先对数据进行编码。

加密 protobuf

如需加密,请执行以下操作:

  1. 将 protobuf 序列化为字节数组。
  2. 对序列化字节进行加密,然后存储或发送生成的密文。 使用:

要解密,请执行以下操作:

  1. 对密文进行解密。
  2. 如果第 1 步成功,则对 protobuf 进行反序列化。

保护 protobuf 免遭篡改

在大多数情况下,对 protobuf 进行加密比只加密要好。

如需保护 protobuf 免遭篡改,请采取以下措施:

  1. 将 protobuf 序列化为字节数组。
  2. 对序列化字节进行签名或身份验证。使用:
  3. 将序列化的字节与签名(或 MAC)一起存储。

如需进行验证,请执行以下操作:

  1. 获取序列化 protobuf 及其签名(或 MAC)。
  2. 验证签名(或 MAC)。
  3. 对 protobuf 进行反序列化。

请注意,有效的签名或 MAC 不能保证数据的格式正确无误。解析数据的实现应始终预料到数据可能已损坏。

保护多个数据项

如需保护多个数据项,请使用序列化方法。将所有数据项添加到 protobuf,并按上文所述对其进行加密(或身份验证)。

您还可以按如下方式进行序列化:

serialize(data1 , data2 , …, datan) = 4-byte-data1's length || data1 || 4-byte-data2's length || data2 || … || 4-byte-dataN's length || dataN

最后,对生成的字节数组进行加密(或身份验证)。