Bagikan melalui


Tanda Tangan Authenticode Stempel Waktu

Tanda tangan Microsoft Authenticode memberikan jaminan otorisasi dan integritas untuk data biner. Stempel waktu Authenticode didasarkan pada pencitraan PKCS #7 standar. Alat penandatanganan dari Microsoft memungkinkan pengembang untuk membubuhkan stempel waktu secara bersamaan saat mereka membubuhkan tanda tangan Authenticode. Stempel waktu memungkinkan tanda tangan Authenticode dapat diverifikasi bahkan setelah sertifikat yang digunakan untuk tanda tangan telah kedaluwarsa.

Pengantar Singkat authenticode

Authenticode menerapkan teknologi tanda tangan digital untuk menjamin kewenangan dan integritas data biner seperti perangkat lunak yang dapat diinstal. Browser web klien, atau komponen sistem lainnya, dapat menggunakan tanda tangan Authenticode untuk memverifikasi integritas data saat perangkat lunak diunduh atau diinstal. Tanda tangan Authenticode dapat digunakan dengan banyak format perangkat lunak, termasuk .cab, .exe, .ocx, dan .dll.

Microsoft mempertahankan daftar otoritas sertifikasi publik (CA). Penerbit sertifikat Authenticode saat ini termasuk SSL.com, Digicert, Sectigo(Comodo), dan GlobalSign.

Tentang Pencapaian Waktu Kriptografi

Di masa lalu, berbagai metode stempel waktu kriptografi telah diusulkan. Lihat, misalnya, Haber dan Stornetta "Cara Time-Stamp Dokumen Digital" dalam Jurnal Kriptologi (1991) dan Benaloh dan de Mare "Akumulator Satu Arah: Alternatif Terdesentralisasi untuk Tanda Tangan Digital" dalam Catatan Kuliah Springer-Verlag dalam Ilmu Komputer vol. 765 (EUROCRYPT '93). Abstrak yang diperluas dari artikel ini tersedia dari Microsoft Research. (Sumber daya ini mungkin tidak tersedia di beberapa bahasa dan negara atau wilayah.) Karena waktu adalah fisik, bukan matematika, kuantitas, metode ini umumnya menyangkut cara menautkan objek sehingga urutan pembuatannya dapat ditentukan atau bagaimana mengelompokkan objek secara efisien yang semuanya dapat digambarkan sebagai telah dibuat secara bersamaan.

Sistem yang sesuai untuk mengautentikasi waktu sebagai kuantitas selalu memerlukan beberapa bentuk kepercayaan. Dalam pengaturan yang sangat adversarial, protokol kompleks dapat digunakan untuk memastikan beberapa tingkat sinkronisasi. Namun, protokol ini memerlukan interaksi ekstensif antara pihak yang terpengaruh. Dalam praktiknya, jika seseorang hanya membutuhkan sertifikasi waktu dari sumber tepercaya, sumber hanya dapat bertindak sebagai notaris dengan memberikan pernyataan yang ditandatangani (sertifikasi) bahwa objek disajikan untuk tanda tangan pada waktu yang ditunjukkan.

Metode penandatanganan tanda waktu yang diterapkan di bawah ini memungkinkan tanda tangan diverifikasi bahkan setelah sertifikat penandatanganan kedaluwarsa atau dicabut. Stempel waktu memungkinkan pemverifikasi untuk mengetahui dengan andal waktu tanda tangan ditempelkan dan dengan demikian mempercayai tanda tangan jika valid pada saat itu. Stempel waktu harus memiliki sumber waktu yang andal dan terlindungi.

PKCS #7 Dokumen dan Countersignature yang Ditandatangani

PKCS #7 adalah format standar untuk data kriptografi, termasuk data yang ditandatangani, sertifikat, dan daftar pencabutan sertifikat (CRL). Jenis PKCS #7 tertentu yang menarik dalam konteks penandatanganan waktu adalah data yang ditandatangani, sesuai dengan jenis konten PKCS #7 SignedData yang ditentukan.

Paket PKCS #7 terdiri dari SignedData yang mengidentifikasi konten aktual dan informasi tertentu tentangnya dan blok tanda tangan SignerInfo. SignerInfo mungkin sendiri berisi countersignature, yang secara rekursif adalah SignerInfo lain. Pada prinsipnya, urutan countersignature tersebut mungkin ada. Countersignature adalah atribut yang tidak diaauthenticated sehubungan dengan tanda tangan di SignerInfo; artinya, mungkin ditempelkan berikutnya ke tanda tangan asli. Dalam bentuk kerangka:

SignedData (PKCS #7)

  • Versi (PKCS #7, umumnya versi 1)
  • DigestAlgorithms (kumpulan semua algoritma yang digunakan oleh blok tanda tangan SignerInfo, untuk pemrosesan yang dioptimalkan)
  • ContentInfo (contentType sama dengan SignedData, ditambah konten atau referensi ke konten)
  • Sertifikat OPSIONAL (kumpulan semua sertifikat yang digunakan)
  • CRL OPSIONAL (kumpulan semua CRL)
  • Blok tanda tangan SignerInfo (tanda tangan aktual, terdiri dari satu atau beberapa blok tanda tangan SignerInfo)

SignerInfo (blok tanda tangan)

  • Versi (PKCS #7, umumnya versi 1)
  • Sertifikat (penerbit dan nomor seri untuk mengidentifikasi sertifikat penanda tangan secara unik di SignedData)
  • DigestAlgorithm ditambah DigestEncryptionAlgorithm ditambah Digest (hash), ditambah EncryptedDigest (tanda tangan aktual)
  • AuthenticatedAttributes OPSIONAL (misalnya, ditandatangani oleh penanda tangan ini)
  • OPSIONAL UnauthenticatedAttributes (misalnya, tidak ditandatangani oleh penanda tangan ini)

Contoh atribut terautentikasi adalah waktu penandatanganan (OID 1.2.840.113549.1.9.5) karena merupakan bagian dari tanda layanan stempel waktu. Contoh atribut yang tidak diautentikasi adalah countersignature (OID 1.2.840.113549.1.9.6) karena dapat ditempur setelah penandatanganan. Dalam hal ini, SignerInfo sendiri berisi SignerInfo (Countersignature).

Catatan

Objek yang masuk dalam countersignature adalah tanda tangan asli (yaitu EncryptedDigest dari SignerInfo asli).

 

SignTool dan Proses Authenticode

SignTool tersedia untuk penandatanganan Authenticode dan data biner stempel waktu. Alat ini diinstal di folder \Bin dari jalur penginstalan Microsoft Windows Software Development Kit (SDK).

Penandatanganan dan penandatanganan waktu data biner relatif mudah menggunakan SignTool. Penerbit harus mendapatkan sertifikat penandatanganan kode dari CA penandatanganan kode komersial. Untuk kenyamanan, Microsoft menerbitkan dan memperbarui daftar CA publik, termasuk yang menerbitkan sertifikat Authenticode. Ketika siap untuk diterbitkan, file objek ditandatangani dan waktu ditandai menggunakan parameter baris perintah yang sesuai dengan alat SignTool. Hasil dari operasi SignTool apa pun selalu merupakan format PKCS #7 SignedData.

SignTool menerima sebagai input data biner mentah yang akan ditandatangani dan diberi stempel waktu, atau data biner yang ditandatangani sebelumnya untuk diberi stempel waktu. Data yang sebelumnya telah ditandatangani dapat diberi stempel waktu dengan menggunakan perintah tanda waktu signtool .

Argumen Deskripsi
/tHTTPAddress Menunjukkan bahwa file akan diberi stempel waktu. URL yang menentukan alamat server stempel waktu harus disediakan. /t dapat digunakan dengan perintah tanda signtool dan tanda waktu signtool .

 

Untuk informasi selengkapnya tentang alat yang mungkin berguna dalam konteks ini, lihat Alat Kriptografi dan SignTool.

Detail Implementasi dan Format Kawat

SignTool mengandalkan implementasi Windows Authenticode untuk membuat dan tanda tangan stempel waktu. Authenticode beroperasi pada file biner, misalnya .cab, .exe, .dll, atau .ocx. Authenticode pertama-tama membuat tanda tangan, menghasilkan PKCS #7 SignedData. SignedData inilah yang harus ditandatangani, seperti yang dijelaskan dalam PKCS #9.

Proses countersignature berlangsung dalam empat langkah:

  1. Salin tanda tangan (yaitu, encryptedDigest) dari SignerInfo dari PKCS #7 SignedData.
  2. Buat permintaan stempel waktu yang kontennya adalah tanda tangan asli. Kirim ini ke server stempel waktu Abstract Syntax Notation One (ASN.1) yang dikodekan sebagai TimeStampRequest.
  3. Menerima stempel waktu, diformat sebagai PKCS #7 SignedData kedua, dikembalikan dari server stempel waktu.
  4. Salin SignerInfo dari stempel waktu langsung ke PKCS #7 SignedData asli, sebagai countersignature PKCS #9 (yaitu, atribut yang tidak diautentikasi di SignerInfo asli).

Permintaan Stempel Waktu

Permintaan stempel waktu dikirim dalam pesan HTTP 1.1 POST. Di header HTTP, direktif CacheControl diatur ke no-cache, dan direktif Content-Type diatur ke application/octet-stream. Isi pesan HTTP adalah pengodean base64 dari pengodean Distinguished Encoding Rules (DER) dari permintaan stempel waktu.

Meskipun saat ini tidak digunakan, arahan Content-Length juga harus digunakan dalam membangun pesan HTTP karena membantu server stempel waktu menemukan di mana permintaan berada dalam HTTP POST.

Header HTTP lainnya mungkin juga ada dan harus diabaikan jika tidak dipahami oleh pemohon atau server stempel waktu.

Permintaan stempel waktu adalah pesan berkode ASN.1. Format permintaan adalah sebagai berikut.

TimeStampRequest ::= SEQUENCE {
   countersignatureType OBJECT IDENTIFIER,
   attributes Attributes OPTIONAL, 
   content  ContentInfo
}

CountersignatureType adalah pengidentifikasi objek (OID) yang mengidentifikasi ini sebagai tanda waktu countersignature dan harus OID yang tepat 1.3.6.1.4.1.311.3.2.1.

Saat ini tidak ada atribut yang disertakan dalam permintaan stempel waktu.

Konten adalah ContentInfo seperti yang didefinisikan oleh PKCS #7. Konten adalah data yang akan ditandatangani. Untuk stempel waktu tanda tangan, ContentType harus Data, dan kontennya harus berupa encryptedDigest (tanda tangan) dari SignerInfo dari konten PKCS #7 yang akan diberi stempel waktu.

Respons Stempel Waktu

Respons stempel waktu juga dikirim dalam pesan HTTP 1.1. Di header HTTP, arahan Content-Type juga diatur ke application/octet-stream. Isi pesan HTTP adalah pengodean base64 dari pengodean DER dari respons stempel waktu.

Respons stempel waktu adalah pesan bertanda tangan PKCS #7 yang ditandatangani oleh stempel waktu. ContentInfo dari pesan PKCS #7 identik dengan ContentInfo yang diterima dalam stempel waktu. Konten PKCS #7 berisi atribut autentikasi waktu penandatanganan (ditentukan dalam PKCS #99, OID 1.2.840.113549.9.5).

Setelah Authenticode menerima stempel waktu dari server, Authenticode memasukkan stempel waktu ke dalam PKCS #7 SignedData asli sebagai countersignature. Untuk mencapai hal ini, ContentInfo dari PKCS #7 SignedData yang dikembalikan dibuang, dan SignerInfo dari stempel waktu yang dikembalikan disalin sebagai penandatangan ke signerInfo dari PKCS #7 SignedData asli. Rantai sertifikat stempel waktu juga disalin ke dalam Sertifikat di PKCS #7 SignedData asli sebagai atribut yang tidak diautentikasi dari penanda tangan asli.