İçeriğe geç
getnextpdf.com

PDF şifrelemesi gerçekte nasıl çalışır — ve sınırları

Spec: ISO 32000-2, §7.6

PDF şifrelemesi, bir belgenin içindeki sözcükleri ve görüntüleri karıştırır; böylece yalnızca doğru parolaya sahip biri onları okuyabilir. Bu gerçek bir kriptografidir ve sahip olduğu tek işte iyidir. Aynı zamanda yaygın biçimde yanlış anlaşılır, çünkü aynı özellik ikinci bir mekanizma — izin bayrakları — taşır; bu mekanizma bir kilit gibi görünür ama kilit değildir.

Bu sayfa ikisini ayırır. AES-256’nın gerçekte neyi koruduğunu, iki parolanın asıl ne işe yaradığını ve dürüst sınırın nerede durduğunu açıklar.

İnsanlar bir belge hassas olduğunda şifrelemeye başvurur: bir sözleşme, bir maaş bordrosu, bir tıbbi mektup. Beklenti makuldür — bunu gizli tut ve insanların yazdırmasını ya da kopyalamasını engelle. PDF, bu dileğin ilk yarısını ikna edici biçimde, ikinci yarısını ise yalnızca şeref sistemiyle yerine getirir.

İkisini karıştırmak, bedelin oturduğu yerdir. Bir ekip bir dosyayı “kopyalanamaz” diye işaretler, platformun bunu zorunlu kıldığına güvenir ve dosyayı yola çıkarır. Aylar sonra biri, farklı bir okuyucuyla metni otuz saniyede kopyalar ve hiç var olmamış olan varsayım, sessizce bir sızıntıya dönüşür. Şifreleme hiçbir zaman kırılmadı. Yalnızca yapmadığı bir şeyi yapması istendi.

  • Şifreleme gizliliği korur. AES-256 ile bir PDF’nin dizge ve akış içeriği gerçek bir şifreli metindir. Anahtar olmadan okunamaz.
  • Kullanıcı parolası belgeyi açar. Onu girin ve içeriği görebilirsiniz. O olmadan, okunacak bir şey yoktur.
  • Sahip parolası izinleri yönetir. “Tüm haklar” anahtarıdır. Koruduğu izin bayrakları — yazdırma, kopyalama, değiştirme — şifreli belgenin içinde kayıtlıdır.
  • İzin bayrakları okuyucuyla işbirliğine dayalıdır. İyi davranan bir okuyucuya yöneltilen bir ricadır, bir zorlama değil. Onları yok sayan bir okuyucu yine de yazdırabilir, kopyalayabilir ya da düzenleyebilir.
  • Yapı görünür kalır. Şifreleme içeriği gizler, belgenin iskeletini değil — sayfa sayısı ve nesne düzeni sır değildir.

PDF şifrelemesi Spec: ISO 32000-2, §7.6 tarafından tanımlanır. Model kesindir: bir güvenlik işleyicisi, bir paroladan bir dosya şifreleme anahtarı türetir, belgenin dizgeleri ve akışları o anahtarla şifrelenir ve dosya treylerinden başvurulan bir şifreleme sözlüğü, hangi şifrenin kullanıldığını, anahtarın ne kadar uzun olduğunu ve yazarın hangi izinleri bildirdiğini kaydeder.

Modern, önerilen şifre, 256 bitlik anahtara sahip AES’tir. Bir PDF’yi bu yolla şifrelediğinizde, okunabilir yük — çıkaracağınız metin, görüntü baytları, font verisi — şifreli metne dönüştürülür. Belgenin dış biçimi, tasarım gereği okunabilir kalır: bir okuyucu, sizden parola istemeden önce şifreleme sözlüğünü bulmak ve anahtar uzunluğunu öğrenmek zorundadır. İşte bu yüzden şifrelemeyi, tüm dosyanın matlığı olarak değil, içeriğin gizliliği olarak anlamak en doğrusudur.

İki parola farklı katmanlarda durur ve bu ayrım, doğru anlamaya en değer kısımdır.

  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.

Kullanıcı parolası, açma parolasıdır. Tek bir soruyu yanıtlar: içeriği hiç görebilir misiniz? Kullanıcı parolası yoksa, okunabilir belge de yoktur — bu kısım kriptografik olarak zorunludur, çünkü türetilen anahtar olmadan şifresi çözülecek bir şey yoktur.

Sahip parolası, izinler parolasıdır. Bir dosya herkes tarafından açılabilir (kullanıcı parolası olmadan), yine de “tüm haklar” eylemlerini — yüksek çözünürlükte yazdırma, metin kopyalama, dosyayı değiştirme — kapı altına alan bir sahip parolası bildirebilir. Önemlisi, sahip parolasının koruduğu izin bitleri, standart güvenlik işleyicisi tarafından bütünlük açısından korunur: onlarla oynamak, uyumlu bir okuyucu tarafından saptanır ve reddedilir, çünkü işleyici, bildirilen izinleri şifreleme anahtarlarına bağlar. Bitler, gerçek anlamda okunamaz ya da düzenlenemez baytlar değildir — bir saldırgan onları değiştirebilir — ancak değiştirilmiş bir kopya doğrulamayı geçemez, dolayısıyla uyumlu bir okuyucu onu bozuk olarak ele alır. Onlar kurcalanma-belirtilidir. Yalnızca kendi kendini zorlamaz.

