Mã hóa PDF thật sự hoạt động ra sao — và các giới hạn của nó
Spec: ISO 32000-2, §7.6ISO 32000-2 §7.6
Tổng quan nhanh
Phần tiêu đề “Tổng quan nhanh”Mã hóa PDF xáo trộn các từ ngữ và hình ảnh bên trong một tài liệu để chỉ người có đúng mật khẩu mới đọc được chúng. Đó là mật mã học thực thụ, và nó làm tốt công việc duy nhất nó có. Nó cũng bị hiểu lầm rộng rãi, vì cùng tính năng đó mang theo một cơ chế thứ hai — các cờ quyền — trông giống một ổ khóa nhưng không phải.
Trang này tách hai thứ đó ra. Nó giải thích AES-256 thực sự bảo vệ điều gì, hai mật khẩu thực sự dùng để làm gì, và ranh giới thẳng thắn nằm ở đâu.
Vì sao điều này quan trọng
Phần tiêu đề “Vì sao điều này quan trọng”Người ta tìm tới mã hóa khi một tài liệu nhạy cảm: một hợp đồng, một bảng lương, một thư y tế. Kỳ vọng là hợp lý — hãy giữ riêng tư cái này, và ngăn người ta in hay sao chép nó. PDF đáp ứng nửa đầu của mong muốn đó một cách thuyết phục và nửa sau chỉ trên cơ sở danh dự.
Nhầm lẫn hai thứ là nơi cái giá phải trả rơi xuống. Một nhóm đánh dấu một tệp “không cho sao chép”, tin rằng nền tảng cưỡng chế điều đó, và xuất bản. Vài tháng sau ai đó sao chép văn bản trong ba mươi giây bằng một trình đọc khác, và giả định chưa bao giờ đúng đó lặng lẽ biến thành một vụ rò rỉ. Mã hóa chưa từng bị phá vỡ. Nó đơn giản là được yêu cầu làm một việc mà nó không làm.
Phiên bản ngắn gọn
Phần tiêu đề “Phiên bản ngắn gọn”- Mã hóa bảo vệ tính bảo mật. Với AES-256, nội dung chuỗi và luồng của một PDF là bản mã thực thụ. Không có khóa, nó không đọc được.
- User password mở tài liệu. Cung cấp nó và bạn có thể thấy nội dung. Không có nó, không có gì để đọc.
- Owner password chi phối các quyền. Nó là khóa “toàn quyền”. Các cờ quyền mà nó canh giữ — in, sao chép, sửa đổi — được ghi bên trong tài liệu đã mã hóa.
- Các cờ quyền mang tính hợp tác với trình đọc. Chúng là một lời đề nghị với một trình đọc cư xử đúng mực, không phải sự cưỡng chế. Một trình đọc phớt lờ chúng vẫn có thể in, sao chép, hay chỉnh sửa.
- Cấu trúc vẫn hiển thị. Mã hóa giấu nội dung, không phải bộ khung của tài liệu — số trang và bố cục đối tượng không phải là bí mật.
Cách NextPDF tiếp cận việc này
Phần tiêu đề “Cách NextPDF tiếp cận việc này”Mã hóa PDF được định nghĩa bởi Spec: ISO 32000-2, §7.6ISO 32000-2 §7.6. Mô hình rất chính xác: một security handler dẫn xuất một khóa mã hóa tệp từ một mật khẩu, các chuỗi và luồng của tài liệu được mã hóa bằng khóa đó, và một encryption dictionary — được tham chiếu từ trailer của tệp — ghi lại mật mã nào đã được dùng, khóa dài bao nhiêu, và tác giả đã khai báo những quyền nào.
Mật mã hiện đại được khuyến nghị là AES với một khóa 256 bit. Khi bạn mã hóa một PDF theo cách này, phần tải có thể đọc được — văn bản bạn sẽ trích xuất, các byte hình ảnh, dữ liệu font — được biến đổi thành bản mã. Hình dạng bên ngoài của tài liệu vẫn dễ đọc theo thiết kế: một trình đọc phải tìm encryption dictionary và biết độ dài khóa trước khi nó có thể hỏi bạn một mật khẩu. Đó là lý do mã hóa được hiểu đúng nhất là tính bảo mật của nội dung, không phải sự che kín của toàn bộ tệp.
Hai mật khẩu nằm ở các tầng khác nhau, và sự phân biệt là phần đáng nắm cho đúng nhất.
- A password is suppliedEither the user password (open) or the owner password (full rights).
- The security handler derives the keyISO 32000-2 §7.6.4 turns the password into the file encryption key.
- Content is decryptedAES-256 turns the encrypted strings and streams back into readable bytes.
- Permissions are consultedThe owner key grants all rights; the user key is bound by the declared permission flags — if the reader chooses to honour them.
User password là mật khẩu mở. Nó trả lời một câu hỏi: bạn có được phép thấy nội dung chút nào không? Không có user password, không có tài liệu đọc được — phần đó được cưỡng chế bằng mật mã, vì không có khóa đã dẫn xuất thì không có gì để giải mã.
Owner password là mật khẩu quyền. Một tệp có thể được bất kỳ ai mở (không cần user password) nhưng vẫn khai báo một owner password canh giữ các hành động “toàn quyền” — in ở độ phân giải cao, sao chép văn bản, sửa đổi tệp. Quan trọng là, các bit quyền mà owner password bảo vệ được bảo vệ toàn vẹn bởi security handler tiêu chuẩn: việc giả mạo chúng bị một trình đọc hợp quy phát hiện và từ chối, vì handler ràng buộc các quyền đã khai báo với các khóa mã hóa. Các bit này không phải là các byte không đọc được hay không sửa được theo nghĩa đen — một kẻ tấn công có thể thay đổi chúng — nhưng một bản sao đã bị thay đổi sẽ không xác thực được, nên một trình đọc hợp quy coi nó là hỏng. Chúng có tính phát hiện-giả-mạo. Chúng đơn giản là không tự cưỡng chế.
Ví dụ thực tế
Phần tiêu đề “Ví dụ thực tế”Các thiết lập mã hóa dễ diễn đạt. Điều quan trọng là đọc kết quả một cách thẳng thắn: cái này cấu hình ý định, và phần quyền trong ý định đó chỉ là khuyến nghị.
<?php
declare(strict_types=1);
use NextPDF\Core\Document;use NextPDF\Security\Encryption\EncryptionMode;use NextPDF\Security\Encryption\Permission;
$document = Document::createStandalone();$document->setTitle('Confidential Offer');$document->addPage();
// Confidentiality is real: AES-256 means the content is unreadable// without the user password. This half is cryptographically enforced.$document->encrypt( userPassword: 'open-sesame', ownerPassword: 'full-rights-key', mode: EncryptionMode::Aes256, // Permissions are a declared request to a cooperating reader, // recorded inside the encrypted document — not a hard lock. permissions: Permission::Print->value | Permission::CopyContent->value,);
$document->save('offer.pdf');User password và owner password là các khóa khác nhau với các công việc khác nhau.
Đối số permissions nêu những gì một trình đọc cư xử đúng mực nên cho phép. Đó
là siêu dữ liệu thẳng thắn, được bảo vệ toàn vẹn bởi security handler để việc giả
mạo có thể phát hiện được — và đó là trần của những gì một thư viện sản xuất có thể
hứa hẹn.
Hiểu lầm thường gặp
Phần tiêu đề “Hiểu lầm thường gặp”Cái bẫy là đọc “quyền” thành “cưỡng chế”. Nó rất trực giác: cờ nói không cho in, nên chắc chắn việc in bị chặn. Nhưng không gì trong PDF có thể vươn ra và vô hiệu hóa nút in của một trình đọc. Số nguyên quyền được ghi lại để một trình đọc hợp tác tuân theo. Một trình đọc chọn không hợp tác — và vài trình đọc không hợp tác — có quyền tự do in, sao chép, và chỉnh sửa.
NextPDF có chủ đích về điều này. Đường mã hóa lõi coi các cờ quyền là ý định đã khai báo và không bao giờ giả vờ cưỡng chế chúng. Nếu bạn cần các hành động thực sự bị ngăn chặn, biện pháp kiểm soát đó phải nằm bên ngoài tệp — ở việc bạn trao tài liệu cho ai, hoặc trong một hệ thống kiểm soát truy cập bao quanh nó.
Giới hạn và ranh giới
Phần tiêu đề “Giới hạn và ranh giới”Hãy chính xác về điều mà mỗi nửa bảo đảm. Mã hóa (tầng user password) là một biện pháp kiểm soát bảo mật thực thụ: mạnh nếu mật khẩu mạnh, và chỉ tốt ngang với bí mật bạn chọn. Các quyền (tầng owner password) là siêu dữ liệu có tính phát hiện-giả-mạo, không phải kiểm soát truy cập.
| Điều bạn có thể trông đợi | Điều mã hóa thực sự mang lại |
|---|---|
| Không ai có thể đọc nội dung mà không có mật khẩu | Đúng. Với AES-256 và một user password mạnh, các chuỗi và luồng không đọc được nếu không có khóa. Được cưỡng chế thực sự. |
| Không ai có thể viết lại “không cho sao chép” thành “cho phép sao chép” | Có tính phát hiện-giả-mạo, không phải bất khả thi. Các cờ quyền được bảo vệ toàn vẹn bởi security handler tiêu chuẩn: một người ngoài có thể chỉnh các byte, nhưng bản sao đã thay đổi sẽ không xác thực được, nên một trình đọc hợp quy phát hiện và từ chối thay đổi đó. |
| Trình đọc sẽ bị ngăn không cho sao chép hay in | Không được bảo đảm bởi bất kỳ bộ sản xuất PDF nào. Một trình đọc không hợp tác có thể phớt lờ các cờ. Đây là một tính chất của định dạng, không phải một giới hạn của NextPDF. |
Hai ranh giới nữa đáng nêu thẳng thắn. Thứ nhất, mã hóa bảo vệ nội dung, không
phải cấu trúc của tài liệu: bố cục đối tượng và số trang vẫn hiển thị, điều này là
bình thường và cần thiết để một trình đọc định vị được encryption dictionary. Thứ
hai, một PDF đã mã hóa không thể đồng thời tuyên bố tuân thủ lưu trữ PDF/A — profile
đó cấm mục Encrypt, nên bạn chọn cái này hoặc cái kia. Trang xử lý sự cố
mã-hóa-và-quyền
trình bày các ngoại lệ cụ thể và việc PDF/A từ chối một cách chi tiết.
Tài liệu liên quan
Phần tiêu đề “Tài liệu liên quan”- Toàn cảnh các chuẩn — nơi ISO 32000-2 và các điều khoản mã hóa của nó nằm giữa các chuẩn PDF.
- Cờ mã hóa và quyền — các mục thực hành: lỗi giải mã, và ranh giới quyền trong mã.
- PDF thật sự là gì — mô hình đối tượng mà mã hóa bảo vệ, và cấu trúc mà nó để lại hiển thị.
- Chữ ký nằm ở đâu trong một PDF — nửa kia của lòng tin tài liệu: mã hóa giấu, chữ ký chứng minh.
Bảng thuật ngữ
Phần tiêu đề “Bảng thuật ngữ”- AES-256 — Advanced Encryption Standard với một khóa 256 bit, mật mã hiện đại được khuyến nghị cho mã hóa nội dung PDF.
- User password (mật khẩu mở) — bí mật cần để mở và đọc một tài liệu đã mã hóa. Không có nó, nội dung không thể giải mã được.
- Owner password (mật khẩu quyền) — bí mật “toàn quyền” chi phối các cờ quyền. Một tài liệu có thể có nó mà không yêu cầu một user password để mở.
- Cờ quyền — ý định in/sao chép/sửa đổi đã khai báo, được lưu trong encryption dictionary. Được bảo vệ toàn vẹn để việc giả mạo có thể phát hiện được, nhưng chỉ được tuân theo bởi một trình đọc hợp tác.
- Security handler — thành phần dẫn xuất khóa mã hóa tệp từ một mật khẩu, được định nghĩa bởi security handler tiêu chuẩn trong ISO 32000-2.
- Hợp tác với trình đọc (reader-cooperative) — một biện pháp kiểm soát phụ thuộc vào việc phần mềm tiêu thụ chọn tuân theo nó, thay vì được cưỡng chế bởi chính tệp.