Lewati ke konten
getnextpdf.com

Bagaimana enkripsi PDF benar-benar bekerja — dan batasnya

Spec: ISO 32000-2, §7.6

Enkripsi PDF mengacak kata dan gambar di dalam sebuah dokumen sehingga hanya seseorang dengan password yang benar yang dapat membacanya. Ini adalah kriptografi sungguhan, dan ia bagus dalam satu tugas yang ia miliki. Ia juga sangat sering disalahpahami, karena fitur yang sama membawa mekanisme kedua — flag perizinan — yang terlihat seperti kunci padahal bukan.

Halaman ini memisahkan keduanya. Ia menjelaskan apa yang sebenarnya dilindungi AES-256, untuk apa sesungguhnya kedua password itu, dan di mana letak batas yang jujur.

Orang menjangkau enkripsi ketika sebuah dokumen bersifat sensitif: sebuah kontrak, slip gaji, surat medis. Harapannya masuk akal — jaga ini tetap pribadi, dan cegah orang mencetak atau menyalinnya. PDF memenuhi paruh pertama keinginan itu secara meyakinkan dan paruh kedua hanya atas dasar kehormatan.

Mengaburkan keduanya adalah tempat biayanya jatuh. Sebuah tim menandai sebuah berkas “tidak boleh disalin”, percaya bahwa platformnya menegakkannya, lalu mengirim. Berbulan-bulan kemudian seseorang menyalin teksnya dalam tiga puluh detik dengan pembaca yang berbeda, dan asumsi yang tidak pernah berlaku itu diam-diam berubah menjadi kebocoran. Enkripsinya tidak pernah jebol. Ia hanya diminta melakukan sesuatu yang tidak ia lakukan.

  • Enkripsi melindungi kerahasiaan. Dengan AES-256, konten string dan stream sebuah PDF adalah ciphertext sungguhan. Tanpa kuncinya, ia tidak dapat dibaca.
  • User password membuka dokumen. Berikan ia dan Anda dapat melihat kontennya. Tanpanya, tidak ada apa pun untuk dibaca.
  • Owner password mengatur perizinan. Ia adalah kunci “hak penuh”. Flag perizinan yang ia jaga — cetak, salin, ubah — direkam di dalam dokumen yang terenkripsi.
  • Flag perizinan bersifat reader-cooperative. Mereka adalah permintaan kepada pembaca yang berperilaku baik, bukan penegakan. Pembaca yang mengabaikannya tetap dapat mencetak, menyalin, atau menyunting.
  • Strukturnya tetap terlihat. Enkripsi menyembunyikan konten, bukan kerangka dokumen — jumlah halaman dan tata letak objek bukanlah rahasianya.

Enkripsi PDF didefinisikan oleh Spec: ISO 32000-2, §7.6. Modelnya presisi: sebuah security handler menurunkan sebuah file encryption key dari sebuah password, string dan stream dokumen dienkripsi dengan kunci itu, dan sebuah encryption dictionary — yang dirujuk dari file trailer — merekam cipher mana yang dipakai, berapa panjang kuncinya, dan perizinan mana yang dideklarasikan penulis.

Cipher modern yang direkomendasikan adalah AES dengan kunci 256-bit. Ketika Anda mengenkripsi sebuah PDF dengan cara ini, payload yang dapat dibaca — teks yang akan Anda ekstrak, byte gambar, data font — diubah menjadi ciphertext. Bentuk luar dokumen tetap terbaca menurut desainnya: sebuah pembaca harus menemukan encryption dictionary dan mengetahui panjang kuncinya sebelum ia dapat meminta password kepada Anda. Itulah sebabnya enkripsi paling tepat dipahami sebagai kerahasiaan konten, bukan keburaman seluruh-berkas.

Kedua password itu berada di lapisan yang berbeda, dan perbedaannya adalah bagian yang paling layak dipahami dengan benar.

  1. A password is suppliedEither the user password (open) or the owner password (full rights).
  2. The security handler derives the keyISO 32000-2 §7.6.4 turns the password into the file encryption key.
  3. Content is decryptedAES-256 turns the encrypted strings and streams back into readable bytes.
  4. 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.
How a password becomes readable content: the user password (or the owner password) is run through the standard security handler's key-derivation routine to recover the file encryption key, which then decrypts the document's strings and streams. The owner password additionally unlocks the full set of permissions; the user password is bound by whatever permission flags the author declared.

User password adalah open password. Ia menjawab satu pertanyaan: bolehkah Anda melihat kontennya sama sekali? Tanpa user password, tidak ada dokumen yang dapat dibaca — bagian itu ditegakkan secara kriptografis, karena tanpa kunci yang diturunkan tidak ada apa pun untuk didekripsi.

