構造化データを保護したい

Tink API は、入力として任意のバイナリ blob を受け取ります。つまり、プロトコル バッファなどの構造化データを暗号化する場合は、まずデータをエンコードする必要があります。

protobuf の暗号化

暗号化するには:

  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

最後に、結果として得られるバイト配列を暗号化(または認証)します。