View a markdown version of this page

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 perpustakaan enkripsi Anda sendiri yang kompatibel dengan AWS Encryption SDK. Jika Anda tidak membangun pustaka enkripsi Anda sendiri yang kompatibel, Anda mungkin tidak memerlukan informasi ini.

Untuk menggunakan salah satu AWS Encryption SDK bahasa pemrograman yang didukung, lihatBahasa pemrograman.

Untuk spesifikasi yang mendefinisikan elemen-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 body. Dalam beberapa kasus, format pesan terdiri dari bagian ketiga, footer. Format pesan mendefinisikan urutan byte yang berurutan dalam urutan byte jaringan, juga disebut format big-endian. Format pesan dimulai dengan header, diikuti oleh badan, diikuti oleh footer (bila ada satu).

Suite algoritma didukung oleh AWS Encryption SDK penggunaan salah satu dari dua versi format pesan. Suite algoritma tanpa komitmen kunci 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 Not present 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 Panjang AAD 2-byte adalah 0.

2

Ketika konteks enkripsi kosong, nilai bidang Panjang AAD 2-byte adalah 0.

AAD

Variabel. Panjang bidang ini muncul di 2 byte sebelumnya (bidang Panjang AAD).

Ketika konteks enkripsi kosong, tidak ada bidang AAD di header.

Variabel. Panjang bidang ini muncul di 2 byte sebelumnya (bidang Panjang AAD).

Ketika konteks enkripsi kosong, tidak ada bidang AAD 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. Versinya 1 atau 2 dikodekan sebagai byte 01 atau 02 dalam notasi heksadesimal

Mengetik

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 bilangan bulat 16-bit tanpa tanda tangan. Untuk informasi lebih lanjut tentang algoritma, lihatAWS Encryption SDK referensi algoritma.

ID Pesan

Nilai yang dihasilkan secara acak yang mengidentifikasi pesan. ID Pesan:

  • Secara unik mengidentifikasi pesan terenkripsi.

  • Dengan 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.

Panjang AAD

Panjang data otentikasi tambahan (AAD). Ini adalah nilai 2-byte yang ditafsirkan sebagai bilangan bulat 16-bit tanpa tanda tangan yang menentukan jumlah byte yang berisi AAD.

Ketika konteks Konteks enkripsi enkripsi kosong, nilai bidang Panjang AAD adalah 0.

AAD

Data tambahan yang diautentikasi. AAD adalah pengkodean konteks enkripsi, array pasangan kunci-nilai di mana setiap kunci dan nilai adalah string karakter yang dikodekan. UTF-8 Konteks enkripsi dikonversi ke urutan byte dan digunakan untuk nilai AAD. Ketika konteks enkripsi kosong, tidak ada bidang AAD 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 yang dikompresi menurut SEC 1 versi 2.0 dan kemudian dikodekan base64. Konteks enkripsi dapat berisi nilai tambahan, tetapi panjang maksimum AAD yang dibangun adalah 2^16 - 1 byte.

Tabel berikut menjelaskan bidang yang membentuk AAD. Key-value pasangan diurutkan, berdasarkan kunci, dalam urutan menaik sesuai dengan kode UTF-8 karakter. Byte ditambahkan dalam urutan yang ditunjukkan.

Struktur AAD
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 (Nilai Panjang).
Key-Value Jumlah Pasangan

Jumlah pasangan kunci-nilai dalam AAD. Ini adalah nilai 2-byte yang ditafsirkan sebagai bilangan bulat 16-bit tanpa tanda tangan yang menentukan jumlah pasangan kunci-nilai dalam AAD. Jumlah maksimum pasangan kunci-nilai dalam AAD adalah 2^16 - 1.

Bila tidak ada konteks enkripsi atau konteks enkripsi kosong, bidang ini tidak ada dalam struktur AAD.

Panjang Kunci

Panjang kunci untuk pasangan kunci-nilai. Ini adalah nilai 2-byte yang ditafsirkan sebagai bilangan bulat 16-bit tanpa tanda tangan yang menentukan jumlah byte yang berisi kunci.

Kunci

Kunci untuk pasangan kunci-nilai. Ini adalah urutan byte yang UTF-8 dikodekan.

Nilai Panjang

Panjang nilai untuk pasangan kunci-nilai. Ini adalah nilai 2-byte yang ditafsirkan sebagai bilangan bulat 16-bit tanpa tanda tangan yang menentukan jumlah byte yang berisi nilai.

