Làm cách nào để nhập khóa SSH RSA vào GPG dưới dạng khóa riêng _primary_?


16

Tôi hiện có một khóa SSH mà tôi đã sử dụng được một thời gian và tôi muốn bắt đầu sử dụng GnuPG với một khóa mới. Tuy nhiên, do tôi đã sử dụng khóa của mình từ lâu, tôi vẫn muốn sử dụng khóa đó trong GPG làm khóa chính / chính. Tôi đã thử nhập khóa thông qua các hướng dẫn này .

Nhưng, tôi kết thúc với những gì được coi là "khóa con". Hơn nữa, nếu tôi cố gắng nhập nó mà không tạo khóa GPG tiêu chuẩn, GPG thậm chí không nhìn thấy khóa con này. (Tôi giả sử rằng khóa con cần được ký bằng khóa chính trước.)

Làm cách nào để sử dụng khóa này làm khóa chính trong secring.gpg?


Theo nghĩa nào bạn có nghĩa là " _primary_ private key "?
MadHatter hỗ trợ Monica

Câu trả lời:


16

Câu trả lời đơn giản là: Bạn không.

Các khóa SSH và các khóa GnuPG (thực ra là OpenPGP) hoàn toàn khác nhau, mặc dù cả hai giao thức đều có thể sử dụng các cặp khóa RSA.

Và bên cạnh đó, tại sao bạn muốn làm điều đó? Ngay cả khi bạn đã sử dụng cùng một vật liệu chính để tạo khóa PGP của mình, bạn vẫn cần phân phối khóa của mình dưới dạng khóa PGP. Bạn có thể chưa phân phối khóa công khai SSH của mình cho những người bạn tương ứng, do đó, từ quan điểm phân phối khóa, không có sự khác biệt: họ sẽ cần nhận khóa công khai từ bạn. Và ngay cả khi bạn đã phân phối khóa công khai SSH của mình cho người khác, họ sẽ cần thực hiện một số bước bổ sung để có thể nhập nó vào triển khai OpenPGP của họ, điều này có thể hoặc không dễ dàng.

Như kasperd khá chỉ ra, chỉ có một cách để giải thích (đặc biệt) một chữ ký. Nếu bạn sử dụng cùng một khóa cho cả PGP và SSH, nếu ai đó có thể lừa bạn ký một tin nhắn được chế tạo đặc biệt (đó là khả năng giả định trong các cuộc tấn công hệ thống chữ ký nhất định) trong một, thì ngay cả khi cả hai hệ thống đều được cách ly nó có thể tạo ra một thông điệp như vậy theo cách có một ý nghĩa trong một trong các hệ thống, nhưng có nghĩa khác trong một hệ thống khác. Điều đó, bản thân nó, sẽ là một lỗ hổng. (Có thể khai thác? Ai biết được. Nhưng tại sao lại nắm lấy cơ hội?)

Cả hai cặp khóa PGP và SSH đều là các khóa dài hạn, được sử dụng để bảo mật các khóa đối xứng phù hợp (tin nhắn và phiên), cũng như xác minh tính xác thực của một bên từ xa. Điều đó làm cho khóa riêng PGP hoặc SSH trở thành mục tiêu có giá trị cao hơn cho kẻ tấn công so với khóa đối xứng tương ứng. Nếu bạn sử dụng cùng một vật liệu chính cho cả hai và kẻ tấn công có thể nhận ra điều đó, nó chỉ làm tăng giá trị của một cuộc tấn công thành công vào cặp khóa đó.

Không nhìn vào giao thức một cách chi tiết, tôi tưởng tượng rằng việc nhận ra rằng cùng một tài liệu chính đang được sử dụng trong cả hai có thể khá tầm thường, vì khóa công khai về cơ bản được truyền đi rõ ràng.

Chỉ cần tạo khóa PGP mới. Nếu bạn muốn, sau đó đặt nó là RSA và có cùng độ dài với khóa SSH của bạn. (Không có người tỉnh táo nào sẽ nhìn gần hơn nhiều so với việc xác minh dấu vân tay.) Sau đó, phân phối khóa chung cho những người bạn muốn tương ứng, dưới dạng khóa PGP. Nó sẽ dễ dàng hơn nhiều cho mọi người, và rất có thể an toàn hơn, với chi phí của một lượng nhỏ entropy từ nhóm entropy ngẫu nhiên của hệ thống của bạn sẽ được bổ sung nhanh chóng.


Nếu bạn có nhiều khóa trên khóa bí mật của mình và muốn chỉ định khóa nào sẽ được sử dụng theo mặc định, hãy sử dụng các lệnh default-keyvà có thể default-recipient{,-self}trong lệnh ~ / .gnupg / gnupg.conf của bạn.


