Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Artikel ini menunjukkan cara menggunakan fungsi derivasi kunci standar untuk mendapatkan kunci dan cara mengenkripsi konten menggunakan kunci simetris dan asimetris.
Kunci simetris
Enkripsi kunci simetris, 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 operasi 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 tersebut tidak pernah digunakan kembali dengan kunci yang sama.
- Tetap menggunakan IV yang sama untuk semua pesan-pesan yang akan dienkripsi. Ini membocorkan informasi dan penggunaannya tidak disarankan.
- Penghitung menaikkan IV untuk setiap blok.
- Fungsi Acak menghasilkan IV pseudorandom. 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 harus dipastikan tidak pernah digunakan kembali dengan kunci yang sama.
Sebagian besar mode mengharuskan panjang teks biasa menjadi kelipatan yang tepat dari ukuran blok. Ini biasanya mengharuskan Anda mengisi teks asli 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. Namun, sandi aliran aktual seperti RC4 biasanya beroperasi pada kecepatan yang lebih tinggi daripada mode sandi blok yang dapat dicapai.
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 publik 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 tertarik 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, menyimpan kunci privatnya dengan rahasia 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 publik Alice untuk mengenkripsi kunci simetrisnya.
- Bob mengirim pesan terenkripsi dan kunci simetris terenkripsi ke Alice (dalam amplop).
- Alice menggunakan kunci privatnya (dari pasangan privat/publik) untuk mendekripsi kunci simetrik Bob.
- Alice menggunakan kunci simetris 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.
Mengambil kunci
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 derivasi 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 derivasi kunci SP800-56A. |
Windows developer