1. GPG là gì?

GPG (GNU Privacy Guard) là một công cụ mã nguồn mở, miễn phí, thực thi theo tiêu chuẩn OpenPGP (RFC 4880). GPG cho phép người dùng mã hoá dữ liệu và tạo chữ ký số để bảo vệ tính riêng tưxác thực danh tính trong môi trường số.

1.1 Cơ chế khoá (Key Pair)

GPG vận hành dựa trên mô hình mã hoá bất đối xứng, sử dụng một cặp khoá có mối liên hệ toán học chặt chẽ, bao gồm:

  • Khoá công khai (Public Key): Dùng để mã hoá dữ liệu gửi cho bạn hoặc xác thực chữ ký của bạn. Khoá này có thể được chia sẻ rộng rãi.
  • Khoá bí mật (Private Key): Dùng để giải mã dữ liệu được mã hoá bằng khoá công khai của bạn hoặc tạo chữ ký số. Đây là thành phần cốt lõi cần được bảo vệ tuyệt đối.

1.2 Cấu trúc Khoá chính và Khoá phụ (Primary Key & Subkeys)

GPG sử dụng cấu trúc phân cấp để tăng cường bảo mật:

  • Primary Key (Master Key): Đóng vai trò là “gốc” của danh tính.
  • Subkeys (Khoá phụ): Được tạo ra từ Khoá chính để thực hiện các tác vụ hàng ngày như ký, mã hoá, xác thực.

Việt tách biệt này giúp bạn có thể cất giữ Khoá chính ngoại tuyến (offline) và chỉ mang Khoá phụ theo thiết bị để sử dụng, hạn chế rủi ro nếu thiết bị bị mất hoặc bị đánh cắp.

1.3 Quyền của khoá (Usage Flags)

Mỗi khoá trong GPG được gán các quyền cụ thể, ký hiệu bằng các chữ cái viết tắt:

  • [C] - Certification (Chứng thực): Quyền tối cao, dùng để tạo / thu hồi / gia hạn các Khoá phụ hoặc xác nhận độ tin cậy cho khoá của người khác. Thường chỉ dành cho Khoá chính (Primary Key).
  • [S] - Signature (Ký số): Dùng để tạo chữ ký số, chứng minh dữ liệu đến từ đúng chủ sở hữu và chưa bị chỉnh sửa.
  • [E] - Encryption (Mã hoá): Dùng để mã hoá dữ liệu, đảm bảo chỉ người nhận đích danh mới có thể giải mã và đọc nội dung.
  • [A] - Authentication (Xác thực): Dùng để xác thực danh tính trong các giao thức như SSH hoặc đăng nhập hệ thống.

2. Các trường hợp sử dụng

GPG không chỉ dành cho các chuyên gia bảo mật, nó là công cụ thiết yếu để bảo vệ danh tính và dữ liệu trong nhiều kịch bản khác nhau, có thể kể đến như:

2.1 Bảo mật Email và Giao tiếp

Đây là ứng dụng phổ biến nhất của GPG.

  • Mã hoá nội dung: Đảm bảo chỉ người nhận đích danh mới có thể đọc nội dung email. Ngay cả nhà cung cấp dịch vụ (như Google hay Microsoft) cũng không thể xem trộm.
  • Ký tên xác thực: Đính kèm một chữ ký số vào email để người nhận biết chắc chắn email đó đến từ bạn, không phải bị kẻ xấu giả mạo địa chỉ gửi.

2.2 Xác thực đóng góp mã nguồn (Git Commit Signing)

Trong phát triển phần mềm, việc giả mạo tên người commit trên Git rất dễ dàng. Khi bạn ký các commit bằng GPG, các nền tảng như Github hay Gitlab sẽ hiển thị nhãn “Verified” màu xanh. Điều này đảm bảo mã nguồn không bị chèn mã độc hay chỉnh sửa bởi kẻ mạo danh.

2.3 Mã hoá tệp tin và lưu trữ đám mây

Trước khi tải các tài liệu nhạy cảm (như file chứa mật khẩu, bản quét căn cước, sao lưu ví tiền điện tử) lên Google Drive hay Dropbox, sử dụng GPG để mã hoá tệp tin cục bộ trên máy tính. Dữ liệu khi nằm trên đám mây sẽ ở dạng mã hoá hoàn toàn, giúp bạn an tâm ngay cả khi tài khoản đám mây bị xâm nhập.

2.4 Quản lý mật khẩu và các thông tin bí mật (Secret Management)

Nhiều công cụ quản lý mật khẩu mã nguồn mở sử dụng GPG để mã hoá từng tệp mật khẩu riêng lẻ. Ngoài ra các kỹ sư DevOps thường dùng GPG (kết hợp với các công cụ như SOPS) để mã hoá các biến môi trường hoặc file cấu hình nhạy cảm trong các dự án phần mềm.

