Bagikan melalui


Pengodean Data Yang Ditandatangani

Data yang ditandatangani terdiri dari konten dari jenis apa pun dan pesan terenkripsi hasil hash dari konten oleh nol atau lebih penandatangan. Hash yang dihasilkan dapat mengonfirmasi bahwa pesan asli belum dimodifikasi sejak ditandatangani dan orang atau entitas tertentu menandatangani data.

Ilustrasi berikut menggambarkan prosedur untuk mengodekan pesan yang ditandatangani. Daftar berikut ilustrasi menjelaskan langkah-langkahnya.

Pesan mungkin memiliki beberapa penanda tangan, algoritma hashing, dan sertifikat. Meskipun ilustrasi hanya menunjukkan sertifikat, CRL, dan CTL dapat menggunakan proses yang sama. Mereka akan terpadu dalam ilustrasi pada bagian yang menampilkan sertifikat.

mengodekan pesan yang ditandatangani

Proses umum untuk pengodean Data yang Ditandatangani adalah sebagai berikut.

Untuk mengodekan data yang ditandatangani

  1. Data dibuat (jika perlu), dan referensi ke data tersebut diambil.
  2. Penyimpanan sertifikat dibuka yang berisi sertifikat penanda tangan.
  3. Kunci privat untuk sertifikat diambil. Ada dua properti yang harus disetel pada sertifikat sebelum menggunakannya. Satu digunakan untuk mengikat sertifikat ke CSP tertentu dan, dalam CSP tersebut, ke kontainer kunci privat tertentu. Yang lain digunakan untuk menunjukkan algoritma hash mana yang akan digunakan ketika operasihashdipanggil. Pengaturan ini hanya perlu dilakukan sekali.
  4. Properti sertifikat menentukan algoritma hash.
  5. Hash data dibuat dengan mengirim data melalui fungsi hashing.
  6. Tanda tangan dibuat dengan mengenkripsi hash menggunakan kunci privat, yang diperoleh melalui properti pada sertifikat.
  7. Data berikut disertakan dalam pesan yang sudah selesai dan ditandatangani:
    • Data asli yang akan ditandatangani
    • Algoritma-algoritma hash tersebut
    • Tanda tangan
    • Struktur info penanda tangan, yang mencakup pengidentifikasi penanda tangan (penerbit sertifikat dan nomor seri)
    • Sertifikat penanda tangan (opsional)

Prosedur ini menggambarkan kasus sederhana. Kasus yang lebih kompleks melibatkan atribut terautentikasi yang disertakan dalam pesan. Ketika jenis konten apa pun kecuali string BYTE, atau setidaknya ada satu atribut terautentikasi bersama dengan jenis data apa pun, ada dua atribut terautentikasi standar yang diperlukan: jenis konten (data), dan hash konten. Dalam keadaan ini,CryptoAPI secara otomatis menyediakan dua atribut yang diperlukan ini. Pesan pada tingkat rendah melakukan hashing pada atribut yang diautentikasi, mengenkripsi hash tersebut dengan kunci privat, dan menyediakannya sebagai tanda tangan.

Gunakan fungsi pesan tingkat rendah untuk menyelesaikan tugas yang baru saja dicantumkan, dengan menggunakan prosedur berikut.

Untuk mengodekan pesan yang ditandatangani

  1. Membuat atau mengambil konten.

  2. Dapatkan penyedia kriptografi.

  3. Dapatkan sertifikat penanda tangan.

  4. Menginisialisasi struktur CMSG_SIGNER_ENCODE_INFO.

  5. Menginisialisasi struktur CMSG_SIGNED_ENCODE_INFO.

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

  7. Panggil CryptMsgOpenToEncode, meneruskan CMSG_SIGNED untuk dwMsgType dan pointer ke CMSG_SIGNED_ENCODE_INFO untuk pvMsgEncodeInfo untuk mendapatkan handel ke pesan yang dibuka.

  8. Panggil CryptMsgUpdate, meneruskan handle yang didapatkan di langkah 7, dan pointer ke data yang akan ditandatangani dan dikodekan. Fungsi ini dapat dipanggil sebanyak yang diperlukan untuk menyelesaikan proses pengodean.

  9. Panggil CryptMsgGetParam, dengan meneruskan handle yang diperoleh di langkah 7 serta jenis parameter yang sesuai untuk mengakses data yang dikodekan dan diinginkan. Misalnya, teruskan CMSG_CONTENT_PARAM untuk mendapatkan pointer ke seluruh pesan PKCS #7.

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

  10. Tutup pesan dengan memanggil CryptMsgClose.

Hasil dari prosedur ini adalah pesan yang dikodekan yang berisi data asli, hash terenkripsi dari data tersebut (tanda tangan), dan informasi penanda tangan. Ada juga pointer ke BLOB yang diinginkan dan dikodekan.

Untuk detail pengodean C, lihat Contoh Program C: Penandatanganan, Pengodean, Decoding, dan Memverifikasi Pesan.