Untuk apa .snk?

153

Untuk apa file .snk? Saya tahu itu singkatan dari Strongly Named Key , tetapi semua penjelasan tentang apa itu dan cara kerjanya melampaui kepala saya.

Apakah ada penjelasan sederhana tentang cara kunci yang sangat bernama digunakan dan cara kerjanya?

oɔɯǝɹ
sumber

Jawaban:

212

File .snk digunakan untuk menerapkan nama yang kuat untuk perakitan .NET . nama yang kuat terdiri dari

nama teks sederhana, nomor versi, dan informasi budaya (jika tersedia) —tambahkan kunci publik dan tanda tangan digital.

SNK berisi pasangan kunci unik - kunci pribadi dan publik yang dapat digunakan untuk memastikan bahwa Anda memiliki nama kuat yang unik untuk perakitan. Ketika rakitan sangat bernama, "hash" dibangun dari isi rakitan, dan hash dienkripsi dengan kunci pribadi. Kemudian hash yang ditandatangani ini ditempatkan di majelis bersama dengan kunci publik dari .snk.

Kemudian, ketika seseorang perlu memverifikasi integritas rakitan yang bernama kuat, mereka membangun hash dari isi rakitan, dan menggunakan kunci publik dari rakitan untuk mendekripsi hash yang datang dengan rakitan - jika keduanya hash cocok, verifikasi perakitan lolos.

Sangat penting untuk dapat memverifikasi rakitan dengan cara ini untuk memastikan bahwa tidak ada yang mengganti rakitan dengan perangkat jahat yang akan menumbangkan seluruh aplikasi. Inilah sebabnya majelis yang tidak memiliki nama kuat tidak dipercaya dengan cara yang sama dengan majelis yang dinamai sangat, jadi mereka tidak dapat ditempatkan di GAC. Juga, ada rantai kepercayaan - Anda tidak dapat menghasilkan rakitan sangat bernama yang merujuk rakitan tidak bernama kuat.

Artikel " Rahasia Penamaan yang Kuat (diarsipkan di Wayback Machine) ". Melakukan pekerjaan yang sangat baik untuk menjelaskan konsep-konsep ini secara lebih rinci. Dengan gambar.

Blair Conrad
sumber
2
Apakah ini berarti bahwa ketika Anda menandatangani majelis dengan .PFX, itu sebenarnya hanya menggunakannya untuk menghasilkan .SNK dengan cepat setiap kali dikompilasi?
Patrick
5
@ Patrick no, itu adalah Authenticode Signature yang, sementara juga membuktikan file tidak dimodifikasi antara penandatanganan dan cek, tidak memenuhi persyaratan nama yang kuat. Masalahnya adalah Authenticode tidak memerlukan rantai kepercayaan majelis yang membutuhkan penamaan yang kuat sehingga Anda dapat Authenticode menandatangani majelis yang bergantung pada majelis yang dinamai / ditandatangani tidak kuat.
Scott Chamberlain
1
Anda hanya dapat melepas snk dan menggantinya dengan yang lain .. saya tidak tahu skenario nyata di mana itu berguna .. itu pada dasarnya pasangan kunci kami Anda tidak dapat membangun kepercayaan pada itu
Ibrahim
8
Link WayBackMachine ke Rahasia Nama Kuat
asfeynman
Harap perbarui tautan dalam jawaban (ke yang disarankan oleh @asfeynman), karena tautannya sudah mati, dan tidak semua orang membaca komentar.
XelaNimed
22

Di dunia the.Net, file SNK digunakan untuk menandatangani binari yang Anda kompilasi. Ini memungkinkan beberapa hal terjadi:

  1. Anda dapat mendaftarkan Majelis di GAC (Global Assembly Cache) . Pada dasarnya Anda dapat merujuknya dari banyak tempat di mesin yang sama tanpa harus menyimpan banyak salinan).
  2. Anda dapat menggunakan Binari Anda dari dalam binari lain yang juga ditandatangani (ini adalah semacam perilaku virus yang aneh terkait dengan majelis yang ditandatangani).
  3. Majelis Anda tidak dapat (dengan mudah) dimodifikasi oleh pihak ke-3 yang tidak memiliki akses ke file SNK, memberikan setidaknya sejumlah kecil keamanan.