1
Tôi đồng ý với câu trả lời này. Tuy nhiên, có một lý do nữa để không sử dụng cùng một tài liệu chính. Vì lý do bảo mật, chỉ có một cách để giải thích chữ ký. Có thể giải thích cùng một chữ ký theo hai cách khác nhau, nó sẽ là một lỗ hổng. Ngay cả khi cả ssh và gpg đều được bảo mật, một kẻ thù có thể lừa bạn ký một tin nhắn với một tin nhắn và sau đó lấy chữ ký cho chương trình khác, nơi nó có thể có ý nghĩa khác.
kasperd

@kasperd Điểm tốt. Tôi đã sửa đổi câu trả lời; bạn cảm thấy thế nào
một CVn

Nó có vẻ tốt.
kasperd

1
Tôi nghĩ rằng câu trả lời này không hoàn toàn chính xác: với monkeysphere có một usecase nơi bạn có thể muốn các khóa OpenSSH hiện tại là các khóa con chỉ xác thực trong khóa OpenPGP cá nhân của bạn. Ít nhất tôi muốn sử dụng nó theo cách đó.
dùng134450

Các phím này không khác nhau chút nào; siêu dữ liệu của họ là.
foo

5

Bạn có thể chuyển đổi Khóa SSH thành khóa OpenPGP bằng công cụ pem2openpgptừ dự án monkeysphere . Khóa này sau đó có thể được nhập bởi gnupg như một cặp khóa riêng / công khai thông thường. Vì câu trả lời khác đề cập đến điều này thường không phải là một ý tưởng hay vì ssh không có khái niệm về chứng chỉ, vì vậy bạn đang bổ sung một cách hiệu quả một khả năng cho một khóa hiện có mà trước đây nó không thể có. Điều này nói chung là không có trong mật mã.

Dù sao tôi cũng đã làm điều đó với một trong các khóa ssh của mình nhưng tôi đã thêm cặp khóa vào khóa OpenPGP khác của mình dưới dạng một khóa con chỉ có một cờ khả năng: xác thực. Cờ này có nghĩa là cho các tình huống như thế này, trong đó bạn không muốn ký hoặc mã hóa bất cứ thứ gì bằng cặp khóa (ý nghĩa --encrypt--signtùy chọn cho gnupg) nhưng dù sao bạn cũng muốn có nó trong hộp khóa để xác thực bằng OpenSSH và tác nhân gnupg.

Để biết thêm chi tiết, xem tài liệu về khỉ.


2

Có thể có lý do chính đáng để chuyển đổi khóa định dạng PKCS thông thường để nhập vào gpg.

Ví dụ, nếu bạn muốn đặt nó vào một thẻ thông minh. Các phương tiện gpg cung cấp với các lệnh thông tin thẻ và chỉnh sửa thẻ của nó rất hữu ích cho mục đích này, vậy tại sao không sử dụng nó như một công cụ? Rào cản duy nhất mà bạn cần phải vượt qua là ... chính xác: nhập khóa từ định dạng PKCS # 8 tiêu chuẩn (hoặc định dạng RSA PKCS # 1 "thô") vào kho lưu trữ khóa gpg để xử lý thêm.

Vì vậy - lưu ý phản đối của tôi để trả lời đã được phê duyệt! :)

Một câu trả lời thực sự hữu ích cho loại câu hỏi này được tìm thấy ở đây: /unix/276317/how-can-i-import-a-key-in-pem-format-not-openpgp-into -gpg


1

Sử dụng cái này trên Ubuntu 16.04 hoặc Windows WSL.

sudo apt install -y monkeysphere
cat key.pem | PEM2OPENPGP_USAGE_FLAGS=authenticate pem2openpgp "Key <key@example.com>" > key.pgp

Thẻ nhập khẩu. Có thể được thực hiện trên Windows hoặc Linux.

gpg --import key.gpg

Di chuyển đến thẻ

Tìm định danh chữ ký quan trọng.

gpg --list-key

Di chuyển khóa xác thực vào thẻ

gpg --edit-key FFFFFFFFFFF
keytocard

Chọn một số cho khe xác thực.

Bạn đã làm xong ở đây.

Nhớ xóa khóa khỏi móc khóa gpg nếu bạn đang sử dụng thẻ. Sử dụng mã định danh từ trên.

gpg --delete-secret-key FFFFFFFFFFF

Linh tinh

Không cần thiết nhưng có thể hữu ích để có được một khóa ở định dạng pgp dựa trên văn bản.

gpg -a --export FFFFFF > key.asc
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.