Bir dijital imza kimin imzaladığını nasıl kanıtlar
Spec: RFC 5652RFC 5652Spec: RFC 5280, §6RFC 5280 §6Spec: RFC 3161, §1RFC 3161 §1
Bir bakışta
“Bir bakışta” başlıklı bölümBir dijital imza üç şey yapar ve bunları en baştan birbirinden ayrı tutmaya değer: baytların değiştirilmediğini kanıtlar, onları kimin imzaladığını kanıtlar ve — biraz yardımla — ne zaman imzalandığını kanıtlar. Bu sayfa, o fikri sıfırdan inşa eder; böylece kriptografi bir kara kutu olmaktan çıkar.
Bu neden önemli
“Bu neden önemli” başlıklı bölüm“İmzalı”, insanların üzerine karar verdiği bir sözcüktür. Bir sözleşme, bir fatura, birinin çalıştıracağı bir yazılım için bir sürüm notu. Yalnızca bir aracın yeşil bir onay işareti yazdırdığını biliyorsanız, neyin kanıtlandığını gerçekte bilmezsiniz. Baytların bozulmadığına dair bir kanıtınız olabilir, ancak onları kimin anahtarının imzaladığına dair hiçbir fikriniz olmayabilir. Gerçek bir imzalayıcınız olabilir, ancak yıllar önce süresi dolmuş bir sertifikanız. Parçaları anlamak, geçerli bir imzanın ne anlama geldiğini — ve aynı ölçüde faydalı biçimde, ne anlama gelmediğini — tam olarak söylemenizi sağlayan şeydir.
Kısa açıklama
“Kısa açıklama” başlıklı bölümKapağına bastırılmış kişisel bir mühür bulunan, kurcalandığında belli olan bir zarf düşünün.
- Mühür, tek bir kişiye özgüdür ve sahtesini yapmak fiilen imkânsızdır. Herkes onu tanıyabilir; yalnızca sahibi yapabilir. İşte bu, anahtar çiftidir: yalnızca sizin tuttuğunuz bir özel anahtar ve herkesin görebileceği bir açık anahtar.
- Mührü belgenin tamamına bastırmazsınız. Onun küçük, taklit edilemez bir özetine — bir özete (hash) — bastırırsınız. Belgenin tek bir baytını değiştirin ve özet tamamen değişir; böylece mühür artık uymaz.
- İmzalama, özel anahtarınızla belge üzerinde bir imza üretmektir — RSA ve ECDSA için özet üzerinde, ya da EdDSA için kendi içinde özetlemesini yapan içeriğin kendisi üzerinde. Doğrulama, açık anahtarınız, imza ve aynı içerikle (bir özet olarak ya da doğrudan) algoritmanın denetimini çalıştırmaktır — geçerli veya geçersiz döndürür. İkisini güven değil, matematik birbirine bağlar.
- Sertifika, bu mührün kime ait olduğunu söyleyen kısımdır. Onsuz, bir anahtarın baytları imzaladığını kanıtlamış olursunuz, ancak anahtarın belirli birine ait olduğunu değil.
- Zaman damgası, ne zaman olduğunu söyleyen kısımdır. Bir imzalayıcının kendi saati yalnızca bir iddiadır; güvenilir zaman, dışarıdan bir otoriteden gelir.
NextPDF buna nasıl yaklaşıyor
“NextPDF buna nasıl yaklaşıyor” başlıklı bölümÖzetle başlayın, çünkü diğer her şey onun üzerinde durur. Kriptografik bir özet işlevi, herhangi bir miktarda veriyi okur ve kısa, sabit uzunlukta bir parmak izi üretir — bir PDF imzası için, tipik olarak 256 bitlik bir değer. İki özellik onu kullanışlı kılar: aynı girdi her zaman aynı parmak izini verir ve aynısına sahip farklı bir girdi bulmak imkânsızdır. Dolayısıyla bir özet, belgenin sadık bir yerine geçenidir. İki özet eşleşirse, baytlar eşleşir.
Şimdi anahtar çifti. Bir özel anahtar ile bir açık anahtar matematiksel olarak bağlıdır, ancak birini diğerinden pratik bir süre içinde türetemezsiniz. Yalnızca özel anahtar geçerli bir imza üretebilir ve yalnızca eşleşen açık anahtar onu denetleyebilir. İmzalama, bu asimetriyi kullanır: imzalayıcı, seçilen algoritmanın tanımladığı girdiye bir özel-anahtar işlemi uygular — RSA ve ECDSA için içeriğin özeti, ya da içeride özetleyen EdDSA için içeriğin kendisi. Sonuç, imza değeridir. Yalnızca özel anahtarın sahibi onu üretmiş olabileceği ve bu içeriğe bağlı olduğu için, aynı anda iki şeyi kanıtlar — sahibinin imzaladığını ve baytların o zamandan beri yer değiştirmediğini.
Doğrulama, bu mantığı yansıtır. Doğrulayıcı, aynı girdiyi yeniden oluşturur — RSA ve ECDSA için belgeyi özetleyerek, ya da EdDSA için içeriği doğrudan alarak — sonra açık anahtar, imza değeri ve o girdi üzerinde imza algoritmasının doğrulama işlemini çalıştırır. İşlem, geçerli veya geçersiz döndürür — ve bu, algoritma ister RSA, ister ECDSA, ister EdDSA olsun aynı şekildir; yalnızca RSA’nın özeti tam anlamıyla “kurtarıyor” olarak resmedilebilmesine rağmen. Geçerli, bozulmamış ve özgün anlamına gelir. Geçersiz, bir şeyin değiştiği ya da yanlış anahtarın kullanıldığı anlamına gelir ve dürüst yanıt geçersizdir.
- Prepare the inputRSA and ECDSA hash the document to a short, fixed-length fingerprint; EdDSA signs the content directly and hashes it internally. Either way, any change to the bytes changes what is signed.
- Sign with the private keyThe signer applies a private-key operation to that input — the hash for RSA and ECDSA, the content for EdDSA. The output is the signature value; only the private-key holder could have produced it.
- Reconstruct the inputThe verifier independently rebuilds the same input from the content — a recomputed hash for RSA and ECDSA, the content itself for EdDSA. This is what the verify operation checks against.
- Verify with the public keyThe verifier runs the algorithm's verify operation on the public key, the signature value, and that input. The same shape works for RSA, ECDSA, and EdDSA.
- Accept or rejectThe verify operation returns valid or invalid. Valid means the bytes are intact and the private-key holder signed them. Otherwise the result is invalid — no guessing.
Gerçek bir PDF’te NextPDF, mührü görünür sayfaya bastırmaz — onu beyan edilmiş bir bayt aralığına bastırır ve imzayı, dosyanın içine yerleştirilmiş, ayrılmış bir CMS nesnesi (Spec: RFC 5652RFC 5652) olarak paketler (Spec: ISO 32000-2, §12.8ISO 32000-2 §12.8). Bir incelik önemlidir: imzalayıcı, ham içerik özetini doğrudan imzalamaz. İçeriğin özetini içeren küçük bir imzalı öznitelik kümesini imzalar; böylece zaman, içerik türü ve imzalayıcının sertifika tanımlayıcısı hepsi birlikte mühürlenir. Bu baytların nerede yaşadığı ve aralığın neden bu şekilde biçimlendirildiği, Bir PDF’te imzalar nasıl yer alır konusudur.
Buraya kadar matematik, bir anahtarın bu baytları imzaladığını kanıtlar. Kimin anahtarı olduğu hakkında hiçbir şey söylemez. İşte bir sertifikanın tam olarak doldurduğu boşluk budur. Bir sertifika, kendisi imzalı bir ifadedir — bir sertifika otoritesinden — bu açık anahtarın bu adlandırılmış özneye ait olduğuna dair. Ona güvenmek, zincirdeki her bağın geçerliliğini boyunca denetleyerek, imzalayıcının sertifikasından güvenmeye karar verdiğiniz bir otoriteye kadar zinciri izlemek demektir (Spec: RFC 5280, §6RFC 5280 §6). O zincir olmadan, “imzalı” anonimdir. Onunla, “imzalı”nın bir adı vardır.
Son parça ne zamandır. Bir imza, imzalayıcının kendi iddia ettiği zamanı gömebilir, ancak kontrol etmediğiniz bir saat bir kanıt değil, bir iddiadır. Bir Time-Stamp Authority’den gelen bir zaman damgası, imzanın bir özetini, belgede hiçbir çıkarı olmayan bir tarafça tasdik edilmiş bir ana bağlar (Spec: RFC 3161, §1RFC 3161 §1). İmzalayıcının sertifikasının süresi dolduktan sonra bir imzanın anlamlı kalmasını sağlayan budur: sertifika hâlâ geçerliyken imzanın var olduğunu gösterebilirsiniz. Daha derin ele alış, Zaman damgaları ve güvenilir zaman sayfasındadır.
Pratik örnek
“Pratik örnek” başlıklı bölümAşağıdaki şekiller, sade biçimde yazılmış kavramsal işlemlerdir. Mesele bir API çağrısı değildir — imzalama ve doğrulamanın birbirinin ayna görüntüsü olduğunu ve kurcalanmış bir baytın eşleşmeyi yapı gereği bozduğunu görmektir.
<?php
declare(strict_types=1);
// SIGN — the holder of the private key seals the content.// RSA and ECDSA sign a hash; EdDSA signs the content directly (hashing inside).$signingInput = sign_input($content); // a digest for RSA/ECDSA, the content for EdDSA$signatureValue = private_key_transform( // only the key holder can do this privateKey: $signerPrivateKey, input: $signingInput,);
// VERIFY — anyone with the public key runs the algorithm's check.$recomputedInput = sign_input($content); // verifier rebuilds the same input$intactAndAuthentic = signature_verify( // RSA, ECDSA, EdDSA — same shape publicKey: $signerPublicKey, // taken from the certificate signatureValue: $signatureValue, input: $recomputedInput, // the freshly reconstructed input);// true -> bytes unchanged AND signed by the private-key holder// false -> a byte changed, or the wrong key — the honest answer is "invalid"
// The certificate answers a SEPARATE question: whose public key is this?// The timestamp answers ANOTHER: when did this signature exist?// "intact + authentic" alone proves neither identity nor time.Hâlâ doğrulanan bir değişikliği taklit etmek, hesaplama açısından imkânsızdır. Özet, içeriği sadık biçimde taşır; dolayısıyla içeriği değiştirmek özeti değiştirir ve doğrulama işlemi onu reddeder — seçilen işlevin pratik dışı kılacak şekilde tasarlandığı bir özet çakışması bulmak dışında.
Yaygın yanlış anlama
“Yaygın yanlış anlama” başlıklı bölümSık yapılan hata, “geçerli imza”yı “güvenilir belge” olarak okumaktır. Bunlar aynı cümle değildir. Kriptografi, baytların bozulmadığını ve özel anahtarın sahibinin onları imzaladığını kanıtlar — daha fazlasını değil. Hiç duymadığınız bir anahtarla imzalanmış, tanımadığınız hiçbir otorite tarafından tasdik edilmemiş bir belge kusursuzca “geçerli” olabilir ve hiçbir değer taşımayabilir. Kimlik, sertifikadan ve zincirinden gelir; zaman, güvenilir bir zaman damgasından gelir. Bütün bunları sessizce tek bir boole değerine katlayan yeşil bir onay işareti, sizin adınıza, hangi soruların önemli olduğuna karar vermiştir. Parçaları bilmek, geri kalanını sormanızı sağlayan şeydir.
Sınırlar ve kapsam
“Sınırlar ve kapsam” başlıklı bölümBu sayfa, bir dijital imzanın fikrini açıklar; tam doğrulama yordamını değil. Buradaki matematik, bütünlüğü ve özgünlüğü kanıtlar. İmzalama sertifikasının düşündüğünüz kişiye verilip verilmediğini, imzalama anında geçerli olup olmadığını veya sonradan iptal edilip edilmediğini tek başına size söylemez — bunlar sertifika-yolu ve iptal sorularıdır ve doğru bir doğrulama hepsini çalıştırır. Tam denetim kümesi Bir imzayı düzgün doğrulama sayfasındadır.
NextPDF, imza yapısını inşa eder ve kriptografik denetimleri gerçekleştirir. Güven çıpalarınızı seçmez, herhangi bir sertifika otoritesine kefil olmaz veya bir imzanın yasal etkisine karar vermez — bunlar dağıtımınıza, sertifikaya ve yargı alanına bağlıdır. Motor, mekanizmayı kanıtlar; onun üzerindeki güven kararları sizindir.
Motorun gönderdiği şey, katmana göre, bu temelin üzerine dışarıya doğru inşa edilir:
| Edition | Availability |
|---|---|
| Core | PAdES B-B: the hash-and-sign mechanism described here, packaged as a detached CMS SignedData object, plus certificate-path validation against a trust anchor you supply. |
| Pro | Adds PAdES B-T — a verified RFC 3161 trusted timestamp on the signature value, so the “when” is attested rather than self-claimed. |
| Enterprise | Adds the long-term profiles (B-LT, B-LTA): embedded validation material and document timestamps that keep the identity and time proofs answerable for years. |
İlgili belgeler
“İlgili belgeler” başlıklı bölüm- Bir PDF’te imzalar nasıl yer alır — imza değerinin ve bayt aralığının dosyada gerçekte nerede yaşadığı.
- Bir imzayı düzgün doğrulama — bir doğrulayıcının çalıştırması gereken, bu sayfadaki matematiğin ötesindeki tam denetim kümesi.
- Zaman damgaları ve güvenilir zaman — bir RFC 3161 zaman damgasının neyi kanıtladığı ve bir imzalayıcının kendi saatinin neden bu olmadığı.
- PAdES temel profilleri — hangi profilin kimliği, zamanı ve uzun vadeli malzemeyi bu temelin üzerine katmanladığı.
Sözlük
“Sözlük” başlıklı bölüm- Özet (Hash, digest) — kriptografik bir özet işlevinden gelen, verinin kısa, sabit uzunlukta bir parmak izi; veriye yapılan herhangi bir değişiklik onu tamamen değiştirir.
- Anahtar çifti (Key pair) — bağlı bir özel anahtar (yalnızca imzalayıcı tarafından tutulan) ve açık anahtar (serbestçe paylaşılan); yalnızca özel anahtar imzalayabilir ve yalnızca eşleşen açık anahtar doğrulayabilir.
- İmzalama (Signing) — algoritmanın tanımladığı girdiye özel-anahtar işlemini uygulamak: RSA ve ECDSA için içeriğin bir özeti, ya da EdDSA için içeriğin doğrudan kendisi (içeride özetler). Bir PDF’te, o içerik, belgenin özetini içeren imzalı özniteliklerdir. Sonuç, imza değeridir.
- Doğrulama (Verifying) — aynı girdiyi yeniden oluşturmak (yeniden hesaplanan bir özet, ya da EdDSA için içeriğin doğrudan kendisi), sonra geçerli-ya-da- geçersiz bir yanıt almak için açık anahtar, imza değeri ve o girdi üzerinde algoritmanın doğrulama işlemini çalıştırmak.
- İmza değeri (Signature value) — özel-anahtar işleminin ürettiği baytlar; bir doğrulayıcının, yeni yeniden oluşturulan algoritma girdisine (RSA ve ECDSA için bir özet, EdDSA için içeriğin kendisi) karşı denetlediği şey.
- Sertifika (Certificate) — bir açık anahtarı adlandırılmış bir kimliğe bağlayan imzalı bir ifade; kabul ettiğiniz bir otoriteye zincirlenerek güvenilir (RFC 5280 §6).
- Güven çıpası (Trust anchor) — güvenmeye karar verdiğiniz bir sertifika otoritesi; kabul edilebilir bir sertifika zincirinin kökü.
- Zaman damgası (RFC 3161) — bir Time-Stamp Authority’den gelen, bir özeti bir zaman değerine bağlayan ve ne zamanın güvenilir kanıtını sağlayan imzalı bir belirteç.
- CMS SignedData — imza değerini ve imzalayıcının sertifikasını taşıyan Cryptographic Message Syntax (RFC 5652) yapısı.
- PAdES — PDF Advanced Electronic Signatures: PDF imzalaması için ETSI profil ailesi. İmzalama sayfalarında ayrıntılı olarak ele alınmıştır.