· kaynak dev.to (home feed)
PDF izin parolaları tek bir işaretli tamsayıdır ve bunlara uyup uymamaya okuyucular karar verir
Bir dev.to deneyi, PDF izin kısıtlamalarının hiçbir görüntüleyicinin uygulmak zorunda olmadığı tek bir işaretli tamsayıda yaşadığını gösteriyor; yani kararı dosya değil, okuyucu veriyor.

Hiç sormayan bir parola
Bir PDF'i parola istemeden açmak, dosyanın şifrelenmediği anlamına gelmez. dev.to'da yayımlanan bir yazıya göre bir belge özgürce açılabilir ve yine de AES-256 şifrelemesi taşıyabilir; bunun nedeni, dosyanın şifreleme sözlüğündeki tek bir işaretli tamsayıdır — ve formatın hiçbir yanı, hiçbir okuyucuyu buna uymaya zorlamaz. Bu çelişkiyi izlemek için yazar yedi adet iki sayfalık örnek dosya hazırladı: biri şifresiz, beşi yalnızca izin parolasıyla korunuyor (boş bir kullanıcı parolası ile ayarlanmış bir sahip parolası eşliği), biri de açılışta parola istiyor.
Tek alan, sekiz anahtar
Söz konusu alan /P; /Encrypt sözlüğünde işaretli sayı olarak saklanan 32 bitlik bir değer. Set edilen her bit bir eyleme izin verir; temizlenen her bit bir eylemi reddeder. 3 ila 12 arasındaki bitler yazdırma, değiştirme, kopyalama, açıklama ekleme, form doldurma, erişilebilirlik amaçlı çıkarma, birleştirme ve yüksek kaliteli yazdırmaya karşılık gelir. Örnekler aralığı gözler önüne seriyor: -3392 değeri (0xFFFFF2C0) yalnızca erişilebilirlik çıkışına izin verir ve diğer yedisini reddeder; -20 sadece kopyalama bitini temizler; -2056 yazdırmayı ve yüksek kaliteli yazdırmayı engeller; sıfır ise erişilebilirlik dahil her şeyi reddeder. Komşu V, R, Length ve crypt-filter girdileri şifrelemeyi (cipher) seçer; yazar, şifreleme yönteminin davranışta fark yaratmadığını gördü.
Yazıyla birlikte gelen kısa bir pypdf kod parçası, hiçbir şeyin şifresini çözmeden sözlüğü doğrudan dosyanın trailer bölümünden okuyor ve her P değerinin hangi eylemleri reddettiğini adıyla belirtiyor. Bu yalnızca raporlamadır: hiçbir zaman dosya yazmaz ve hiçbir zaman sahip parolasını istemez.
Boş parola, gerçek şifreleme
Yalnızca izin parolası taşıyan bir dosyadaki akışlar gerçekte şifrelidir. Şifreleme anahtarı kullanıcı parolasından türetilir; bu parola boş olduğundan her görüntüleyici anahtarı sessizce türetir ve belgeyi istem olmadan açar. Yazarın okumasına göre bu şifreleme çoğunlukla, Standard güvenlik işleyicisinin P değerini taşıması için gerektirdiği kap görevi görüyor; içerikte bir kilide çok da benzemiyor.
Kütüphaneler bu duruma ne ad verecekleri konusunda bile ayrılıyor. PyMuPDF böyle bir dosyayı açtıktan sonra şifrelenmemiş olarak raporlarken, pypdf sözlük mevcut olduğu için şifrelenmiş olarak raporluyor. Geliştiricilere yazarın uyarısı şu: kodunuz tek bir boolean kontrol ediyorsa, bunun iki anlamdan hangisini taşıdığını öğrenin.
Her görüntüleyici kendi kararını verir
İçerik okunabilir hale geldiğinde, P'ye uyup uymama her okuyucunun verdiği bir karardır. Yazar aynı dosyaları Chromium 149 (Chrome değil, açık kaynak bir derleme), Firefox 151 ve iki kütüphane üzerinden çalıştırdı. Chromium'un görüntüleyicisi yazdırmayı ve kopyalamayı engelledi ama sayfa üzerine çizim yapmaya izin verdi. Varsayılan ayarlarda Firefox üçüne de izin verdi; pdfjs.enablePermissions açıldığında yazdırmayı ve düzenlemeyi engellerken kopyalama çalışmaya devam etti. İki kütüphane ise flag'leri olduğu gibi çağırana aktardı ve her zamanki gibi görüntüledi. Aynı P değerini paylaşan dosyalar, şifreleme AES-256, 128-bit RC4 ya da 40-bit RC4 olsun olmasın her iki tarayıcıda da aynı şekilde davrandı.
Reddeden araç
Bir sıkıştırıcı yeni bir dosya yazmak zorundadır ve bu onu uygulayıcı konumuna taşır. Yazar, ImgIng'nin PDF sıkıştırmasına Çince arayüzü üzerinden düz dosyayı, üç izin parolalı dosyayı ve açık parolalı dosyayı verdi. Yalnızca düz olan dosya küçüldü — yüzde 25,7. Diğer dördü de, flag'leri gerçekte değiştirmeye ve birleştirmeye izin veren örnek dahil, dosyada önce kaldırılması gereken şifreleme veya izin koruması olduğunu belirten bir iletiyle başarısız oldu. Oturum sıfır GET-dışı istek yaptı ve ilerleme kartında, sıkıştırılan dosya sayısı sıfırın yanında DONE yazıyordu; yazarın belirttiği küçük bir arayüz uyuşmazlığı.
Yazarın açıklaması —açıkça bir tahmin olarak sunuyor— şu: yeniden yazılan bir dosya ya yeniden şifrelenmek ya da düz yazılmak zorundadır. Yeniden şifrelemek, sahip parolası olmadan sahibin güvenlik düzenini yeniden kurmak anlamına gelir; düz yazmak ise birinin seçtiği kısıtlamaları sessizce düşürmek olur. Şifreli her dosyayı reddetmek, savunması kolay tek seçenektir.
Neden önemli
İçeriği korumak için PDF izin parolalarına güveniyorsanız, kriptografiye değil, okuyucunun nezaketine güveniyorsunuz. Flag'leri yok sayan herhangi bir görüntüleyici veya uygulamayı çağıran koda bırakan herhangi bir kütüphane, kopyalayabilir, yazdırabilir ve düzenleyebilir. PDF araçları geliştirenler de sıkıştırıcının karşılaştığı aynı ayrımda. Yazarın tavsiyesi, P'yi çözmek, dosyanın ne beyan ettiğini kullanıcılara göstermek ve sınırsız bir kopya için onları dosyanın yazarına yönlendirmek; sessizce itaat etmek ya da sessizce kaldırmak değil. Acrobat, macOS Preview ve yayınlanmış Safari test edilmedi, yani ana tüketici görüntüleyicileri için tablo eksik — ama temel ders yerinde: kısıtlama bir kilit değil veridir ve kararı okuyucu verir.
- #file-formats
- #encryption
- #browsers