2011-12-06 38 views
13

Tôi đã thấy trong nhiều bài báo được viết rằng Ký trễ và tên mạnh cho một hội đồng ngăn không cho nó được cắm.Chính xác ký kết và ký tên là gì?

Điều đó có nghĩa là gì?

Điều duy nhất mà tôi biết là không có tên mạnh, bạn không thể cài đặt một hội đồng trong GAC. Vì vậy, giả sử tôi có một hội đồng mà không có một tên mạnh mẽ, nó có thể được hi-jacked?

Ai đó hãy làm rõ sự nghi ngờ của tôi.

Trả lời

31

Có rất nhiều thông tin về điều này trên MSDN; ví dụ: Strong Naming, và Delay Signing

Để tóm tắt ý tưởng cơ bản:

đặt tên Mạnh là một cách để dập lắp ráp của bạn với một dấu ấn xác định đơn giản, có thể được sử dụng sau này để xác nhận rằng nó chưa được sửa đổi từ nó đã được triển khai. Tên mạnh về cơ bản là một băm của tên, phiên bản và một "tên mạnh mẽ" của nhà lắp ráp duy nhất cho nhà phát triển. Tài liệu tham khảo cho các hội đồng tên mạnh đi qua việc xác nhận chặt chẽ hơn có liên quan đến những người không được đặt tên mạnh; cụ thể, tham chiếu có tên mạnh phải khớp với số phiên bản và băm tên mạnh phải khớp.

Điều này giúp tránh hai nguồn phổ biến của lỗ hổng bảo mật tiềm năng trong chương trình của bạn:

  1. Một người sử dụng độc hại thay thế một lắp ráp trong chương trình của bạn với một hội đồng khác nhau với các tên file giống nhau, nhưng trong đó có chứa mã độc hại, và thuyết phục chương trình của bạn tải và thực thi nó.
  2. Một người dùng độc hại thay thế một hội đồng trong chương trình của bạn bằng một phiên bản khác của cùng một hội đồng, nhưng đã biết các lỗi đã được khắc phục.

Quy trình tên mạnh sẽ từ chối cả hai hành động này vì dữ liệu tên mạnh sẽ không khớp. Đây là lý do tại sao các hội đồng trong GAC phải được đặt tên mạnh: chúng được sử dụng rất phổ biến, nếu không chúng sẽ tạo ra các mục tiêu chính cho loại tấn công này.

Lưu ý, tuy nhiên, tên mạnh mẽ hoàn toàn không làm gì để xác minh danh tính của nhà xuất bản. Bất cứ ai cũng có thể xuất bản một hội đồng được đặt tên mạnh mẽ tuyên bố là Microsoft và không có gì trong tên mạnh để từ chối khẳng định đó. Xác minh xác định là công việc của chữ ký số Authenticode, khác với việc đặt tên mạnh. Cả hai thường được sử dụng cùng nhau, nhưng chúng là các khái niệm trực giao.

Ký trễ là một kỹ thuật để ký các assembly bên ngoài quá trình xây dựng. Ý tưởng ở đây là, công ty của bạn có thể có các chính sách không cho phép các tên khóa mạnh có sẵn trong thời gian xây dựng (có thể chúng được giữ ngoại tuyến hoặc được bảo vệ bằng mật khẩu). tên khóa: về cơ bản nó dự trữ không gian cho khóa được thêm vào sau, bởi người dùng được ủy quyền. Trong thời gian đó, một phần tên khóa mạnh được bao gồm - chỉ đủ thông tin cho các hội đồng khác để thực hiện một tham chiếu mạnh mẽ, nhưng không đủ để phát hiện các thay đổi hoặc sửa đổi.