Nilai

Nilai untuk pasangan kunci-nilai. Ini adalah urutan byte yang UTF-8 dikodekan.

Jumlah Kunci Data Terenkripsi

Jumlah kunci data terenkripsi. Ini adalah nilai 2-byte yang ditafsirkan sebagai bilangan bulat 16-bit tanpa tanda tangan yang menentukan jumlah kunci data terenkripsi. Jumlah maksimum kunci data terenkripsi dalam 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 bilangan bulat 16-bit tanpa tanda tangan 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 diperluas.

Panjang Informasi Penyedia Utama

Panjang informasi penyedia kunci. Ini adalah nilai 2-byte yang ditafsirkan sebagai bilangan bulat 16-bit tanpa tanda tangan yang menentukan jumlah byte yang berisi informasi penyedia kunci.

Informasi Penyedia Utama

Informasi penyedia utama. Hal ini ditentukan oleh penyedia kunci.

Ketika AWS KMS penyedia kunci utama atau Anda menggunakan gantungan AWS KMS kunci, 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 yang ditafsirkan sebagai bilangan bulat 16-bit tanpa tanda tangan 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 tanpa bingkai atau dibingkai.

catatan

Bila memungkinkan, gunakan data berbingkai. Men AWS Encryption SDK dukung data nonframe hanya untuk penggunaan lama. Beberapa implementasi bahasa masih AWS Encryption SDK dapat menghasilkan ciphertext tanpa bingkai. Semua implementasi bahasa yang didukung dapat mendekripsi ciphertext berbingkai dan nonframe.

Data berbingkai dibagi menjadi bagian dengan panjang yang sama; setiap bagian dienkripsi secara terpisah. Konten berbingkai adalah tipe 2, dikodekan sebagai byte 02 dalam notasi heksadesimal.

Data nonframe tidak dibagi; itu adalah gumpalan terenkripsi tunggal. Non-framed konten adalah tipe 1, dikodekan sebagai byte 01 dalam notasi heksadesimal.

Dicadangkan

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 yang ditafsirkan sebagai bilangan bulat tanpa tanda 8-bit yang menentukan jumlah byte yang berisi IV. Nilai ini ditentukan oleh nilai byte IV dari algoritma yang menghasilkan pesan.

Bidang ini tidak ada dalam format pesan versi 2, yang hanya mendukung rangkaian algoritma yang menggunakan nilai IV deterministik di header pesan.

Panjang Bingkai

Panjang setiap bingkai data berbingkai. Ini adalah nilai 4-byte yang ditafsirkan sebagai bilangan bulat tanpa tanda 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. Men AWS Encryption SDK dukung data nonframe hanya untuk penggunaan lama. Beberapa implementasi bahasa masih AWS Encryption SDK dapat menghasilkan ciphertext tanpa bingkai. Semua implementasi bahasa yang didukung dapat mendekripsi ciphertext berbingkai dan nonframe.

Data Suite Algoritma

Data tambahan yang dibutuhkan oleh algoritma yang menghasilkan pesan. Panjang dan isinya 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 byte IV 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 algoritma 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 (tanpa bingkai atau dibingkai). Bagian berikut menjelaskan format badan pesan untuk setiap jenis konten. Struktur badan pesan sama dalam format pesan versi 1 dan 2.

Non-framed data

Non-framed data dienkripsi dalam satu gumpalan dengan IV dan badan A AD yang unik.

catatan

Bila memungkinkan, gunakan data berbingkai. Men AWS Encryption SDK dukung data nonframe hanya untuk penggunaan lama. Beberapa implementasi bahasa masih AWS Encryption SDK dapat menghasilkan ciphertext tanpa bingkai. Semua implementasi bahasa yang didukung dapat mendekripsi ciphertext berbingkai dan nonframe.

Tabel berikut menjelaskan bidang yang membentuk data nonframe. Byte ditambahkan dalam urutan yang ditunjukkan.

Non-Framed Struktur Tubuh
Bidang Panjang, 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 AWS Encryption SDK referensi algoritma enkripsi.

Panjang Konten Terenkripsi

Panjang konten terenkripsi, atau ciphertext. Ini adalah nilai 8-byte yang ditafsirkan sebagai bilangan bulat tanpa tanda 64-bit yang menentukan jumlah byte yang berisi konten terenkripsi.

