Sử dụng GNU Privacy Guard (GnuPG)

Lâm Vĩnh Niên, nien.lam at gmail dot com

Phiên bản: 1.4 (060205)

Các phiên bản cũ: 1.3 (051229), 1.2 (050604), 1.1 (050104), 1.0 (041223)

Nội dung

1. Giới thiệu
2. Cài đặt
3. Khoá công khai và khoá riêng tư
4. Tạo cặp khoá
5. Xuất, nhập và trao đổi khoá
5.1. Xuất khoá công khai
5.2. Nhập khoá công khai
5.3. Nhập xâu khoá đã có
6. Mã hoá và giải mã tài liệu
7. Tạo và xác minh chữ kí
7.1. Tạo tài liệu nhị phân
7.2. Tạo tài liệu kí đọc được
7.3. Chữ kí tách rời
7.4. Cùng lúc mã hoá và kí tài liệu
8. Quản lí khoá
8.1. Thao tác trên xâu khoá
8.2. Thao tác trên khoá
8.2.1. Xem cặp khoá
8.2.2. Tính nguyên vẹn của khoá
8.2.3. Thêm và xoá thành phần của khoá
8.2.4. Thu hồi các thành phần của khoá
8.2.5. Cập nhật thời gian hết hiệu lực
8.2.6. Xác thực khoá
8.3. Tạo chứng nhận thu hồi
8.4. Phân phối khoá
9. Các vấn đề khác
9.1. Xác định khoá
9.2. Đặt xâu khoá ở một thư mục khác
9.3. Tạo khoá công khai từ khoá riêng tư
10. Thuật ngữ
11. Tài liệu tham khảo

1. Giới thiệu

GNU Privacy Guard (GnuPG) là công cụ bảo mật dùng trong trao đổi thông tin và lưu trữ dữ liệu. Nó có thể được dùng để mã hoá dữ liệu và tạo chữ kí số. GnuPG tuân theo chuẩn OpenPGP được miêu tả ở RFC 2440, vì vậy nó tương thích với PGP (PGP Corp.). GnuPG được phát hành dưới giấy phép GPL.

GnuPG có thể hoạt động trên nhiều môi trường: GNU/Linux, FreeBSD, OpenBSD, NetBSD, các phiên bản Windows, MacOS X,...

Bản mới nhất của tài liệu này có thể được tìm thấy ở http://labang.sourceforge.net.

2. Cài đặt

Hầu hết các bản phân phối Linux đều có phần mềm GnuPG được đóng gói sẵn. Nếu muốn biên dịch từ nguồn, có thể tải gói nguồn xuống từ trang chủ của GnuPG tại http://www.gnupg.org/, giải nén và chạy lần lượt các lệnh
./configure
make
make install
Có thể xem các tuỳ chọn cấu hình với lệnh ./configure --help.

Trên Windows, có thể giải nén vào c:\gnupg; nếu cài đặt vào một thư mục không phải c:\gnupg, cần thay đổi các đường dẫn trong tập tin gnupg-w32.reg (bằng Notepad chẳng hạn), rồi chạy lệnh

start c:\đường\đến\gnupg-w32.reg
Sau đó cần thêm thư mục cài đặt GnuPG (c:\gnupg hoặc nơi đã chọn khác) vào biến môi trường PATH: trên Windows 95/98/ME biên tập tập tin c:\autoexec.bat (các đường dẫn cách nhau bằng dấu ;), trên Windows NT/2000/XP vào Control Panel --> System Properties --> Advanced tab --> Environment Variables --> System variables.

3. Khoá công khai và khoá riêng tư

Mỗi người dùng có một cặp khoá gồm khoá riêng tư (private key) và khoá công khai (public key). Khoá riêng tư cần được giữ bí mật; còn khoá công khai có thể được đưa cho người cần liên lạc. Một tài liệu (văn bản hoặc nhị phân) có thể được mã hoá với bất cứ khoá nào trong hai khoá đó và được giải mã với khoá kia. Ví dụ, A muốn gửi cho B một tài liệu, A sẽ dùng khoá công khai của B để mã hoá; khi nhận, B sẽ dùng khoá riêng tư của mình để giải mã và không ai khác có thể giải mã. Ở trường hợp khác, B muốn bảo đảm là tài liệu được gửi từ A, A sẽ dùng khoá riêng tư của mình để mã hoá hoặc kí tài liệu và B sẽ dùng khoá công khai của A để mở tài liệu hoặc xác minh chữ kí.

