DSS Sürüm 3 Ortak Anahtar BLOB'ları
PUBLICKEYBLOB türünde DSS sürüm 3 Ortak Anahtar BLOB'ları, DH ortak anahtarı hakkındaki bilgileri dışarı ve içeri aktarmak için kullanılır. Bunlar aşağıdaki biçime sahiptir:
BLOBHEADER blobheader;
// As explained under "Data Structures"
DSSPUBKEY_VER3 dsspubkeyver3;
BYTE p[dsspubkeyver3.bitlenP/8];
// Where P is the prime modulus
BYTE q[dsspubkeyver3.bitlenQ/8];
// Where Q is a large factor of P-1
BYTE g[dsspubkeyver3.bitlenP/8];
// Where G is the generator parameter
BYTE j[dsspubkeyver3.bitlenJ/8];
// Where J is (P-1)/Q
BYTE y[dsspubkeyver3.bitlenP/8];
// Where Y is (G^X) mod P
bu BLOB biçimi, CRYPT_BLOB_VER3 bayrağı CryptExportKeyile kullanıldığında dışarı aktarılır. Sürüm BLOB'da olduğundan, bu BLOB'u CryptImportKeyile kullanırken bir bayrak belirtmeniz gerekmez.
Ayrıca bu BLOB biçimi, DSS anahtarında anahtar parametrelerini ayarlamak için dwParam değeri KP_PUB_PARAMS kullanıldığında CryptSetKeyParam işleviyle birlikte kullanılır. Anahtarı oluşturmak için CRYPT_PREGEN bayrağı kullanıldığında bu yapılır. Bu durumda kullanıldığında, y değeri yoksayılır ve bu nedenle BLOB'a dahil edilmemelidir.
Aşağıdaki tabloda anahtar BLOB'un her bileşeni açıklanmaktadır.
Alan | Açıklama |
---|---|
Blobheader | BLOBHEADER yapısı. bType üyesi PUBLICKEYBLOB değerine sahip olmalıdır. |
Dsspubkeyver3 |
DSSPUBKEY_VER3 bir yapı.
sihirli üyesi ortak anahtarlar için "DSS3" (0x33535344) olarak ayarlanmalıdır. Onaltılık değerin yalnızca "DSS3" bir ASCII kodlaması olduğuna dikkat edin. |
P | P değeri doğrudan DSSPUBKEY_VER3 yapısından sonra bulunur ve her zaman DSSPUBKEY_VER3 bitlenP alanının (P'nin bit uzunluğu) sekize bölünen uzunluğu (küçük endian biçimi) bayt cinsinden olmalıdır. |
Q | Q değeri doğrudan P değerinden sonra bulunur ve her zaman DSSPUBKEY_VER3bitlenQ üyesinin bayt cinsinden uzunluğu sekize bölünmelidir (küçük endian biçimi). |
G | G değeri doğrudan Q değerinden sonra bulunur ve her zaman DSSPUBKEY_VER3bitlenP üyesinin (P bit uzunluğu) sekize bölünen uzunluğu bayt cinsinden olmalıdır. Verilerin uzunluğu P'nin 8'e bölünmesinden bir veya daha fazla bayt daha kısaysa, verilerin istenen uzunlukta (küçük endian biçimi) olması için gerekli baytlarla (sıfır değer) doldurulması gerekir. |
J | J değeri doğrudan G değerinden sonra bulunur ve her zaman DSSPUBKEY_VER3bitlenJ üyesinin bayt cinsinden uzunluğu sekize bölünmelidir (little-endian biçimi). BitlenQ değeri 0 ise, değer BLOB'da yoktur. |
Y | Y değeri (G^X) mod P, J değerinin hemen ardından bulunur ve her zaman DSSPUBKEY_VER3bitlenP üyesinin (P bit uzunluğu) sekize bölünen uzunluğu bayt cinsinden olmalıdır. (G^X) mod P hesaplamasından kaynaklanan verilerin uzunluğu P'nin 8'e bölünmesinden bir veya daha fazla bayt daha kısaysa, verilerin istenen uzunlukta (küçük endian biçimi) olması için gerekli baytlarla (sıfır değer) doldurulması gerekir.
Not: Bu yapı KP_PUB_PARAMS dwParam değeriyle CryptSetKeyParam kullanıldığında, bu değer BLOB'a dahil değildir. |
Not
Ortak anahtar BLOB'ları şifrelenmez, ancak düz metin biçiminde ortak anahtarlar içerir.