0Pricing
Cryptology Academy · レッスン

Google Tink:安全な高レベル暗号API

暗号の専門知識がなくても一般的な暗号処理を行える、Tinkのキ―セットベースAPIを使用します。

「Google Tink:安全な高レベル暗号API」はCoddyKit上の無料Cryptology Academyレッスンです。 これはレッスン3/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはCryptology Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Cryptology Academyコースには全4レッスンが含まれています。

Tinkの概要と目的

Tinkは、Googleの暗号チームが開発したオープンソースの暗号ライブラリで、安全で使いやすい暗号機能を提供するように設計されています。主な目的は、低レベルライブラリを使う経験豊富な開発者であっても起こり得る、一般的な暗号機能の誤用パターンを防ぐことです。TinkのAPIは、正しい操作が最も簡単に選べるように設計されており、誤って安全でない設定を作成することが難しくなっています。

Keysetベースの抽象化

Tinkでは、個々の鍵オブジェクトを公開するのではなく、鍵をkeysetとしてまとめて管理します。アプリケーションは生の鍵バイト列ではなく、keyset handleを操作します。この抽象化により、誤って鍵を公開することを防ぎ、シームレスな鍵ローテーションを可能にします。また、アプリケーションが鍵素材を直接見ることなく、リモートのKey Management Systemに鍵を保存できます。keysetという概念は、Tinkの安全な設計の中心です。

AEADインターフェース

TinkのAEAD(Authenticated Encryption with Associated Data)インターフェースは、暗号化と復号の操作を提供します。AeadFactory.getPrimitive(keyset)はAeadオブジェクトを返し、aead.encrypt(plaintext, associatedData)を呼び出すと暗号文が返されます。Tinkはkeyset(たとえばAES-256-GCM)に基づいて暗号化アルゴリズムを自動的に選択し、ランダムなnonceを生成します。このインターフェースにより、アルゴリズムの詳細、nonceの管理、形式のエンコードがすべて隠蔽されます。

MACインターフェース

TinkのMACインターフェースは、メッセージ認証コードの計算および検証操作を提供します。MacFactory.getPrimitive(keyset)はMacオブジェクトを返します。mac.computeMac(data)は認証タグを返し、mac.verifyMac(tag, data)はタグを検証します。検証に失敗するとセキュリティ例外がスローされます。デフォルトのアルゴリズムはHMAC-SHA256です。このインターフェースにより、MACを通常の文字列比較で比較し、定数時間比較を使わないといった、よくあるミスを防げます。

デジタル署名インターフェース

Tinkはデジタル署名用に、PublicKeySignとPublicKeyVerifyという別々のインターフェースを提供します。署名用オブジェクトと検証用オブジェクトは、それぞれ異なるキーセットハンドル(秘密鍵と公開鍵)から導出されるため、検証に秘密鍵を誤って使用したり、その逆を行ったりすることを防げます。TinkのEd25519およびECDSA P-256実装がデフォルトであり、乱数に起因する脆弱性を避けるために決定論的ECDSAも利用できます。

ハイブリッド暗号化インターフェース

TinkのHybridEncryptおよびHybridDecryptインターフェースは、ECIES(楕円曲線統合暗号化方式)を実装します。ハイブリッド暗号化は、非対称鍵交換と対称暗号化を組み合わせます。送信者は一時鍵を生成し、受信者の公開鍵を使ってECDHを実行し、対称鍵を導出してAEADで暗号化します。これにより、純粋な非対称暗号化のオーバーヘッドなしに、非対称鍵を使って大きなメッセージを暗号化できます。

キーセットのローテーション手順

Tinkのキーのローテーションは安全で、後方互換性があります。ローテーションするには、新しい鍵を生成してキーセットに追加し、新しい鍵をプライマリとしてマークします(今後の暗号化ではこれを使用します)。既存の暗号文を復号できるよう、古い鍵はキーセットに残します。プライマリでない鍵は復号に引き続き利用できるため、古い暗号文も復号できます。古い暗号文をすべて再暗号化するか有効期限が切れたら、キーセットから古い鍵を削除します。