Şifreleme ayarlarını ifade etmek basittir. Önemli olan, sonucu dürüstçe okumaktır: bu, niyeti yapılandırır ve o niyetin izin kısmı tavsiye niteliğindedir.

<?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');

Kullanıcı ve sahip parolaları, farklı işleri olan farklı anahtarlardır. permissions bağımsız değişkeni, iyi davranan bir okuyucunun neye izin vermesi gerektiğini belirtir. Bu, kurcalamanın saptanabilmesi için güvenlik işleyicisi tarafından bütünlük açısından korunan dürüst bir üst veridir — ve üreten bir kitaplığın söz verebileceğinin tavanı budur.

Tuzak, “izinleri” “zorlama” olarak okumaktır. Sezgiseldir: bayrak yazdırmaya izin verilmiyor der, dolayısıyla yazdırma elbette engellenir. Ama PDF’nin içinde hiçbir şey, uzanıp bir okuyucunun yazdırma düğmesini devre dışı bırakamaz. İzin tam sayısı, işbirliği yapan bir okuyucunun uyması için kayıtlıdır. İşbirliği yapmamayı seçen — ki birkaçı yapmaz — bir okuyucu, dilediğince yazdırmakta, kopyalamakta ve düzenlemekte özgürdür.

NextPDF bu konuda bilinçlidir. Çekirdek şifreleme yolu, izin bayraklarını bildirilen niyet olarak ele alır ve onları zorunlu kıldığı izlenimini asla vermez. Eylemlerin gerçekten engellenmesi gerekiyorsa, o denetim dosyanın dışında durmalıdır — belgeyi kime verdiğinizde ya da onun etrafındaki bir erişim denetimi sisteminde.

Her yarının neyi garanti ettiği konusunda kesin olun. Şifreleme (kullanıcı parolası katmanı) gerçek bir gizlilik denetimidir: parola güçlüyse güçlüdür ve yalnızca seçtiğiniz sır kadar iyidir. İzinler (sahip parolası katmanı) erişim denetimi değil, kurcalanma-belirtili üst veridir.

Beklemiş olabileceğiniz şeyŞifrelemenin gerçekte sunduğu şey
Hiç kimse parola olmadan içeriği okuyamazDoğru. AES-256 ve güçlü bir kullanıcı parolasıyla, dizgeler ve akışlar anahtar olmadan okunamaz. Gerçekten zorunlu kılınır.
Hiç kimse “kopyalama yok” ifadesini “kopyalamaya izin var” olarak yeniden yazamazKurcalanma-belirtili, olanaksız değil. İzin bayrakları, standart güvenlik işleyicisi tarafından bütünlük açısından korunur: bir dış kişi baytları düzenleyebilir, ama değiştirilmiş kopya doğrulamayı geçemez, dolayısıyla uyumlu bir okuyucu değişikliği saptar ve reddeder.
Okuyucu kopyalamaktan ya da yazdırmaktan alıkonulacakHiçbir PDF üreticisi tarafından garanti edilmez. İşbirliği yapmayan bir okuyucu bayrakları yok sayabilir. Bu, biçimin bir özelliğidir, bir NextPDF sınırlaması değil.

İki sınır daha açıkça belirtmeye değer. Birincisi, şifreleme içeriği korur, belgenin yapısını değil: nesne düzeni ve sayfa sayısı görünür kalır, ki bu bir okuyucunun şifreleme sözlüğünü bulması için normaldir ve gereklidir. İkincisi, şifreli bir PDF aynı zamanda arşivsel PDF/A uygunluğu iddia edemez — o profil Encrypt girdisini yasaklar, dolayısıyla birini ya da ötekini seçersiniz. şifreleme-ve-izinler sorun giderme sayfası özel istisnaları ve PDF/A reddini ayrıntılı olarak kapsar.

  • AES-256 — 256 bitlik anahtara sahip Advanced Encryption Standard; PDF içerik şifrelemesi için önerilen modern şifre.
  • Kullanıcı parolası (açma parolası) — şifreli bir belgeyi açmak ve okumak için gereken sır. O olmadan içeriğin şifresi çözülemez.
  • Sahip parolası (izinler parolası) — izin bayraklarını yöneten “tüm haklar” sırrı. Bir belge, açmak için bir kullanıcı parolası gerektirmeden bir tane bulundurabilir.
  • İzin bayrakları — şifreleme sözlüğünde saklanan, bildirilen yazdırma/kopyalama/ değiştirme niyeti. Kurcalama saptanabilsin diye bütünlük açısından korunur, ancak yalnızca işbirliği yapan bir okuyucu tarafından uyulur.
  • Güvenlik işleyicisi — bir paroladan dosya şifreleme anahtarını türeten bileşen; ISO 32000-2’deki standart güvenlik işleyicisi tarafından tanımlanır.
  • Okuyucuyla işbirliğine dayalı — dosyanın kendisi tarafından zorunlu kılınmak yerine, tüketen yazılımın ona uymayı seçmesine bağlı bir denetim.