Trình kiểm tra khóa OpenPGP & bộ phân tích gói

Dán một khối OpenPGP armor, khóa, chữ ký hoặc thông điệp — hoặc tải tệp .gpg nhị phân — và xem dấu vân tay, key ID, user ID, subkey, gói chữ ký và cây gói thô. Hoàn toàn trong trình duyệt; không tải lên.
Chỉ bộ phân tích. Công cụ này giải mã và hiển thị dữ liệu OpenPGP — nó không bao giờ xác minh chữ ký bằng mật mã, không giải mã và không hỏi mật khẩu. Để thực sự xác minh hoặc giải mã, hãy dùng GnuPG (gpg --verify, gpg -d) với keyring của riêng bạn. Và như mọi công cụ: khóa riêng thật thuộc về keyring của bạn, không phải tab trình duyệt.
Chấp nhận mọi kiểu armor: PUBLIC KEY BLOCK, PRIVATE KEY BLOCK, MESSAGE, SIGNATURE, ARMORED FILE.
khối xuất keyring nhị phân / .sig / .gpg — đọc cục bộ, không tải lên
Công cụ này kiểm tra gì — và cố ý không làm gì
Nó giải mã armor (nhãn, header, phần base64, checksum CRC-24 khi truyền), phân tích mọi gói ở định dạng header cũ và mới, đọc gói khóa v4/v5/v6 (thuật toán, kích thước MPI, thời điểm tạo), tính dấu vân tay v4 (SHA-1) và v6 (SHA-256), suy ra key ID, liệt kê user ID, subkey và subpacket chữ ký. Nó không xác minh chữ ký (việc đó cần máy băm-và-xác minh đầy đủ của RFC 9580 §5.2.4 cùng một keyring đáng tin), không giải mã và không lấy khóa từ máy chủ khóa. Đối chiếu mọi đầu ra với GnuPG: gpg --show-keys file.asc in dấu vân tay và user ID, gpg --list-packets file.asc xuất cấu trúc gói.
Khóa mẫu trên trang này — bốn nút Mẫu dán một khóa OpenPGP RSA-2048 v4 thật, được tạo riêng cho trang này (chưa từng dùng ở đâu khác). Khóa riêng mẫu được lưu không mã hóa (S2K usage 0) có chủ đích, để bộ phân tích hiển thị bố cục MPI bí mật; một khóa riêng xuất thật sẽ hiển thị cipher và cách dẫn xuất S2K thay vì vậy.
Tự kiểm tra
Chạy lại bộ phân tích với khóa mẫu nhúng, một chữ ký tách rời và một thông điệp đã ký: nhãn armor, kiểm tra CRC-24 và làm hỏng có chủ đích, chuỗi thẻ gói, dấu vân tay v4 và key ID so với giá trị tính độc lập, user ID, dấu vân tay subkey, phát hiện khóa bí mật, cùng các kiểm thử âm (đầu vào rác và gói bị cắt phải bị từ chối). Không có gì được gửi đi đâu cả.
Giải thích OpenPGP từ đầu
Tóm lại: OpenPGP là một chuẩn mở (RFC 4880, được cập nhật bởi RFC 9580 năm 2024) cho mã hóa đầu cuối và chữ ký số, phổ biến nhất để bảo vệ email — và mọi thứ được truyền đi trong các gói nhị phân có nhãn nhỏ, thường được bọc trong lớp "armor" thân thiện với văn bản.
OpenPGP là gì?

PGP ("Pretty Good Privacy") được Phil Zimmermann phát hành năm 1991 như một chương trình ai cũng có thể dùng để mã hóa và ký thông điệp. Để thoát khỏi vấn đề phụ thuộc một nhà cung cấp, định dạng thông điệp được chuẩn hóa thành OpenPGP (RFC 2440 năm 1998, RFC 4880 năm 2007, RFC 9580 năm 2024). Ngày nay GnuPG là triển khai phổ biến nhất, và cùng định dạng gói cũng xuất hiện trong commit git đã ký, ký gói phần mềm, máy chủ khóa và bản ghi DNS OPENPGPKEY.

Mô hình là đầu cuối: bạn và người nhận đều tạo một cặp khóa cá nhân; bất cứ thứ gì mã hóa cho bạn chỉ có khóa riêng của bạn giải được, và khóa riêng không rời khỏi máy bạn. Thay vì một cơ quan chứng nhận trung tâm (như TLS), sự tin cậy vào khóa của người khác đến từ việc ký khóa của nhau — "mạng tin cậy". Dù bạn dùng mạng đó hay chỉ so sánh dấu vân tay ngoài băng (một cuộc gọi, một danh thiếp) là tùy bạn; định dạng không ép buộc cái nào.

Khóa OpenPGP là gì?

Một "khóa" OpenPGP thực chất là một gói nhỏ các gói dữ liệu: một gói khóa chính (neo danh tính, thường được phép ký), một hoặc nhiều gói User ID ("Alice <alice@example.com>"), chữ ký tự ký liên kết các ID với khóa chính, và tùy chọn subkey với chữ ký liên kết riêng — thường là subkey mã hóa riêng để khóa chính quý giá có thể ở ngoại tuyến. Toàn bộ khối armor bạn dán vào trang này chính là gói đó.

Dấu vân tay là băm của gói khóa chính — SHA-1 (20 byte) cho khóa v4, SHA-256 (32 byte) cho khóa v6 — tính trên phần công khai. Key ID chỉ là 8 byte cuối của dấu vân tay v4 (8 byte đầu với v5). Dấu vân tay là thứ bạn so sánh ngoài băng để chắc không ai đổi khóa trên đường tới bạn; key ID là tay cầm ngắn cho máy chủ khóa và không an toàn trước va chạm nếu có kẻ tấn công quyết tâm.