キーセットのシリアライズ

Tinkのキーセットは、JSONまたはバイナリのProtocol Buffer形式としてシリアライズされます。JSON形式は人間が読みやすく、デバッグに便利です。バイナリ形式は本番環境ではよりコンパクトです。秘密鍵を含むシリアライズ済みキーセットは、保存前に暗号化する必要があります。Tinkでは、標準的な対称AEAD暗号化を使って暗号化済みキーセットを保存したり、保存をKMSに委任したりできます。

キーセット暗号化のためのKMS統合

Tinkは、主要なKMSプロバイダーであるAWS KMS、Google Cloud KMS、HashiCorp Vaultと統合できます。キーセットをローカルのAEAD鍵で暗号化する代わりに、TinkはKMSを使ってキーセット暗号化鍵をラップします。実際のキーセットの暗号化にはローカルで生成したデータ暗号化鍵(DEK)を使用し、DEKはKMSの鍵暗号化鍵(KEK)によって暗号化されます。これは、クラウドプロバイダーが使用するエンベロープ暗号化パターンに従っています。

大容量ファイル向けのストリーミングAEAD

標準AEADでは、暗号化と復号のためにメッセージ全体をメモリに読み込む必要があります。TinkのStreaming AEADインターフェースは大きなファイルをセグメント単位で暗号化し、平文全体をバッファリングせずにストリーミング暗号化と復号を行えるようにします。各セグメントは個別に認証され、復号時にセグメントの順序と完全性が検証されます。これはバックアップ、動画などの大きなファイルを暗号化するうえで不可欠です。

言語サポートとエコシステム

TinkはJava、Python、Go、C++で利用でき、それぞれの言語に適したイディオムのAPIを提供します。言語間の相互運用性も保証されています。たとえば、PythonのTinkで暗号化したファイルをJavaのTinkで復号できます。そのため、異なる言語で実装された複数のサービス間で暗号化データを交換する必要があるシステムに適しています。TinkはProtocol Buffersとも統合でき、型安全なキーセット設定を利用できます。

Tinkのキーセットローテーション

Tinkのキーをローテーションすると、古い(プライマリでない)鍵で暗号化された暗号文はどうなりますか?

Google Tinkのまとめ

Tinkのまとめ:キーセットベースの抽象化によって生の鍵が露出せず、AEADインターフェースがnonceの管理とアルゴリズム選択を隠蔽し、MACインターフェースが内部で定数時間検証を行い、デジタル署名およびハイブリッド暗号化インターフェースがインターフェースの誤用を防ぎます。キーのローテーションには後方互換性があり(削除されるまで古い鍵で復号できます)、KMS統合はエンベロープ暗号化パターンに従い、Streaming AEADは大きなファイルを処理し、言語間の相互運用性が保証されています。

よくある質問

「Google Tink:安全な高レベル暗号API」レッスンは無料ですか?

はい。「Google Tink:安全な高レベル暗号API」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Cryptology Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Cryptology Academyコースには全4レッスンが含まれています。

「Google Tink:安全な高レベル暗号API」で何を学びますか?

暗号の専門知識がなくても一般的な暗号処理を行える、Tinkのキ―セットベースAPIを使用します。 ブラウザで直接実行するハンズオンコードでCryptology Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

Cryptology Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのCryptology Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン3/4です。

「Google Tink:安全な高レベル暗号API」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このCryptology Academyレッスンでコードを書いて実行できますか?

はい。すべてのCryptology Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. libsodium:誤用に強い暗号ライブラリ
  2. OpenSSL API:主要な構造体と落とし穴
  3. Google Tink:安全な高レベル暗号API
  4. 暗号依存関係の監査と選定
← Cryptology Academyに戻る