Tink を初めて使用する場合は、作業を開始する前に理解しておくべき重要なコンセプトがいくつかあります。これらについては、次のセクションで説明します。
プリミティブ
Tink は、基盤となるアルゴリズムを管理する暗号ビルディング ブロックとしてプリミティブを使用して、ユーザーが暗号タスクを安全に実行できるようにします。プリミティブは、暗号アルゴリズムの詳細と鍵タイプを定義します。
Tink でサポートされているプリミティブ:
- 関連データによる認証付き暗号化(AEAD): データ暗号化の最も一般的なプリミティブ。ほとんどの暗号化要件に適しています。AEAD は平文の機密性を提供し、その完全性と真正性を検証できます。関連データによる認証付き暗号化(AEAD)をご覧ください。
- 確定的暗号化: 指定された平文と鍵に対して常に同じ暗号テキストを生成するプリミティブ。攻撃者は特定の平文の入力に対応する暗号テキストを見つけるだけで識別できるため、これは危険です。確定的 AEAD をご覧ください。
- デジタル署名: 署名されたデータの信頼性と完全性を確認するための非対称鍵暗号化(非対称鍵暗号化を参照)のプリミティブ。デジタル署名をご覧ください。
- ハイブリッド暗号化: 非対称鍵暗号化と対称鍵暗号化を組み合わせたプリミティブ(非対称鍵暗号化と対称鍵暗号化を参照)。ハイブリッド暗号化は、対称暗号化の効率と公開鍵暗号化の利便性を組み合わせたものです。メッセージを暗号化するために、新しい対称鍵が生成され、平文データの暗号化に使用されます。一方、受信者の公開鍵は、対称鍵の暗号化にのみ使用されます。最終的な暗号テキストは、対称暗号テキストと暗号化された対称鍵で構成されます。ハイブリッド暗号化をご覧ください。
- メッセージ認証コード(MAC): データの信頼性と完全性を確認するための対称(対称鍵暗号化)プリミティブ。メッセージ認証コード(MAC)をご覧ください。
- ストリーミング AEAD: ストリーミング データの認証済み暗号化を提供するプリミティブ。暗号化するデータが大きすぎて 1 つのステップで処理できない場合に便利です。ストリーミング AEAD をご覧ください。
互換性については、言語ごとにサポートされるプリミティブをご覧ください。
詳細については、プリミティブ デザインをご覧ください。
キーのタイプ
鍵型は特定のプリミティブを実装します。ほとんどのプリミティブには、セキュリティ、ランタイム、スペースの要件に応じていくつかのキータイプがあります。たとえば、AES128_GCM は、ほとんどのニーズに対して高速で効果的な AEAD です。詳細については、言語でサポートされているキータイプをご覧ください。
鍵セットと鍵セット ハンドル
Tink は鍵の管理に鍵セットを使用します。鍵セットとは基本的に、鍵のローテーションを容易にする鍵のセットです。鍵セットの注目すべきプロパティは次のとおりです。
- 鍵セット内の各鍵には一意の ID があり、この ID は鍵セット内で一意です。この ID は通常、生成された各暗号テキスト、署名、またはタグに接頭辞として追加され、使用された鍵を示します(詳細については、Tink が暗号テキストにタグ付けする方法をご覧ください)。
- 鍵セット内では一度に 1 つの鍵のみが primary になります。鍵セットの主キーは、その時点で「使用中」の鍵です。
- 鍵セット内のすべての鍵は、同じプリミティブ(AEAD など)の実装である必要がありますが、異なる鍵タイプ(AES-GCM 鍵や XCHACHA20-POLY1305 鍵など)を持つことができます。
Tink の各実装には、キーセットを作成または編集するための API が用意されています。ただし、CLI ツール Tinkey を使用することをおすすめします。
ユーザーは、鍵セット ハンドルを使用して鍵セットを操作する。鍵セット ハンドルは実際の機密鍵マテリアルの公開を制限します。また、鍵セットを抽象化し、鍵セット全体を「ラップ」するプリミティブをユーザーが取得できるようにします。たとえば、N
鍵を使用して鍵セットの AEAD プリミティブを取得できます。取得したプリミティブでの暗号化と復号では、鍵セットの主キーが使用されます。
詳細については、鍵セットの設計をご覧ください。