View a markdown version of this page

Pertanyaan umum - AWS Encryption SDK

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Pertanyaan umum

Bagaimana AWS Encryption SDK berbeda dari AWS SDK?

AWS SDK menyediakan pustaka untuk berinteraksi dengan Amazon Web Services (AWS), termasuk AWS Key Management Service (AWS KMS). Beberapa implementasi bahasa AWS Encryption SDK, seperti AWS Encryption SDK untuk.NET, selalu memerlukan AWS SDK dalam bahasa pemrograman yang sama. Implementasi bahasa lain memerlukan AWS SDK yang sesuai hanya jika Anda menggunakan AWS KMS kunci di gantungan kunci atau penyedia kunci utama. Untuk detailnya, lihat topik tentang bahasa pemrograman Anda diAWS Encryption SDK bahasa pemrograman.

Anda dapat menggunakan AWS SDK untuk berinteraksi AWS KMS, termasuk mengenkripsi dan mendekripsi sejumlah kecil data (hingga 4.096 byte dengan kunci enkripsi simetris) dan menghasilkan kunci data untuk enkripsi sisi klien. Namun, ketika Anda membuat kunci data, Anda harus mengelola seluruh proses enkripsi dan dekripsi, termasuk mengenkripsi data Anda dengan kunci data di luar, membuang kunci data plaintext dengan aman AWS KMS, menyimpan kunci data terenkripsi, dan kemudian mendekripsi kunci data dan mendekripsi data Anda. Mereka AWS Encryption SDK menangani proses ini untuk Anda.

Ini AWS Encryption SDK menyediakan perpustakaan yang mengenkripsi dan mendekripsi data menggunakan standar industri dan praktik terbaik. Ini menghasilkan kunci data, mengenkripsinya di bawah kunci pembungkus yang Anda tentukan, dan mengembalikan pesan terenkripsi, objek data portabel yang mencakup data terenkripsi dan kunci data terenkripsi yang Anda butuhkan untuk mendekripsinya. Ketika tiba waktunya untuk mendekripsi, Anda meneruskan pesan terenkripsi dan setidaknya satu kunci pembungkus (opsional), dan AWS Encryption SDK mengembalikan data plaintext Anda.

Anda dapat menggunakan AWS KMS keys sebagai kunci pembungkus di AWS Encryption SDK, tetapi tidak diperlukan. Anda dapat menggunakan kunci enkripsi yang Anda hasilkan dan kunci dari pengelola kunci atau modul keamanan perangkat keras lokal. Anda dapat menggunakan AWS Encryption SDK bahkan jika Anda tidak memiliki AWS akun.

Bagaimana AWS Encryption SDK berbeda dari klien enkripsi Amazon S3?

Klien enkripsi Amazon S3 di AWS SDK menyediakan enkripsi dan dekripsi untuk data yang Anda simpan di Amazon Simple Storage Service (Amazon S3). Klien ini digabungkan erat ke Amazon S3 dan dimaksudkan untuk digunakan hanya dengan data yang disimpan di sana.

Men AWS Encryption SDK yediakan enkripsi dan dekripsi untuk data yang dapat Anda simpan di mana saja. Klien enkripsi AWS Encryption SDK dan Amazon S3 tidak kompatibel karena mereka menghasilkan ciphertext dengan format data yang berbeda.

Algoritma kriptografi mana yang didukung oleh AWS Encryption SDK, dan mana yang default?

Menggunakan AWS Encryption SDK algoritma simetris Advanced Encryption Standard (AES) dalam Galois/Counter Mode (GCM), yang dikenal sebagai AES-GCM, untuk mengenkripsi data Anda. Ini memungkinkan Anda memilih dari beberapa algoritma simetris dan asimetris untuk mengenkripsi kunci data yang mengenkripsi data Anda.

Untuk AES-GCM, rangkaian algoritma default adalah AES-GCM dengan kunci 256-bit, derivasi kunci (HKDF), tanda tangan Tanda tangan digital digital, dan komitmen kunci. Komitmen utama AWS Encryption SDK juga mendukung kunci enkripsi 192-bit, dan 128-bit dan algoritma enkripsi tanpa tanda tangan digital dan komitmen kunci.

