Kunci kriptografi

Artikel ini menunjukkan cara menggunakan fungsi derivasi kunci standar untuk mendapatkan kunci dan cara mengenkripsi konten menggunakan kunci simetris dan asimetris.

Kunci konten

Enkripsi kunci konten, juga disebut enkripsi kunci rahasia, mengharuskan kunci yang digunakan untuk enkripsi juga digunakan untuk dekripsi. Anda dapat menggunakan kelas SymmetricKeyAlgorithmProvider untuk menentukan algoritma simetris dan membuat atau mengimpor kunci. Anda dapat menggunakan metode statis pada kelas CryptographicEngine untuk mengenkripsi dan mendekripsi data dengan menggunakan algoritma dan kunci.

Enkripsi kunci simetris biasanya menggunakan cipher blok dan mode cipher blok. Cipher blok adalah fungsi enkripsi simetris yang beroperasi pada blok ukuran tetap. Jika pesan yang ingin Anda enkripsi lebih panjang dari panjang blok, Anda harus menggunakan mode cipher blok. Mode cipher blok adalah fungsi enkripsi simetris yang dibangun dengan menggunakan cipher blok. Ini mengenkripsi teks biasa sebagai serangkaian blok ukuran tetap. Mode berikut didukung untuk aplikasi:

  • Mode ECB (buku kode elektronik) mengenkripsi setiap blok pesan secara terpisah. Ini tidak dianggap sebagai mode enkripsi aman.
  • Mode CBC (cipher block chaining) menggunakan blok ciphertext sebelumnya untuk mengaburkan blok saat ini. Anda harus menentukan nilai apa yang akan digunakan untuk blok pertama. Nilai ini disebut vektor inisialisasi (IV).
  • Mode CCM (penghitung dengan CBC-MAC) menggabungkan mode cipher blok CBC dengan kode autentikasi pesan (MAC).
  • Mode GCM (mode penghitung Galois) menggabungkan mode enkripsi penghitung dengan mode autentikasi Galois.

Beberapa mode seperti CBC mengharuskan Anda menggunakan vektor inisialisasi (IV) untuk blok ciphertext pertama. Berikut ini adalah vektor inisialisasi umum. Anda menentukan IV saat memanggil CryptographicEngine.Encrypt. Untuk sebagian besar kasus, penting bahwa IV tidak pernah digunakan kembali dengan kunci yang sama.

  • Diperbaiki menggunakan IV yang sama untuk semua pesan yang akan dienkripsi. Informasi kebocoran dan penggunaannya tidak disarankan.
  • Penghitung menaikkan IV untuk setiap blok.
  • Acak membuat Pseudorandom IV. Anda dapat menggunakan CryptographicBuffer.GenerateRandom untuk membuat IV.
  • Nonce-Generated menggunakan nomor unik untuk setiap pesan yang akan dienkripsi. Biasanya, nonce adalah pesan atau pengidentifikasi transaksi yang dimodifikasi. Nonce tidak harus dirahasiakan, tetapi tidak boleh digunakan kembali di bawah kunci yang sama.

Sebagian besar mode mengharuskan panjang teks biasa menjadi kelipatan yang tepat dari ukuran blok. Ini biasanya mengharuskan Anda menautkan teks biasa untuk mendapatkan panjang yang sesuai.

Sementara cipher blok mengenkripsi blok ukuran tetap data, cipher aliran adalah fungsi enkripsi simetris yang menggabungkan bit teks biasa dengan aliran bit pseudorandom (disebut aliran kunci) untuk menghasilkan ciphertext. Beberapa mode cipher blok seperti mode umpan balik output (OTF) dan mode penghitung (CTR) secara efektif mengubah cipher blok menjadi cipher aliran. Cipher aliran aktual seperti RC4, namun, biasanya beroperasi pada kecepatan yang lebih tinggi daripada mode cipher blok mampu mencapai.

Contoh berikut menunjukkan cara menggunakan kelas SymmetricKeyAlgorithmProvider untuk membuat kunci simetris dan menggunakannya untuk mengenkripsi dan mendekripsi data.

Kunci asimetris

Kriptografi kunci asimetris, juga disebut kriptografi kunci publik, menggunakan kunci umum dan kunci privat untuk melakukan enkripsi dan dekripsi. Kuncinya berbeda tetapi terkait secara matematis. Biasanya kunci privat dirahasiakan dan digunakan untuk mendekripsi data saat kunci publik didistribusikan ke pihak yang berkeinginan dan digunakan untuk mengenkripsi data. Kriptografi asimetris juga berguna untuk menandatangani data.

Karena kriptografi asimetris jauh lebih lambat daripada kriptografi simetris, kriptografi jarang digunakan untuk mengenkripsi data dalam jumlah besar secara langsung. Sebaliknya, biasanya digunakan dengan cara berikut untuk mengenkripsi kunci.

  • Alice mengharuskan Bob mengiriminya hanya pesan terenkripsi.
  • Alice membuat pasangan kunci privat/publik, menjaga rahasia kunci privatnya dan menerbitkan kunci umumnya.
  • Bob punya pesan yang ingin dia kirim ke Alice.
  • Bob membuat kunci simetris.
  • Bob menggunakan kunci simetris barunya untuk mengenkripsi pesannya ke Alice.
  • Bob menggunakan kunci umum Alice untuk mengenkripsi kunci kontennya.
  • Bob mengirim pesan terenkripsi dan kunci konten terenkripsi ke Alice (diselimuti).
  • Alice menggunakan kunci privatnya (dari pasangan privat/publik) untuk mendekripsi kunci konten Bob.
  • Alice menggunakan kunci konten Bob untuk mendekripsi pesan.

Anda dapat menggunakan objek AsymmetricKeyAlgorithmProvider untuk menentukan algoritma asimetris atau algoritma penandatanganan, untuk membuat atau mengimpor pasangan kunci sementara, atau untuk mengimpor bagian kunci publik dari pasangan kunci.

Kunci turunan

Seringkali perlu untuk mendapatkan kunci tambahan dari rahasia bersama. Anda dapat menggunakan kelas KeyDerivationAlgorithmProvider dan salah satu metode khusus berikut di kelas KeyDerivationParameters untuk mendapatkan kunci.

Objek Deskripsi
BuildForPbkdf2 Membuat objek KeyDerivationParameters untuk digunakan dalam fungsi turunan kunci berbasis kata sandi 2 (PBKDF2).
BuildForSP800108 Membuat objek KeyDerivationParameters untuk digunakan dalam mode penghitung, fungsi derivasi kunci kode autentikasi pesan berbasis hash (HMAC).
BuildForSP80056a Membuat objek KeyDerivationParameters untuk digunakan dalam fungsi turunan kunci SP800-56A.