Я хочу защитить структурированные данные

API-интерфейсы Tink принимают в качестве входных данных произвольные двоичные объекты. Это означает, что если вы хотите зашифровать структурированные данные, например буферы протокола , вам необходимо сначала закодировать данные.

Зашифровать протобуф

Чтобы зашифровать:

  1. Сериализуйте protobuf в массив байтов.
  2. Зашифруйте сериализованные байты, затем сохраните или отправьте полученный зашифрованный текст. Использовать:

Чтобы расшифровать:

  1. Расшифруйте зашифрованный текст.
  2. Если шаг 1 прошел успешно, десериализуйте 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

Наконец, зашифруйте (или аутентифицируйте) полученный массив байтов.