Dalam semua kasus, panjang vektor inisialisasi (IV) adalah 12 byte; panjang tag otentikasi adalah 16 byte. Secara default, SDK menggunakan kunci data sebagai input ke fungsi derivasi kunci HMAC-based ekstrak-dan-perluas (HKDF) untuk mendapatkan kunci AES-GCM enkripsi, dan juga menambahkan tanda tangan Elliptic Curve Digital Signature Algorithm (ECDSA).

Untuk informasi tentang memilih algoritma mana yang akan digunakan, lihatSuite algoritma yang didukung.

Untuk detail implementasi tentang algoritma yang didukung, lihatReferensi algoritma.

Bagaimana vektor inisialisasi (IV) dihasilkan dan di mana disimpan?

Menggunakan AWS Encryption SDK metode deterministik untuk membangun nilai IV yang berbeda untuk setiap frame. Prosedur ini menjamin bahwa IV tidak pernah diulang dalam pesan. (Sebelum versi 1.3.0 dari AWS Encryption SDK for Java dan AWS Encryption SDK for Python, secara AWS Encryption SDK acak menghasilkan nilai IV unik untuk setiap frame.)

IV disimpan dalam pesan terenkripsi yang dikem AWS Encryption SDK balikan. Untuk informasi selengkapnya, lihat AWS Encryption SDK referensi format pesan.

Bagaimana setiap kunci data dihasilkan, dienkripsi, dan didekripsi?

Metode ini tergantung pada keyring atau penyedia kunci utama yang Anda gunakan.

Penye AWS KMS dia gantungan kunci dan kunci utama dalam AWS Encryption SDK menggunakan operasi AWS KMS GenerateDataKey API untuk menghasilkan setiap kunci data dan mengenkripsinya di bawah kunci pembungkusnya. Untuk mengenkripsi salinan kunci data di bawah kunci KMS tambahan, mereka menggunakan operasi AWS KMS Enkripsi. Untuk mendekripsi kunci data, mereka menggunakan operasi Dec AWS KMS rypt. Untuk detailnya, lihat AWS KMS keyring di AWS Encryption SDK Spesifikasi di GitHub.

Gantungan kunci lainnya menghasilkan kunci data, mengenkripsi, dan mendekripsi menggunakan metode praktik terbaik untuk setiap bahasa pemrograman. Untuk detailnya, lihat spesifikasi keyring atau penyedia kunci utama di bagian Ker angka pada AWS Encryption SDK Spesifikasi di GitHub.

Bagaimana cara melacak kunci data yang digunakan untuk mengenkripsi data saya?

Mereka AWS Encryption SDK melakukan ini untuk Anda. Saat Anda mengenkripsi data, SDK mengenkripsi kunci data dan menyimpan kunci terenkripsi bersama dengan data terenkripsi dalam pesan terenkripsi yang dikembalikan. Ketika Anda mendekripsi data, AWS Encryption SDK mengekstrak kunci data terenkripsi dari pesan terenkripsi, mendekripsi, dan kemudian menggunakannya untuk mendekripsi data.

Bagaimana cara AWS Encryption SDK menyimpan kunci data terenkripsi dengan data terenkripsi mereka?

Operasi enkripsi mengembalikan AWS Encryption SDK pesan terenkripsi, struktur data tunggal yang berisi data terenkripsi dan kunci data terenkripsi. Format pesan terdiri dari setidaknya dua bagian: header dan body. Header pesan berisi kunci data terenkripsi dan informasi tentang bagaimana badan pesan terbentuk. Badan pesan berisi data terenkripsi. Jika rangkaian algoritma menyer takan tanda tangan digital, format pesan menyertakan footer yang berisi tanda tangan. Untuk informasi selengkapnya, lihat AWS Encryption SDK referensi format pesan.

Berapa biaya overhead AWS Encryption SDK format pesan ditambahkan ke data terenkripsi saya?

