OpenPGP (Pretty Good Privacy) là một giao thức mã hóa không độc quyền, sử dụng mật mã khóa công khai để bảo vệ thông tin liên lạc qua email. Dựa trên phần mềm PGP gốc, OpenPGP định nghĩa các chuẩn cho tin nhắn, chữ ký và chứng chỉ mã hóa, đảm bảo trao đổi khóa công khai an toàn.
Phil Zimmerman, nhà khoa học phát triển PGP vào năm 1991, mong muốn tạo ra một nền tảng mã hóa nguồn mở, miễn phí cho tất cả mọi người. Cái tên PGP được lấy cảm hứng từ cửa hàng tạp hóa “Ralph’s Pretty Good Grocery” gần nhà ông. Sau khi phát hành công khai năm 1993, PGP nhanh chóng trở thành tiêu chuẩn mã hóa phổ biến. Năm 1996, Zimmerman thành lập PGP Inc. và phát hành bản cập nhật. 14 năm sau, Symantec Group mua lại PGP Inc., tiếp tục phát triển PGP để bảo vệ liên lạc email và tạo ra biến thể nguồn mở OpenPGP.
OpenPGP là một trong những phần mềm triển khai mật mã khóa công khai rộng rãi nhất. Hệ thống mật mã kết hợp này sử dụng cả mã hóa đối xứng và bất đối xứng để đạt được mức độ bảo mật cao.
Mục Lục
Cách thức hoạt động của OpenPGP
OpenPGP kết hợp mật mã khóa công khai, thuật toán khóa đối xứng và hệ thống xác lập mối quan hệ giữa khóa công khai và ID người dùng. Phiên bản đầu tiên sử dụng “mạng lưới tín nhiệm” ngang hàng, khác với cấu trúc cây của hệ thống X.509. Các phiên bản sau này dựa trên kiến trúc tương tự như hạ tầng khóa công khai (PKI).
Hệ thống sử dụng thuật toán mật mã hóa khóa bất đối xứng. Người dùng có một cặp khóa: khóa công khai và khóa bí mật.
.png)
Người gửi dùng khóa công khai của người nhận để mã hóa một khóa chung (khóa phiên), sau đó dùng khóa phiên này để mã hóa thông tin. Các khóa công khai được lưu trữ trên các máy chủ khóa PGP trên toàn thế giới.
Người nhận sử dụng khóa bí mật để giải mã khóa phiên, sau đó dùng khóa phiên để giải mã thông điệp. Sự kết hợp này tận dụng ưu điểm của cả hai thuật toán: thuật toán bất đối xứng giúp phân phối khóa dễ dàng, trong khi thuật toán đối xứng nhanh hơn.
Tương tự, OpenPGP sử dụng thuật toán RSA hoặc DSA để ký văn bản, đảm bảo tính toàn vẹn và xác thực của thông điệp. Người gửi tính giá trị băm của văn bản, tạo chữ ký số bằng khóa bí mật và gửi kèm với văn bản. Người nhận tính lại giá trị băm và giải mã chữ ký số bằng khóa công khai của người gửi. Nếu hai giá trị băm trùng khớp, thông điệp được xác nhận là không bị thay đổi và đến từ người gửi hợp lệ.
Trong các đặc tả gần đây, OpenPGP sử dụng chữ ký tin cậy để tạo ra các nhà cung cấp chứng thực số (CA). Chữ ký tin cậy xác nhận khóa thuộc về người dùng và người đó đáng tin cậy để xác nhận khóa khác. Các phiên bản PGP mới hỗ trợ tính năng hạn sử dụng và thu hồi chứng thực.
Vấn đề xác định mối quan hệ giữa khóa công khai và người sở hữu vẫn là một thách thức. OpenPGP trao quyền quyết định cuối cùng cho người dùng, trong khi các mô hình PKI yêu cầu chứng thực phải được xác nhận bởi một nhà cung cấp chứng thực trung tâm.
Tóm lại, OpenPGP sử dụng kết hợp mật mã khóa công khai và thuật toán khóa đối xứng, cùng với hệ thống xác định mối quan hệ giữa khóa công khai và ID người dùng. Quá trình này đảm bảo bảo mật và xác thực cho thông tin liên lạc.
Cấu trúc tập tin OpenPGP
Khuôn dạng tập tin OpenPGP được sử dụng trong nhiều loại file, bao gồm:
- File có phần mở rộng (.pgp)
- File chữ ký độc lập (.sig)
- File chưa khóa truyền đi (.asc)
- File chứa khóa công khai (.pkr) và khóa riêng (.skr)
Dữ liệu trong một file được chia thành các gói, mỗi gói chứa dữ liệu và một Header xác định loại và độ dài của gói. Tất cả các gói đều bắt đầu bằng Header. Header của gói cũ có độ dài 1, 2, 3 hoặc 5 byte. Bit đầu tiên luôn có giá trị 1, bit thứ hai là 0 nếu là định dạng cũ. Đối với các gói mới, bit thứ hai có giá trị 1, và 6 bit còn lại của byte đầu tiên xác định kiểu gói.
Các gói khóa trong OpenPGP
OpenPGP sử dụng nhiều loại gói khóa khác nhau:
- Gói khóa phiên được mã bằng khóa công cộng (Public key encrypted session key packet)
- Gói khóa phiên được mã bằng khóa đối xứng (Symmetric key encrypted session key packet)
- Gói chữ ký được dùng một lần (One pass signature packet)
- Gói dữ liệu nén (Compressed data packet)
- Gói dữ liệu dạng chữ (Literal data packet)
- Gói định danh người dung (UserID packet)
- Gói tin cậy (Trust packet)
- Gói khóa công cộng (Public key packet)
- Gói khóa bí mật
- Gói khóa chữ ký
Thuật ngữ quan trọng trong OpenPGP
-
KeyID: Giá trị 8 byte giúp tìm kiếm khóa. Không thể coi KeyID là duy nhất cho các khóa khác nhau.
-
Fingerprint: Chuỗi 16-20 byte định danh duy nhất của một khóa, dùng để kiểm tra tính hiệu lực của khóa.
-
ASCII Armor: Quá trình mã hóa lại dữ liệu bằng các ký hiệu hiển thị được, sau đó thêm các header để thông báo dữ liệu mã OpenPGP đã dùng. Ví dụ:
- -BEGIN PGP MESSAGE-
- -BEGIN PGP PUBLIC KEY BLOCK-
- -BEGIN PGP PRIVATE KEY BLOCK-
- -BEGIN PGP MESSAGE,PART X/Y-
- -BEGIN PGP MESSAGE,PART X-
- -BEGIN PGP SIGNATURE-
Sau đó là một dòng trống hoặc in ra giá trị các cặp khóa để gửi các thông tin đặc biệt khác.
Các định dạng khóa bao gồm:
- Version: số phiên bản OpenPGP
- Comment: những gì người gửi muốn nói
- MessageID: dùng để tìm tất cả các phần thông báo chia nhỏ
- Hash: danh sách các thuật toán băm
- Charset: ký tự dùng để xác định ký tự phi tiêu chuẩn
Các thuật toán trong OpenPGP
OpenPGP sử dụng nhiều thuật toán khác nhau:
- Mã khóa đối xứng: IDEA, 3DES, CAST
- Thuật toán khóa công khai: RSA, ElGamal, DSA
- Hàm băm: MD5, SHA
.png)
.png)
Ưu điểm và nhược điểm của OpenPGP
OpenPGP kết hợp mã hóa đối xứng và bất đối xứng, cho phép người dùng chia sẻ thông tin và khóa mật mã an toàn qua Internet. Hệ thống này vừa có tính bảo mật của mật mã bất đối xứng, vừa có tốc độ của mã hóa đối xứng. Chữ ký số đảm bảo tính toàn vẹn của dữ liệu và tính xác thực của người gửi.
Giao thức OpenPGP tạo ra một môi trường cạnh tranh được tiêu chuẩn hóa, với nhiều công ty và tổ chức cung cấp các giải pháp OpenPGP tương thích với nhau.
Tuy nhiên, OpenPGP có nhược điểm là không dễ sử dụng và dễ hiểu, đặc biệt đối với người dùng ít kiến thức kỹ thuật. Độ dài của các khóa công khai cũng gây ra một số bất tiện.
Năm 2018, lỗ hổng EFAIL đã gây lo ngại về khả năng khai thác nội dung HTML trong email được mã hóa để truy cập vào phiên bản văn bản gốc. Tuy nhiên, cộng đồng OpenPGP đã biết về các mối lo ngại này từ những năm 1990, và các lỗ hổng này xuất phát từ các cách triển khai khác nhau từ phía máy khách email, chứ không phải do OpenPGP. Mặc dù vậy, OpenPGP vẫn được xem là một phương thức bảo mật cao.
OpenPGP nằm trên Internet Standard Track và đang được phát triển tích cực. Nhiều ứng dụng khách email cung cấp bảo mật email tuân thủ OpenPGP. Đặc điểm kỹ thuật hiện tại là RFC 4880 (tháng 11 năm 2007), kế thừa của RFC 2440. RFC 4880 chỉ định một bộ thuật toán cần thiết bao gồm mã hóa ElGamal, DSA, Triple DES và SHA-1. Tiêu chuẩn này cũng khuyến nghị RSA, AES-128, CAST-128 và IDEA, và hỗ trợ nhiều thuật toán khác.
Ứng dụng của OpenPGP
Một trong những ứng dụng phổ biến nhất của OpenPGP là bảo mật email. OpenPGP chuyển email thành một chuỗi ký tự không thể đọc được (văn bản mã hóa), chỉ có thể giải mã bằng khóa giải mã tương ứng. Tương tự, OpenPGP có thể được triển khai bên trên các ứng dụng khác để bảo mật tin nhắn văn bản và các dịch vụ nhắn tin không bảo mật.
Ngoài ra, OpenPGP có thể được sử dụng để mã hóa các thiết bị riêng lẻ, chẳng hạn như phân vùng đĩa của máy tính hoặc thiết bị di động. Mã hóa đĩa cứng yêu cầu người dùng cung cấp mật khẩu mỗi khi hệ thống khởi động.
Facebook cho phép người dùng sử dụng chuẩn mã hóa OpenPGP để bảo vệ email thông báo và chia sẻ khóa mã hóa công khai với bạn bè, giúp bảo vệ tin nhắn riêng tư và nhạy cảm trước tin tặc.
Kết luận
Từ khi được phát triển vào năm 1991, OpenPGP đã là một công cụ thiết yếu để bảo vệ dữ liệu, cung cấp sự riêng tư, tính bảo mật và xác thực cho nhiều hệ thống truyền thông và nhà cung cấp dịch vụ kỹ thuật số. Mặc dù lỗ hổng EFAIL gây ra những lo ngại, công nghệ cốt lõi vẫn được coi là mạnh mẽ và hợp lý về mặt mật mã. Các cách triển khai OpenPGP khác nhau có thể mang đến các mức độ bảo mật khác nhau.
Trong Thông tư số 39/2017/TT-BTTTT, Bộ Thông tin và Truyền thông khuyến nghị áp dụng tiêu chuẩn OpenPGP, xếp vào nhóm Tiêu chuẩn về an toàn thông tin.
