Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
AWS Encryption SDK referensi format pesan
Informasi di halaman ini adalah referensi untuk membangun pustaka enkripsi Anda sendiri yang kompatibel dengan file AWS Encryption SDK. Jika Anda tidak membangun perpustakaan enkripsi kompatibel Anda sendiri, Anda mungkin tidak memerlukan informasi ini. Untuk menggunakan AWS Encryption SDK dalam salah satu bahasa pemrograman yang didukung, lihatBahasa pemrograman. Untuk spesifikasi yang mendefinisikan elemen AWS Encryption SDK implementasi yang tepat, lihat AWS Encryption SDK Spesifikasi |
Operasi enkripsi dalam AWS Encryption SDK mengembalikan struktur data tunggal atau pesan terenkripsi yang berisi data terenkripsi (ciphertext) dan semua kunci data terenkripsi. Untuk memahami struktur data ini, atau untuk membangun pustaka yang membaca dan menulisnya, Anda perlu memahami format pesan.
Format pesan terdiri dari setidaknya dua bagian: header dan badan. Dalam beberapa kasus, format pesan terdiri dari bagian ketiga, footer. Format pesan mendefinisikan urutan urutan byte dalam urutan byte jaringan, juga disebut format big-endian. Format pesan dimulai dengan header, diikuti oleh tubuh, diikuti oleh footer (ketika ada).
Suite algoritma didukung oleh AWS Encryption SDK penggunaan salah satu dari dua versi format pesan. Suite algoritma tanpa komitmen utama menggunakan format pesan versi 1. Suite algoritma dengan komitmen utama menggunakan format pesan versi 2.
Struktur header
Header pesan berisi kunci data terenkripsi dan informasi tentang bagaimana badan pesan terbentuk. Tabel berikut menjelaskan bidang yang membentuk header dalam format pesan versi 1 dan 2. Byte ditambahkan dalam urutan yang ditunjukkan.
Nilai tidak hadir menunjukkan bahwa bidang tidak ada dalam versi format pesan tersebut. Teks tebal menunjukkan nilai yang berbeda di setiap versi.
catatan
Anda mungkin perlu menggulir secara horizontal atau vertikal untuk melihat semua data dalam tabel ini.
Bidang | Format pesan versi 1 Panjang (byte) |
Format pesan versi 2 Panjang (byte) |
---|---|---|
Version | 1 | 1 |
Type | 1 | Tidak hadir |
Algorithm ID | 2 | 2 |
Message ID | 16 | 32 |
AAD Length | 2 Ketika konteks enkripsi kosong, nilai bidang AAD Panjang 2-byte adalah 0. |
2 Ketika konteks enkripsi kosong, nilai bidang AAD Panjang 2-byte adalah 0. |
AAD | Variabel. Panjang bidang ini muncul di 2 byte sebelumnya (bidang AAD Panjang). Ketika konteks enkripsi kosong, tidak ada AAD bidang di header. |
Variabel. Panjang bidang ini muncul di 2 byte sebelumnya (bidang AAD Panjang). Ketika konteks enkripsi kosong, tidak ada AAD bidang di header. |
Encrypted Data Key Count | 2 | 2 |
Encrypted Data Key(s) | Variabel. Ditentukan oleh jumlah kunci data terenkripsi dan panjang masing-masing. | Variabel. Ditentukan oleh jumlah kunci data terenkripsi dan panjang masing-masing. |
Content Type | 1 | 1 |
Reserved | 4 | Tidak hadir |
IV Length | 1 | Tidak hadir |
Frame Length | 4 | 4 |
Algorithm Suite Data | Tidak hadir | Variabel. Ditentukan oleh algoritma yang menghasilkan pesan. |
Header Authentication | Variabel. Ditentukan oleh algoritma yang menghasilkan pesan. | Variabel. Ditentukan oleh algoritma yang menghasilkan pesan. |
- Versi
-
Versi format pesan ini. Versi ini adalah 1 atau 2 dikodekan sebagai byte
01
atau02
dalam notasi heksadesimal - Tipe
-
Jenis format pesan ini. Jenis menunjukkan jenis struktur. Satu-satunya jenis yang didukung digambarkan sebagai data terenkripsi yang diautentikasi pelanggan. Nilai tipenya adalah 128, dikodekan sebagai byte
80
dalam notasi heksadesimal.Bidang ini tidak ada dalam format pesan versi 2.
- ID Algoritma
-
Pengidentifikasi untuk algoritma yang digunakan. Ini adalah nilai 2-byte yang ditafsirkan sebagai integer unsigned 16-bit. Untuk informasi selengkapnya tentang algoritme, lihatAWS Encryption SDK referensi algoritma.
- ID Pesan
-
Nilai yang dihasilkan secara acak yang mengidentifikasi pesan. ID Pesan:
-
Mengidentifikasi pesan terenkripsi secara unik.
-
Lemah mengikat header pesan ke badan pesan.
-
Menyediakan mekanisme untuk menggunakan kembali kunci data dengan aman dengan beberapa pesan terenkripsi.
-
Melindungi dari penggunaan kembali kunci data yang tidak disengaja atau keausan kunci di. AWS Encryption SDK
Nilai ini adalah 128 bit dalam format pesan versi 1 dan 256 bit dalam versi 2.
-
- AADPanjangnya
-
Panjang data tambahan yang diautentikasi (AAD). Ini adalah nilai 2-byte yang ditafsirkan sebagai integer unsigned 16-bit yang menentukan jumlah byte yang berisi file. AAD
Ketika konteks enkripsi kosong, nilai bidang AAD Panjang adalah 0.
- AAD
-
Data tambahan yang diautentikasi. AADIni adalah pengkodean konteks enkripsi, array pasangan kunci-nilai di mana setiap kunci dan nilai adalah string UTF -8 karakter yang dikodekan. Konteks enkripsi dikonversi ke urutan byte dan digunakan untuk AAD nilai. Ketika konteks enkripsi kosong, tidak ada AAD bidang di header.
Ketika algoritma dengan penandatanganan digunakan, konteks enkripsi harus berisi pasangan kunci-nilai.
{'aws-crypto-public-key', Qtxt}
Qtxt mewakili titik kurva elips Q dikompresi menurut SEC1versi 2.0 dan kemudian dikodekan base64. Konteks enkripsi dapat berisi nilai tambahan, tetapi panjang maksimum yang dibangun AAD adalah 2 ^ 16 - 1 byte. Tabel berikut menjelaskan bidang yang membentukAAD. Pasangan nilai kunci diurutkan, berdasarkan kunci, dalam urutan menaik menurut UTF kode karakter -8. Byte ditambahkan dalam urutan yang ditunjukkan.
AADStruktur Bidang Panjang (byte) Key-Value Pair Count 2 Key Length 2 Key Variabel. Sama dengan nilai yang ditentukan dalam 2 byte sebelumnya (Panjang Kunci). Value Length 2 Value Variabel. Sama dengan nilai yang ditentukan dalam 2 byte sebelumnya (Value Length). - Hitungan Pasangan Nilai Kunci
-
Jumlah pasangan kunci-nilai dalam. AAD Ini adalah nilai 2-byte ditafsirkan sebagai 16-bit unsigned integer yang menentukan jumlah pasangan kunci-nilai dalam. AAD Jumlah maksimum pasangan kunci-nilai dalam AAD adalah 2^16 - 1.
Ketika tidak ada konteks enkripsi atau konteks enkripsi kosong, bidang ini tidak ada dalam AAD struktur.
- Panjang Kunci
-
Panjang kunci untuk pasangan kunci-nilai. Ini adalah nilai 2-byte ditafsirkan sebagai 16-bit unsigned integer yang menentukan jumlah byte yang berisi kunci.
- Kunci
-
Kunci untuk pasangan kunci-nilai. Ini adalah urutan UTF -8 byte yang dikodekan.
- Nilai Panjang
-
Panjang nilai untuk pasangan kunci-nilai. Ini adalah nilai 2-byte ditafsirkan sebagai 16-bit unsigned integer yang menentukan jumlah byte yang berisi nilai.
- Nilai
-
Nilai untuk pasangan kunci-nilai. Ini adalah urutan UTF -8 byte yang dikodekan.
- Hitungan Kunci Data Terenkripsi
-
Jumlah kunci data terenkripsi. Ini adalah nilai 2-byte yang ditafsirkan sebagai integer unsigned 16-bit yang menentukan jumlah kunci data terenkripsi. Jumlah maksimum kunci data terenkripsi di setiap pesan adalah 65.535 (2 ^ 16 - 1).
- Kunci Data Terenkripsi
-
Urutan kunci data terenkripsi. Panjang urutan ditentukan oleh jumlah kunci data terenkripsi dan panjang masing-masing. Urutan berisi setidaknya satu kunci data terenkripsi.
Tabel berikut menjelaskan bidang yang membentuk setiap kunci data terenkripsi. Byte ditambahkan dalam urutan yang ditunjukkan.
Struktur Kunci Data Terenkripsi Bidang Panjang (byte) Key Provider ID Length 2 Key Provider ID Variabel. Sama dengan nilai yang ditentukan dalam 2 byte sebelumnya (Panjang ID Penyedia Kunci). Key Provider Information Length 2 Key Provider Information Variabel. Sama dengan nilai yang ditentukan dalam 2 byte sebelumnya (Panjang Informasi Penyedia Kunci). Encrypted Data Key Length 2 Encrypted Data Key Variabel. Sama dengan nilai yang ditentukan dalam 2 byte sebelumnya (Panjang Kunci Data Terenkripsi). - Panjang ID Penyedia Kunci
-
Panjang pengenal penyedia kunci. Ini adalah nilai 2-byte yang ditafsirkan sebagai integer unsigned 16-bit yang menentukan jumlah byte yang berisi ID penyedia kunci.
- ID Penyedia Kunci
-
Pengidentifikasi penyedia kunci. Ini digunakan untuk menunjukkan penyedia kunci data terenkripsi dan dimaksudkan untuk dapat diperluas.
- Panjang Informasi Penyedia Kunci
-
Panjang informasi penyedia kunci. Ini adalah nilai 2-byte yang ditafsirkan sebagai integer unsigned 16-bit yang menentukan jumlah byte yang berisi informasi penyedia kunci.
- Informasi Penyedia Utama
-
Informasi penyedia utama. Itu ditentukan oleh penyedia kunci.
AWS KMS Kapan penyedia kunci utama atau Anda menggunakan AWS KMS keyring, nilai ini berisi Nama Sumber Daya Amazon (ARN) dari AWS KMS key.
- Panjang Kunci Data Terenkripsi
-
Panjang kunci data terenkripsi. Ini adalah nilai 2-byte ditafsirkan sebagai 16-bit unsigned integer yang menentukan jumlah byte yang berisi kunci data terenkripsi.
- Kunci Data Terenkripsi
-
Kunci data terenkripsi. Ini adalah kunci enkripsi data yang dienkripsi oleh penyedia kunci.
- Jenis Konten
-
Jenis data terenkripsi, baik nonframed atau framed.
catatan
Bila memungkinkan, gunakan data berbingkai. AWS Encryption SDK Mendukung data nonframed hanya untuk penggunaan lama. Beberapa implementasi bahasa masih AWS Encryption SDK dapat menghasilkan ciphertext nonframed. Semua implementasi bahasa yang didukung dapat mendekripsi ciphertext berbingkai dan nonframed.
Data berbingkai dibagi menjadi bagian yang sama panjangnya; setiap bagian dienkripsi secara terpisah. Konten berbingkai adalah tipe 2, dikodekan sebagai byte
02
dalam notasi heksadesimal.Data nonframed tidak dibagi; itu adalah gumpalan terenkripsi tunggal. Konten non-framed adalah tipe 1, dikodekan sebagai byte
01
dalam notasi heksadesimal. - Reserved
-
Urutan cadangan 4 byte. Nilai ini harus 0. Ini dikodekan sebagai byte
00 00 00 00
dalam notasi heksadesimal (yaitu, urutan 4-byte dari nilai integer 32-bit sama dengan 0).Bidang ini tidak ada dalam format pesan versi 2.
- Panjang IV
-
Panjang vektor inisialisasi (IV). Ini adalah nilai 1-byte ditafsirkan sebagai 8-bit unsigned integer yang menentukan jumlah byte yang berisi IV. Nilai ini ditentukan oleh nilai IV byte dari algoritma yang menghasilkan pesan.
Bidang ini tidak ada dalam format pesan versi 2, yang hanya mendukung rangkaian algoritme yang menggunakan nilai IV deterministik di header pesan.
- Panjang Bingkai
-
Panjang setiap frame data berbingkai. Ini adalah nilai 4-byte yang ditafsirkan sebagai integer unsigned 32-bit yang menentukan jumlah byte di setiap frame. Ketika data tidak dibingkai, yaitu, ketika nilai
Content Type
bidang adalah 1, nilai ini harus 0.catatan
Bila memungkinkan, gunakan data berbingkai. AWS Encryption SDK Mendukung data nonframed hanya untuk penggunaan lama. Beberapa implementasi bahasa masih AWS Encryption SDK dapat menghasilkan ciphertext nonframed. Semua implementasi bahasa yang didukung dapat mendekripsi ciphertext berbingkai dan nonframed.
- Data Suite Algoritma
-
Data tambahan yang dibutuhkan oleh algoritma yang menghasilkan pesan. Panjang dan isi ditentukan oleh algoritma. Panjangnya mungkin 0.
Bidang ini tidak ada dalam format pesan versi 1.
- Otentikasi Header
-
Otentikasi header ditentukan oleh algoritma yang menghasilkan pesan. Otentikasi header dihitung di seluruh header. Ini terdiri dari IV dan tag otentikasi. Byte ditambahkan dalam urutan yang ditunjukkan.
Struktur Otentikasi Header Bidang Panjang dalam versi 1.0 (byte) Panjang dalam versi 2.0 (byte) IV Variabel. Ditentukan oleh nilai IV byte dari algoritma yang menghasilkan pesan. N/A Authentication Tag Variabel. Ditentukan oleh nilai byte tag otentikasi dari algoritma yang menghasilkan pesan. Variabel. Ditentukan oleh nilai byte tag otentikasi dari algoritma yang menghasilkan pesan. - IV
-
Vektor inisialisasi (IV) digunakan untuk menghitung tag otentikasi header.
Bidang ini tidak ada di header format pesan versi 2. Format pesan versi 2 hanya mendukung rangkaian algoritme yang menggunakan nilai IV deterministik di header pesan.
- Tag Otentikasi
-
Nilai otentikasi untuk header. Ini digunakan untuk mengotentikasi seluruh isi header.
Struktur tubuh
Badan pesan berisi data terenkripsi, yang disebut ciphertext. Struktur tubuh tergantung pada jenis konten (tidak dibingkai atau dibingkai). Bagian berikut menjelaskan format badan pesan untuk setiap jenis konten. Struktur isi pesan sama dalam format pesan versi 1 dan 2.
Data yang tidak dibingkai
Data non-frame dienkripsi dalam satu gumpalan dengan IV dan tubuh yang unik. AAD
catatan
Bila memungkinkan, gunakan data berbingkai. AWS Encryption SDK Mendukung data nonframed hanya untuk penggunaan lama. Beberapa implementasi bahasa masih AWS Encryption SDK dapat menghasilkan ciphertext nonframed. Semua implementasi bahasa yang didukung dapat mendekripsi ciphertext berbingkai dan nonframed.
Tabel berikut menjelaskan bidang yang membentuk data nonframed. Byte ditambahkan dalam urutan yang ditunjukkan.
Bidang | Panjangnya, dalam byte |
---|---|
IV | Variabel. Sama dengan nilai yang ditentukan dalam IV Length byte header. |
Encrypted Content Length | 8 |
Encrypted Content | Variabel. Sama dengan nilai yang ditentukan dalam 8 byte sebelumnya (Panjang Konten Terenkripsi). |
Authentication Tag | Variabel. Ditentukan oleh implementasi algoritma yang digunakan. |
- IV
-
Vektor inisialisasi (IV) untuk digunakan dengan algoritma enkripsi.
- Panjang Konten Terenkripsi
-
Panjang konten terenkripsi, atau ciphertext. Ini adalah nilai 8-byte yang ditafsirkan sebagai integer unsigned 64-bit yang menentukan jumlah byte yang berisi konten terenkripsi.
Secara teknis, nilai maksimum yang diizinkan adalah 2^63 - 1, atau 8 exbibytes (8 eIB). Namun, dalam praktiknya nilai maksimum adalah 2^36 - 32, atau 64 gibibytes (64 GiB), karena pembatasan yang diberlakukan oleh algoritma yang diterapkan.
catatan
Implementasi Java ini SDK selanjutnya membatasi nilai ini menjadi 2^31 - 1, atau 2 gibibytes (2 GiB), karena pembatasan dalam bahasa.
- Konten Terenkripsi
-
Konten terenkripsi (ciphertext) seperti yang dikembalikan oleh algoritma enkripsi.
- Tag Otentikasi
-
Nilai otentikasi untuk tubuh. Ini digunakan untuk mengautentikasi badan pesan.
Data berbingkai
Dalam data berbingkai, data plaintext dibagi menjadi bagian yang sama panjangnya yang disebut frame. AWS Encryption SDK Enkripsi setiap frame secara terpisah dengan IV dan bodi yang unik. AAD
catatan
Bila memungkinkan, gunakan data berbingkai. AWS Encryption SDK Mendukung data nonframed hanya untuk penggunaan lama. Beberapa implementasi bahasa masih AWS Encryption SDK dapat menghasilkan ciphertext nonframed. Semua implementasi bahasa yang didukung dapat mendekripsi ciphertext berbingkai dan nonframed.
Panjang bingkai, yang merupakan panjang konten terenkripsi dalam bingkai, dapat berbeda untuk setiap pesan. Jumlah maksimum byte dalam bingkai adalah 2^32 - 1. Jumlah maksimum frame dalam pesan adalah 2^32 - 1.
Ada dua jenis frame: reguler dan final. Setiap pesan harus terdiri dari atau menyertakan bingkai akhir.
Semua frame reguler dalam pesan memiliki panjang bingkai yang sama. Bingkai akhir dapat memiliki panjang bingkai yang berbeda.
Komposisi frame dalam data berbingkai bervariasi dengan panjang konten terenkripsi.
-
Sama dengan panjang bingkai — Ketika panjang konten terenkripsi sama dengan panjang bingkai bingkai biasa, pesan dapat terdiri dari bingkai biasa yang berisi data, diikuti oleh bingkai akhir dengan panjang nol (0). Atau, pesan hanya dapat terdiri dari bingkai akhir yang berisi data. Dalam hal ini, frame akhir memiliki panjang frame yang sama dengan frame biasa.
-
Kelipatan panjang bingkai — Ketika panjang konten terenkripsi adalah kelipatan yang tepat dari panjang bingkai bingkai biasa, pesan dapat berakhir dalam bingkai biasa yang berisi data, diikuti oleh bingkai akhir dengan panjang nol (0). Atau, pesan dapat berakhir dalam bingkai akhir yang berisi data. Dalam hal ini, frame akhir memiliki panjang frame yang sama dengan frame biasa.
-
Bukan kelipatan dari panjang bingkai — Ketika panjang konten terenkripsi bukan kelipatan yang tepat dari panjang bingkai biasa, bingkai akhir berisi data yang tersisa. Panjang bingkai bingkai akhir kurang dari panjang bingkai bingkai biasa.
-
Kurang dari panjang bingkai — Ketika panjang konten terenkripsi kurang dari panjang bingkai bingkai biasa, pesan terdiri dari bingkai akhir yang berisi semua data. Panjang bingkai bingkai akhir kurang dari panjang bingkai bingkai biasa.
Tabel berikut menjelaskan bidang yang membentuk bingkai. Byte ditambahkan dalam urutan yang ditunjukkan.
Bidang | Panjangnya, dalam byte |
---|---|
Sequence Number | 4 |
IV | Variabel. Sama dengan nilai yang ditentukan dalam IV Length byte header. |
Encrypted Content | Variabel. Sama dengan nilai yang ditentukan Frame Length dalam header. |
Authentication Tag | Variabel. Ditentukan oleh algoritma yang digunakan, seperti yang Algorithm ID ditentukan dalam header. |
- Nomor Urutan
-
Nomor urutan bingkai. Ini adalah nomor penghitung tambahan untuk bingkai. Ini adalah nilai 4-byte yang ditafsirkan sebagai bilangan bulat 32-bit yang tidak ditandatangani.
Data berbingkai harus dimulai dari nomor urut 1. Frame berikutnya harus berurutan dan harus berisi kenaikan 1 dari frame sebelumnya. Jika tidak, proses dekripsi berhenti dan melaporkan kesalahan.
- IV
-
Vektor inisialisasi (IV) untuk frame. SDKMenggunakan metode deterministik untuk membangun IV yang berbeda untuk setiap frame dalam pesan. Panjangnya ditentukan oleh rangkaian algoritma yang digunakan.
- Konten Terenkripsi
-
Konten terenkripsi (ciphertext) untuk frame, seperti yang dikembalikan oleh algoritma enkripsi.
- Tag Otentikasi
-
Nilai otentikasi untuk frame. Ini digunakan untuk mengotentikasi seluruh frame.
Bidang | Panjangnya, dalam byte |
---|---|
Sequence Number End | 4 |
Sequence Number | 4 |
IV | Variabel. Sama dengan nilai yang ditentukan dalam IV Length byte header. |
Encrypted Content Length | 4 |
Encrypted Content | Variabel. Sama dengan nilai yang ditentukan dalam 4 byte sebelumnya (Panjang Konten Terenkripsi). |
Authentication Tag | Variabel. Ditentukan oleh algoritma yang digunakan, seperti yang Algorithm ID ditentukan dalam header. |
- Nomor Urutan Akhir
-
Indikator untuk frame akhir. Nilai dikodekan sebagai 4 byte
FF FF FF FF
dalam notasi heksadesimal. - Nomor Urutan
-
Nomor urutan bingkai. Ini adalah nomor penghitung tambahan untuk bingkai. Ini adalah nilai 4-byte yang ditafsirkan sebagai bilangan bulat 32-bit yang tidak ditandatangani.
Data berbingkai harus dimulai dari nomor urut 1. Frame berikutnya harus berurutan dan harus berisi kenaikan 1 dari frame sebelumnya. Jika tidak, proses dekripsi berhenti dan melaporkan kesalahan.
- IV
-
Vektor inisialisasi (IV) untuk frame. SDKMenggunakan metode deterministik untuk membangun IV yang berbeda untuk setiap frame dalam pesan. Panjang panjang IV ditentukan oleh rangkaian algoritma.
- Panjang Konten Terenkripsi
-
Panjang konten terenkripsi. Ini adalah nilai 4-byte ditafsirkan sebagai 32-bit unsigned integer yang menentukan jumlah byte yang berisi konten terenkripsi untuk frame.
- Konten Terenkripsi
-
Konten terenkripsi (ciphertext) untuk frame, seperti yang dikembalikan oleh algoritma enkripsi.
- Tag Otentikasi
-
Nilai otentikasi untuk frame. Ini digunakan untuk mengotentikasi seluruh frame.
Struktur footer
Ketika algoritma dengan penandatanganan digunakan, format pesan berisi footer. Footer pesan berisi tanda tangan digital yang dihitung melalui header dan isi pesan. Tabel berikut menjelaskan bidang yang membentuk footer. Byte ditambahkan dalam urutan yang ditunjukkan. Struktur footer pesan sama dalam format pesan versi 1 dan 2.
Bidang | Panjangnya, dalam byte |
---|---|
Signature Length | 2 |
Signature | Variabel. Sama dengan nilai yang ditentukan dalam 2 byte sebelumnya (Panjang Tanda Tangan). |
- Panjang Tanda Tangan
-
Panjang tanda tangan. Ini adalah nilai 2-byte ditafsirkan sebagai 16-bit unsigned integer yang menentukan jumlah byte yang berisi tanda tangan.
- Tanda tangan
-
Tanda tangan.