4. Tạo cặp khoá

gpg --gen-key
Quá trình tạo khoá sẽ đưa ra một số câu hỏi: Để phát sinh cặp khoá, GnuPG cần thu thập các bit ngẫu nhiên qua hoạt động của máy tính; do đó có thể thúc đẩy quá trình này bằng cách gõ vài kí tự ngẫu nhiên vào bàn phím.

Sau khi tạo khoá xong, bạn nên tạo chứng nhận thu hồi ngay (xem 8.3).

5. Xuất, nhập và trao đổi khoá

5.1. Xuất khoá công khai

Để công bố khoá công khai, đầu tiên nó cần được xuất ra:
gpg --output mypubkey.gpg --export uid
sẽ xuất ra khoá công khai ở dạng nhị phân. uid có thể là Real Name hoặc địa chỉ email có ở căn cước người dùng hoặc căn cước khoá (xem 9.1).

Để thuận tiện cho việc trao đổi qua email hoặc xuất bản trên web, khoá công khai có thể được bọc lớp vỏ ASCII. Nói chung, bất cứ các kết quả xuất nào từ GnuPG (khoá, tài liệu mã hoá, chữ kí) cũng đều có thể bọc lớp vỏ ASCII với tuỳ chọn --armor.

gpg --armor --output mypubkey.txt --export uid
Tập tin mypubkey.txt có dạng
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: GnuPG v1.2.4 (GNU/Linux)

[...]
-----END PGP PUBLIC KEY BLOCK-----
Chép toàn bộ nội dung tập tin này, gồm cả các dòng bắt đầu với "-----" vào trang web hoặc nội dung email để công bố khoá công khai.

Lưu ý: Có thể xuất khoá riêng tư theo cách này, với tuỳ chọn --export-secret-keys thay vì --export. Khi công bố khoá, cần kiểm tra dòng đầu tiên chứa chữ PUBLIC hay PRIVATE và dĩ nhiên không công bố khoá riêng tư.

Có thể chọn một số khoá để xuất thành một xâu khoá con mới:

gpg --armor --export key1 key2 key3 key4 > keys1-4.asc

5.2. Nhập khoá công khai

gpg --import pubkey
pubkey là khoá công khai cần nhập, có thể ở dạng nhị phân hoặc ASCII. Với khoá dạng ASCII, GnuPG chỉ đọc những dòng nằm trong khối tạo bởi BEGIN PGP PUBLIC KEY BLOCKEND PGP PUBLIC KEY BLOCK.

Khoá công khai có thể mang căn cước người dùng giả mạo, do đó nó cần được xác thực (validated) sau khi nhập.

gpg --edit-key uid
sẽ vào chế độ dòng lệnh nội tại (uid có thể là Real Name hoặc địa chỉ email trong căn cước người dùng của khoá vừa nhập):
Command>
Nên kiểm tra đối chiếu dấu vân tay của khoá (lệnh fpr) với người chủ (qua điện thoại, gặp gỡ...) trước khi kí (lệnh sign) khoá để xác thực. Ý nghĩa của việc kí khoá là để xác nhận khoá thuộc đúng người mà nó nói là nó của người đó. Khoá đã kí có thể được kiểm tra (lệnh check) để liệt kê các chữ kí có trên nó - mỗi căn cước người dùng có một hoặc nhiều chữ kí tự thân (self-signature) cũng như chữ kí của từng người đã xác thực khoá.

Ngoài ra, có thể kiểm tra dấu vân tay và kí khoá theo cách sau:

gpg --fingerprint uid
gpg --sign-key uid
Trong trường hợp có nhiều khoá riêng tư, có thể chỉ định khoá riêng tư nào được dùng để kí với khoá công khai của người khác:
gpg --default-key khoá_riêng_tư_muốn_dùng --sign-key uid
Khoá công khai sau khi được xác thực có thể được gửi lại lên key server (xem 8.4), góp thêm một đường liên hệ tin tưởng vào khoá đó. Cần lưu ý là việc công bố khoá công khai của người khác lên key server công cộng nên được sự đồng ý của người đó.

5.3. Nhập xâu khoá đã có