Secara teknis, nilai maksimum yang diizinkan adalah 2^63 - 1, atau 8 exbibytes (8 eB). Namun, dalam praktiknya nilai maksimum adalah 2^36 - 32, atau 64 gibibytes (64 GiB), karena pembatasan yang diberlakukan oleh algoritma yang diterapkan. AWS Encryption SDK referensi algoritma

catatan

Implementasi Java dari SDK ini 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 en kripsi.

Tag Otentikasi

Nilai otentikasi untuk tubuh. Ini digunakan untuk mengotentikasi badan pesan.

Data berbingkai

Dalam data berbingkai, data plaintext dibagi menjadi bagian panjang yang sama yang disebut frame. Men AWS Encryption SDK genkripsi setiap frame secara terpisah dengan IV dan body A AD yang unik.

catatan

Bila memungkinkan, gunakan data berbingkai. Men AWS Encryption SDK dukung data nonframe hanya untuk penggunaan lama. Beberapa implementasi bahasa masih AWS Encryption SDK dapat menghasilkan ciphertext tanpa bingkai. Semua implementasi bahasa yang didukung dapat mendekripsi ciphertext berbingkai dan nonframe.

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 bingkai: 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 dari frame 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 bingkai yang sama dengan frame biasa.

  • Kelipatan panjang bingkai — Ketika panjang konten terenkripsi adalah kelipatan yang tepat dari panjang bingkai bingkai reguler, 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 bingkai yang sama dengan frame biasa.

  • Bukan kelipatan panjang bingkai — Ketika panjang konten terenkripsi bukan kelipatan yang tepat dari panjang bingkai reguler, bingkai akhir berisi data yang tersisa. Panjang bingkai bingkai akhir kurang dari panjang bingkai reguler.

  • Kurang dari panjang bingkai — Ketika panjang konten terenkripsi kurang dari panjang bingkai dari frame biasa, pesan terdiri dari bingkai akhir yang berisi semua data. Panjang bingkai bingkai akhir kurang dari panjang bingkai reguler.

Tabel berikut menjelaskan bidang yang membentuk bingkai. Byte ditambahkan dalam urutan yang ditunjukkan.

Struktur Tubuh Berbingkai, Bingkai Biasa
Bidang Panjang, 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 Algorithm ID yang ditentukan dalam header.
Nomor Urutan

Nomor urutan bingkai. Ini adalah nomor penghitung inkremental untuk bingkai. Ini adalah nilai 4-byte yang ditafsirkan sebagai bilangan bulat 32-bit tanpa tanda tangan.

Data berbingkai harus dimulai pada urutan nomor 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. SDK menggunakan 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 en kripsi.

Tag Otentikasi

Nilai otentikasi untuk frame. Ini digunakan untuk mengotentikasi seluruh bingkai.

Struktur Tubuh Berbingkai, Bingkai Akhir
Bidang Panjang, 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 Algorithm ID yang ditentukan dalam header.
Nomor Urutan Akhir

Indikator untuk bingkai akhir. Nilai dikodekan sebagai 4 byte FF FF FF FF dalam notasi heksadesimal.

Nomor Urutan

Nomor urutan bingkai. Ini adalah nomor penghitung inkremental untuk bingkai. Ini adalah nilai 4-byte yang ditafsirkan sebagai bilangan bulat 32-bit tanpa tanda tangan.

Data berbingkai harus dimulai pada urutan nomor 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. SDK menggunakan 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 yang ditafsirkan sebagai bilangan bulat tanpa tanda 32-bit yang menentukan jumlah byte yang berisi konten terenkripsi untuk bingkai.

Konten Terenkripsi

Konten terenkripsi (ciphertext) untuk frame, seperti yang dikembalikan oleh algoritma en kripsi.

Tag Otentikasi

Nilai otentikasi untuk frame. Ini digunakan untuk mengotentikasi seluruh bingkai.

Ketika algoritma dengan penandatanganan digunakan, format pesan berisi footer. Footer pesan berisi tanda tangan digital yang dihitung di atas header dan badan 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 Panjang, 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 yang ditafsirkan sebagai bilangan bulat 16-bit tanpa tanda tangan yang menentukan jumlah byte yang berisi tanda tangan.

Tanda tangan

Tanda tangan.