Saya tidak terbiasa dengan cara kerja server BizTalk , jadi saya tidak berpikir saya bisa menjelaskan banyak tujuan spesifik apa yang mereka layani dalam lingkungan itu.

Semoga ini agak membantu.

ckramer
sumber
7

File .snk digunakan untuk menandatangani majelis agar dapat menambahkannya ke Global Assembly Cache (GAC).

File .snk berisi token publik dan pribadi untuk kunci Anda. Ketika Anda ingin menandatangani beberapa data (atau biner) dengan kunci itu, sebuah checksum dihitung pada data, yang kemudian dienkripsi dengan token pribadi. Checksum terenkripsi kemudian ditambahkan ke data. Siapa pun dapat menggunakan token publik dari kunci Anda untuk mendekripsi checksum dan membandingkannya dengan checksum yang mereka hitung untuk memverifikasi bahwa data yang ditandatangani belum dirusak.

Anda dapat membaca lebih lanjut tentang kriptografi kunci publik di http://en.wikipedia.org/wiki/Public-key_cryptography .

Franci Penov
sumber
4

File .snk adalah versi persisten "Kunci" Anda yang dihasilkan oleh utilitas sn dalam rangkaian utilitas kerangka. Anda kemudian menggunakan file ini untuk 'menandatangani secara digital' majelis Anda. Ini adalah kunci 2-bagian .. kombinasi kunci privat-publik. Bagian publik dari kunci dipublikasikan yaitu diketahui semua orang. Bagian pribadi hanya diketahui oleh Anda, pengembang komponen / aplikasi dan dimaksudkan untuk tetap seperti itu.

Ketika Anda menandatangani rakitan Anda, itu menggunakan kunci pribadi dan nilai hash untuk rakitan Anda untuk membuat tanda tangan digital yang tertanam dalam rakitan Anda. Setelah itu, siapa pun yang memuat majelis Anda melewati langkah verifikasi. Kunci publik digunakan untuk memvalidasi jika majelis benar-benar berasal dari Anda .. Anda hanya perlu kunci publik untuk ini (yang juga tertanam dalam bentuk tokenized dalam manifes perakitan). Jika rakitan telah dirusak, nilai hash akan berbeda dan beban rakitan akan dibatalkan. Ini adalah mekanisme keamanan.

Gishu
sumber
3

File .snk digunakan untuk memastikan bahwa orang lain tidak dapat menyelipkan majelis mereka sendiri di tempat Anda. Ini menyediakan sepasang kunci enkripsi / dekripsi.

Ketika file .snk digunakan untuk menandatangani rakitan, nilai kode hash dihitung dari file rakitan dan dienkripsi menggunakan kunci pribadi. "Intisari" terenkripsi tersebut kemudian ditempelkan ke majelis bersama dengan kunci publik dari file .snk.

Kemudian ketika seseorang menerima rakitan Anda, mereka juga dapat menghitung nilai kode hash itu. Mereka menggunakan kunci publik untuk mendekripsi yang Anda hitung dan membandingkan nilai yang dihitung. Jika rakitan telah diubah sama sekali, nilai-nilai itu akan berbeda dan pengguna rakitan akan tahu bahwa rakitan yang Anda miliki bukan yang Anda berikan.

Dalam konteks BizTalk Server, siapa pun yang membangun rakitan kustom apa pun yang digunakan oleh solusi BizTalk Anda harus menggunakan file .snk untuk menandatangani rakitan sehingga server BizTalk dapat memuatnya ke GAC dan menggunakannya.

Michael Lang
sumber