Trường hợp này gặp khi cần dùng bộ xâu khoá trên nhiều máy tính.
gpg --import /đường/dẫn/secring.pgp
để nhập xâu khoá riêng tư. Và rất có thể sẽ cần nhập xâu khoá công khai:
gpg --import /đường/dẫn/pubring.pgp
Ngoài ra, cũng có thể nhập từng khoá thay vì nhập cả xâu khoá.

Tuy nhiên, việc nhập khoá hay xâu khoá không phải là giải pháp tốt nếu thao tác trên máy tính không phải của chính người dùng. Khi đó, có thể chép các xâu khoá vào thiết bị lưu trữ ngoài (đĩa mềm, CD,...) và trực tiếp dùng chúng bằng các tuỳ chọn --keyring xâu_khoá_công_cộng hoặc --secret-keyring xâu_khoá_cá_nhân (có thể thêm tuỳ chọn --no-default-keyring để không dùng các xâu khoá mặc định). Nếu không ghi rõ đường dẫn cho các xâu khoá thì chúng sẽ được tìm trong thư mục nhà (~/.gnupg nếu không dùng --homedir).

6. Mã hoá và giải mã tài liệu

Trường hợp này dùng khoá công khai để mã hoá và dùng khoá riêng tư để giải mã.

Tuỳ chọn --encrypt được dùng để mã hoá tài liệu.

gpg --output doc.gpg --encrypt --recipient uid doc
Tài liệu cần mã hoá là doc và tài liệu xuất đã được mã hoá là doc.gpg; --recipient chỉ định khoá công khai được dùng, có thể dùng nhiều --recipient.

Giải mã tài liệu với tuỳ chọn --decrypt.

gpg --output doc --decrypt doc.gpg
Quá trình này dùng khoá riêng tư và cần nhập cụm từ vượt.

Để giải mã tài liệu với xâu khoá bên ngoài:

gpg --secret-keyring xâu_khoá --output doc --decrypt doc.gpg

Tài liệu cũng có thể được mã hoá mà không cần khoá công khai, được dùng khi muốn bảo mật tài liệu.

gpg --output doc.gpg --symmetric doc
Enter passphrase:
Cụm từ vượt ở đây nên khác với từ vượt dùng bảo vệ khoá riêng tư.

7. Tạo và xác minh chữ kí

Trong trường hợp này, chữ kí được tạo từ khoá riêng tư và được xác minh bằng khoá công khai tương ứng.

7.1. Tạo tài liệu nhị phân

gpg --output doc.sig --sign doc
Tài liệu doc sẽ được nén trước khi kí và kết quả xuất doc.sig ở dạng nhị phân.

Một tài liệu đã được kí có thể được kiểm tra chữ kí (--verify) hoặc vừa kiểm tra chữ kí và vừa khôi phục tài liệu (--decrypt).

gpg --output doc --decrypt doc.sig

7.2. Tạo tài liệu kí đọc được (clearsigned)

Thường thông điệp email không cần (và cũng không được mong muốn) nén khi kí. Tuỳ chọn --clearsign gói tài liệu trong chữ kí dạng ASCII mà không làm thay đổi tài liệu (vẫn có thể đọc được văn bản đã kí).
gpg --clearsign doc
sẽ được tập tin doc.asc có dạng
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

[...]
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.2.4 (GNU/Linux)

iD8DBQFByvLH4+iEI365Zq8RAmiEAKCDEv6WDgjfTrWND4mmmHNm2r/2QwCg0+M+
Qo5/YuYlQonM50WUDvNfGAg=
=DnKK
-----END PGP SIGNATURE-----
Dùng tuỳ chọn --verify để xác minh chữ kí.

7.3. Chữ kí tách rời

Chữ kí và tài liệu tách rời nhau, nhờ đó không cần phải khôi phục tài liệu đã được kí.
gpg --output doc.sig --detach-sig doc
Việc xác minh chữ kí cần cả tài liệu và chữ kí tách rời.
gpg --verify doc.sig doc

7.4. Cùng lúc mã hoá và kí tài liệu

Đây là sự kết hợp vừa mã hoá (xem 6) vừa kí (xem 7) tài liệu.
gpg -sear uid doc
với s: sign, e: encrypt, a: armor, và r: recipient. Bỏ tuỳ chọn a nếu muốn tạo tập tin nhị phân.