Jumlah overhead yang ditambahkan oleh AWS Encryption SDK tergantung pada beberapa faktor, termasuk yang berikut:

  • Ukuran data plaintext

  • Manakah dari algoritma yang didukung yang digunakan

  • Apakah data otentikasi tambahan (AAD) disediakan, dan panjang AAD tersebut

  • Jumlah dan jenis kunci pembungkus atau kunci utama

  • Ukuran bingkai (saat data dibingkai digunakan)

Bila Anda menggunakan konfigurasi defaul AWS Encryption SDK tnya (satu AWS KMS key sebagai kunci pembungkus (atau kunci master), tanpa AAD, data nonframe, dan algoritma enkripsi dengan penandatanganan), overhead kira-kira 600 byte. Secara umum, Anda dapat secara wajar mengasumsikan AWS Encryption SDK bahwa biaya tambahan sebesar 1 KB atau kurang, tidak termasuk AAD yang disediakan. Untuk informasi selengkapnya, lihat AWS Encryption SDK referensi format pesan.

Bisakah saya menggunakan penyedia kunci utama saya sendiri?

Ya. Rincian implementasi bervariasi tergantung pada bahasa pemrograman yang didukung yang Anda gunakan. Namun, semua bahasa yang didukung memungkinkan Anda untuk menentukan manajer materi kriptografi khusus (CMM) Ms), penyedia kunci utama, gantungan kunci, kunci master, dan kunci pembungkus.

Dapatkah saya mengenkripsi data di bawah lebih dari satu kunci pembungkus?

Ya. Anda dapat mengenkripsi kunci data dengan kunci pembungkus tambahan (atau kunci master) untuk menambahkan redundansi ketika kunci berada di wilayah yang berbeda atau tidak tersedia untuk dekripsi.

Untuk mengenkripsi data di bawah beberapa kunci pembungkus, buat keyring atau penyedia kunci master dengan beberapa kunci pembungkus. Saat bekerja dengan gantungan kunci, Anda dapat membuat gantungan kunci tunggal dengan beberapa kunci pembungkus atau multi-keyring. Multi-keyrings

Saat Anda mengenkripsi data dengan beberapa kunci pembungkus, AWS Encryption SDK menggunakan satu kunci pembungkus untuk menghasilkan kunci data plaintext. Kunci data unik dan secara matematis tidak terkait dengan kunci pembungkus. Operasi mengembalikan kunci data plaintext dan salinan kunci data yang dienkripsi oleh kunci pembungkus. Kemudian metode enkripsi, mengenkripsi kunci data dengan kunci pembungkus lainnya. Pesan terenkripsi yang dihasilkan mencakup data terenkripsi dan satu kunci data terenkripsi untuk setiap kunci pembungkus.

Pesan terenkripsi dapat didekripsi dengan menggunakan salah satu kunci pembungkus yang digunakan dalam operasi enkripsi. Menggunakan AWS Encryption SDK kunci pembungkus untuk mendekripsi kunci data terenkripsi. Kemudian, ia menggunakan kunci data plaintext untuk mendekripsi data.

Jenis data mana yang dapat saya enkripsi dengan AWS Encryption SDK?

Sebagian besar implementasi bahasa pemrograman AWS Encryption SDK dapat mengenkripsi byte mentah (array byte), I/O aliran (aliran byte), dan string. AWS Encryption SDK Untuk .NET tidak mendukung I/O aliran. Kami menyediakan kode contoh untuk setiap bahasa pemrograman yang didukung.

Bagaimana cara AWS Encryption SDK mengenkripsi dan mendekripsi input/output (I/O) aliran?

Membuat aliran AWS Encryption SDK enkripsi atau mendekripsi yang membungkus aliran yang mendasarinya I/O . Aliran enkripsi atau dekripsi melakukan operasi kriptografi pada panggilan baca atau tulis. Misalnya, ia dapat membaca data plaintext pada aliran yang mendasarinya dan mengenkripsinya sebelum mengembalikan hasilnya. Atau dapat membaca ciphertext dari aliran yang mendasarinya dan mendekripsinya sebelum mengembalikan hasilnya. Kami menyediakan contoh kode untuk mengenkripsi dan mendekripsi aliran untuk setiap bahasa pemrograman yang didukung yang mendukung streaming.

AWS Encryption SDK Untuk .NET tidak mendukung I/O aliran.