Owner password adalah permissions password. Sebuah berkas dapat dibuka oleh siapa pun (tanpa user password) namun tetap mendeklarasikan sebuah owner password yang menggerbangi aksi “hak penuh” — mencetak pada resolusi tinggi, menyalin teks, mengubah berkas. Yang krusial, permission bit yang dilindungi owner password diproteksi-integritasnya oleh standard security handler: mengutak-atiknya terdeteksi dan ditolak oleh pembaca yang konform, karena handler mengikat perizinan yang dideklarasikan ke kunci enkripsi. Bit-bit itu bukanlah byte yang harfiah tidak dapat dibaca atau tidak dapat disunting — seorang penyerang dapat mengubahnya — tetapi salinan yang diubah tidak akan tervalidasi, sehingga pembaca yang konform memperlakukannya sebagai korup. Mereka bersifat tamper-evident. Mereka hanya tidak menegakkan-diri.

Pengaturan enkripsi sederhana untuk diungkapkan. Yang penting adalah membaca hasilnya secara jujur: ini mengonfigurasi maksud, dan bagian perizinan dari maksud itu bersifat anjuran.

<?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 dan owner password adalah kunci berbeda dengan tugas berbeda. Argumen permissions menyatakan apa yang seharusnya diizinkan oleh pembaca yang berperilaku baik. Ia adalah metadata yang jujur, diproteksi-integritasnya oleh security handler sehingga pengutak-atikan dapat dideteksi — dan itulah batas tertinggi dari apa yang dapat dijanjikan sebuah pustaka penghasil.

Jebakannya adalah membaca “permissions” sebagai “penegakan”. Ini intuitif: flag-nya berkata mencetak tidak diizinkan, jadi tentu mencetak diblokir. Tetapi tidak ada apa pun dalam PDF yang dapat menjangkau keluar dan menonaktifkan tombol cetak sebuah pembaca. Bilangan bulat perizinan direkam agar pembaca yang kooperatif menaatinya. Pembaca yang memilih untuk tidak kooperatif — dan beberapa memang tidak — bebas mencetak, menyalin, dan menyunting.

NextPDF bersikap sengaja tentang hal ini. Jalur enkripsi inti memperlakukan flag perizinan sebagai maksud yang dideklarasikan dan tidak pernah berpura-pura menegakkannya. Jika Anda membutuhkan aksi yang benar-benar dicegah, kendali itu harus berada di luar berkasnya — pada siapa Anda memberikan dokumen itu, atau pada sebuah sistem kontrol akses di sekitarnya.

Bersikaplah presisi tentang apa yang dijamin masing-masing paruh. Enkripsi (lapisan user-password) adalah kendali kerahasiaan sungguhan: kuat jika password-nya kuat, dan hanya sebaik rahasia yang Anda pilih. Perizinan (lapisan owner-password) adalah metadata yang tamper-evident, bukan kontrol akses.

Apa yang mungkin Anda harapkanApa yang sebenarnya diberikan enkripsi
Tidak ada yang dapat membaca konten tanpa password-nyaBenar. Dengan AES-256 dan user password yang kuat, string dan stream-nya tidak dapat dibaca tanpa kuncinya. Benar-benar ditegakkan.
Tidak ada yang dapat menulis ulang “tidak boleh menyalin” menjadi “menyalin diizinkan”Tamper-evident, bukan mustahil. Flag perizinan diproteksi-integritasnya oleh standard security handler: orang luar dapat menyunting byte-nya, tetapi salinan yang diubah tidak akan tervalidasi, sehingga pembaca yang konform mendeteksi dan menolak perubahan itu.
Pembaca akan dicegah dari menyalin atau mencetakTidak dijamin oleh produsen PDF mana pun. Pembaca yang non-kooperatif dapat mengabaikan flag-nya. Ini adalah properti dari formatnya, bukan keterbatasan NextPDF.

Dua batasan lebih lanjut layak dinyatakan secara terus terang. Pertama, enkripsi melindungi konten, bukan struktur dokumen: tata letak objek dan jumlah halaman tetap terlihat, yang normal dan perlu agar sebuah pembaca dapat menemukan encryption dictionary. Kedua, sebuah PDF terenkripsi tidak dapat sekaligus mengklaim konformitas arsip PDF/A — profil itu melarang entri Encrypt, jadi Anda memilih salah satu. Halaman troubleshooting enkripsi dan perizinan membahas pengecualian spesifiknya dan penolakan PDF/A secara mendetail.

  • AES-256 — Advanced Encryption Standard dengan kunci 256-bit, cipher modern yang direkomendasikan untuk enkripsi konten PDF.
  • User password (open password) — rahasia yang dibutuhkan untuk membuka dan membaca sebuah dokumen terenkripsi. Tanpanya, kontennya tidak dapat didekripsi.
  • Owner password (permissions password) — rahasia “hak penuh” yang mengatur flag perizinan. Sebuah dokumen dapat memilikinya tanpa mengharuskan user password untuk membuka.
  • Flag perizinan — maksud cetak/salin/ubah yang dideklarasikan dan disimpan di encryption dictionary. Diproteksi-integritasnya sehingga pengutak-atikan dapat dideteksi, tetapi ditaati hanya oleh pembaca yang kooperatif.
  • Security handler — komponen yang menurunkan file encryption key dari sebuah password, didefinisikan oleh standard security handler dalam ISO 32000-2.
  • Reader-cooperative — sebuah kendali yang bergantung pada perangkat lunak pengonsumsi yang memilih untuk menaatinya, alih-alih ditegakkan oleh berkasnya sendiri.