8. Quản lí khoá

8.1. Thao tác trên xâu khoá

Trên xâu khoá công khai (~/.gnupg/pubring.gpg):
gpg --list-keys
liệt kê các khoá
gpg --list-sigs
như --list-keys, nhưng kèm các chữ kí
gpg --fingerprint
như --list-keys, nhưng kèm các dấu vân tay
gpg --delete-key uid
xoá khoá khỏi xâu khoá
Trên xâu khoá riêng tư (~/.gnupg/secring.gpg):
gpg --list-secret-keys
liệt kê các khoá (việc liệt kê chữ kí hay dấu vân tay đối với khoá riêng tư thì không có ý nghĩa.)
gpg --delete-secret-key uid
xoá khoá khỏi xâu khoá riêng tư và công khai
Có thể thêm tham số uid vào các lệnh liệt kê nêu trên để xem khoá của riêng uid đó.

8.2. Thao tác trên khoá

8.2.1. Xem cặp khoá

gpg --edit-key uid
hiển thị khoá công khai cho dù khoá riêng tư có hay không. Cột đầu tiên cho biết loại khoá (pub: khoá công khai chính (public master signing key), sub: khoá công khai phụ (public subordinate key)). Cột thứ hai cho biết chiều dài bit, loại (D: khoá DSA, g: khoá ElGamal chỉ dùng mã hoá, và G: khoá ElGamal có thể dùng cho mã hoá và kí), và ID của khoá. Cột thứ ba và thứ tư cho biết ngày tạo và ngày hết hạn của khoá. Tiếp theo các khoá là danh sách căn cước người dùng.

Lệnh toggle chuyển qua lại giữa khoá công khai và khoá riêng tư, nếu cả hai cùng có mặt. Thông tin ở khoá riêng tư được hiển thị tương tự như ở khoá công khai. Từ sec cho biết khoá riêng tư chính (private master signing key) và sbb cho biết khoá riêng tư phụ (private subordinate key).

8.2.2. Tính nguyên vẹn của khoá

Một khoá công khai, khi được công bố, có thể bị thay đổi bằng cách thêm hay thay thế khoá phụ, thêm hay thay đổi căn cước người dùng. Một cách giải quyết cho trường hợp này là dùng chữ kí số. Khi dữ liệu được kí bằng khoá riêng tư, khoá công khai tương ứng sẽ được gắn lên dữ liệu đã kí đó. Nói cách khác, chỉ có khoá công khai tương ứng là có thể được dùng để xác minh chữ kí và bảo đảm rằng dữ liệu không bị thay đổi. Khoá công khai có thể được bảo vệ bằng cách dùng khoá riêng tư chủ (master) tương ứng kí lên các thành phần và căn cước người dùng của khoá công khai, từ đó gắn kết các thành phần này vào khoá công khai chủ. Việc kí các thành phần của khoá công khai với khoá riêng tư chủ được gọi là tự kí.

Chữ kí trên căn cước người dùng có thể được kiểm tra bằng lệnh check từ menu của lệnh gpg --edit-key.

8.2.3. Thêm và xoá thành phần của khoá

Thêm căn cước người dùng: adduid, có ích khi cần nhiều căn cước, thí dụ căn cước riêng cho nơi làm việc, cho hoạt động xã hội, cho gia đình, dùng nhiều địa chỉ email với khoá...

Thêm khoá phụ (subkey): addkey. Giao diện tương tự như khi tạo cặp khoá đầu tiên. Khoá phụ có ích lợi vì đối với khoá công khai chủ, mỗi lần thay đổi cần được tái xác thực, là việc có thể khó khăn và mất thời gian; trong khi khoá phụ có thể được thay đổi dễ dàng và việc thay đổi định kì khoá phụ là điều tốt. Nếu một khoá phụ bị phá thì chỉ những tài liệu mã hoá với khoá đó bị lộ.

Khi khoá phụ hay căn cước người dùng được phát sinh, nó được tự kí với khoá kí chủ, do đó quá trình này đòi cung cấp cụm từ vượt.

