Làm cách nào để quản lý khóa GPG trên nhiều hệ thống?


103

Tôi mới sử dụng GnuPG và cố gắng hiểu cách sử dụng nó tốt nhất. Tôi đã xem xét giải thích ngắn gọn, dễ hiểu về GPG / PGP cho người không kỹ thuật? , nhưng hầu hết các hướng dẫn giải thích PGP với phối cảnh một máy.

Tôi muốn sử dụng GnuPG trên ba thiết bị điện toán: PC Linux, máy tính xách tay Linux và điện thoại Android.

Trường hợp sử dụng cơ bản là mã hóa / giải mã email được quản lý bởi dịch vụ IMAP, vì vậy tất cả các thiết bị đều cần cùng một khóa riêng để giải mã.

Tôi nghĩ rằng lựa chọn của tôi là:

  1. Chỉ cần sao chép tất cả các khóa của tôi vào khóa trên mỗi thiết bị và chủ yếu dựa vào mật khẩu khóa riêng để bảo vệ.

  2. Tạo khóa chính (với --gen-key) để thể hiện danh tính của tôi, sau đó tạo một khóa dùng một lần riêng (một lần nữa với --gen-key) để mã hóa / giải mã email và ký với khóa chính. Cái trước chỉ nằm trên PC của tôi, cái sau được phân phối cho mỗi thiết bị. Miễn là các thiết bị di động của tôi không bị xâm phạm, thì khóa dùng một lần vẫn còn hiệu lực.

Tôi có thể bị hoang tưởng quá mức và làm cho điều này trở nên phức tạp hơn nó, nhưng làm ơn hãy hài hước với tôi. Tôi tin vào việc không bỏ tất cả trứng vào một giỏ.

Khóa chủ được cho là danh tính kỹ thuật số của tôi. Rất nhiều nỗ lực sẽ được dành để xây dựng niềm tin xung quanh danh tính đó, và tôi thà chịu đựng sự bất tiện của chứng hoang tưởng của mình hơn là mất chìa khóa do bất cẩn và phải tạo niềm tin xung quanh khóa chính mới (có lẽ điều này không tệ như tôi nghĩ, nhưng tôi mới biết điều này) .

Tôi có nhiều khả năng bị mất máy tính xách tay hoặc điện thoại của tôi hơn PC. Nếu mất == thỏa hiệp, thì tôi thà mất một cặp khóa dùng một lần (mà tôi có thể thu hồi) so với cặp khóa chính của tôi. Tôi luôn có thể trao niềm tin cho khóa chủ của mình vào khóa dùng một lần mới.

Xin lỗi cho câu hỏi thực sự dài. :-)

TL; DR

Là một mật khẩu đủ bảo vệ để lưu trữ của tôi chủ private key trên nhiều thiết bị?

Kế hoạch của tôi cho lựa chọn số 2 có khả thi không? Tôi đã nhận được một cái gì đó sai hoặc nó có thể được cải thiện?

Nếu tùy chọn # 2 là một ý tưởng tồi, thì thực tiễn tốt nhất khi sử dụng GnuPG cho một người dùng trên nhiều thiết bị là gì?

Câu trả lời:


59

Chà, điều này hơi xấu hổ. Tôi đã dành hàng giờ trong suốt một tuần để cố gắng tìm ra vấn đề này và câu trả lời dường như là nói dối với các khóa con - một chủ đề mà hướng dẫn sử dụng GnuPG và FAQ làm sáng tỏ.

Trong khi nghiên cứu các khóa con là gì và tại sao chúng có thể được sử dụng thay vì --gen-key, tôi tình cờ thấy viên ngọc này: http://wiki.debian.org/subkeys .

Wiki của Debian giải thích cách triển khai tùy chọn # 2 (xem OP) bằng khóa chính với khóa con và giải thích thêm về cách xóa khóa chính khỏi bất kỳ hệ thống nào sau khi lưu trữ trên phương tiện sao lưu (ví dụ: ổ đĩa flash). Các khóa con sau đó có thể được phân phối giữa các dây móc khóa của tôi trên mỗi thiết bị.

