Tôi có nên tự ký mã nguồn mở không?


11

Tôi sử dụng macOS 10.14 và đã gặp phải một vấn đề khi tôi cố gắng cài đặt một plugin nguồn mở cho Vim mà tôi tìm thấy trên Github. Tôi đã tải xuống mã nguồn và tự biên dịch nó, nó hoạt động tốt, nhưng khi tôi chạy nó, việc thực thi bị gián đoạn vì "Chữ ký mã [có thể thực thi] không hợp lệ để sử dụng trong quá trình".

Điều này đã cho tôi rất nhiều câu hỏi mà tôi không thể nào không nghĩ tới:

Tôi có thể tự ký, nhưng điều đó có làm hỏng mục đích ký mã không? Có sự khác biệt định tính nào trong việc ký mã từ internet và cho phép các ứng dụng từ các nhà phát triển không xác định trong hộp thoại "Ứng dụng này được tải xuống từ internet" không?

Nếu tôi không làm điều đó, "trách nhiệm" của ai là ký? Người duy trì kho lưu trữ? Những người đóng góp? Có phải Apple đang mong đợi các nhà phát triển nguồn mở luôn có ID Nhà phát triển của Apple? Hoặc tôi đã hiểu sai mục đích ký mã?

Biên tập:

Để làm rõ, câu hỏi của tôi là làm thế nào tôi nên xử lý mã nguồn không dấu mà tôi tự biên dịch, vì tôi không mong đợi những người đóng góp luôn có thể, hoặc nhớ, ký mã của họ, đặc biệt là khi đóng góp nhỏ cho các dự án nguồn mở với nhiều người đóng góp.

Câu trả lời:


9

Ký mã Ad-Hoc

Đối với các ứng dụng và nhị phân của bên thứ ba mà bạn tự biên dịch và yêu cầu ký mã, hãy sử dụng chữ ký mã ad hoc .

  • Tôi giả sử ứng dụng sẽ không chạy nếu không có chữ ký;
  • Tôi giả sử ứng dụng sẽ không được phân phối;
  • Tôi cho rằng bạn không quan tâm đến danh tính của chữ ký là hợp lệ.

Một chữ ký đặc biệt không cung cấp lợi ích bảo mật đáng tin cậy. Nó có thể được sử dụng để xác định xem ứng dụng đã được thay đổi hay chưa và nó có thể được sử dụng để áp dụng các hạn chế bảo mật, chẳng hạn như quyền lợi, cho ứng dụng.

Một chữ ký đặc biệt sẽ xác nhận chống lại codesignnhưng không spctl. Điều này có thể hoặc không quan trọng tùy thuộc vào nhị phân được ký. Đối với các ứng dụng và tệp thực thi, điều này dường như không quan trọng vì spctlkhông chạy trên các tệp nhị phân được tạo cục bộ.

Tại sao ký mã?

Về câu hỏi tinh tế:

Làm thế nào tôi nên xử lý mã nguồn không dấu mà tôi tự biên dịch, vì tôi không mong muốn những người đóng góp luôn có thể, hoặc nhớ, ký mã của họ, đặc biệt là khi đóng góp nhỏ cho các dự án nguồn mở có nhiều người đóng góp.

Đối với hầu hết các ứng dụng tự biên dịch, không cần ký mã. Điều này giả định rằng bạn tin tưởng mã của ứng dụng. Trên macOS, bạn có thể mở các ứng dụng không đáng tin cậy từ Finder, xem phần Mở ứng dụng của Apple từ một nhà phát triển không xác định .

Nếu bạn không tin tưởng mã hoặc nhà phát triển, không biên dịch hoặc chạy ứng dụng.

Trách nhiệm của bạn

Nhà cung cấp mã nguồn không có trách nhiệm hoặc nghĩa vụ cung cấp mã nhị phân được xây dựng trước. Được tự biên soạn, tất cả ký mã là sự lựa chọn và trách nhiệm của bạn.

  • Apple yêu cầu gửi đến Cửa hàng ứng dụng của họ để được ký mã.

  • Apple yêu cầu các nhà phát triển bên ngoài Cửa hàng ứng dụng của họ ký mã, nhưng chưa được yêu cầu.

Trong cả hai trường hợp, chỉ có các nhị phân cuối cùng được ký. Mã nguồn ban đầu và tài nguyên không được ký.

Mã nguồn không được ký

Bản thân mã nguồn không thể là mã được ký theo cách có ý nghĩa đối với macOS. Các tệp nguồn và mã có thể được ký bằng kỹ thuật số, như bất kỳ tệp nào khác có thể, nhưng điều này không ảnh hưởng đến cách ứng dụng hoặc nhị phân kết quả được xử lý bởi macOS.

Cách mã Ad-Hoc Đăng ký ứng dụng Mac

Để mã hóa ứng dụng trên macOS bằng chữ ký đặc biệt, hãy đặt -scờ nhận dạng thành -:

codesign --force -s - </path/to/application>

Tất cả các quy tắc, yêu cầu và hoán vị khác của codesignlệnh vẫn giữ nguyên.

Cờ --forceđược sử dụng ở đây để ghi đè bất kỳ chữ ký hiện có.

Bạn có thể cần thêm --deepcờ vào codesignlệnh để ký các tài nguyên phụ như khung và dịch vụ nhúng.


Tại sao bạn đề nghị chữ ký ad hoc? Câu trả lời bạn liên kết với các trạng thái "Trong thực tế, việc tạo các nhị phân có chữ ký đặc biệt chỉ có giá trị thực tế cho các nhà phát triển của Apple".
Wowfunhappy 27/11/18

