Một .snk để làm gì?


153

Tệp .snk dùng để làm gì? Tôi biết nó là viết tắt của Khóa được đặt tên mạnh mẽ , nhưng tất cả các giải thích về nó là gì và cách thức hoạt động đều đi qua đầu tôi.

Có lời giải thích đơn giản nào về cách sử dụng khóa có tên mạnh và cách thức hoạt động không?

Câu trả lời:


212

Tệp .snk được sử dụng để áp dụng tên mạnh cho cụm .NET . một tên mạnh như vậy bao gồm

tên văn bản đơn giản, số phiên bản và thông tin văn hóa (nếu được cung cấp) Thay đổi khóa công khai và chữ ký số.

SNK chứa một cặp khóa duy nhất - một khóa riêng và chung có thể được sử dụng để đảm bảo rằng bạn có một tên mạnh duy nhất cho tổ hợp. Khi lắp ráp được đặt tên mạnh, một "băm" được xây dựng từ nội dung của lắp ráp và băm được mã hóa bằng khóa riêng. Sau đó, hàm băm đã ký này được đặt trong hội đồng cùng với khóa chung từ .snk.

Sau này, khi ai đó cần xác minh tính toàn vẹn của hội đồng được đặt tên mạnh, họ sẽ tạo một hàm băm của nội dung của hội đồng và sử dụng khóa chung từ hội đồng để giải mã hàm băm đi kèm với hội đồng - nếu hai hàm băm khớp nhau, xác minh lắp ráp thông qua.

Điều quan trọng là có thể xác minh các hội đồng theo cách này để đảm bảo rằng không ai trao đổi một hội đồng cho một hội đồng độc hại sẽ lật đổ toàn bộ ứng dụng. Đây là lý do tại sao các hội đồng không có tên mạnh không được tin cậy giống như các hội đồng được đặt tên mạnh, vì vậy chúng không thể được đặt trong GAC. Ngoài ra, có một chuỗi tin cậy - bạn không thể tạo ra một hội đồng có tên mạnh mẽ tham chiếu các hội đồng không được đặt tên mạnh.

Bài báo " Bí mật của việc đặt tên mạnh ". Có một công việc tuyệt vời để giải thích các khái niệm này chi tiết hơn. Với hình ảnh.


2
Điều này có nghĩa là khi bạn ký một hội đồng với .PFX, nó thực sự chỉ sử dụng điều đó để tạo .SNK khi đang di chuyển bất cứ khi nào nó biên dịch?
Patrick

5
@Patrick không, đó là Chữ ký Authenticode , đồng thời chứng minh rằng tệp không được sửa đổi giữa ký và kiểm tra, không đáp ứng các yêu cầu tên mạnh. Vấn đề là Authenticode không yêu cầu một chuỗi tin cậy của các hội đồng mà việc đặt tên mạnh đòi hỏi để bạn có thể Authenticode ký một hội đồng dựa trên các hội đồng có tên / ký không mạnh.
Scott Chamberlain

1
Bạn có thể chỉ cần loại bỏ snk và thay thế nó bằng một cái khác .. tôi không biết một kịch bản thực sự hữu ích .. về cơ bản, đó là cặp chìa khóa của chúng tôi, bạn không thể tin tưởng vào điều đó
Ibrahim

7
WayBackMachine liên kết đến Bí mật của tên mạnh
asfeynman

22

Trong thế giới.Net, tệp SNK được sử dụng để ký các tệp nhị phân đã biên dịch của bạn. Điều này cho phép một vài điều xảy ra:

  1. Bạn có thể đăng ký hội trong GAC (Cache hội toàn cầu) . Về cơ bản để bạn có thể tham chiếu nó từ nhiều nơi trên cùng một máy mà không phải duy trì nhiều bản sao).
  2. Bạn có thể sử dụng Binaries của mình từ bên trong các nhị phân khác cũng được ký (đây là một loại hành vi virus kỳ lạ liên quan đến các hội đồng đã ký).
  3. Việc lắp ráp của bạn không thể (dễ dàng) được sửa đổi bởi các bên thứ 3 không có quyền truy cập vào tệp SNK, cung cấp ít nhất một lượng bảo mật nhỏ.