ID thuật toánTênCách dùng điển hình trong khóa
1RSAĐa năng cổ điển; 2048–4096 bit, ký và/hoặc mã hóa
19ECDSAĐường cong NIST (P-256 v.v.), ký
18ECDHThỏa thuận khóa Curve25519/P-256, subkey mã hóa
22EdDSAKý Ed25519 (mặc định hiện đại trong GnuPG 2.4+)
25X25519Subkey mã hóa ghép với khóa chính Ed25519 (khóa v6)

Một khối khóa riêng mang các số bí mật sau phần công khai: một octet S2K usage cho biết chúng được bảo vệ thế nào (0 = không bảo vệ, 254/255 = khóa dẫn xuất từ mật khẩu với cipher), rồi đến các MPI bí mật và checksum. Trang này hiển thị chế độ bảo vệ đó nhưng không bao giờ hỏi mật khẩu và không bao giờ thử giải mã vật liệu bí mật.

Gói OpenPGP là gì?

Bên dưới lớp armor, mọi đối tượng OpenPGP là một chuỗi gói. Mỗi gói bắt đầu bằng một byte thẻ: định dạng cũ nén loại gói 4-bit và kiểu độ dài vào đó, định dạng mới (CTB, bit 6 bật) dùng loại 6-bit và các byte độ dài có thể cả mô tả dữ liệu theo từng phần. Các thẻ thông dụng: 6 = khóa công khai, 5 = khóa bí mật, 14 = subkey, 13 = user ID, 2 = chữ ký, 4 = chữ ký một lần, 11 = dữ liệu literal, 8 = dữ liệu nén, 18 = dữ liệu mã hóa có bảo vệ MDC. Trang này in thẻ, định dạng header, độ dài và hex dump cho mọi gói tìm được, và báo lỗi kèm vị trí byte khi header gói sai.

Gói chữ ký mang metadata trong vùng subpacket băm và không băm. Chỉ vùng băm được chữ ký bảo vệ; vùng không băm (trước đây dùng cho key ID người ký) có thể bị bất kỳ ai ghi đè trên đường truyền, nên người đọc phải coi nó là gợi ý chứ không phải sự thật. Chữ ký tự ký trên một User ID mới thực sự gắn tên với khóa; một gói khóa đứng một mình, dán riêng, không chứng minh ai là chủ sở hữu.

ASCII armor là lớp bọc văn bản: -----BEGIN PGP PUBLIC KEY BLOCK-----, các header tùy chọn như Version: hoặc Comment:, base64 của chuỗi gói, và một dòng cuối =xxxx chứa CRC 24-bit. CRC đó chỉ bắt lỗi truyền — lật một ký tự base64 là trang này sẽ báo — nhưng nó không phải chữ ký và không chứng minh gì về tác giả.

Những lỗi thường gặp
  • Tin một khóa mà không so sánh dấu vân tay. Ai cũng có thể tạo khóa với bất kỳ tên nào. So sánh dấu vân tay qua kênh bạn đã tin cậy (trực tiếp, qua điện thoại) chính là toàn bộ bước xác thực.
  • Nhầm CRC armor với chữ ký. Huy hiệu "CRC OK" chỉ có nghĩa là base64 đã đi qua đường truyền nguyên vẹn, không hơn. Xác minh là một phép toán mật mã mà trang này cố ý không thực hiện.
  • Dùng key ID làm danh tính. Key ID 64-bit có thể bị giả mạo bởi kẻ tấn công có sức tính toán vừa phải ("va chạm key ID"); luôn trích dẫn đầy đủ dấu vân tay.
  • Dán khóa riêng thật vào trang web. Ngay cả một trang cục bộ, không tải lên như trang này cũng là thói quen không nên có. Các mẫu ở đây là khóa dùng một lần được tạo cho bản demo.
  • Giả định "PGP MESSAGE" nghĩa là đã mã hóa. Nhãn armor không cho biết nội dung — thông điệp mẫu trên trang này đã ký nhưng là văn bản thuần, và số thẻ gói 18 so với 11 mới thực sự phân biệt dữ liệu đã mã hóa với dữ liệu literal.
  • Nhập khóa v3. Khóa phiên bản 3 (thiết kế trước 1996, key ID 16-bit yếu) đã bị loại bỏ từ 2014; trình kiểm tra này cố ý từ chối chúng.
Câu hỏi thường gặp

Có xác minh chữ ký không? Không. Nó chỉ phân tích và hiển thị. Xác minh chữ ký cần cấu trúc hash-trailer đầy đủ của RFC 9580, khóa công khai của người ký và quyết định có tin khóa đó hay không — đó là việc của GnuPG hoặc một thư viện OpenPGP.

Khác gì openpgp.js? openpgp.js là một triển khai đầy đủ (mã hóa, giải mã, ký, xác minh) mà bạn nhúng vào ứng dụng; trang này là trình kiểm tra không phụ thuộc để đọc và kiểm toán cấu trúc OpenPGP trong trình duyệt.

Có đọc được bản xuất GnuPG của tôi không? Có — khóa v4, v5 và v6, chữ ký tách rời và thông điệp. Khóa phiên bản 3 bị từ chối kèm ghi chú (đã bỏ từ 2014).

Vì sao có chế độ nhập hex? Dữ liệu OpenPGP thô là nhị phân; nếu bạn có hex dump của keyring hoặc tệp .gpg, hãy dán hex và bộ phân tích xử lý y như các byte đã giải mã.

Có gì được tải lên không? Không. Phân tích, tạo dấu vân tay và sinh báo cáo đều diễn ra trong tab này; trang chạy hoàn toàn trong trình duyệt của bạn.