AWS Encryption SDK referensi format pesan - AWS Encryption SDK

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 pustaka 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 di GitHub.

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.

Struktur Header
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 atau 02 dalam notasi heksadesimal

Jenis

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 ditafsirkan sebagai 16-bit unsigned integer yang menentukan jumlah byte yang berisi. 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 SEC1 versi 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 pengidentifikasi 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 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.

Struktur Tubuh Tidak Berbingkai
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 persis dari panjang bingkai dari frame biasa, frame 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.

Struktur Tubuh Berbingkai, Bingkai Biasa
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.

Struktur Tubuh Berbingkai, Bingkai Akhir
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.

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.

Struktur Footer
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.