Bagikan melalui


Pengodean Data Yang Diselimuti

Data yang diselimuti terdiri dari konten terenkripsi dari semua jenis dan kunci sesi enkripsi konten terenkripsi untuk satu atau beberapa penerima. Pesan yang diselimuti menyimpan konten rahasia pesan dan hanya mengizinkan orang atau entitas tertentu untuk mengambil konten.

Sintaks pesan kriptografi (CMS) dapat digunakan untuk mengodekan pesan yang diselimuti. CMS mendukung tiga teknik manajemen utama: transportasi utama, perjanjian kunci, dan kunci enkripsi kunci simetris (KEK) yang didistribusikan sebelumnya. KEK simetris yang didistribusikan sebelumnya juga dikenal sebagai distribusi kunci milis.

Dalam masing-masing dari ketiga teknik ini, satu kunci sesi dihasilkan untuk mengenkripsi pesan yang diselimuti. Masalah manajemen utama menangani cara kunci sesi dienkripsi oleh pengirim dan didekripsi oleh penerima. Satu pesan terenkripsi dapat didistribusikan ke banyak penerima menggunakan campuran teknik manajemen kunci.

Manajemen kunci transportasi utama menggunakan kunci umum penerima yang dimaksudkan untuk mengenkripsi kunci sesi. Penerima mendekripsi kunci sesi menggunakan kunci privat yang terkait dengan kunci publik yang digunakan untuk mengenkripsi. Penerima kemudian menggunakan kunci sesi yang didekripsi untuk mendekripsi data yang diselimuti. Ketika transportasi kunci digunakan, penerima belum mengonfirmasi informasi tentang identitas pengirim.

Dalam manajemen perjanjian utama, kunci privat sementara Diffie-Hellman sementara dihasilkan dan digunakan untuk mengenkripsi kunci sesi. Kunci publik yang sesuai dengan kunci privat sementara disertakan sebagai bagian dari informasi penerima pesan. Penerima mendekripsi kunci sesi menggunakan kunci ephemeral yang diterima dan menggunakan kunci sesi yang didekripsi ini untuk mendekripsi pesan yang diselimuti. Menggunakan perjanjian kunci ephemeral bersama dengan kunci privat penerima, penerima pesan memang telah mengonfirmasi informasi tentang identitas pengirim.

Untuk manajemen kunci yang menggunakan kunci konten yang didistribusikan sebelumnya, setiap pesan menyertakan kunci enkripsi konten yang telah dienkripsi dengan kunci enkripsi kunci yang didistribusikan sebelumnya. Penerima menggunakan kunci enkripsi kunci yang didistribusikan sebelumnya untuk mendekripsi kunci enkripsi konten, lalu menggunakan kunci enkripsi konten yang didekripsi untuk mendekripsi pesan yang diselimuti.

Urutan peristiwa CMS umum untuk pengodean data yang diselimuti, diperlihatkan dalam ilustrasi berikut.

pengodean data yang diselimuti

  • Penunjuk ke pesan teks biasa diambil.
  • Kunci simetris (sesi) dihasilkan.
  • Kunci konten dan algoritma enkripsi yang ditentukan digunakan untuk mengenkripsi data pesan.
  • Penyimpanan sertifikat dibuka.
  • Sertifikat penerima diambil dari penyimpanan.
  • Kunci publik diambil dari sertifikat penerima.
  • Dengan menggunakan kunci umum penerima, kunci konten dienkripsi.
  • Dari sertifikat penerima, ID penerima diambil.
  • Informasi berikut disertakan dalam pesan yang diselimuti secara digital: algoritma enkripsi data, data terenkripsi, kunci konten terenkripsi, dan struktur informasi penerima.

Untuk menggunakan fungsi pesan tingkat rendah untuk menyelesaikan tugas umum yang baru saja tercantum, gunakan prosedur berikut.

Untuk mengodekan pesan yang diselimuti

  1. Membuat atau mengambil konten.

  2. Dapatkan penyedia kriptografi.

  3. Mendapatkan sertifikat penerima.

  4. Menginisialisasi struktur CMSG_ENVELOPED_ENCODE_INFO .

  5. Panggil CryptMsgCalculateEncodedLength untuk mendapatkan ukuran BLOB pesan yang dikodekan. Alokasikan memori untuk itu.

  6. Panggil CryptMsgOpenToEncode, meneruskan CMSG_ENVELOPED untuk dwMsgType dan pointer ke CMSG_ENVELOPED_ENCODE_INFO untuk pvMsgEncodeInfo. Sebagai hasil dari panggilan ini, Anda akan mendapatkan handel ke pesan yang dibuka.

  7. Panggil CryptMsgUpdate, meneruskan handel yang diambil di langkah 6 dan penunjuk ke data yang akan dienkripsi, diselimuti, dan dikodekan. Fungsi ini dapat dipanggil sebanyak yang diperlukan untuk menyelesaikan proses pengodean.

  8. Panggil CryptMsgGetParam, meneruskan handel yang diambil di langkah 6 dan jenis parameter yang sesuai untuk mengakses data yang diinginkan dan dikodekan. Misalnya, teruskan CMSG_CONTENT_PARAM untuk mendapatkan penunjuk ke seluruh pesan PKCS #7.

    Jika hasil pengodean ini akan digunakan sebagai data dalam untuk pesan lain yang dikodekan, seperti pesan yang diselimuti, parameter CMSG_BARE_CONTENT_PARAM harus diteruskan. Misalnya, lihat Kode Alternatif untuk Mengodekan Pesan Yang Diselimuti.

  9. Tutup pesan dengan memanggil CryptMsgClose.

Hasil dari prosedur ini adalah pesan yang dikodekan yang berisi data terenkripsi, kunci konten yang dienkripsi dengan kunci publik penerima, dan struktur data informasi penerima. Kombinasi konten terenkripsi dan kunci konten terenkripsi untuk penerima adalah amplop digital untuk penerima tersebut. Semua jenis konten dapat diselimuti untuk beberapa penerima.

Contoh Program C: Mengodekan Pesan yang Diselimuti dan Ditandatangani