Điều đó không có ý nghĩa gì với tôi. Thêm chữ ký đặc biệt có nghĩa là xác nhận chữ ký sẽ không thành công. Điều này khiến bạn chẳng ở đâu cả - chương trình sẽ thất bại với cùng một thông báo lỗi.
jksoegaard

Có, tôi thấy rằng bạn đã xóa liên kết đến câu trả lời của tôi trên đăng nhập đặc biệt và thêm các giả định. Nhưng những giả định này có giữ được không? - Bạn dường như đang trả lời như thể câu hỏi là về việc chạy một ứng dụng. Không phải vậy. Đó là về việc có một ứng dụng đã được ký mà OP muốn thêm một plugin. Tức là plugin cần phải vượt qua xác thực thư viện với ứng dụng được ký ban đầu (Vim) làm chủ.
jksoegaard

Câu hỏi ban đầu đã được chỉnh sửa. Nó là khá rộng như là. Người hỏi có thể bình luận, làm rõ và thử những câu trả lời này để xem những gì phù hợp với họ. Câu trả lời này cố gắng trả lời câu hỏi đã chỉnh sửa và cung cấp một cách tiếp cận thực tế. Nếu nó không giúp ích, hoặc có những giả định không chính xác, người hỏi có thể hy vọng có thể bấm chuông và làm rõ ý định của họ.
Graham Miln

1
Câu trả lời này rất hữu ích. Câu hỏi của tôi khá chung chung vì tôi thấy các tài liệu về táo hơi khó hiểu. Sử dụng ký đặc biệt đã giải quyết vấn đề cụ thể mà tôi có.
Cú pháp

5

Tự mình ký chương trình không làm hỏng mục đích ký mã. Mục đích chung của việc ký mã là để có thể xác minh rằng chương trình là một bản sao chưa được sửa đổi ban đầu được tạo bởi một thực thể cụ thể (người hoặc công ty). Khi bạn tự ký một chương trình để chạy trên máy tính của mình, bạn có thể cho hệ thống kiểm tra xem đó có thực sự là bạn đã tạo nhị phân không và nó đã bị người khác sửa đổi.

Sự khác biệt về chất giữa việc tự ký nhị phân ứng dụng và chỉ cho phép các ứng dụng từ các nhà phát triển không xác định trong GateKeeper là trong trường hợp trước bạn cho phép một ứng dụng cụ thể duy nhất chạy - trong khi sau đó, bạn mở ra khả năng bạn có thể mở nhiều các ứng dụng khác nhau chỉ bằng cách nhấp chuột phải vào chúng và chọn Mở. Tức là nó hạn chế hơn và do đó có phần "an toàn" hơn bằng cách tự ký chương trình cụ thể.

Trách nhiệm ký kết hoàn toàn thuộc về bạn. Nhà phát triển nguồn mở không thể ký mã nguồn - chỉ có thể ký các tệp nhị phân đã biên dịch. Khi bạn tự sản xuất các tệp nhị phân được biên dịch, bạn sẽ phải ký chúng.

Bạn có thể đăng ký tài khoản nhà phát triển trên trang web của Apple, nơi sẽ cho phép bạn tạo chứng chỉ có thể được sử dụng để đăng nhập. Nếu bạn là nhà phát triển và thường xuyên biên dịch các tệp nhị phân để chạy trên máy Mac thì đây là cách làm ưa thích. Nếu đây là một việc mà bạn có thể sẽ không bao giờ làm lại, thì có lẽ quá mức cần thiết để trải qua quá trình này. YMMV.

Các câu trả lời khác cho câu hỏi của bạn ở đây khuyên bạn nên sử dụng ký đặc biệt cho nhị phân của mình. Rằng sẽ không làm việc. Bạn sẽ cần tạo chữ ký hợp lệ để chạy nhị phân với GateKeeper trên cài đặt an toàn nhất.


1

Tôi có nên tự ký mã nguồn mở không?

Nếu bạn không phải là nhà phát triển, thì không.

Mã ký kết, trong Tóm lại, là một phương pháp để nói rằng bạn (nhà phát triển) là người bạn nói bạn đang có và mã đã không thay đổi kể từ lần cuối bạn ký tên vào nó.

Có sự khác biệt định tính nào trong việc ký mã từ internet và cho phép các ứng dụng từ các nhà phát triển không xác định trong hộp thoại "Ứng dụng này được tải xuống từ internet" không?

Nghe có vẻ như Ký mã khó hiểu của bạn (những gì Nhà phát triển yêu cầu để xuất bản Ứng dụng trên App Store) và Gatekeeper (những gì bảo vệ máy Mac của bạn khỏi việc cài đặt phần mềm từ các nhà phát triển không xác định).

Nếu bạn cho phép máy Mac của bạn cài đặt phần mềm từ cả App Store và nhà phát triển được xác định, bạn vẫn sẽ nhận được thông báo bật lên thông báo cho bạn rằng phần mềm thực tế sẽ được cài đặt

Và nếu đó là từ một nhà phát triển không xác định, bạn sẽ nhận được cùng một cửa sổ bật lên với "biểu tượng cảnh báo"

Bạn vẫn có thể cài đặt phần mềm. Đây chỉ là một cơ chế buộc tương tác người dùng thực sự cài đặt phần mềm cung cấp cho bạn một lớp bảo mật chống lại phần mềm độc hại tự cài đặt.


Cảm ơn bạn, điều này trả lời một số nhưng không phải tất cả các câu hỏi. Tôi đã chỉnh sửa câu hỏi của mình để cố gắng cụ thể hơn trong những gì tôi đang hỏi
Syntaxén 27/11/18
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.