Bagikan melalui


Opsi kompilator C# untuk keamanan

Opsi berikut mengontrol opsi keamanan kompilator. Sintaksis MSBuild baru ditampilkan dalam Huruf tebal. Sintaks csc.exe yang lebih lama ditampilkan dalam huruf code style.

  • PublicSign / -publicsign: Menandatangani perakitan secara publik.
  • DelaySign / -delaysign: Menunda penandatanganan perakitan hanya menggunakan bagian publik dari kunci nama yang kuat.
  • KeyFile / -keyfile: Menentukan file kunci nama yang kuat.
  • KeyContainer / -keycontainer: Menentukan kontainer kunci nama yang kuat.
  • HighEntropyVA / -highentropyva: Mengaktifkan Pengacakan Tata Letak Ruang Alamat (ASLR) entropi tinggi

PublicSign

Opsi ini menyebabkan kompilator menerapkan kunci publik tetapi tidak benar-benar menandatangani perakitan. Opsi PublicSign juga mengatur sedikit di perakitan yang memberi tahu runtime bahwa file tersebut sudah ditandatangani.

<PublicSign>true</PublicSign>

Opsi PublicSign memerlukan penggunaan opsi KeyFile atau KeyContainer. Opsi KeyFile dan KeyContainer menentukan kunci publik. Opsi PublicSign dan DelaySign bersifat eksklusif satu sama lain. Kadang-kadang disebut "tanda tangan palsu" atau "tanda OSS", penandatanganan publik menyertakan kunci publik dalam perakitan output dan menetapkan bendera "ditandatangani". Penandatanganan publik sebenarnya tidak menandatangani perakitan dengan kunci privat. Pengembang menggunakan tanda tangan publik untuk proyek sumber terbuka. Orang-orang membuat perakitan yang kompatibel dengan perakitan "yang ditandatangani sepenuhnya" yang dirilis saat mereka tidak memiliki akses ke kunci privat yang digunakan untuk menandatangani perakitan. Karena hanya sedikit konsumen yang benar-benar perlu memeriksa apakah perakitan ditandatangani sepenuhnya, perakitan yang dibuat untuk umum ini dapat digunakan di hampir setiap skenario di mana yang ditandatangani sepenuhnya akan digunakan.

DelaySign

Opsi ini menyebabkan kompilator mencadangkan ruang di file output sehingga tanda tangan digital dapat ditambahkan nanti.

<DelaySign>true</DelaySign>

Gunakan DelaySign- jika Anda ingin perakitan yang ditandatangani sepenuhnya. Gunakan DelaySign jika Anda hanya ingin menempatkan kunci publik di perakitan. Opsi DelaySign tidak berpengaruh kecuali digunakan dengan KeyFile atau KeyContainer. Opsi KeyContainer dan PublicSign bersifat eksklusif satu sama lain. Saat meminta perakitan yang ditandatangani sepenuhnya, kompilator membuat hash file yang berisi manifes (metadata perakitan) dan menandatangani hash tersebut dengan kunci privat. Operasi tersebut membuat tanda tangan digital yang disimpan dalam file yang berisi manifes. Ketika perakitan tertunda ditandatangani, kompilator tidak menghitung dan menyimpan tanda tangan. Sebagai gantinya, kompilator tetapi mencadangkan ruang dalam file sehingga tanda tangan dapat ditambahkan nanti.

Menggunakan DelaySign memungkinkan penguji untuk menempatkan perakitan di cache global. Setelah pengujian, Anda dapat sepenuhnya menandatangani perakitan dengan menempatkan kunci privat di perakitan menggunakan utilitas Assembly Linker. Untuk informasi selengkapnya, lihat Membuat dan Menggunakan Perakitan Bernama Kuat dan Menunda Penandatanganan Perakitan.

KeyFile

Menentukan nama file yang berisi kunci kriptografik.

<KeyFile>filename</KeyFile>