2.5 Thay thế khoá SSH để quản trị hệ thống

Bạn có thể cấu hình GPG với quyền [A] - Authentication để thay thế hoàn toàn cho khoá SSH thông thường. Khi kết hợp với các thiết bị phần cứng như YubiKey, bạn có thể đăng nhập vào các máy chủ từ xa một cách an toàn mà không cần lưu trữ khoá bí mật trực tiếp trên ổ cứng máy tính.

3. Cách quản lý khoá an toàn

Để sử dụng GPG một cách hiệu quả và bảo mật, bạn không nên chỉ tạo một cặp khoá rồi lưu trực tiếp trên máy tính. Thay vào đó, hãy áp dụng mô hình “Khoá chính ngoại tuyến và Khoá phụ di động”.

3.1 Tách biệt Khoá chính (Primary Key) và Khoá phụ (Subkeys)

Đây là quy tắc quan trọng nhất trong quản lý GPG hiện đại:

  • Khoá chính (Primary Key - [C]): Chỉ dùng để quản lý (tạo subkey mới, gia hạn khoá, thu hồi khoá). Bạn nên lưu trữ Khoá chính trong một thiết bị ngoại tuyến (như USB mã hoá) và cất vào nơi an toàn. Không để Khoá chính trên máy tính sử dụng hàng ngày.
  • Khoá phụ (Subkeys - [S], [E], [A]): Là những khoá bạn thực sự dùng để ký commit, mã hoá file hoặc đăng nhập SSH. Bạn chỉ nhập (import) các khoá phụ này vào máy tính hoặc điện thoại.

Lợi ích: Nếu máy tính của bạn bị mất hoặc bị hack, bạn chỉ cần dùng Khoá chính (đang cất an toàn) để thu hồi (revoke) các khoá phụ cũ và tạo bộ khoá phụ mới. Danh tính của bạn vẫn được giữ nguyên.

3.2 Sử dụng thiết bị phần cứng (Hardware Tokens)

Cách quản lý hiệu quả nhất hiện nay là đưa các Khoá phụ vào một thiết bị bảo mật phần cứng như YubiKey:

  • Chống trích xuất: Khoá bí mật nằm trong chip bảo mật và không bao giờ rời khỏi thiết bị. Ngay cả khi máy tính bị nhiễm mã độc, kẻ tấn công cũng không thể copy được khoá của bạn.
  • Tiện lợi: Bạn chỉ cần cắm YubiKey vào bất kỳ máy tính nào để làm việc mà không cần phải thực hiện các bước import/export khoá phức tạp.

3.3 Chứng chỉ thu hồi

Ngay sau khí tạo Khoá chính, bạn phải tạo một chứng chỉ thu hồi (Revocation Certificate)

  • Mục đích: Đây là “lối thoát hiểm” duy nhất nếu bạn quên mật khẩu (passphrase) hoặc mất hoàn toàn Khoá chính. Khi kích hoạt chứng chỉ này, thế giới sẽ biết khoá của bạn không còn giá trị sử dụng.
  • Lưu trữ: In ra giấy hoặc lưu trong một thiết bị lưu trữ tách biệt hoàn toàn với máy tính.

3.4 Quản lý ngày hết hạn

Đừng bao giờ để khoá “không bao giờ hết hạn” (Never Expire).

  • Khuyến nghị: Đặt thời gian hết hạn từ 1 đến 2 năm.
  • Cơ chế: Việc đặt ngày hết hạn đóng vai trò như một “công tắc an toàn”. Nếu bạn mất quyền kiểm soát khoá và không có chứng chỉ thu hồi, khoá sẽ tự động vô hiệu hoá sau một thời gian, ngăn chặn việc bị lợi dụng vô thời hạn. Bạn có thể gia hạn ngày này bất cứ lúc nào bằng Khoá chính.

3.5 Quản lý trên nhiều thiết bị

Một sai lầm phổ biến là tạo mỗi cặp khoá GPG riêng biệt cho một máy tính. Cách làm này khiến bạn mất dấu danh tính và gây khó khăn cho người khác khi muốn gửi dữ liệu mã hoá cho bạn.

  • Một danh tính duy nhất (Single Identity): Bạn nên sử dụng cùng một bộ Khoá phụ (Subkeys) trên tất cả các thiết bị cá nhân (laptop, PC, điện thoại). Điều này giúp bạn có thể giải mã email hoặc ký commit đồng nhất dù đang ở bất cứ đâu.
  • Quy trình thực hiện:
    1. Tạo Khoá chínhKhoá phụ trên một máy tính an toàn, nếu offline càng tốt.
    2. Xuất (export) các Khoá phụ bí mật và nhập (import) chúng vào các thiết bị khác.
    3. Tuyệt đối KHÔNG copy Khoá chính sang các máy tính làm việc hàng ngày.
  • Giải pháp tối ưu: Thay vì copy khoá sang nhiều máy, bạn lưu Khoá phụ vào một thiết bị phần cứng (như YubiKey). Khi cần dùng máy nào, bạn chỉ cần cắm thiết bị đó vào. Đây là cách quản lý đa thiết bị an toàn và chuyên nghiệp nhất.

