Gambaran umum pemrograman CNG umum

API CNG menerapkan model penyedia yang dapat diperluas yang memungkinkan Anda memuat penyedia dengan menentukan algoritma kriptografi yang diperlukan, alih-alih penyedia tertentu. Keuntungannya adalah bahwa penyedia algoritma dapat diganti atau ditingkatkan dan Anda tidak perlu mengubah kode Anda dengan cara apa pun untuk menggunakan penyedia baru. Selain itu, jika beberapa algoritma ditentukan tidak aman di masa depan, versi algoritma tersebut yang lebih aman dapat diinstal tanpa memengaruhi kode Anda. Sebagian besar API CNG memerlukan penyedia atau objek yang dibuat oleh penyedia.

Langkah-langkah umum yang terlibat dalam menggunakan CNG API untuk operasi primitif kriptografi adalah sebagai berikut:

  1. Membuka Penyedia Algoritma
  2. Mendapatkan atau Mengatur Properti Algoritma
  3. Membuat atau Mengimpor Kunci
  4. Melakukan Operasi Kriptografi
  5. Menutup Penyedia Algoritma

Untuk informasi selengkapnya, lihat Contoh Pemrograman.

Membuka Penyedia Algoritma

Fungsi BCryptOpenAlgorithmProvider memberi Anda handel penyedia algoritma yang digunakan dalam API CNG berikutnya, seperti BCryptCreateHash atau BCryptGenerateKeyPair.

Mendapatkan atau Mengatur Properti Algoritma

Anda dapat menggunakan handel penyedia algoritma untuk mendapatkan detail implementasi untuk algoritma, seperti ukuran kunci atau mode operasi saat ini. Anda menggunakan fungsiBCryptGetProperty untuk mendapatkan properti tertentu.

Anda juga dapat mengubah properti algoritma. Misalnya, Jika Anda ingin menggunakan rantai sandi blok ECB dengan AES, Anda mengatur properti BCRYPT_CHAINING_MODE algoritma AES ke BCRYPT_CHAIN_MODE_ECB; properti ditetapkan ke semua kunci AES yang dibuat menggunakan handel algoritma ini, tanpa perlu mengonfigurasi masing-masing dan setiap kunci AES. Anda menggunakan fungsi BCryptSetProperty untuk memodifikasi properti ini.

Peringatan

Jangan gunakan mode ECB untuk data produksi. ECB mengenkripsi setiap blok secara independen, yang berarti blok teks biasa yang identik menghasilkan ciphertext yang identik — pola bocor dalam data Anda. Gunakan mode CBC dengan vektor inisialisasi acak (IV), atau sebaiknya mode enkripsi terautentikasi seperti GCM (BCRYPT_CHAIN_MODE_GCM), yang memberikan kerahasiaan dan integritas.

Membuat atau Mengimpor Kunci

Bergantung pada jenis algoritma yang Anda gunakan, Anda mungkin perlu membuat atau memuat kunci. Misalnya, fungsi BCryptEncrypt memerlukan pegangan kunci untuk parameter pertama. Jika Anda ingin fungsi tersebut mengenkripsi data dengan algoritma enkripsi simetris seperti AES, Anda harus terlebih dahulu mendapatkan kunci. Bagaimana Anda mendapatkan kunci tergantung pada jenis algoritma yang digunakan dan sumber kunci.

Anda dapat membuat kunci sementara dengan fungsi BCryptGenerateSymmetricKey dan BCryptGenerateKeyPair . Anda juga dapat mengimpor kunci sementara dari BLOB memori dengan fungsi BCryptImportKey dan BCryptImportKeyPair .

Untuk kunci persisten, Anda menggunakan fungsi penyimpanan kunci untuk memuat penyedia penyimpanan kunci, lalu membuat atau memuat kunci tersebut. Anda juga dapat menggunakan fungsi-fungsi ini untuk membuat atau memuat kunci sementara dengan meneruskan NULL nama kontainer apa pun. Untuk informasi selengkapnya tentang fungsi penyimpanan utama, lihat Fungsi Penyimpanan Kunci CNG.

Melakukan Operasi Kriptografi

Anda sekarang siap untuk melakukan operasi kriptografi, seperti mengenkripsi atau mendekripsi data dengan menggunakan fungsi BCryptEncrypt atau BCryptDecrypt .

Menutup Penyedia Algoritma

Ketika penyedia tidak lagi diperlukan, Anda harus meneruskan handle ke fungsi BCryptCloseAlgorithmProvider agar penyedia dapat ditutup. Hal ini menyebabkan penyedia merilis sumber daya apa pun yang telah dialokasikan untuk instans penyedia algoritma tersebut. Setelah handle penyedia ditutup, handle tersebut tidak dapat digunakan kembali.

Memuat penyedia dapat menjadi proses yang memerlukan waktu relatif lama. Oleh karena itu, Anda harus menyimpan dalam cache semua handle penyedia yang akan Anda gunakan beberapa kali selama siklus hidup aplikasi Anda.

Contoh Pemrograman

Contoh berikut menjelaskan cara melakukan operasi kriptografi tertentu menggunakan CNG: