Bagikan melalui


Membuat dan menggunakan rakitan dengan nama yang kuat

Nama yang kuat terdiri dari identitas assembly—nama teks sederhana, nomor versi, dan informasi budayanya (jika disediakan)—ditambah kunci publik dan tanda tangan digital. Ini dihasilkan dari file assembly menggunakan kunci privat yang sesuai. (File assembly berisi manifes assembly, yang berisi nama dan hash dari semua file yang membentuk assembly.)

Peringatan

Jangan mengandalkan nama yang kuat untuk keamanan. Nama yang kuat hanya memberikan identitas unik.

Assembly dengan nama yang kuat hanya dapat menggunakan jenis dari assembly dengan nama yang kuat lainnya. Jika tidak, integritas assembly bernama kuat akan dikrompomikan.

Catatan

Meskipun .NET Core mendukung assembly bernama kuat, dan semua assembly di pustaka .NET Core ditandatangani, sebagian besar assembly pihak ketiga tidak memerlukan nama yang kuat. Untuk informasi selengkapnya, lihat Penandatanganan nama yang kuat GitHub.

Skenario nama yang kuat

Skenario berikut menguraikan proses penandatanganan assembly dengan nama yang kuat dan kemudian merujuknya dengan nama tersebut.

  1. Assembly A dibuat dengan nama yang kuat menggunakan salah satu metode berikut:

    • Menggunakan lingkungan pengembangan yang mendukung pembuatan nama yang kuat, seperti Visual Studio.

    • Membuat pasangan kunci kriptografi menggunakan alat Nama Kuat (Sn.exe) dan menetapkan pasangan kunci tersebut ke assembly menggunakan pengkompilasi baris perintah atau Assembly Linker (Al.exe). SDK Windows menyediakan baik Sn.exe maupun Al.exe.

  2. Lingkungan pengembangan atau alat menandatangani hash file yang berisi manifes assembly dengan kunci privat pengembang. Tanda tangan digital ini disimpan dalam file portable executable (PE) yang berisi manifes Assembly A.

  3. Assembly B adalah konsumen Assembly A. Bagian referensi manifes Assembly B menyertakan token yang mewakili kunci publik Assembly A. Token adalah bagian dari kunci publik lengkap dan digunakan daripada kunci itu sendiri untuk menghemat ruang.

  4. Runtime bahasa umum memverifikasi tanda tangan nama yang kuat ketika assembly ditempatkan di singgahan perakitan global. Saat mengikat dengan nama yang kuat pada waktu proses, runtime bahasa umum membandingkan kunci yang disimpan dalam manifes Assembly B dengan kunci yang digunakan untuk menghasilkan nama yang kuat untuk Assembly A. Jika pemeriksaan keamanan .NET lolos dan pengikatan berhasil, Assembly B memiliki jaminan bahwa bit Assembly A belum diubah dan bahwa bit ini benar-benar berasal dari pengembang Assembly A.

Catatan

Skenario ini tidak mengatasi masalah kepercayaan. Assembly dapat membawa tanda tangan Microsoft Kode autentikasi lengkap selain nama yang kuat. Tanda tangan Kode autentikasi menyertakan sertifikat yang membangun kepercayaan. Penting untuk dicatat bahwa nama yang kuat tidak memerlukan kode untuk masuk dengan cara ini. Nama yang kuat hanya memberikan identitas unik.

Melewati verifikasi tanda tangan assembly tepercaya

Dimulai dengan Paket Layanan .NET Framework 3.5 1, tanda tangan nama kuat tidak divalidasi ketika assembly dimuat ke dalam domain aplikasi kepercayaan penuh, seperti domain aplikasi default untuk zona tersebutMyComputer. Ini disebut sebagai fitur bypass nama yang kuat. Dalam lingkungan kepercayaan penuh, tuntutan untuk StrongNameIdentityPermission selalu berhasil untuk assembly kepercayaan penuh yang ditandatangani, terlepas dari tanda tangan mereka. Fitur bypass nama yang kuat menghindari overhead yang tidak perlu dari verifikasi tanda tangan nama yang kuat dari assembly kepercayaan penuh dalam situasi ini, memungkinkan assembly dimuat lebih cepat.

Fitur lewatan berlaku untuk setiap rakitan yang ditandatangani dengan nama kuat dan yang memiliki karakteristik berikut:

  • Sepenuhnya dipercaya tanpa StrongName bukti (misalnya, memiliki MyComputer bukti zona).

  • Dimuat ke AppDomain yang sepenuhnya dipercaya.

  • Dimuat dari lokasi di bawah properti ApplicationBase dari AppDomain tersebut.

  • Tidak penundaan penandatanganan.

Fitur ini dapat dinonaktifkan untuk aplikasi individual atau untuk komputer. Lihat Cara: Menonaktifkan fitur bypass nama yang kuat.

Judul Deskripsi
Cara: Membuat pasangan kunci umum-privat Menjelaskan cara membuat pasangan kunci kriptografi untuk menandatangani assembly.
Cara untuk: Menandatangani assembly dengan nama yang kuat Menjelaskan cara membuat assembly bernama kuat.
Penamaan kuat yang ditingkatkan Menjelaskan penyempurnaan nama yang kuat dalam .NET Framework 4.5.
Cara untuk: Mereferensikan pada assembly yang bernama kuat Menjelaskan cara mereferensikan jenis atau sumber daya dalam assembly bernama kuat pada waktu kompilasi atau durasi.
Cara: Menonaktifkan fitur bypass nama yang kuat Menjelaskan cara menonaktifkan fitur yang melewati validasi tanda tangan nama yang kuat. Fitur ini dapat dinonaktifkan untuk semua atau untuk aplikasi tertentu.
Buat perakitan Menyediakan gambaran umum rakitan file tunggal dan multifile.
Cara menunda menandatangani assembly di Visual Studio Menjelaskan cara menandatangani assembly dengan nama yang kuat setelah assembly telah dibuat.
Sn.exe (Alat Nama Kuat) Menjelaskan alat yang disertakan dalam .NET Framework yang membantu membuat assembly dengan nama yang kuat. Alat ini menyediakan opsi untuk manajemen kunci, pembuatan tanda tangan, dan verifikasi tanda tangan.
Al.exe (Assembly Linker) Menjelaskan alat yang disertakan dalam .NET Framework yang menghasilkan file yang memiliki manifes assembly dari modul atau file sumber daya.