Xoá căn cước người dùng và khoá phụ: trước hết cần chọn căn cước hoặc khoá phụ muốn thao tác bằng các lệnh tương ứng uid hoặc key với đối số là số thứ tự của căn cước hoặc khoá phụ. Các lệnh này có trạng thái bật/tắt (lặp lại lệnh để bỏ chọn hoặc chọn lại). Nếu không có đối số nào được đưa ra, tất cả căn cước người dùng hoặc khoá phụ sẽ bị bỏ chọn. Sau khi được chọn, các căn cước người dùng hoặc khoá phụ được xoá bằng các lệnh tương ứng deluiddelkey.

Trong việc quản lí xâu khoá tại chỗ, xoá các thành phần của khoá là cách tốt để loại bỏ những thông tin không cần thiết khỏi khoá công khai của người khác. Tuy nhiên xoá căn cước người dùng và khoá phụ của chính khoá mình thì không luôn là cách hay vì nó gây rắc rối cho việc phân phối khoá. Theo mặc định, khi một người nhập khoá công khai mới được cập nhật của bạn nó sẽ được trộn lẫn với phiên bản cũ của khoá công khai của bạn trên xâu khoá của anh ta, nếu nó tồn tại. Các thành phần từ hai khoá đó sẽ được kết hợp, do đó nó sẽ phục hồi lại những gì mà bạn đã xoá. Trong trường hợp này để cập nhật đúng đắn khoá, người dùng cần phải xoá phiên bản cũ của khoá trước khi nhập khoá mới. Điều này đặt thêm một gánh nặng cho anh ta. Hơn nữa khi bạn gửi khoá lên key server, quá trình hoà trộn xảy ra không thay đổi được. Do đó, khi cập nhật khoá của chính mình người dùng nên thu hồi các thành phần khoá thay vì xoá chúng.

8.2.4. Thu hồi các thành phần của khoá

Thu hồi khoá phụ với lệnh revkey sau khi chọn khoá phụ cần thao tác. Khoá được thu hồi sẽ có chữ kí tự thân báo nó đã được thu hồi. Không như tuỳ chọn dòng lệnh --gen-revoke, việc thu hồi khoá phụ có tác dụng ngay tức thì.

Căn cước người dùng miêu tả người thực sự sở hữu khoá liên hệ, do đó về lí thuyết nó không thể được thay đổi. Tuy vậy trong thực tế các thành tố trong căn cước người dùng có thể được thay đổi trong quá trình sử dụng, như địa chỉ email và lời bình, vì vậy nó làm mất hiệu lực căn cước người dùng.

Quy định kĩ thuật của OpenPGP không hỗ trợ thu hồi căn cước người dùng, nhưng căn cước người dùng có thể được thu hồi hiệu quả bằng cách thu hồi chữ kí tự thân có trên nó. Do đó, vì lí do an toàn, căn cước người dùng không có chữ kí tự thân sẽ không được tin tưởng.

Chữ kí được thu hồi bằng lệnh revsig, sẽ có dấu nhắc để quyết định những chữ kí nào cần thu hồi. Lệnh check liệt kê những chữ kí nào đã bị thu hồi.

Khoá phụ và chữ kí tự thân bị thu hồi sẽ không bị xoá mà có chữ kí tự thân thông báo nó đã được thu hồi. Vì vậy việc thu hồi giúp khoá công khai luôn được giữ nhất quán khi phân phối và nhập với các bản cũ của nó.

8.2.5. Cập nhật thời gian hết hiệu lực

Cập nhật thời gian hết hiệu lực (expiration time) của một khoá bằng lệnh expire. Nếu không chọn khoá nào thì khoá chính sẽ được cập nhật.

8.2.6. Xác thực khoá