3.6 Cơ chế Định danh

Trong hệ sinh thái GPG, khoá không định danh cho một “cỗ máy” hay một “tài khoản”. Khoá định danh cho một danh tính con người cụ thể.

  • Định danh bằng Email: GPG sử dụng User ID (UID) - thường bao gồm Tên và Email - để liên kết khoá với một cá nhân.
  • Một người, nhiều Email: Nếu bạn có nhiều email (ví dụ: một email cá nhân, một email công việc), bạn không cần phải tạo hai khoá GPG. Bạn chỉ cần thêm nhiều User ID (UID) vào cùng một khoá chính.
    • Lợi ích: Bạn chỉ cần quản lý một cặp khoá duy nhất, nhưng vẫn có thể dùng nó để ký commit cho công ty hoặc nhận email cá nhân một cách hợp lệ.
  • Sự tin cậy (Trust): Khi người khác “ký” vào khoá của bạn, họ đang xác nhận rằng “Tôi tin rằng khoá này thực sự thuộc về người có tên và email này”. Nếu bạn thay đổi máy tính, danh tính của bạn (Khoá chính) vẫn không đổi.

4. Quy trình vận hành

4.1 Khởi tạo danh tính (Tạo Khoá chính)

Sử dụng lệnh có độ tuỳ biến cao để chọn thuật toán mạnh nhất (khuyến nghị RSA 4096 hoặc Ed25519)

gpg --full-generate-key

Lưu ý:

  • Khi được hỏi, hãy chọn (1) RSA and RSA hoặc (9) ECC (Ed25519) để đảm bảo an toàn lâu dài. Tránh chọn các thuật toán cũ như DSA hoặc Elgamal.
  • Đặt thời hạn hết hạn (ví dụ: 2y).

4.2 Tạo chứng chỉ thu hồi (BẮT BUỘC)

Hãy tạo file này ngay lập tức và cất vào nơi cực kỳ an toàn (offline).

gpg --gen-revoke [ID_KHOA_CHINH] > revocation_certificate.asc

4.3 Quản lý Khoá phụ (Subkeys)

Để thực hiện chiến lược “Khoá chính ngoại tuyên và Khoá phụ di động”, bạn cần tạo các khoá phụ cho việc ký (S) và mã hoá (E):

gpg --edit-key [ID_KHOA_CHINH]

# Trong giao diện gpg>
gpg> addkey
# Chọn loại khoá (thường là RSA hoặc ECC tuỳ nhu cầu)
# Chọn quyền sử dụng (S, E, A)

gpg> save

4.4 Di chuyển khoá sang thiết bị khác (Export/Import)

Để sử dụng trên nhiều thiết bị mà không cần mang theo Khoá chính:

  • Xuất khoá phụ bí mật (Secret Subkeys)
    gpg --export-secret-subkeys [ID_KHOA_CHINH] > subkeys.gpg
    
  • Xuất khoá công khai (Public Key):
    gpg --export --armor [ID_KHOA_CHINH] > public_key.asc
    
  • Nhập vào thiết bị mới:
    gpg --import subkeys.gpg public_key.asc
    

4.5 Gia hạn khoá (khi sắp hết hạn)

Khi khoá sắp đến ngày hết hạn, bạn dùng Khoá chính để nới rộng thời gian mà không làm thay đổi ID khoá:

gpg --edit-key [ID_KHOA_CHINH]

# Chọn khoá cần gia hạn (ví dụ: 'key 0' cho khoá chính, 'key 1' cho khoá phụ)
gpg> key 0
gpg> expire
# Chọn thời gian mới (ví dụ: 2y)
gpg> save

Lưu ý: Sau khi gia hạn, bạn phải xuất lại khoá công khai và cập nhật lên các nền tảng như Github hoặc Keyserver để người khác có thể nhận biết khoá của bạn vẫn còn hiệu lực.

4.6 Cấu hình định danh (Thêm Email/UID)

Nếu bạn muốn dùng một khoá cho cả email cá nhân và công việc:

gpg --edit-key [ID_KHOA_CHINH]
gpg> adduid
# Nhập tên và email mới (ví dụ: "laozi@coden.org")
gpg> trust # Đặt mức độ tin tưởng (thường là 5 - ultimate)
gpg> save

DuogLee