Bagikan melalui


Penyimpanan dan Pengambilan Kunci

Arsitektur Penyimpanan Kunci

CNG menyediakan model untuk penyimpanan kunci privat yang memungkinkan beradaptasi dengan tuntutan saat ini dan di masa depan untuk membuat aplikasi yang menggunakan fitur kriptografi seperti enkripsi kunci publik atau privat, serta tuntutan penyimpanan materi kunci. Router penyimpanan kunci adalah rutinitas pusat dalam model ini dan diimplementasikan dalam Ncrypt.dll. Aplikasi mengakses penyedia penyimpanan utama (KSP) pada sistem melalui router penyimpanan kunci, yang menyembunyikan detail, seperti isolasi kunci, dari aplikasi dan penyedia penyimpanan itu sendiri. Ilustrasi berikut menunjukkan desain dan fungsi arsitektur isolasi kunci CNG.

penyedia penyimpanan kunci cng

Untuk mematuhi persyaratan kriteria umum (CC), kunci berumur panjang harus diisolasi sehingga tidak pernah ada dalam proses aplikasi. CNG saat ini mendukung penyimpanan kunci privat asimetris dengan menggunakan KSP perangkat lunak Microsoft yang disertakan dengan Windows Server 2008 dan Windows Vista dan diinstal secara default.

Isolasi kunci diaktifkan secara default di Windows Server 2008 dan Windows Vista. Fitur isolasi utama tidak tersedia pada platform sebelum ini. Selain itu, KSP pihak ketiga tidak dimuat dalam layanan isolasi kunci (proses LSA). Hanya Microsoft KSP yang dimuat dalam layanan isolasi kunci.

Proses LSA digunakan sebagai proses isolasi kunci untuk memaksimalkan performa. Semua akses ke kunci privat melewati router penyimpanan kunci, yang mengekspos serangkaian fungsi komprehensif untuk mengelola dan menggunakan kunci privat.

CNG menyimpan bagian publik dari kunci yang disimpan secara terpisah dari bagian privat. Bagian publik dari pasangan kunci juga dipertahankan dalam layanan isolasi kunci dan diakses dengan menggunakan panggilan prosedur jarak jauh lokal (LRPC). Router penyimpanan kunci menggunakan LRPC saat memanggil proses isolasi kunci. Semua akses ke kunci privat melewati router kunci privat dan diaudit oleh CNG.

Seperti yang dijelaskan di atas, berbagai perangkat penyimpanan perangkat keras dapat didukung. Dalam setiap kasus, antarmuka ke semua perangkat penyimpanan ini identik. Ini termasuk fungsi untuk melakukan berbagai operasi kunci privat serta fungsi yang berkaitan dengan penyimpanan dan manajemen utama.

CNG menyediakan sekumpulan API yang digunakan untuk membuat, menyimpan, dan mengambil kunci kriptografi. Untuk daftar API ini, lihat Fungsi Penyimpanan Kunci CNG.

Jenis Kunci

