Baca dalam bahasa Inggris

Bagikan melalui


BLOB Kunci Privat DSS Versi 3

Saat kunci privat DSS versi 3 diekspor, kunci tersebut dalam format sebagai berikut:

BLOBHEADER        blobheader; 
DSSPRIVKEY_VER3   dssprivkeyver3;
BYTE p[dssprivkeyver3.bitlenP/8]; 
                    // Where P is the prime modulus
BYTE q[dssprivkeyver3.bitlenQ/8]; 
                    // Where Q is a large factor of P-1
BYTE g[dssprivkeyver3.bitlenP/8]; 
                    // Where G is the generator parameter
BYTE j[dssprivkeyver3.bitlenJ/8]; 
                    // Where J is (P-1)/Q
BYTE y[dssprivkeyver3.bitlenP/8]; 
                    // Where Y is (G^X) mod P
BYTE x[dssprivkeyver3.bitlenX/8]; 
                    // Where X is the private exponent

Format BLOB ini diekspor ketika bendera CRYPT_BLOB_VER3 digunakan dengan CryptExportKey. Karena versinya ada di BLOB, tidak perlu menentukan bendera saat menggunakan BLOB ini dengan CryptImportKey.

Tabel berikut menjelaskan setiap komponen blob kunci.

Bidang Deskripsi
Blobheader Struktur BLOBHEADER . Anggota bType harus memiliki nilai PUBLICKEYBLOB.
Dssprivkeyver3 Struktur DSSPRIVKEY_VER3 . Anggota sihir harus diatur ke "DSS4" (0x34535344) untuk kunci privat. Perhatikan bahwa nilai heksadesimal hanyalah pengodean ASCII dari "DSS4."
P Nilai P terletak langsung setelah struktur DSSPRIVKEY_VER3, dan harus selalu panjangnya, dalam byte, dari bidang bitlenP DSSPRIVKEY_VER3 (panjang bit P) dibagi dengan delapan (format little-endian).
Q Nilai Q terletak langsung setelah nilai P dan harus selalu panjangnya, dalam byte, dari bidang bitlenQ DSSPRIVKEY_VER3 dibagi delapan (format little-endian).
G Nilai G terletak langsung setelah nilai Q dan harus selalu panjangnya, dalam byte, dari bidang bitlenP DSSPRIVKEY_VER3 (panjang bit P) dibagi delapan. Jika panjang data adalah satu atau beberapa byte lebih pendek dari P dibagi 8, data harus diisi dengan byte yang diperlukan (dari nilai nol) untuk membuat data panjang yang diinginkan (format little-endian).
J Nilai J terletak langsung setelah nilai G dan harus selalu panjangnya, dalam byte, dari bidang bitlenJ DSSPRIVKEY_VER3 dibagi delapan (format little-endian). Jika nilai bitlenJ adalah 0, maka nilai tidak ada dari BLOB.
Y Nilai Y, (G^X) mod P, terletak tepat setelah nilai J, dan harus selalu panjangnya, dalam byte, dari bidang bitlenP DSSPRIVKEY_VER3 (panjang bit P) dibagi delapan. Jika panjang data yang dihasilkan dari perhitungan mod P (G^X) adalah satu atau beberapa byte lebih pendek dari P dibagi 8, data harus diisi dengan byte yang diperlukan (dari nilai nol) untuk membuat data panjang yang diinginkan (format little-endian).
X Nilai X adalah bilangan bulat besar acak sehingga bagian publik dari pasangan kunci DH, Y, sama dengan: Y = (G^X) mod P

 

Saat memanggil CryptExportKey, pengembang dapat memilih apakah akan mengenkripsi kunci. Kunci dienkripsi jika parameter hExpKey berisi handel yang valid ke kunci sesi. Semuanya kecuali bagian BLOBHEADER dari BLOB dienkripsi. Perhatikan bahwa algoritma enkripsi dan parameter kunci enkripsi tidak disimpan bersama dengan BLOB kunci privat. Aplikasi harus mengelola dan menyimpan informasi ini. Jika nol diteruskan untuk hExpKey, kunci privat akan diekspor tanpa enkripsi.

Penting

Sangat berbahaya untuk mengekspor kunci privat tanpa enkripsi karena kemudian rentan terhadap penyadapan dan digunakan oleh entitas yang tidak sah.