2011-08-26 20 views
7

Tôi đã nhận thấy rằng cốt lõi NET cụm có PublicKey = 00000000000000000400000000000000.Không chỉ ngắn hơn sau đó những sn.exe cho phép để tạo ra (min 384 bit) nhưng nó cũng có rất nhiều số không .Khá đặc biệt PublicKey trong NET cụm cốt lõi

Làm cách nào để tạo khóa ký với khóa công khai ưa thích như vậy?

+0

Bạn đã xem tài liệu về công cụ ký 'sn.exe' từ Windows SDK chưa? –

+0

@dario_ramos: vâng, tôi đã làm. –

+1

Bạn muốn khóa công khai của bạn là một cái gì đó cụ thể, hoặc chỉ có rất nhiều số không? Tôi có thể hỏi tại sao không? –

Trả lời

5

Đó là khóa công khai được xác định tiêu chuẩn ECMA.

Đó là để đối phó với ba yêu cầu mâu thuẫn:

  1. Một cơ chế đảm bảo rằng bộ phận nhỏ được chữ ký của người sáng tạo của họ và không thể được tạo ra bởi một bên không gian lận.
  2. CLI đó được định nghĩa công khai theo cách mà người khác được tự do triển khai phiên bản (Mono sẽ là ví dụ thực tế).
  3. Điều đó có một thư viện chuẩn của các lớp được tạo sẵn với mọi phiên bản của khung.

Ba điều này không thể xảy ra cùng một lúc!

Nếu tôi tạo phiên bản .NET (điểm 2), thì tôi cần cung cấp phiên bản thư viện chuẩn (điểm 3), cần được tin cậy (điểm 1), vì vậy tôi cần ký tên vào chứng minh rằng tôi là Microsoft. Ôi, tôi không phải là Microsoft! (eh, điểm 2 một lần nữa).

Thay vì những gì xảy ra là:

  1. tôi tạo một cặp khóa công-tư. Mọi người tin tưởng để xây dựng các phiên bản mới của các assembly trong việc triển khai thư viện khung của tôi có quyền truy cập vào khóa riêng, khóa công khai có thể được biết đến với bất kỳ ai thực hiện bất kỳ công việc nào trên thực thi CLI.

  2. Tôi đánh dấu các cụm liên quan đã được ký bằng khóa tương ứng với khóa công khai 00000000000000000400000000000000 (được xác định trong tiêu chuẩn ECMA), mặc dù thực sự chúng được ký bằng khóa riêng được đề cập ở trên.

  3. Trong mã trong CLI, bất kỳ kiểm tra nào trên một hội đồng tuyên bố đã được ký bằng khóa tương ứng với khóa công khai 00000000000000000400000000000000 đều được chọn bằng khóa công khai thực. Nếu điều này kiểm tra, sau đó nó chỉ có thể đã được ký bởi một người nào đó chúng tôi tin tưởng trong việc xây dựng những hội đồng.

Tất nhiên, khuôn khổ MS sẽ không tin tưởng hội của chúng tôi, Mono sẽ không tin tưởng họ, và chúng tôi sẽ không tin tưởng một trong hai họ, bởi vì tất cả chúng ta có chìa khóa thật khác nhau tương ứng với các tiêu chuẩn quan trọng ECMA. Đó là như nó phải được.

Trong khi đó, thực tế là 00000000000000000400000000000000 không khớp với bất kỳ khóa công khai hợp lệ thực nào có nghĩa là bạn không thể đụng độ với bất kỳ khóa công khai nào khác.

+0

+ Jon Hanna, Cảm ơn lời giải thích chi tiết! Tôi nghi ngờ rằng chìa khóa là bằng cách nào đó đặc biệt, và bây giờ tôi thấy như thế nào. –

Các vấn đề liên quan