GnuPG - web tin cậy có thể cho thiết bị ngoại tuyến?


0

Tôi dự định phát hành bản cập nhật phần mềm cho các máy ngoại tuyến thông qua thẻ nhớ USB.
Machies sẽ được gửi đi và trên trang web trong nhiều năm,
trong thời gian đó, các nhà phát triển mới sẽ được thuê và sa thải.

Tôi dự định sử dụng GnuPG để kiểm tra các bản cập nhật trên thanh USB trước khi cài đặt chúng.

Sẽ có một khóa chính và mỗi nhà phát triển sẽ được cung cấp khóa nhà phát triển của riêng họ.

Các khóa nhà phát triển sẽ được ký bởi khóa chính. Các máy được triển khai sẽ tin tưởng hoàn toàn vào khóa chính. Tuy nhiên, các máy được triển khai sẽ không có tất cả các khóa dành cho nhà phát triển.

Làm cách nào tôi có thể làm cho các máy được triển khai hiểu rằng chúng có thể tin cậy các gói được ký bằng các khóa không xác định, Nếu các khóa không xác định đó được ký bởi khóa chính được tin cậy hoàn toàn ??

Trong các thử nghiệm của tôi, gpg --verify gói.tar.gz.sig không thành công vì khóa công khai KHÔNG được biết.

Để có được gpg - xác minh để chấp nhận khóa, trước tiên tôi phải gpg --import developer_123.key.

Nhưng điều đó không kiểm tra rằng khóa mới đã được ký bởi người chủ đáng tin cậy!

Tôi có thể tạo khóa rogue_developer mới, không được ký bởi chủ chính đáng tin cậy, nhập nó, sau đó gpg --verify sẽ xác thực gói.

Tôi nghĩ rằng tôi đang hiểu nhầm một sự hiểu biết cơ bản về cách quá trình này nên hoạt động?

Tôi có nên ...
1) Cho phép tất cả các nhà phát triển đăng nhập bằng khóa chính (ý tưởng tồi, khóa sẽ bị rò rỉ và tôi sẽ không thể thu hồi nó nếu không làm dịu lại các máy đã triển khai!)
2) Đóng gói khóa nhà phát triển đã xuất với bản cập nhật USB.
Nhưng sau đó, làm thế nào để tôi kiểm tra xem nó đã được ký bởi chủ trước khi nhập nó?
3) Nếu có cách xác nhận rằng gói được ký bởi một khóa đã được ký bởi chủ chính đáng tin cậy của tôi mà không phải nhập khóa đó?
4) Một cái gì khác tôi không nghĩ đến?

Tôi chắc chắn tôi đang hiểu sai điều gì đó ... Vì T nghĩ rằng làm cho chủ nhân hoàn toàn đáng tin cậy có nghĩa là chúng tôi cũng xác nhận các khóa được ký bởi khóa đáng tin cậy đó?
Nhưng quá trình đó hoạt động như thế nào?

Cảm ơn cho bất kỳ con trỏ!

Chris.

EDIT:
Tôi đã tạo để thử nghiệm, một nhà phát triển thực sự (DVKey) và một kẻ tấn công giả mạo (ROKey).
DVKey được ký bởi khóa chính, được tin cậy hoàn toàn. ROKey KHÔNG được ký bởi khóa chính. Khi xác minh gói được ký bởi DVKey, tôi nhận được

[cds @ notebook ~] $ gpg --homedir FMHOME - xác minh ArchLinuxARM-rpi-2-muộn.tar.gz.sig
gpg: giả sử dữ liệu đã ký trong 'ArchLinuxARM-rpi-2-muộn.tar.gz'
gpg: Chữ ký được thực hiện vào ngày 18 tháng 11 năm 2015 21:15:55 GMT bằng mã khóa RSA B90C2061
gpg: Chữ ký tốt từ "DVKey" [đầy đủ]
[ cds @ notebook ~] $ echo $?
0

Lưu ý rằng gpg trả về '0', thành công.

Khi tôi xác minh gói lừa đảo, tôi nhận được

[cds @ notebook ~] $ gpg --homedir FMHOME - xác minh Chưa có tiêu đề.log.sig
gpg: giả sử dữ liệu đã ký trong 'Chưa có tiêu
đề.log'
gpg: Chữ ký tốt từ "ROKey" [không rõ]
gpg: CẢNH BÁO: Khóa này không được chứng nhận bằng chữ ký đáng tin cậy!
gpg: Không có dấu hiệu cho thấy chữ ký thuộc về chủ sở hữu.
Dấu vân tay chính: C00D C1EE 4670 2FE9 4B8D D03E 4DC6 8D9C EEF5 033E
[ cds @ notebook ~] $ echo $?
0

Lưu ý rằng tôi đã có một cảnh báo! nhưng gpg vẫn trả về '0', thành công. Tôi cần thiếu một chữ ký đáng tin cậy để trở thành một FAILURE để xác minh.

Một lần nữa cám ơn.

Câu trả lời:


0

Trả lời câu hỏi của riêng tôi.

Tôi không thể tìm thấy một cách tốt để xác định mức độ tin cậy chỉ với gpg.

Tôi đã viết một chương trình c nhỏ. Tôi sẽ liên kết nó ở đây nếu có ai quan tâm.
https://github.com/chris-stones/gpg-verify-trust

biên dịch với gcc "src / gpg-verify-trust.c -lgpgme -o verify_trust".
phụ thuộc vào các tiêu đề / thư viện gpgme.

trả về 0 cho không tin tưởng
trả về 1 cho tin cậy cận biên
trả về 2 cho hoàn toàn tin cậy
trả về 3 cho niềm tin cuối cùng
bất kỳ giá trị trả lại nào khác chỉ ra lỗi.

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.