Phần 5.2 đề cập việc xác thực từng khoá, cách này sẽ khó khăn nếu có số lượng lớn khoá cần xác thực. GnuPG giải quyết vấn đề này với mạng lưới tin tưởng (web of trust), ở đó việc xác thực một khoá công khai được uỷ thác cho những người được tin tưởng, được đánh giá qua lệnh trust. Trong thực tế, mức tin tưởng mang tính chủ quan. Ví dụ A đã kí khoá của B và B đã kí khoá của C và D. Do đó khoá của B thì xác thực đối với A; nhưng A có thể không tin tưởng B xác thực đúng đắn các khoá anh ta kí, khi đó A sẽ không chấp nhận các khoá của C và D là xác thực nếu chỉ dựa trên chữ kí của B. Mô hình mạng lưới tin tưởng giúp kiểm tra khả năng xác thực khoá bằng cách liên hệ mỗi khoá trong xâu khoá một với mức độ tin tưởng của bạn vào người chủ khoá. Có các mức tin tưởng:
unknown (q)
Không rõ về sự đánh giá của người sở hữu khi kí khoá. Các khoá (không phải của bạn) trên xâu khoá công khai lúc đầu được đánh giá ở mức này.
none (n)
Người sở hữu được biết là kí không đúng trên khoá khác.
marginal (m)
Người sở hữu hiểu được ý nghĩa của việc kí khoá, và xác thực đúng khoá trước khi kí.
full (f)
Người sở hữu hiểu biết rất rõ về việc kí khoá, và chữ kí của anh ta tốt như chữ kí của chính bạn.
ultimate (u)
Bạn có khoá riêng tư của khoá công khai này.
Mức tin tưởng đánh giá trên khoá được xem là thông tin riêng tư và không đi kèm theo khoá khi nó được xuất. Nó cũng được lưu trữ ở một cơ sở dữ liệu bên ngoài xâu khoá.

Trong mô hình mạng lưới tin tưởng, một khoá K được xem là xác thực khi nó thoả mãn 2 điều kiện:

  1. nó được kí bởi đủ số khoá xác thực, nghĩa là
  2. khoảng cách từ khoá K trở về khoá của bạn ít hơn hoặc bằng 5 bước.
Khoảng cách bước, số khoá marginal và full cân thiết có thể được thay đổi. Các con số bên trên là theo giá trị mặc định dùng bởi GnuPG.

8.3. Tạo chứng nhận thu hồi

Chứng nhận thu hồi nên được tạo ngay lập tức sau khi tạo cặp khoá để đề phòng trường hợp mất khoá riêng tư, quên cụm từ vượt... Tuy nhiên, sau này vẫn có thể tạo lại chứng nhận thu hồi, nhất là khi có lí do cụ thể cho trường hợp thu hồi vì chuẩn OpenPGP cho phép nêu lí do và lời bình về lí do thu hồi.
gpg --output my-revocation.asc --gen-revoke mykeyid
trong đó mykeyid là ID của cặp khoá chính, my-revocation.asc là chứng nhận thu hồi được phát sinh. Nếu không có tuỳ chọn --output, kết quả sẽ được xuất ra standard output. Chứng nhận này thường ngắn, do đó nó có thể được in ra và giữ ở một nơi an toàn.

Chứng nhận thu hồi có thể được công bố để báo cho người khác biết khoá công khai không còn được sử dụng. Trường hợp này gặp khi người dùng quên cụm từ vượt, khoá riêng tư bị mất hoặc lộ,...

Vì hầu hết các keyserver không chấp nhận chứng nhận thu hồi ở dạng "trần trụi", nên chứng nhận này cần được nhập vào gpg và gửi khoá đã bị thu hồi lên keyserver:

gpg --import my-revocation.asc
gpg --keyserver certserver.pgp.com --send-keys mykeyid
Khoá công khai bị thu hồi vẫn có thể được dùng để xác minh chữ kí trong quá khứ, nhưng không thể được dùng để mã hoá thông điệp gửi đến người chủ. Nó cũng không ảnh hưởng đến việc giải mã thông điệp cũ nếu người dùng vẫn còn khoá riêng tư.

8.4. Phân phối khoá

Khoá có thể được trao trực tiếp giữa người sử dụng. Trong thực tế, khoá thường được gửi qua email, nếu số lượng trao đổi ít, hoặc đặt trên một trang web riêng tư hoặc trên máy phục vụ lưu trữ chữ kí công khai (public key server). Lưu trữ chữ kí trên key server có ưu điểm là nhiều người có thể truy cập và lấy chữ kí về.

Gửi khoá lên key server:

gpg --keyserver key_server --send-keys uid
Lấy khoá từ key server hoặc kiểm tra chữ kí mới:
gpg --keyserver key_server --recv-keys uid
Có thể liệt kê nhiều uid cùng lúc khi thực hiện các lệnh này.

Nếu không biết rõ uid, có thể tìm (rồi sau đó nhập) khoá:

gpg --keyserver key_server --search-keys từ_cần_tìm
trong đó từ_cần_tìm có thể chứa khoảng trắng.

