Bagikan melalui


Kunci DSS

Menghasilkan dan Mengambil Kunci DSS

Kunci DSS dapat dihasilkan oleh panggilan ke fungsi CryptGenKey . Panggilan ke CryptGenKey mengharuskan AT_SIGNATURE atau CALG_DSS_SIGN diteruskan dalam argumen Algid . Panggilan ini akan menghasilkan nilai P (modulus utama), Q (prime), G (generator), X (eksponen rahasia), dan Y (kunci publik) dari awal dan mempertahankannya dalam BLOB kunci ke penyimpanan lokal.

Untuk menghasilkan pasangan kunci tanda tangan DSS

  1. Panggil fungsi CryptAcquireContext untuk menangani Penyedia Kriptografi Microsoft DSS.
  2. Panggil CryptGenKey untuk menghasilkan kunci. Baik AT_SIGNATURE atau CALG_DSS_SIGN harus diteruskan untuk argumen Algid dan 16 bit atas argumen dwFlags harus diatur ke ukuran kunci yang diinginkan. Jika 16 bit atas nol, maka ukuran kunci default 1.024 bit akan digunakan. Handel HCRYPTKEY dikembalikan dalam argumen hKey .

Untuk mengambil pointer ke kunci tanda tangan yang dibuat sebelumnya

  1. Panggil CryptAcquireContext untuk menangani Penyedia Kriptografi Microsoft DSS.
  2. Panggil fungsi CryptGetUserKey dengan argumen dwKeySpec diatur ke AT_SIGNATURE atau CALG_DSS_SIGN.

Untuk mengambil nilai P, Q, dan G

  1. Panggil CryptAcquireContext untuk menangani Penyedia Kriptografi Microsoft DSS.
  2. Panggil CryptGetUserKey dengan argumen dwKeySpec diatur ke AT_SIGNATURE atau CALG_DSS_SIGN.
  3. Panggil CryptGetKeyParam dengan argumen hKey diatur ke penunjuk yang diambil pada langkah sebelumnya. Argumen dwParam harus diatur ke bendera yang diinginkan; KP_P, KP_Q, atau KP_G. Nilai dikembalikan dalam argumen pbData , dan panjang data dikembalikan dalam argumen pdwDataLen . Nilai dikembalikan tanpa informasi header dan dalam format little-endian .

Menghasilkan Tanda Tangan DSS

Data yang akan ditandatangani harus terlebih dahulu di-hash dengan menggunakan algoritma SHA . Setelah data di-hash, tanda tangan DSS dihasilkan dengan memanggil fungsi CryptSignHash .

Untuk menghasilkan tanda tangan DSS

  1. Panggil CryptAcquireContext untuk menangani Penyedia Kriptografi Microsoft DSS.
  2. Panggil CryptCreateHash dengan argumen Algid diatur ke CALG_SHA untuk mendapatkan handel ke objek hash SHA.
  3. Panggil CryptHashData dengan argumen hHash diatur ke handel yang diambil pada langkah sebelumnya. Ini membuat hash data dan mengembalikan handel ke hash dalam argumen phHash dari panggilan fungsi CryptCreateHash .
  4. Panggil CryptSignHash dengan argumen hHash diatur ke handel yang diambil pada langkah sebelumnya. Baik AT_SIGNATURE atau CALG_DSS_SIGN dapat diteruskan dalam parameter dwKeySpec . Tanda tangan dikembalikan ke alamat yang disediakan dalam argumen pbSignature , dan panjang tanda tangan dikembalikan ke alamat yang disediakan dalam argumen pdwSigLen . Penunjuk NULL dapat diteruskan dalam argumen pbSignature , dan, dalam hal ini, tanda tangan tidak dihasilkan, tetapi panjang tanda tangan dikembalikan ke alamat yang disediakan dalam parameter pdwSigLen .

Memverifikasi Tanda Tangan DSS

Untuk memverifikasi tanda tangan DSS, kunci publik DSS penanda tangan harus diimpor, data yang ditandatangani harus di-hash, lalu tanda tangan dapat diverifikasi.

Untuk memverifikasi tanda tangan DSS

  1. Panggil CryptAcquireContext untuk menangani Penyedia Kriptografi Microsoft DSS.

  2. Panggil CryptImportKey untuk mengimpor kunci umum DSS penanda tangan.

  3. Panggil CryptCreateHash dengan argumen Algid diatur ke CALG_SHA untuk mendapatkan handel ke objek hash SHA.

  4. Panggil CryptHashData dengan argumen hHash diatur ke handel yang diambil pada langkah sebelumnya dan dengan pbData menunjuk ke data yang ditandatangani. Ini membuat hash data dan mengembalikan handel ke hash dalam argumen phHash dari panggilan fungsi CryptCreateHash .

  5. Panggil CryptVerifySignature dengan pengaturan berikut:

    hHash diatur ke handel ke hash yang dilakukan pada langkah sebelumnya.

    pbSignature menunjuk ke tanda tangan yang akan diverifikasi.

    dwSigLen diatur ke panjang tanda tangan.

    hPubKey diatur ke handel kunci publik yang diimpor di langkah 2.

    dwFlags diatur ke nol.

Mengekspor Kunci DSS

Saat Anda mengirim data yang ditandatangani kepada seseorang di mana tanda tangan perlu diverifikasi oleh penerima, kunci publik penanda tangan harus diberikan kepada penerima dan biasanya dikirim bersama dengan data yang ditandatangani. Oleh karena itu, perlu untuk dapat mengekspor kunci DSS dalam format BLOB kunci .

Untuk mengekspor kunci publik DSS

  1. Panggil CryptAcquireContext untuk menangani Penyedia Kriptografi Microsoft DSS.
  2. Panggil CryptGetUserKey dengan argumen dwKeySpec diatur ke AT_SIGNATURE atau CALG_DSS_SIGN.
  3. Panggil CryptExportKey dengan hKey diatur ke handel yang diambil pada langkah sebelumnya, dwBlobType diatur ke PUBLICKEYBLOB, dan dwFlags diatur ke nol. BLOB kunci umum DSS dikembalikan dalam pbData, dan panjang BLOB kunci dikembalikan dalam pdwDataLen. Penunjuk NULL dapat diteruskan dalam pbData, dan, dalam hal ini, hanya panjang BLOB kunci DSS yang akan dikembalikan. BLOB yang dikembalikan saat melakukan panggilan ke CryptExportKey dalam format yang dijelaskan dalam Blob Kunci Penyedia DSS.

Untuk mengekspor kunci privat DSS

  • Ikuti prosedur yang sama seperti untuk mengekspor kunci umum DSS, kecuali saat melakukan panggilan ke CryptExportKey, dwBlobType diatur ke PRIVATEKEYBLOB. BLOB yang dikembalikan saat melakukan panggilan ke CryptExportKey dalam format yang dijelaskan dalam Blob Kunci Penyedia DSS.