Mã hóa PGP
Pretty Good Privacy sẽ tròn 35 tuổi vào năm 2026 và vẫn chưa có tính năng nào khác thực hiện được chức năng của nó: mã hóa đầu cuối cho dữ liệu tùy ý, với mô hình khóa không phụ thuộc vào bất kỳ cơ quan trung ương nào. Trải nghiệm người dùng thật tệ, kiến trúc bảo mật hiện đại đã vượt qua nó, tuy nhiên đối với một số tác vụ cụ thể, PGP vẫn là câu trả lời.
Toàn bộ nội dung bài viết được cung cấp bằng tiếng Anh bên dưới.
PGP (Quyền riêng tư khá tốt) được Phil Zimmermann tạo ra vào năm 1991, ban đầu là một cách để mã hóa email của nhà hoạt động trước mối đe dọa truy tố kiểm soát xuất khẩu của Hoa Kỳ. Sau các cuộc chiến pháp lý và tiêu chuẩn hóa trong IETF với tên gọi OpenPGP (RFC 4880, được làm mới trong RFC 9580 vào năm 2024), nó đã trở thành tiêu chuẩn trên thực tế cho dữ liệu được mã hóa không theo thời gian thực. Việc triển khai GnuPG nguồn mở về cơ bản có ở mọi bản phân phối Linux và nhiều nơi khác.
PGP mang lại cho bạn
Bốn khả năng của chúng tôi, được sử dụng độc lập hoặc cùng nhau:
- Encryption — mã hóa tệp/thư thành một hoặc nhiều khóa chung của người nhận; chỉ có khóa riêng của họ mới giải mã được nó.
- Signing — tạo chữ ký mật mã trên một tệp bằng khóa riêng của bạn; bất kỳ ai có khóa công khai của bạn đều có thể xác minh tính xác thực và tính toàn vẹn của tệp.
- Mã hóa và ký kết hợp — cả hai cùng một lúc.
- Chứng nhận khóa — ký khóa công khai của người khác để thể hiện niềm tin của bạn rằng khóa đó thực sự thuộc về người đó, xây dựng một trang Web gồm Trust.
Khóa OpenPGP thực sự trông như thế nào
Khóa OpenPGP là một blob có cấu trúc chứa:
- Một khóa chính (dài hạn, được sử dụng để chứng nhận)
- Một hoặc nhiều khóa con (trung hạn, được sử dụng để mã hóa và ký kết) hàng ngày)
- ID người dùng (địa chỉ email và tên được gắn với khóa này)
- Chữ ký tự ký và chữ ký của bên thứ ba ràng buộc tất cả các mục trên
Việc chia thành các khóa chính + khóa con cho phép người dùng giữ khóa chính ngoại tuyến và xoay vòng các khóa con thường xuyên. Hầu hết người dùng không bận tâm. Các chế độ tạo khóa mặc định thực hiện tất cả điều này một cách tự động.
Mô hình nhận dạng của Web of Trust
PGP được phân cấp: không có cơ quan trung ương. Thay vào đó, người dùng ký khóa của nhau tại "các bên ký khóa" hoặc thông qua xác minh trực tiếp. Nếu Alice ký vào chìa khóa của Bob, Carol — người tin tưởng vào việc ký tên của Alice — có thể mở rộng lòng tin đối với chìa khóa của Bob. Web of Trust kết nối người dùng thông qua chuỗi chữ ký chung.
Trên thực tế, Web of Trust chưa bao giờ hoạt động ở quy mô lớn bên ngoài các cộng đồng nhỏ của những người tin cậy. Đối với hầu hết người dùng, mô hình tin cậy chuyển thành "Tôi tin cậy khóa này vì ai đó đã gửi nó qua email cho tôi" hoặc "Tôi tin cậy khóa này vì tôi đã tải xuống từ trang khóa chính thức". Các lựa chọn thay thế hiện đại như Thư mục khóa web (WKD) tự động tìm nạp khóa phù hợp từ miền của người nhận.
Tại sao PGP khó sử dụng
Các lỗi về trải nghiệm người dùng rất nổi tiếng:
- Quản lý khóa yêu cầu hiểu khóa chung/riêng, khóa con, hết hạn, thu hồi và máy chủ khóa.
- Các công cụ mặc định (gpg, kleopatra) có các bề mặt được thiết kế cho các nhà mật mã.
- Email được mã hóa hiếm đến mức người nhận thường không có khóa, không thể giải mã thư của bạn hoặc không biết cách thiết lập ứng dụng khách của họ.
- Hỗ trợ di động kém.Việc thu hồi
- Key là tùy chọn tham gia và hiếm khi xảy ra; Các khóa bị xâm phạm cũ vẫn tồn tại trên các máy chủ chính trong nhiều thập kỷ.
Bài báo EFAIL năm 2018 cho thấy các lỗi triển khai phổ biến trong các ứng dụng thư khách nhận biết PGP có thể bị khai thác để lọc văn bản gốc. Các lỗi đã được sửa; bài học rộng hơn bị mắc kẹt: công cụ email được mã hóa thực sự rất khó để làm đúng.
Nơi PGP vẫn thắng
Bất chấp những lời chỉ trích, PGP vẫn là câu trả lời cho một số trường hợp sử dụng:
- Ký bản phát hành phần mềm. Bản phân phối Linux, trình quản lý gói và nhiều dự án nguồn mở sử dụng chữ ký PGP trên các bản phát hành. Cơ sở hạ tầng đã hoàn thiện, chữ ký di chuyển cùng với các tệp và việc xác minh chúng không yêu cầu phải thực hiện một chuyến đi khứ hồi qua mạng.
- Signing Git cam kết. GitHub, GitLab và Gerrit đều xác minh chữ ký PGP trên các cam kết và thẻ. Mô hình này giống như đối với các bản phát hành.
- Truyền tệp bí mật đến một người nhận đã biết. Mã hóa một tệp nhạy cảm vào khóa PGP của đồng nghiệp và gửi nó qua bất kỳ kênh nào hoạt động, không đồng bộ, không có bên thứ ba tham gia.
- Tuýt sáo và báo chí. SecureDrop và các hệ thống tương tự vẫn sử dụng OpenPGP cho giao tiếp giữa nguồn với nhà báo trong đó các mô hình mối đe dọa vượt quá Signal.
- Bản sao lưu được mã hóa. Sao lưu vào đám mây không đáng tin cậy và mã hóa bằng PGP thành khóa mà bạn kiểm soát là một trong số ít cách sử dụng phổ biến có thể chấp nhận được xung đột.
Những nỗ lực cải cách hiện đại
Một số dự án đã cố gắng tạo ra PGP có thể sử dụng được. Web Key Directory (WKD) cho phép người dùng xuất bản khóa tại https://example.com/.well-known/openpgpkey/..., khách hàng có thể tự động truy vấn. Sequoia-PGP là bản tái triển khai Rust của OpenPGP với tiền điện tử hiện đại và API sạch hơn. Proton Mail sử dụng OpenPGP nội bộ nhưng ẩn giấu sự phức tạp đằng sau giao diện người dùng webmail. Mailvelope đưa OpenPGP vào webmail thông thường. Những cuộc cải cách đã cải thiện được tình hình; PGP hiếm khi là công cụ phù hợp cho giao tiếp thông thường.
OpenPGP so với Giao thức tín hiệu
Đối với nhắn tin theo thời gian thực khi người dùng trực tuyến, Giao thức tín hiệu ưu việt hơn rất nhiều — bảo mật chuyển tiếp tốt hơn, trải nghiệm người dùng tốt hơn, ứng dụng khách di động hoàn thiện hơn. Để mã hóa tệp/dữ liệu không đồng bộ với danh tính liên tục và các trường hợp sử dụng ngoại tuyến, OpenPGP vẫn không có đối thủ thực sự. Cả hai giải quyết các vấn đề liền kề nhưng khác nhau.
Câu hỏi thường gặp
- Tôi có nên sử dụng PGP cho email không?
- Có lẽ không phải như mặc định của bạn. Nếu phóng viên của bạn đã sử dụng PGP và mô hình mối đe dọa của bạn yêu cầu nó (nhà báo, luật sư, nhà nghiên cứu bảo mật, nhà hoạt động), thì có. Đối với giao tiếp thông thường, Signal hoặc một trình nhắn tin được mã hóa hiện đại khác sẽ hữu dụng hơn. Để truyền tệp không đồng bộ với các mô hình mối đe dọa mạnh, PGP vẫn phù hợp.
- Sự khác biệt giữa PGP và OpenPGP là gì?
- PGP là phần mềm thương mại gốc của Phil Zimmermann (sau này được bán cho Symantec). OpenPGP là tiêu chuẩn mở được cộng đồng rộng rãi hơn đồng ý, được xác định trong IETF RFC. GnuPG (GPG) là triển khai OpenPGP miễn phí được sử dụng nhiều nhất. Trong cách sử dụng thông thường, "PGP" thường có nghĩa là "Phần mềm tương thích với OpenPGP".
- Lượng tử PGP có an toàn không?
- Bộ mật mã OpenPGP hiện tại (RSA, ECDH) thì không. Việc làm mới RFC 9580 của OpenPGP đã bổ sung thêm các chế độ lai sau lượng tử; việc áp dụng chậm vì không có gì buộc phải xoay vòng phím. “Thu hoạch ngay, giải mã sau” là mối quan tâm thực sự đối với dữ liệu được mã hóa PGP có giá trị lâu dài.
- Tại sao EFAIL phá vỡ PGP?
- Nó không phá vỡ được mật mã - nó phá vỡ các ứng dụng thư khách giải mã tin nhắn PGP và sau đó tự động hiển thị HTML và tải hình ảnh từ xa. Một tin nhắn được tạo ra có thể lừa khách hàng gửi nội dung được giải mã lại cho kẻ tấn công thông qua URL hình ảnh. Phong bì mật mã vẫn ổn; lớp ứng dụng bị rò rỉ. Ứng dụng thư khách đã sửa các lỗ hổng.
- Tôi có thể sử dụng cùng một khóa PGP cho nhiều địa chỉ email không?
- Có — khóa OpenPGP có thể có nhiều ID người dùng, mỗi ID cho một địa chỉ email. Bạn có thể thêm hoặc thu hồi ID người dùng theo thời gian mà không cần thay đổi khóa. Các công cụ như Thư mục khóa Web mong đợi điều này; một số khách hàng vẫn bị nhầm lẫn, đặc biệt nếu một số ID người dùng bị thu hồi.