Nhiều key server công cộng có tại các tên miền pgp.net và keyserver.net; dùng lệnh "host -la <domain>" hay "dig @<server> axfr <domain>" để có danh sách mới nhất. Danh sách key server công cộng cũng được liệt kê ở http://keyserver.kjsl.com/~jharris/keyserver.html. Một số ví dụ là wwwkeys.eu.pgp.net, pgp.mit.edu, pgp.nic.ad.jp... (pgp.nic.ad.jp có thể dùng với cổng 80 - cổng thông thường của key server là 11371.)

Vì các key server được đồng bộ hoá cơ sở dữ liệu nên chỉ cần gửi khoá công khai lên một server và thường trong vài giờ khoá sẽ có mặt ở hầu hết các server. Điều đó cũng làm cho việc dỡ bỏ hay xoá một khoá đã gửi khỏi key server là điều không khả thi; thay vào đó, người dùng huỷ bỏ khoá cũ bằng cách tải chứng nhận thu hồi lên key server. Trong trường hợp quên cụm từ vượt hoặc mất khoá riêng tư để tạo chứng nhận thu hồi, người dùng có thể áp dụng cách sau để báo cho người khác biết một khoá công khai không còn được sử dụng: tạo một khoá mới, tự kí (đừng tải lên key server vào lúc này), thêm ID người dùng là "Key revoked -- do not use" vào khoá đó, cho ID này làm ID người dùng chính, tự kí nó, kí khoá công khai cũ (nếu bị mất thì lấy nó từ key server) với khoá mới này, tải khoá công khai cũ lên key server, xoá ID người dùng "Key revoked -- do not use" khỏi khoá mới, và tải khoá mới lên key server.

Ngoài ra cũng có báo cáo về việc bị nhận spam email do địa chỉ email bị tiết lộ khi gửi khoá lên key server công cộng. Cách giải quyết chủ yếu dựa trên phần mềm lọc spam cho email vì người dùng và key server cũng không làm được gì nhiều trong chuyện này.

9. Các vấn đề khác

9.1. Xác định khoá

Có nhiều cách khác nhau để xác định căn cước người dùng (user ID) và khoá (key ID):

9.2. Đặt xâu khoá ở một thư mục khác

Theo mặc định, GnuPG tạo và sử dụng một số tập tin (gồm tập tin chứa các tuỳ chọn, pubring.gpg, secring.gpg, trustdb.gpg, và các tập tin khác) trong thư mục nhà của nó - trên các hệ thống unix đó thường là ~/.gnupg; trên Windows là C:\gnupg\.

Tuỳ chọn sau yêu cầu GnuPG tạo xâu khoá (và các tập tin khác) tại một nơi khác:

--homedir /my/path/
Tuỳ chọn này khác với --keyring ở chỗ mục đích của --keyring là chỉ định thêm một tập tin xâu khoá khác vào danh sách xâu khoá đang dùng. Nếu chỉ muốn sử dụng xâu khoá này, thêm tuỳ chọn --no-default-keyring cùng với --keyring.

9.3. Tạo khoá công khai từ khoá riêng tư

Việc này có thể thực hiện từ phiên bản GnuPG 1.2.1.
gpgsplit --no-split --secret-to-public secret.gpg >publickey.gpg
Trước hết nên xuất khoá riêng tư và chỉ tạo khoá công khai từ nó; tuy nhiên, dùng cả xâu khoá riêng tư vẫn được.

10. Thuật ngữ

Public key: khoá công khai
Private key: khoá riêng tư
Passphrase: cụm từ vượt
Validate: xác thực
Expiration time: thời gian hết hiệu lực, thời gian hết hạn
Web of trust: mạng lưới tin tưởng
Revocation certificate: chứng nhận thu hồi
Digital signature: chữ kí số
Self-signature: chữ kí tự thân
Keyring: xâu khoá

11. Tài liệu tham khảo

  1. The GNU Privacy Handbook - The Free Software Foundation - 1999
  2. GnuPG Frequently Asked Questions, Version 1.6.3 - The Free Software Foundation - Jul 30, 2003
  3. A Practical Introduction to GNU Privacy Guard in Windows - Brendan Kidwell - Nov 8, 2003
  4. Pretty Good Privacy (PGP) Page - David E. Ross - 1998-2005
  5. Tom McCune's page for Pretty Good Privacy - Tom McCune