

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 什麼是 AWS Encryption SDK？
<a name="introduction"></a>

 AWS Encryption SDK 是用戶端加密程式庫，旨在讓每個人都能輕鬆地使用產業標準和最佳實務來加密和解密資料。這樣一來，您就能夠專注於應用程式的核心功能，而不用擔心如何讓資料獲得最好的加密與解密操作。根據 Apache 2.0 授權 AWS Encryption SDK 免費提供 。

這些會為您 AWS Encryption SDK 解答下列問題：
+ 我應該使用哪種加密演算法？
+ 這種演算法應該如何使用？或是我該使用哪種模式？
+ 我應該如何產生加密金鑰？
+ 我應該如何保護加密金鑰？還有這份金鑰該存放在哪裡？
+ 我可以如何製作可攜式的加密資料？
+ 我應該如何確保預定收件人可以讀取我的加密資料？
+ 我應該如何確保已加密資料在寫入和讀取的這段期間不會遭到竄改？
+ 如何使用 AWS KMS 傳回的資料金鑰？

使用 AWS Encryption SDK，您可以定義[主金鑰提供者](concepts.md#master-key-provider)或 [keyring](concepts.md#keyring)，以決定您用來保護資料的包裝金鑰。然後，您可以使用 提供的簡單方法來加密和解密資料 AWS Encryption SDK。會 AWS Encryption SDK 執行其餘動作。

如果沒有 AWS Encryption SDK，您可能會花費比應用程式核心功能更多的精力來建置加密解決方案。提供下列項目來 AWS Encryption SDK 回答這些問題。

**符合加密最佳實務的預設實作**  
根據預設， 會為其加密的每個資料物件 AWS Encryption SDK 產生唯一的資料金鑰。這個做法符合使用唯一資料金鑰進行每次加密操作的加密最佳實務要求。  
會使用安全、經過驗證的對稱金鑰演算法來 AWS Encryption SDK 加密您的資料。如需詳細資訊，請參閱[中支援的演算法套件 AWS Encryption SDK](supported-algorithms.md)。

**使用包裝金鑰保護資料金鑰的架構**  
 AWS Encryption SDK 會在一或多個包裝金鑰下加密資料，以保護加密資料的資料金鑰。透過提供架構來加密具有多個包裝金鑰的資料金鑰， AWS Encryption SDK 有助於讓您的加密資料成為可攜式。  
例如， AWS KMS key 在 下的加密資料， AWS KMS 以及來自現場部署 HSM 的金鑰。您可以使用任一包裝金鑰來解密資料，以防資料無法使用，或發起人沒有同時使用這兩個金鑰的許可。

**儲存已加密資料金鑰和已加密資料的格式化訊息**  
會將加密的資料和加密的資料金鑰一起 AWS Encryption SDK 存放在使用定義資料格式的[加密訊息](concepts.md#message)中。這表示您不需要追蹤或保護加密資料的資料金鑰，因為 會為您 AWS Encryption SDK 執行。

的某些語言實作 AWS Encryption SDK 需要 AWS 開發套件，但 AWS Encryption SDK 不需要 ， AWS 帳戶 也不依賴任何 AWS 服務。 AWS 帳戶 只有在您選擇使用 [AWS KMS keys](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#kms-keys) 來保護資料時，才需要 。

## 在開放原始碼儲存庫中開發
<a name="esdk-repos"></a>

 AWS Encryption SDK 是在 GitHub 上的開放原始碼儲存庫中開發。您可以使用這些儲存庫來檢視程式碼、讀取和提交問題，以及尋找您語言實作的特定資訊。
+ 適用於 C 的 AWS Encryption SDK — [aws-encryption-sdk-c](https://github.com/aws/aws-encryption-sdk-c/)
+ AWS Encryption SDK for .NET — `aws-encryption-sdk`儲存庫的 [.NET](https://github.com/aws/aws-encryption-sdk/tree/mainline/AwsEncryptionSDK/runtimes/net/) 目錄。
+ AWS 加密 CLI — [aws-encryption-sdk-cli](https://github.com/aws/aws-encryption-sdk-cli/)
+ 適用於 JAVA 的 AWS Encryption SDK — [aws-encryption-sdk-java](https://github.com/aws/aws-encryption-sdk-java/)
+ 適用於 JavaScript 的 AWS Encryption SDK — [aws-encryption-sdk-javascript](https://github.com/aws/aws-encryption-sdk-javascript/)
+ 適用於 Python 的 AWS Encryption SDK — [aws-encryption-sdk-python](https://github.com/aws/aws-encryption-sdk-python/)
+ AWS Encryption SDK for Rust — `aws-encryption-sdk`儲存庫的 [Rust](https://github.com/aws/aws-encryption-sdk-dafny/tree/mainline/AwsEncryptionSDK/runtimes/rust/) 目錄。
+ AWS Encryption SDK for Go — `aws-encryption-sdk`儲存庫的 [Go](https://github.com/aws/aws-encryption-sdk/tree/mainline/releases/go/encryption-sdk/) 目錄

## 與加密程式庫和服務的相容性
<a name="intro-compatibility"></a>

 AWS Encryption SDK 支援多種[程式設計語言](programming-languages.md)的 。所有語言實作都是可互通的。您可以使用一種語言實作加密，並使用另一種語言進行解密。互通性可能受到語言限制。如果是這樣，這些限制會在語言實作的主題中加以說明。此外，加密和解密時，您必須使用相容的 Keyring，或主金鑰和主金鑰提供者。如需詳細資訊，請參閱[Keyring 相容性](choose-keyring.md#keyring-compatibility)。

不過， AWS Encryption SDK 無法與其他程式庫互通。由於每個程式庫都會以不同的格式傳回加密資料，因此您無法使用一個程式庫加密，並使用另一個程式庫解密。

**DynamoDB 加密用戶端和 Amazon S3 用戶端加密**  <a name="ESDK-DDBEC"></a>
 AWS Encryption SDK 無法解密 [DynamoDB 加密用戶端](https://docs.aws.amazon.com/dynamodb-encryption-client/latest/devguide/)或 [Amazon S3 用戶端加密](https://docs.aws.amazon.com/AmazonS3/latest/userguide/UsingClientSideEncryption.html)所加密的資料。這些程式庫無法解密 AWS Encryption SDK 傳回的[加密訊息](concepts.md#message)。 

**AWS Key Management Service (AWS KMS)**  <a name="ESDK-KMS"></a>
 AWS Encryption SDK 可以使用 [AWS KMS keys](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#master_keys)和 [資料金鑰](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#data-keys)來保護您的資料，包括多區域 KMS 金鑰。例如，您可以設定 AWS Encryption SDK 在 AWS KMS keys 中的一或多個 下加密資料 AWS 帳戶。不過，您必須使用 AWS Encryption SDK 來解密該資料。  
 AWS Encryption SDK 無法解密 AWS KMS [Encrypt](https://docs.aws.amazon.com/kms/latest/APIReference/API_Encrypt.html) 或 [ReEncrypt](https://docs.aws.amazon.com/kms/latest/APIReference/API_ReEncrypt.html) 操作傳回的加密文字。同樣地， AWS KMS [解密](https://docs.aws.amazon.com/kms/latest/APIReference/API_Decrypt.html)操作無法解密 AWS Encryption SDK 傳回的[加密訊息](concepts.md#message)。  
僅 AWS Encryption SDK 支援[對稱加密 KMS 金鑰](https://docs.aws.amazon.com/kms/latest/developerguide/symm-asymm-concepts.html#symmetric-cmks)。您無法使用[非對稱 KMS 金鑰](https://docs.aws.amazon.com/kms/latest/developerguide/symm-asymm-concepts.html#asymmetric-cmks)來加密或登入 AWS Encryption SDK。 AWS Encryption SDK 會針對簽署訊息的[演算法套件](supported-algorithms.md)產生自己的 ECDSA 簽署金鑰。

## 支援和維護
<a name="support"></a>

 AWS Encryption SDK 使用與 AWS SDK 和工具相同的[維護政策](https://docs.aws.amazon.com/sdkref/latest/guide/maint-policy.html)，包括其版本控制和生命週期階段。[最佳實務](best-practices.md)是，建議您 AWS Encryption SDK 針對程式設計語言使用 的最新可用版本，並在發行新版本時升級。當版本需要重大變更時，例如從 1.7.*x* 之前的 AWS Encryption SDK 版本升級至 2.0.*x* 及更新版本，我們會提供[詳細說明](migration.md)來協助您。

的每個程式設計語言實作 AWS Encryption SDK 都是在個別的開放原始碼 GitHub 儲存庫中開發。每個版本的生命週期和支援階段可能因儲存庫而異。例如，指定版本的 AWS Encryption SDK 可能處於一種程式設計語言的一般可用性 （完整支援） 階段，但處於不同程式設計語言的end-of-support階段。我們建議您盡可能使用完全支援的版本，並避免不再支援的版本。

若要尋找程式設計語言 AWS Encryption SDK 版本生命週期階段，請參閱每個 AWS Encryption SDK 儲存庫中的 `SUPPORT_POLICY.rst` 檔案。
+ 適用於 C 的 AWS Encryption SDK — [SUPPORT\$1POLICY.rst](https://github.com/aws/aws-encryption-sdk-c/blob/master/SUPPORT_POLICY.rst)
+ AWS Encryption SDK for .NET — [SUPPORT\$1POLICY.rst](https://github.com/aws/aws-encryption-sdk-dafny/blob/mainline/SUPPORT_POLICY.rst)
+ AWS 加密 CLI — [SUPPORT\$1POLICY.rst](https://github.com/aws/aws-encryption-sdk-cli/blob/master/SUPPORT_POLICY.rst)
+ 適用於 JAVA 的 AWS Encryption SDK — [SUPPORT\$1POLICY.rst](https://github.com/aws/aws-encryption-sdk-java/blob/master/SUPPORT_POLICY.rst)
+ 適用於 JavaScript 的 AWS Encryption SDK — [SUPPORT\$1POLICY.rst](https://github.com/aws/aws-encryption-sdk-javascript/blob/master/SUPPORT_POLICY.rst)
+ 適用於 Python 的 AWS Encryption SDK — [SUPPORT\$1POLICY.rst](https://github.com/aws/aws-encryption-sdk-python/blob/master/SUPPORT_POLICY.rst)

如需詳細資訊，請參閱《SDK 和工具參考指南》中的 和 [的版本 AWS Encryption SDK](about-versions.md) SDK 和工具維護政策。 [AWS SDKs ](https://docs.aws.amazon.com/sdkref/latest/guide/maint-policy.html) AWS SDKs 

## 進一步了解
<a name="intro-see-also"></a>

如需 AWS Encryption SDK 和用戶端加密的詳細資訊，請嘗試這些來源。
+ 如需這個 SDK 中所用名詞和概念的說明資訊，請參閱 [中的概念 AWS Encryption SDK](concepts.md)。
+ 如需最佳實務準則，請參閱 [的最佳實務 AWS Encryption SDK](best-practices.md)。
+ 如需這項 SDK 運作方式的詳細資訊，請參閱 [SDK 如何運作](how-it-works.md)。
+ 如需示範如何在 中設定選項的範例 AWS Encryption SDK，請參閱 [設定 AWS Encryption SDK](configure.md)。
+ 如需技術層面的詳細資訊，請參閱 [AWS Encryption SDK 參考](reference.md)。
+ 如需 的技術規格 AWS Encryption SDK，請參閱 GitHub 中的[AWS Encryption SDK 規格](https://github.com/awslabs/aws-encryption-sdk-specification/)。
+ 如需有關使用 之問題的解答 AWS Encryption SDK，請閱讀並張貼在 [AWS Crypto Tools 開發論壇](https://forums.aws.amazon.com/forum.jspa?forumID=302)。

如需 AWS Encryption SDK 不同程式設計語言之 實作的相關資訊。
+ **C**：請參閱 GitHub 上的 [適用於 C 的 AWS Encryption SDK](c-language.md)、 AWS Encryption SDK [C 文件](https://aws.github.io/aws-encryption-sdk-c/html/)和 [aws-encryption-sdk-c](https://github.com/aws/aws-encryption-sdk-c/) 儲存庫。
+ **C\$1/。NET**：請參閱 [AWS Encryption SDK 適用於 .NET 的](dot-net.md)和 GitHub 上`aws-encryption-sdk`儲存庫的 [aws-encryption-sdk-net](https://github.com/aws/aws-encryption-sdk/tree/mainline/AwsEncryptionSDK/runtimes/net/) 目錄。
+ **命令列界面**：請參閱 [AWS Encryption SDK 命令列界面](crypto-cli.md)、[閱讀加密 CLI 的文件](https://aws-encryption-sdk-cli.readthedocs.io/en/latest/)，以及 GitHub 上的 [aws-encryption-sdk-cli](https://github.com/aws/aws-encryption-sdk-cli/) 儲存庫。 AWS 
+ **Java**：請參閱 GitHub 上的 [適用於 JAVA 的 AWS Encryption SDK](java.md)、 AWS Encryption SDK [Javadoc](https://aws.github.io/aws-encryption-sdk-java/) 和 [aws-encryption-sdk-java](https://github.com/aws/aws-encryption-sdk-java/) 儲存庫。

  **JavaScript**：請參閱 [適用於 JavaScript 的 AWS Encryption SDK](javascript.md) 和 GitHub 上的 [aws-encryption-sdk-javascript](https://github.com/aws/aws-encryption-sdk-javascript/) 儲存庫。
+ **Python**：請參閱 GitHub 上的 [適用於 Python 的 AWS Encryption SDK](python.md)、 AWS Encryption SDK [Python 文件](https://aws-encryption-sdk-python.readthedocs.io/en/latest/)和 [aws-encryption-sdk-python](https://github.com/aws/aws-encryption-sdk-python/) 儲存庫。

## 傳送意見回饋
<a name="report-issues"></a>

我們誠摯歡迎您提供意見回饋。如果您有問題或意見、問題或報告，請使用以下資源。
+ 如果您在 中發現潛在的安全性漏洞 AWS Encryption SDK，請[通知 AWS 安全性](https://aws.amazon.com/security/vulnerability-reporting/)。請勿建立公有 GitHub 問題。
+ 若要提供 的意見回饋 AWS Encryption SDK，請在 GitHub 儲存庫中針對您正在使用的程式設計語言提出問題。
+ 若要提供本文件的意見回饋，請使用此頁面上的**意見回饋**連結。您也可以對 [aws-encryption-sdk-docs](https://github.com/awsdocs/aws-encryption-sdk-docs) (GitHub 上此文件的開放原始碼儲存庫) 提出問題或使其更加完善。