Tôi không quen với cách máy chủ BizTalk hoạt động, vì vậy tôi không nghĩ mình có thể làm sáng tỏ nhiều mục đích cụ thể mà họ phục vụ trong môi trường đó.

Hy vọng điều này có phần hữu ích.


7

Tệp .snk được sử dụng để ký các hội đồng để có thể thêm chúng vào Bộ đệm ẩn hội đồng toàn cầu (GAC).

Tệp .snk chứa mã thông báo công khai và riêng tư cho khóa của bạn. Khi bạn muốn ký một số dữ liệu (hoặc nhị phân) bằng khóa đó, tổng kiểm tra được tính trên dữ liệu, sau đó được mã hóa bằng mã thông báo riêng. Tổng kiểm tra được mã hóa sau đó được thêm vào dữ liệu. Bất cứ ai cũng có thể sử dụng mã thông báo công khai từ khóa của bạn để giải mã tổng kiểm tra và so sánh nó với tổng kiểm tra mà họ đã tính toán để xác minh rằng dữ liệu đã ký chưa bị giả mạo.

Bạn có thể đọc thêm về mật mã khóa công khai tại http://en.wikipedia.org/wiki/Public-key_cryptography .


4

Tệp .snk là phiên bản bền vững của "Khóa" của bạn được tạo bởi tiện ích sn trong bộ tiện ích khung. Sau đó, bạn sử dụng tệp này để "ký điện tử" các hội đồng của bạn. Nó là một khóa gồm 2 phần .. tổ hợp khóa riêng-công khai. Phần công khai của khóa được xuất bản tức là được mọi người biết đến. Phần riêng chỉ được biết đến với bạn, nhà phát triển thành phần / ứng dụng và dự định sẽ được giữ theo cách đó.

Khi bạn ký hợp đồng, nó sử dụng khóa riêng và giá trị băm cho tổ hợp của bạn để tạo chữ ký số được nhúng trong cụm của bạn. Sau đó, bất cứ ai tải lắp ráp của bạn đều trải qua một bước xác minh. Khóa chung được sử dụng để xác thực nếu tập hợp thực sự xuất phát từ bạn .. bạn chỉ cần khóa chung cho khóa này (cũng được nhúng dưới dạng mã thông báo trong bảng kê khai lắp ráp). Nếu lắp ráp bị giả mạo, giá trị băm sẽ khác và tải lắp ráp sẽ bị hủy bỏ. Đây là một cơ chế bảo mật.


3

Một tập tin .snk được sử dụng để đảm bảo rằng người khác không thể trượt một hội đồng của họ vào vị trí của bạn. Nó cung cấp một cặp khóa mã hóa / giải mã.

Khi tệp .snk được sử dụng để ký hợp đồng, giá trị mã băm được tính từ tệp lắp ráp và được mã hóa bằng khóa riêng. "Digest" được mã hóa đó sau đó được xử lý để lắp ráp cùng với khóa chung từ tệp .snk.

Sau đó, khi ai đó nhận được hội đồng của bạn, họ cũng có thể tính toán giá trị băm đó. Họ sử dụng khóa chung để giải mã khóa mà bạn đã tính toán và so sánh các giá trị được tính toán. Nếu lắp ráp hoàn toàn thay đổi, các giá trị đó sẽ khác và người sử dụng lắp ráp sẽ biết rằng lắp ráp bạn có không phải là giá trị bạn cung cấp.

Trong ngữ cảnh của BizTalk Server, bất cứ ai xây dựng bất kỳ hội đồng tùy chỉnh nào được sử dụng bởi giải pháp BizTalk của bạn sẽ cần sử dụng tệp .snk để ký hợp đồng để máy chủ BizTalk có thể tải nó vào GAC và sử dụng nó.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.