file adalah nama file yang berisi kunci nama kuat. Ketika opsi ini digunakan, kompilator menyisipkan kunci publik dari file yang ditentukan ke dalam manifes perakitan lalu menandatangani perakitan akhir dengan kunci privat. Untuk membuat file kunci, ketik sn -k file di baris perintah. Jika Anda mengompilasi dengan -target:module, nama file kunci disimpan dalam modul dan dimasukkan ke dalam perakitan yang dibuat saat mengompilasi perakitan dengan AddModules. Anda juga dapat meneruskan informasi enkripsi ke kompilator dengan KeyContainer. Gunakan DelaySign jika Anda menginginkan perakitan yang ditandatangani sebagian. Jika KeyFile dan KeyContainer ditentukan dalam kompilasi yang sama, kompilator pertama-tama akan mencoba kontainer kunci. Jika kontainer kunci berhasil, maka perakitan ditandatangani dengan informasi di kontainer kunci. Jika tidak menemukan kontainer kunci, kompilator akan mencoba file yang ditentukan dengan KeyFile. Jika KeyFile berhasil, perakitan ditandatangani dengan informasi di file kunci dan informasi kunci akan dipasang di kontainer kunci. Pada kompilasi berikutnya, kontainer kunci akan valid. File kunci mungkin hanya berisi kunci publik. Untuk informasi selengkapnya, lihat Membuat dan Menggunakan Perakitan Bernama Kuat dan Menunda Penandatanganan Perakitan.

KeyContainer

Menentukan nama kontainer kunci kriptografi.

<KeyContainer>container</KeyContainer>

container adalah nama kontainer kunci dengan nama yang kuat. Saat opsi KeyContainer digunakan, kompilator membuat komponen yang dapat dibagikan. Kompilator menyisipkan kunci publik dari kontainer yang ditentukan ke dalam manifes perakitan dan menandatangani perakitan akhir dengan kunci privat. Untuk membuat file kunci, ketik sn -k file di baris perintah. sn -i memasang pasangan kunci ke dalam kontainer. Opsi ini tidak didukung saat kompilator berjalan di CoreCLR. Untuk menandatangani perakitan saat membangun di CoreCLR, gunakan opsi KeyFile. Jika Anda mengompilasi dengan TargetType, nama file kunci disimpan dalam modul dan dimasukkan ke dalam perakitan saat mengompilasi modul ini menjadi perakitan dengan AddModules. Anda juga dapat menentukan opsi ini sebagai atribut kustom (System.Reflection.AssemblyKeyNameAttribute) dalam kode sumber untuk modul bahasa perantara umum (CIL). Anda juga dapat meneruskan informasi enkripsi ke kompilator dengan KeyFile. Gunakan DelaySign untuk menambahkan kunci publik ke manifes perakitan tetapi menandatangani perakitan hingga selesai diuji. Untuk informasi selengkapnya, lihat Membuat dan Menggunakan Perakitan Bernama Kuat dan Menunda Penandatanganan Perakitan.

HighEntropyVA

Opsi kompilator HighEntropyVA memberi tahu kernel Windows apakah executable tertentu mendukung Pengacakan Tata Letak Ruang Alamat (ASLR) entropi tinggi.

<HighEntropyVA>true</HighEntropyVA>

Opsi ini menetapkan bahwa 64-bit executable atau executable yang ditandai oleh opsi kompilator PlatformTarget mendukung ruang alamat virtual entropi tinggi. Opsi ini diaktifkan secara default untuk semua versi .NET Standard dan .NET Core, dan versi .NET Framework dimulai dengan .NET Framework 4.5.

Opsi HighEntropyVA memungkinkan versi kernel Windows yang kompatibel untuk menggunakan tingkat entropi yang lebih tinggi saat mengacak tata letak ruang alamat suatu proses sebagai bagian dari ASLR. Menggunakan tingkat entropi yang lebih tinggi berarti lebih banyak alamat yang dapat dialokasikan ke wilayah memori seperti stack dan heap. Akibatnya, lebih sulit untuk menebak lokasi wilayah memori tertentu. Opsi kompilator HighEntropyVA memerlukan target yang dapat dieksekusi dan modul apa pun yang bergantung padanya dapat menangani nilai penunjuk yang lebih besar dari 4 gigabyte (GB) saat dijalankan sebagai proses 64-bit.