Bỏ qua để đến nội dung
getnextpdf.com

Che mật không phải là một hình chữ nhật đen

Spec: ISO 32000-2, §7.11Spec: ISO 32000-2, §14.13.5

Một hình chữ nhật đen vẽ phủ lên một cái tên chẳng giấu được gì. Trang nhìn như đã được che mật, nhưng văn bản bên dưới vẫn còn đó, vẫn chọn-được, vẫn sao-chép-được. Che mật thực sự không phủ lên nội dung. Nó xóa nội dung.

Trang này giải thích khoảng cách giữa một lớp phủ trang trí và việc loại bỏ nội dung thực sự, vì sao metadata và embedded file sống sót qua một công việc ngây thơ, và cách RedactionEngine enterprise của NextPDF từ chối giả vờ một vùng đã biến mất khi nó không thể thực sự loại bỏ vùng đó.

Những vụ rò rỉ dữ liệu PDF được trích dẫn nhiều nhất không phải là các cuộc tấn công tinh vi. Chúng là những hình chữ nhật đen. Ai đó vẽ một hộp được tô đặc phủ lên một đoạn nhạy cảm, xuất tệp, và ship nó đi. Người nhận nhấn vào hộp, kéo qua nó, và những từ ngữ gốc sao chép thẳng ra khỏi tài liệu lên clipboard.

Lý do mang tính cấu trúc. Một trang PDF là một tập các drawing operator được xếp lớp theo thứ tự. Vẽ một hình chữ nhật mờ đục thêm một operator nữa lên trên; nó không loại bỏ text-showing operator bên dưới. Với mắt thì văn bản bị giấu đi. Với máy thì nó vẫn ở đúng chỗ nó vẫn luôn ở. Lớp phủ là một bộ trang phục, và một bộ trang phục thì cởi ra được.

Điều này đắt giá vì sự thất bại là lặng lẽ và không thể vãn hồi. Tài liệu nhìn đúng, vượt qua một lượt xét duyệt bằng mắt, và được xuất bản. Vụ rò rỉ được phát hiện về sau bởi một người chọn văn bản, và đến lúc đó mọi bản sao đã ra ngoài hết rồi.

  • Một hộp đen là một thao tác vẽ được xếp lớp lên trên văn bản, không phải một sự xóa bỏ nó. Các byte vẫn sống sót.
  • Văn bản chọn-được sống sót vì content stream của trang vẫn mang các glyph vẽ ra các từ.
  • Metadata tài liệu sống sót vì nó sống ở một nơi riêng biệt — document information dictionary và gói XMP — mà không một hình chữ nhật nào trên một trang có thể với tới.
  • Embedded file sống sót vì một tệp PDF có thể mang nguyên các tệp bên trong nó dưới dạng embedded file stream. Spec: ISO 32000-2, §7.11 Một dấu vết trên một trang chẳng bao giờ chạm tới một tệp đính kèm.
  • Che mật thực sự là phá hủy. Nó loại bỏ nội dung khỏi byte stream, không phải khỏi bức tranh. Cái đã mất là đã mất, và các bề mặt cặn dư cũng được dọn sạch.

Trang trí so với phá hủy, một cách chính xác

Phần tiêu đề “Trang trí so với phá hủy, một cách chính xác”

Một lớp phủ trang trí thay đổi một trang trông như thế nào. Che mật phá hủy thay đổi tài liệu chứa cái gì. Cái thứ nhất có thể đảo ngược bởi bất kỳ ai có một con trỏ văn bản. Cái thứ hai chẳng để lại gì để khôi phục.

RedactionEngine enterprise của NextPDF được xây cho trường hợp phá hủy ở mức nội-dung- văn-bản. Phương thức redact() của nó nhận nội dung, một RedactionPolicy mô tả cần tìm gì và thay thế nó ra sao, và trả về một RedactionResult. Bên trong, nó phát hiện các đoạn nhạy cảm, gộp bất kỳ đoạn nào chồng lấn thành các dải bao phủ rời nhau, rồi ghi lại chuỗi nội dung bằng substr_replace để mỗi byte được bao phủ bị loại bỏ đúng một lần. Văn bản nhạy cảm không bị vẽ phủ lên. Nó biến mất khỏi bộ đệm mà result mang về.

Result trung thực về những gì đã xảy ra: nó ghi lại hash SHA-256 của nội dung gốc, phần redactedContent đã được ghi lại, một báo cáo kiểm toán về mọi phát hiện, và một cờ wasModified. Bạn có thể chứng minh các byte đã thay đổi, và bạn có thể chứng minh những byte nào.

