Bagikan melalui


Blob Kunci Privat Diffie-Hellman Versi 3

Ketika BLOB kunci privat Diffie-Hellman versi 3 diekspor, blob tersebut dalam format sebagai berikut:

BLOBHEADER        blobheader;
DHPRIVKEY_VER3   dhprivkeyver3;
BYTE p[dhprivkeyver3.bitlenP/8]; 
            // Where P is the prime modulus
BYTE q[dhprivkeyver3.bitlenQ/8]; 
            // Where Q is a large factor of P-1
BYTE g[dhprivkeyver3.bitlenP/8]; 
            // Where G is the generator parameter
BYTE j[dhprivkeyver3.bitlenJ/8]; 
            // Where J is (P-1)/Q
BYTE y[dhprivkeyver3.bitlenP/8]; 
            // Where Y is (G^X) mod P
BYTE x[dhprivkeyver3.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 .
dhprivkeyver3 Struktur DHPRIVKEY_VER3 . Anggota sihir harus diatur ke 0x34484400 untuk kunci privat. Perhatikan bahwa nilai heksadesimal hanyalah pengodean ASCII "DH4".
P Nilai P terletak langsung setelah struktur DHPRIVKEY_VER3, dan harus selalu panjang dalam byte bidang bitlenP DHPRIVKEY_VER3 (panjang bit P) dibagi delapan (format little-endian).
Q Nilai Q terletak langsung setelah nilai P dan harus selalu panjang dalam byte bidang bitlenQ DHPRIVKEY_VER3 dibagi delapan (format little-endian). Jika nilai bitlenQ adalah 0, maka nilai tidak ada dari BLOB.
G Nilai G terletak langsung setelah nilai Q dan harus selalu panjang dalam byte bidang bitlenP DHPRIVKEY_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 panjang dalam byte bidang bitlenJ DHPRIVKEY_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 panjang dalam byte bidang bitlenP DHPRIVKEY_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.

Catatan

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