Ưu điểm:

  1. Không dựa chủ yếu vào mật khẩu để bảo vệ khóa chính,

  2. Nếu bất kỳ hệ thống nào bị xâm phạm, khóa chính sẽ không khả dụng ngay lập tức (trừ khi tôi dại dột để ổ đĩa flash của mình cắm vào hoặc gắn ổ đĩa nói trên vào một hệ thống bị xâm nhập),

  3. Đây là một cách thực hành được thực hiện bởi nhóm phát triển Debian.

  4. Sử dụng tính năng khóa con của GnuPG. Có vẻ như có tổ chức hơn một chút so với việc có một loạt các phím lỏng trên khóa của bạn, đúng không?

Phần có liên quan từ Debian Subkey Wiki

  1. Tạo bản sao lưu của các tệp GnuPG hiện tại của bạn ($ HOME / .gnupg). Giữ chúng an toàn. Nếu có sự cố xảy ra trong các bước sau, bạn có thể cần điều này để trở lại một nơi tốt đã biết. (lưu ý: umask 077 sẽ dẫn đến quyền hạn chế cho bản sao lưu.)

    • umask 077; tar -cf $HOME/gnupg-backup.tar -C $HOME .gnupg
  2. Tạo một khoá con mới để ký.

    • Tìm ID chính của bạn: gpg --list-keys yourname
    • gpg --edit-key YOURMASTERKEYID
    • Tại gpg>dấu nhắc:addkey
    • Điều này yêu cầu cụm mật khẩu của bạn, nhập nó vào.
    • Chọn loại khóa "RSA (chỉ ký)".
    • Sẽ là khôn ngoan khi chọn kích thước khóa bit 4096 (hoặc 2048).
    • Chọn một ngày hết hạn (bạn có thể xoay các khóa con của mình thường xuyên hơn các khóa chính hoặc giữ chúng trong vòng đời của khóa chính, không có thời hạn sử dụng).
    • GnuPG sẽ (cuối cùng) tạo ra một khóa, nhưng bạn có thể phải đợi nó để có đủ entropy để làm như vậy.
    • Lưu chìa khóa: save
  3. Bạn cũng có thể lặp lại điều này và tạo khóa phụ "RSA (chỉ mã hóa)" nếu muốn.

  4. Bây giờ sao chép $HOME/.gnupgvào ổ đĩa USB của bạn.

  5. Đây là phần khó khăn. Bạn cần xóa khóa chính, và thật không may, GnuPG không cung cấp một cách thuận tiện để làm điều đó. Chúng ta cần xuất khóa con, xóa khóa riêng và nhập lại khóa con.

    • Xuất các khóa con: gpg --export-secret-subkeys YOURMASTERKEYID >secret-subkeys(để chọn các khóa con nào sẽ xuất, chỉ định ID khóa con từng được theo sau bằng dấu chấm than gpg --export-secret-subkeys SUBKEYID! [SUBKEYID! ..]:)
    • Xóa khóa bí mật chính của bạn: gpg --delete-secret-key YOURMASTERKEYID
    • Nhập lại các khóa con: gpg --import secret-subkeys
    • Xác minh rằng gpg -Khiển thị sec#thay vì chỉ seccho khóa riêng của bạn. Điều đó có nghĩa là chìa khóa bí mật không thực sự ở đó. (Xem thêm sự hiện diện của gói OpenPGP giả trong đầu ra của gpg --export-secret-key YOURMASTERKEYID | gpg --list-packets).
    • Tùy chọn, thay đổi cụm mật khẩu bảo vệ các khóa con : gpg --edit-key YOURMASTERKEYID passwd. (Lưu ý rằng tài liệu khóa riêng trên bản sao lưu, bao gồm khóa chính, sẽ vẫn được bảo vệ bởi cụm mật khẩu cũ.)

Máy tính của bạn đã sẵn sàng để sử dụng bình thường.