Loại bỏ văn bản thấy được là cần nhưng chưa đủ. Cùng những từ đó, và những từ bạn chưa bao giờ thấy trên trang, ẩn ở những nơi mà một chỉnh sửa ở mức-trang chẳng bao giờ với tới.

Một tài liệu mang metadata gấp đôi: một information dictionary kế thừa và một gói XMP, cái nào trong hai cũng có thể giữ một tên tác giả, một tiêu đề, hoặc một dấu vân tay công cụ. Nó có thể mang nguyên các tệp dưới dạng embedded file stream. Spec: ISO 32000-2, §7.11 Nó có thể gắn các payload đó vào cấu trúc trang như associated file, một kênh hiện-vật-liên-quan mà trang không hiển thị nhưng tài liệu vẫn giữ. Spec: ISO 32000-2, §14.13.5 Không cái nào trong số này nằm trên trang bạn đã che mật, nên không cái nào bị một hình chữ nhật chạm tới. Chỉ dẫn kinh điển về điều này — báo cáo “Hidden Data and Metadata in Adobe PDF Files” của NSA — tồn tại chính bởi vì rất nhiều vụ rò rỉ thực sự đến từ cặn dư, chứ không phải từ trang thấy được.

Một lần che mật xóa các từ trên trang nhưng để lại tên tác giả trong gói XMP và bảng tính gốc làm một tệp đính kèm thì đã không che mật được tài liệu. Nó mới chỉ che mật một khung nhìn của tài liệu.

  1. DetectFind every sensitive span — visible text, and the entity types a policy targets — not just the region you happen to see.
  2. Delete, do not coverRewrite the content stream so the glyphs are removed from the bytes. An opaque box on top leaves the text underneath intact.
  3. Clear the residueStrip the information dictionary and XMP metadata, and remove embedded and associated files that carry the same payload off-page.
  4. VerifyConfirm no selectable text, metadata field, or attachment reproduces the redacted content before the file leaves the building.
What a complete destructive redaction removes, in order: detect the sensitive content, delete the bytes from the content stream rather than draw over them, then clear the residue surfaces — metadata and embedded payloads — that a page-level mark never reaches, and finally verify nothing copyable survived.

Có hai cách che mật: theo nội dung (tìm cái tên này, xóa nó) và theo vùng (tô đè lên hình chữ nhật này của trang, bất kể cái gì nằm dưới nó). Engine enterprise làm cái thứ nhất một cách trung thực. Nó cố ý không giả vờ làm cái thứ hai.

Phương thức redact() nhận một đối số thứ ba, một danh sách các vùng tọa độ ZoneRedaction. Engine nội-dung-văn-bản không có một sink phủ-content-trang nào — không có cách nào thực sự loại bỏ thứ nằm bên trong một hộp tọa độ. Nên khi danh sách đó không rỗng, nó không vẽ một hình chữ nhật rồi gọi vùng là “đã che mật”. Nó ném một typed RuntimeException và bảo bạn định tuyến vùng đó qua một đường ống che-mật-content-trang để thay thế.

Sự từ chối đó là toàn bộ điểm mấu chốt của trang này được biến thành mã. Engine thà dừng lại và nêu tên cái nó không thể làm còn hơn trả về một phát hiện “đã che mật” cho một vùng mà nó để hoàn toàn nguyên vẹn. Một lớp phủ trang trí lặng lẽ được báo cáo như một sự loại bỏ là đúng cái lời trấn an sai lầm tạo ra một vụ rò rỉ. Fail closed biến vụ rò rỉ đó thành một thông báo lỗi bạn thấy trước khi bạn ship.

“Tôi đã vẽ một hộp đen phủ lên nó, vậy là nó đã được che mật.”

Đây là cái bẫy, và nó là cái bẫy phổ biến nhất trong toàn bộ định dạng. Một hình chữ nhật được tô đặc là một chỉ thị vẽ xếp chồng lên trên văn bản. Các text-showing operator vẫn còn trong content stream, các glyph vẫn vẽ, và một lần chọn hay một lần sao chép đọc chúng ra y nguyên. Bạn đã giấu một bức tranh; bạn đã không thay đổi một tài liệu.