CNG mendukung jenis kunci berikut:

  • Diffie-Hellman kunci publik dan privat.
  • Kunci publik dan privat Algoritma Tanda Tangan Digital (DSA, FIPS 186-2).
  • Kunci publik dan privat RSA (PKCS #1).
  • Beberapa kunci publik dan privat warisan (CryptoAPI).
  • Kurva Elips Kriptografi kunci publik dan privat.

Algoritma yang Didukung

CNG mendukung algoritma kunci berikut.

Algoritma Panjang kunci/hash (bit)
RSA 512 hingga 16384, dalam kenaikan 64 bit
DH 512 hingga 16384, dalam kenaikan 64 bit
DSA 512 hingga 1024, dalam kenaikan 64 bit
ECDSA P-256, P-384, P-521 (Kurva NIST)
ECDH P-256, P-384, P-521 (Kurva NIST)
MD2 128
MD4 128
MD5 128
SHA-1 160
SHA-256 256
SHA-384 384
SHA-512 512

Direktori dan File Utama

CSP CryptoAPI warisan Microsoft menyimpan kunci privat di direktori berikut.

Jenis Kunci Direktori
Privat pengguna %APPDATA%\Microsoft\Crypto\RSA\User SID\
%APPDATA%\Microsoft\Crypto\DSS\User SID\
Sistem lokal privat %ALLUSERSPROFILE%\Application Data\Microsoft\Crypto\RSA\S-1-5-18\
%ALLUSERSPROFILE%\Application Data\Microsoft\Crypto\DSS\S-1-5-18\
Layanan privat lokal %ALLUSERSPROFILE%\Application Data\Microsoft\Crypto\RSA\S-1-5-19\
%ALLUSERSPROFILE%\Application Data\Microsoft\Crypto\DSS\S-1-5-19\
Layanan jaringan privat %ALLUSERSPROFILE%\Application Data\Microsoft\Crypto\RSA\S-1-5-20\
%ALLUSERSPROFILE%\Application Data\Microsoft\Crypto\DSS\S-1-5-20\
Privat bersama %ALLUSERSPROFILE%\Application Data\Microsoft\Crypto\RSA\MachineKeys
%ALLUSERSPROFILE%\Application Data\Microsoft\Crypto\DSS\MachineKeys

CNG menyimpan kunci privat di direktori berikut.

Jenis Kunci Directory
Privat pengguna %APPDATA%\Microsoft\Crypto\Keys
Sistem lokal privat %ALLUSERSPROFILE%\Application Data\Microsoft\Crypto\SystemKeys
Layanan privat lokal %WINDIR%\ServiceProfiles\LocalService
Layanan jaringan privat %WINDIR%\ServiceProfiles\NetworkService
Privat bersama %ALLUSERSPROFILE%\Application Data\Microsoft\Crypto\Keys

Berikut ini adalah beberapa perbedaan antara kontainer kunci CryptoAPI dan CNG.

  • CNG menggunakan nama file yang berbeda untuk file kunci daripada file kunci yang dibuat oleh Rsaenh.dll dan Dssenh.dll CSP warisan. File kunci warisan juga memiliki ekstensi .key, tetapi file kunci CNG tidak memiliki ekstensi .key.
  • CNG sepenuhnya mendukung nama kontainer kunci Unicode; CNG menggunakan hash nama kontainer Unicode, sedangkan CryptoAPI menggunakan hash nama kontainer ANSI.
  • CNG lebih fleksibel sehubungan dengan pasangan kunci RSA. Misalnya, CNG mendukung eksponen publik yang lebih besar dari 32-bit panjangnya, dan mendukung kunci di mana p dan q memiliki panjang yang berbeda.
  • Di CryptoAPI, file kontainer kunci disimpan dalam direktori yang namanya setara dengan SID pengguna. Ini tidak lagi terjadi di CNG, yang menghapus kesulitan memindahkan pengguna dari satu domain ke domain lain tanpa kehilangan semua kunci privat mereka.
  • KSP CNG dan nama kunci terbatas pada MAX_PATH karakter Unicode. CSP CryptoAPI dan nama kunci terbatas pada MAX_PATH karakter ANSI.
  • CNG menawarkan kemampuan properti kunci yang ditentukan pengguna. Pengguna dapat membuat dan mengaitkan properti kustom dengan kunci, dan menyimpannya dengan kunci yang bertahan.

Saat mempertahankan kunci, CNG dapat membuat dua file. File pertama berisi kunci privat dalam format CNG baru dan selalu dibuat. File ini tidak dapat digunakan oleh CSP CryptoAPI warisan. File kedua berisi kunci privat yang sama dalam kontainer kunci CryptoAPI warisan. File kedua sesuai dengan format dan lokasi yang digunakan oleh Rsaenh.dll. Pembuatan file kedua hanya terjadi jika bendera NCRYPT_WRITE_KEY_TO_LEGACY_STORE_FLAG ditentukan ketika fungsi NCryptFinalizeKey dipanggil untuk menyelesaikan kunci RSA. Fitur ini tidak didukung untuk kunci DSA dan DH.

Ketika aplikasi mencoba membuka kunci persisten yang ada, CNG terlebih dahulu mencoba membuka file CNG asli. Jika file ini tidak ada, CNG mencoba menemukan kunci yang cocok dalam kontainer kunci KriptoAPI warisan.

Saat Anda memindahkan atau menyalin kunci CryptoAPI dari komputer sumber ke komputer target dengan Alat Migrasi Status Pengguna (USMT) Windows, CNG akan gagal mengakses kunci pada komputer target. Untuk mengakses kunci yang dimigrasikan tersebut, Anda harus menggunakan CryptoAPI.