Khi bạn cần sử dụng các khóa chính, gắn ổ USB được mã hóa và đặt biến môi trường GNUPGHOME:

export GNUPGHOME=/media/something
gpg -K

hoặc sử dụng --home đối số dòng lệnh:

gpg --home=/media/something -K

Lệnh sau sẽ liệt kê khóa riêng của bạn với secvà không sec#.

Nhiều khóa con trên mỗi máy so với một khóa con cho tất cả các máy

Trích từ wiki khóa con Debian. Ban đầu ghi nhận trong ý kiến. [Paraphrasing] và nhấn mạnh của tôi.

Người ta có thể muốn có một khóa con cho mỗi máy để bạn chỉ cần trao đổi khóa con có khả năng bị xâm phạm của máy đó. Trong trường hợp một khóa con được sử dụng trên tất cả các máy, nó cần được trao đổi trên tất cả các máy [khi khóa con đó bị nghi ngờ hoặc bị nghi ngờ bị xâm phạm].

Nhưng điều này chỉ hoạt động để ký subkey . Nếu bạn có nhiều khóa con mã hóa, gpg được cho là chỉ mã hóa cho khóa con mã hóa gần đây nhất và không phải cho tất cả các khóa con mã hóa đã biết và không bị thu hồi.


5
Hỏi và đáp tốt, nhưng AFAIK vẫn có một vấn đề với thiết lập này ... Thật tuyệt khi ký, nhưng không phải để mã hóa nếu bạn không muốn chia sẻ cùng một khóa mã hóa giữa các thiết bị khác nhau của mình, bởi vì khi ai đó khiến bạn nhận được mã hóa tin nhắn, gpg sử dụng theo mặc định khóa enc mới nhất không bị thu hồi được tạo. Không thể buộc người gửi sử dụng một khóa con cụ thể tùy thuộc vào UID (nhà hoặc cơ quan, v.v.).
KurzingMetal

2
Có lẽ đây là một vấn đề. Mối quan tâm lớn nhất của tôi là mất mạng tin cậy mà tôi xây dựng xung quanh khóa chính của mình (chỉ có dấu hiệu). Tất nhiên, khóa con mã hóa phải tồn tại trên tất cả các thiết bị tôi sử dụng để đọc tin nhắn được mã hóa. Nếu khóa mã hóa của tôi bị xâm phạm, thì quá trình khôi phục chỉ liên quan đến bản thân tôi; trái ngược với việc mất khóa ký chủ của tôi và phải hỏi / thuyết phục web tin cậy của tôi để ký khóa mới. Tôi không có ý định di chuyển khóa con mã hóa trong kho tiền của mình.
Justin C

9

Là một người không thích những điểm thất bại duy nhất (bao gồm cả khóa chính và đặc biệt là mật khẩu), đây là cách tôi sẽ làm. Nó cho phép các thiết bị hoạt động thông qua một trang web tin cậy, trong khi vẫn cho phép nhận dạng phi tập trung.

Tôi không biết nếu đã có một hệ thống hiện có cho việc này, nhưng tôi nghĩ rằng nó có thể được xáo trộn cùng với một công việc định kỳ và một vài dòng của Bash.

Trong hệ thống này, bạn có hai loại khóa chính: bàn phím thiết bịbàn phím khung thời gian . Một cặp khóa thiết bị được tạo cho người dùng trên mỗi thiết bị và duy trì trên thiết bị đó suốt đời. Một cặp khóa khung thời gian được tạo bởi một máy chủ trung tâm theo các khoảng thời gian thường lệ (hàng tháng, hàng ngày, hàng giờ - tùy thuộc vào mức độ hoang tưởng mà bạn muốn trở thành). Khóa chung được thông báo công khai (bản thân máy chủ có khóa thiết bị riêng để đăng nhập) và khóa riêng được phân phối mã hóa bằng khóa chung của mỗi thiết bị có nghĩa là có quyền truy cập vào khóa này. (Phân phối này phải riêng tư nhất có thể, ví dụ: có thiết bị kết nối trực tiếp với máy chủ.)