Một cái bẫy thứ hai, tinh vi hơn: “Tôi đã xóa văn bản trên trang, vậy tài liệu sạch rồi.” Chưa đâu. Cùng nội dung đó, và nội dung bạn chưa bao giờ hiển thị, có thể tồn dư trong metadata và trong các embedded file. Che mật chỉ hoàn tất khi mọi bề mặt — content trang, metadata, và các tệp đính kèm — đều sạch khỏi thứ bạn đặt ra để loại bỏ.

Phạm vi trung thực của những gì NextPDF làm ở đây, theo từng phiên bản:

  • Core hoàn toàn không có che mật tài liệu. Nó cung cấp một privacy sanitiser cho PII của audit-log — giữ các giá trị nhạy cảm ra khỏi chính các bản ghi chẩn đoán của bạn — và đó là một thứ hoàn toàn khác với việc che mật một tệp PDF đã giao. Nếu bạn ở trên Core và bạn cần che mật một tài liệu, năng lực bạn muốn là không có mặt. Đừng vẽ một hộp rồi giả định engine đã loại bỏ bất cứ thứ gì.
  • RedactionEngine enterprise che mật nội dung văn bản, một cách phá hủy. Nó ghi lại bộ đệm nội dung để loại bỏ các byte nhạy cảm và báo cáo một hash, một báo cáo kiểm toán, và một cờ wasModified để sự loại bỏ chứng minh được.
  • Che mật theo vùng-tọa-độ fail closed. Truyền một danh sách ZoneRedaction không rỗng và engine ném lỗi thay vì giả mạo một lớp phủ. Đó là một thuộc tính an toàn có chủ ý, không phải một tính năng thiếu: một vùng nó không thể thực sự làm sạch là một vùng nó từ chối gọi là sạch.
  • Dọn sạch mọi bề mặt cặn dư cũng là trách nhiệm của người vận hành. Loại bỏ văn bản thấy được là một bước. Một công việc hoàn chỉnh cũng tước bỏ information dictionary, gói XMP, và bất kỳ embedded file hay associated file nào (Spec: ISO 32000-2, §7.11, Spec: ISO 32000-2, §14.13.5) mang cùng payload đó ra khỏi trang.
Document redaction — edition availability
EditionAvailability
Core

Not in this edition. Core has no document redaction. It provides only an audit-log PII sanitiser, which keeps sensitive values out of your own diagnostic records — it does not redact a delivered PDF.

ProNot in this edition
Enterprise

Available. The enterprise RedactionEngine performs destructive text-content redaction and fails closed — it throws a typed exception — on coordinate-zone redaction it cannot truly fulfil, rather than painting a cosmetic overlay and reporting a region as removed.

  • How PDF encryption really works — vì sao mã hóa một tệp không giống với loại bỏ nội dung khỏi nó, và mỗi cái bảo vệ bạn ở đâu.
  • Metadata and the XMP packet — bề mặt cặn dư mà một lần che mật ở mức-trang chẳng bao giờ chạm tới, một cách chi tiết.
  • An API that refuses to guess — cùng lập trường fail-closed mà redaction engine áp dụng cho một vùng nó không thể hoàn thành.
  • Lớp phủ trang trí (Cosmetic overlay) — một thao tác vẽ, chẳng hạn một hình chữ nhật được tô đặc, xếp lớp lên trên nội dung để giấu nó về mặt thị giác. Nó không loại bỏ nội dung bên dưới, vốn vẫn chọn-được và sao-chép-được.
  • Che mật phá hủy (Destructive redaction) — loại bỏ nội dung khỏi byte stream của tài liệu, không phải khỏi bức tranh. Một khi đã làm, không còn gì bên dưới để khôi phục.
  • Content stream — danh sách có thứ tự các drawing operator hiển thị một trang, bao gồm các text-showing operator vẽ các glyph. Một hộp ở trên không xóa các text operator bên dưới nó.
  • Bề mặt cặn dư (Residue surface) — một nơi một tài liệu giữ nội dung mà trang không hiển thị: information dictionary, gói metadata XMP, và các embedded file hay associated file. Một lần che mật hoàn chỉnh dọn sạch tất cả chúng.
  • Embedded file stream — một tệp nguyên vẹn được mang bên trong một tệp PDF (ISO 32000-2 §7.11). Một dấu vết trên một trang chẳng bao giờ chạm tới một tệp đính kèm.
  • Fail closed — dừng lại với một typed error khi một thao tác không thể được thực hiện một cách trung thực, thay vì tạo ra một kết quả trông-có-vẻ-hợp-lý nhưng sai. Engine enterprise làm điều này cho che mật theo vùng-tọa-độ mà nó không thể hoàn thành.