2009-07-31 10 views
8

Ok, tôi phải nguyên nhân câm Tôi đã đọc: http://www.csharp411.com/net-assembly-faq-part-3-strong-names-and-signing/tôi dường như không thể hiểu được lắp ráp NET ký điều này

Và tôi vẫn không nhận được nó ...

Giả sử tôi mở thuộc tính của dự án của tôi và đi đến tab "Signing", sau đó tôi kiểm tra "Sign the assembly" và tạo một assembly mới với mật khẩu. Một tệp khóa tên mạnh với phần mở rộng .pfx, với cả khóa công cộng và khóa riêng, đã được tạo và VS sẽ ký kỹ thuật số của tôi khi biên dịch, phải không?

Còn khóa riêng thì sao? Không nên riêng tư và tôi, nhà phát triển, là người duy nhất có nó? Không nên lắp ráp chỉ được ký với khóa công khai?

Có ai có thể giải thích điều này cho tôi không? Về cơ bản, tôi muốn ký hợp đồng dự án của mình và cho phép người dùng kiểm tra xem hội đồng có thực sự được phát triển bởi tôi, nơi tôi là người duy nhất giữ chìa khóa riêng (mà tôi nghĩ là tôi phải làm).

Trả lời

8

Về cơ bản bạn có quyền.

Bạn tạo cặp khóa và sử dụng khóa đó để ký. Nhưng không gửi tệp pfx (hoặc snk), nó chứa cả khóa công khai và khóa riêng tư và phải được giữ an toàn.

Khóa công khai được thêm vào hội đồng như là một phần của quá trình ký.

Chữ ký này được kiểm tra khi lắp ráp được tải vào ứng dụng. Người dùng cuối cũng có thể kiểm tra mã thông báo khóa công khai trong GAC nhưng đó không thực sự là một quá trình thuận tiện. Và bạn phải cho họ biết mã thông báo khóa công khai của bạn theo cách nào đó.

Và toàn bộ điều này chỉ đáng tin cậy như khả năng giữ tệp khóa riêng tư.

Cũng lưu ý rằng lý tưởng bạn chỉ nên có 1 khóa cho mỗi công ty. Nếu bạn lo lắng về việc chia sẻ nó với (nhiều) đồng nghiệp, hãy điều tra việc trì hoãn ký.

2

Ký hợp đồng dựa trên public-key cryptogrpahy (PKI). Khái niệm chung trong tóm lại là khi bạn ký mã hóa một cái gì đó với PKI, khóa riêng được sử dụng để thực hiện việc ký, nhưng khóa công khai được sử dụng để xác minh chữ ký. Một khóa riêng không thể được sử dụng để xác minh chữ ký, chỉ tạo ra nó. Không thể sử dụng khóa công cộng để tạo chữ ký, chỉ xác minh nó.

Cho rằng, điều quan trọng là bạn phải giữ khóa riêng tư của mình an toàn và riêng tư. Nếu bạn muốn duy trì mức bảo mật cao nhất và cung cấp mức độ xác thực cao nhất cho khách hàng, có thể tốt nhất là sử dụng ký trễ, và có một cá nhân hoặc bộ phận chịu trách nhiệm quản lý cặp khóa công khai/riêng tư của bạn . Nhà phát triển không nên có quyền truy cập vào khóa riêng tư và có thể sử dụng tùy chọn ký hiệu trì hoãn để vẫn phát triển các hội đồng được đặt tên mạnh mà không ảnh hưởng đến tính bảo mật và tính xác thực.

+0

Thực ra, việc sử dụng khóa công khai/riêng tư là khá đối xứng. Mã hóa thông thường (không ký) sử dụng khóa chung. –

+0

@ Henk: Nếu bạn đang nói mã hóa, có, khóa công khai được sử dụng để mã hóa, và khóa riêng được sử dụng để giải mã. Trong phạm vi ký kết, nó bị đảo ngược. Và tôi không chắc tại sao bạn lại gọi đó là đối xứng ... toàn bộ khái niệm sử dụng một chìa khóa để mã hóa/ký tên và một chìa khóa khác để giải mã/xác minh là khá không đối xứng. – jrista

+0

Ký hiệu là mã hóa hiệu quả ngược lại, đó là phần đối xứng. Nhưng bạn nói đúng, nó được gọi là mật mã bất đối xứng. –

4

Ký kỹ thuật số liên quan đến việc tính toán băm nhị phân của bạn và sau đó mã hóa băm được tạo bằng khóa riêng từ cặp khóa mà bạn đã tạo. Thêm vào đó, VS sẽ bổ sung thêm khóa công khai cho assembly. Bây giờ khi điều này được thực thi ở phía máy khách, thời gian chạy sẽ sử dụng khóa công khai trong assembly để giải mã chữ ký (băm) và sau đó sẽ kết hợp nó với băm tính toán của nhị phân tại máy khách. Nếu chúng khớp nhau, nó có nghĩa là nhị phân không bị giả mạo.

1

Ký = Mã hóa Hash SHA1 của Đại hội đồng bằng cách sử dụng Private Key
xác nhận = So sánh Chữ ký PublicKey-Giải mã với Điện Toán Hash của Đại hội đồng

Vì vậy, bất cứ ai có PublicKey có thể xác minh lắp ráp nhưng chỉ Tác giả với PrivateKey có thể ký một hội đồng.

PublicKey token = 64 bit cuối cùng của hàm băm SHA1 của PublicKey theo thứ tự byte nhỏ.