Để ký tin nhắn, bạn sẽ sử dụng khóa thiết bị của bất kỳ thiết bị nào bạn đang gửi tin nhắn từ đó. Nếu ai đó muốn gửi tin nhắn cho bạn, họ có thể ký nó với khóa khung thời gian công khai hiện tại của bạn. (Họ nên có một hệ thống tự động để theo kịp các thông báo.) Sau đó, bạn có thể đọc tin nhắn của họ từ bất kỳ thiết bị nào.

Để đọc tin nhắn được mã hóa cũ hơn, các khóa bàn phím khung thời gian cũ hơn được sao lưu trên mỗi thiết bị theo một chiến lược phù hợp (bao gồm cả máy chủ tạo khung thời gian khóa, nếu bạn muốn - một lần nữa, tùy thuộc vào mức độ hoang tưởng của bạn), nơi bạn có một bộ khác các khóa bàn phím được bảo vệ bằng mật khẩu bảo vệ các khóa cũ hơn (tuy nhiên có nhiều mật khẩu theo thời gian mà bạn cảm thấy thoải mái khi nhớ).

Nếu một thiết bị bị đánh cắp hoặc bị xâm phạm, bạn có thể sử dụng một trong những thiết bị đáng tin cậy công khai khác để tạo một tin nhắn được ký công khai xác minh danh tính của bạn (bằng mọi cách, ví dụ: lưu ý rằng bạn sẽ có mặt tại một cuộc họp công khai và / hoặc có một người bạn đáng tin cậy xác minh bạn trực tiếp) và thu hồi khóa thiết bị bị xâm nhập và bất kỳ khóa khung thời gian nào mà nó có quyền truy cập. Khi thu hồi khóa, bạn cũng xóa thiết bị bị đánh cắp khỏi danh sách các thiết bị đáng tin cậy của máy chủ (có mật khẩu và khóa thiết bị đáng tin cậy của bạn).

Chính sách tin cậy các khóa thiết bị mới được công bố phải tuân theo một số thứ như chính sách tin cậy hiện tại - Tôi tin rằng một chính sách phù hợp là tin tưởng vào máy chủ tạo, thiết bị di động và thiết bị lớn và nặng, vì rất khó để đánh cắp / xâm nhập điện thoại của người dùng, máy tính để bàn và VPS trong một vụ trộm được phối hợp trước khi người dùng thông báo.

Nếu máy chủ của bạn bị xâm nhập, bạn chỉ cần thu hồi nó bằng cùng một quy trình được mô tả cho bất kỳ thiết bị bị xâm nhập nào khác (có thể có chính sách mạnh hơn giống với thiết bị mới để thêm thiết bị mới) và sử dụng máy chủ mới được bảo mật hoặc hoàn toàn mới (với một thiết bị khóa mới) sắp tới.


Phần thu hồi có một chút mây như đã viết - thu hồi thiết bị nên có thể có thông báo từ bất kỳ thiết bị nào khác (để không thất bại nếu ai đó đánh cắp máy tính xách tay của bạn và điện thoại của bạn không thể liên lạc trực tiếp với máy chủ), nhưng không thể được thực hiện bởi một tên trộm (vì vậy các thiết bị nên có khóa được bảo vệ bằng mật khẩu để thu hồi). Trong trường hợp báo cáo mâu thuẫn, tất cả các khóa nên tạm thời bị nghi ngờ cho đến khi xác minh thủ công bởi bên thứ ba có thể được thực hiện.
Stuart P. Bentley

Trên thực tế, có thể nên có một cơ chế khác để thu hồi khóa, sử dụng mật khẩu công khai mạnh được cập nhật thủ công (thay thế) một cách thường xuyên - bằng cách này, bạn có thể thu hồi khóa mà không phụ thuộc vào bất kỳ thiết bị nào (giả sử bạn chỉ với điện thoại của bạn và ai đó đánh cắp nó), miễn là bạn giữ bí mật mật khẩu.
Stuart P. Bentley
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.