首次使用 Tink 時,在開始流程之前,請務必先瞭解一些重要概念;我們會在以下各節中說明這些概念。
基本
Tink 使用「原始物件」做為密碼編譯建構區塊,用於管理基礎演算法,讓使用者能安全地執行加密編譯工作。基本定義了加密編譯演算法和金鑰類型的詳細資料。
Tink 支援的基本功能:
- 使用相關資料進行驗證加密 (AEAD):最常用於資料加密的基本功能,適用於大多數加密需求。AEAD 提供純文字的機密性,並允許驗證其完整性和真實性。請參閱使用相關資料進行驗證 (AEAD) 驗證。
- 確定性加密:這個原始物件一律會針對特定明文和金鑰產生相同的密文。這可能會有風險,因為攻擊者只需要找出特定明文輸入內容對應的密文即可進行識別。請參閱確定性 AEAD 部分。
- 數位簽章:非對稱式 (請參閱「非對稱金鑰加密」一節),用於確認已簽署資料的真實性和完整性。請參閱「數位簽章」。
- 混合式加密:結合非對稱式金鑰加密與對稱式金鑰加密的基本功能 (請參閱「非對稱金鑰加密」和「對稱金鑰加密」部分)。混合式加密結合了對稱加密的效率與公開金鑰加密的便利性。為加密訊息,系統會產生新的對稱金鑰,並使用該金鑰加密明文資料,而接收方的公開金鑰則只用於加密對稱金鑰。最終的密文包含對稱密文和加密對稱金鑰。請參閱「混合式加密」。
- 訊息驗證碼 (MAC):用於確認資料的真實性和完整性的對稱式 (請參閱「對稱金鑰加密」一節)。請參閱訊息驗證碼 (MAC)。
- 串流 AEAD:提供已驗證串流資料加密的原始版本;如果要加密的資料太大,而無法在單一步驟中處理,此屬性就非常實用。請參閱串流 AEAD。
如需相容性資訊,請參閱「依語言區分的支援基元」。
詳情請參閱原始設計。
金鑰類型
金鑰類型會實作特定基元。大部分基元都有多種關鍵類型,您可以根據安全性、執行階段和空間需求選擇。舉例來說,AES128_GCM 是一種 AEAD,快速又有效,能滿足大多數需求。詳情請參閱不同語言支援的金鑰類型。
金鑰組與金鑰組控點
Tink 使用金鑰組來管理金鑰。金鑰組基本上是一組有助於輪替金鑰的金鑰。金鑰組值得注意的屬性如下:
- 金鑰組中的每個金鑰都有專屬 ID,在金鑰組中不得重複。這個 ID 通常會新增為每個所產生密文、簽章或標記的前置字串,以表示使用的金鑰 (詳情請參閱 Tink 的標記密文說明)。
- 金鑰組中一次只能有一個金鑰為「主要」。金鑰組中的主鍵是目前「使用中」的索引鍵。
- 金鑰組中的所有金鑰都必須採用相同原始 (例如 AEAD) 的實作,但金鑰類型可以不同 (例如 AES-GCM 和 XCHACHA20-POLY1305 金鑰)。
每個 Tink 實作都會提供用於建立或編輯金鑰組的 API。不過,我們建議使用 CLI 工具的 Tinkey。
使用者是透過金鑰組控制代碼透過金鑰組運作。金鑰組控制代碼會限制實際機密金鑰內容的曝光率。它也會提取一組金鑰組,可讓使用者取得可「包裝」整個金鑰組的基本功能。舉例來說,您可以取得具有 N
金鑰的金鑰組 AEAD 原始物件,然後使用取得的原始金鑰加密和解密,然後使用金鑰組中的主金鑰。
詳情請參閱「金鑰組設計」。