PKCS 7 ve Kriptografik İleti Sözdizimi
PKCS #7, imza, sertifika ve şifrelenmiş içeriğin ortak bir kriptografik ileti yapısında taşınmasını tanımlar; standart daha sonra Cryptographic Message Syntax adıyla geliştirilmiştir.
PKCS 7, kriptografik iletilerin imza, sertifika ve şifreleme bilgileriyle taşınması için tanımlanmış bir sözdizimidir. Standart daha sonra IETF tarafından Cryptographic Message Syntax adıyla geliştirilmiştir. Güncel uygulamalarda PKCS 7 adı çoğu zaman CMS ailesini veya .p7b, .p7s ve benzeri kapsayıcıları ifade eder.
PKCS #7 adı tarihsel bir ileti sözdizimini, CMS ise bu yapının IETF tarafından standartlaştırılmış devamını ifade eder. Uygulamalarda ayrıca 'PKCS #7 padding' adıyla bilinen blok doldurma yöntemiyle karşılaşılır; aynı ad kökünü paylaşsalar da ileti sözdizimi ile dolgulama kuralı farklı kavramlardır.
Sözdizimi ile Algoritmayı Ayırmak
CMS tek bir şifreleme veya imza algoritması değildir. İçerik türlerini, algoritma tanımlayıcılarını, sertifikaları, alıcı bilgilerini, imzaları ve kapsüllenmiş veriyi ASN.1 yapılarıyla düzenleyen bir ileti biçimidir. Güvenlik kullanılan algoritmaya, anahtar uzunluğuna, sertifika doğrulamasına ve uygulama davranışına bağlıdır.
Temel İçerik Türleri
SignedData
İçerik özeti imzalayanın özel anahtarıyla ilişkilendirilir. Yapı bir veya daha fazla imzalayan bilgisi, sertifika ve algoritma tanımlayıcısı taşıyabilir. İçerik kapsül içinde bulunabilir veya detached signature biçiminde dışarıda tutulabilir.
Doğrulama yalnız matematiksel imza kontrolü değildir. Sertifika zinciri, güven kökü, kullanım amacı, geçerlilik zamanı, iptal durumu ve imzalanan öznitelikler de değerlendirilmelidir.
EnvelopedData
İçerik rastgele üretilen simetrik anahtarla şifrelenir. Bu içerik anahtarı her alıcının anahtar yönetim yöntemiyle ayrı biçimde korunur. Böylece büyük veri simetrik algoritmayla verimli biçimde şifrelenirken birden fazla alıcı aynı kapsülü açabilir.
EncryptedData
Şifreli içerik bulunur; ancak alıcı anahtarı yönetim bilgisi yapının içinde yer almaz. Anahtarın nasıl sağlanacağı uygulama protokolünün sorumluluğundadır.
DigestedData ve AuthenticatedData
DigestedData içerik bütünlüğü için özet taşır, fakat imzalayan kimliği sağlamaz. AuthenticatedData ise MAC tabanlı bütünlük ve kimlik doğrulama sunar. Hangi türün kullanılacağı gizlilik, imzalayanın inkâr edememesi, alıcı sayısı ve anahtar dağıtım modeline göre belirlenmelidir.
Kodlama Biçimleri
CMS yapıları çoğunlukla DER veya BER kurallarıyla ikili kodlanır. PEM görünümü, ikili verinin Base64 ile metne çevrilmiş ve sınır satırlarıyla sarılmış biçimidir. Dosya uzantısı tek başına içeriğin gerçek türünü garanti etmez; ASN.1 yapısı ayrıştırılarak doğrulanmalıdır.
PKCS 7 Dolgulama ile CMS Aynı Şey Değildir
Blok şifrelerde yaygın olarak PKCS 7 dolgulama adı verilen doldurma yöntemi kullanılır. Blok boyutu B, eksik byte sayısı p ise sonuna değeri p olan p adet byte eklenir:
... 05 05 05 05 05İçerik blok boyutunun tam katıysa tamamı B değerinden oluşan yeni blok eklenir. Bu doldurma yöntemi CMS sözdizimiyle tarihsel olarak ilişkili ad taşır; ancak CMS kapsayıcısı kullanmak zorunlu olarak CBC veya bu dolgulama yöntemini kullanmak anlamına gelmez.
Dolgulama doğrulamasındaki farkların dışarıya sızması, CBC tabanlı yapılarda dolgulama oracle sınıfı yan kanal riskleri oluşturabilir. Uygulama ayrıntılı hata farklarını istemciye taşımamalı, doğrulama ile bütünlük kontrolünü güvenli sırada yapmalı ve mümkün olduğunda modern authenticated encryption veya standart protokol profillerini tercih etmelidir.
Sertifika Paketleri
.p7b veya .p7c dosyaları çoğunlukla sertifika ve ara sertifika zincirini taşır; özel anahtar içermez. PKCS 12 tabanlı .p12 veya .pfx kapsayıcıları ise parola ile korunan özel anahtar ve sertifika materyali taşıyabilir. Bu biçimler birbirinin eşdeğeri değildir.
Güvenli Ayrıştırma
CMS ayrıştırıcısı aşağıdaki sınırları uygulamalıdır:
- Maksimum kapsül ve içerik boyutu
- ASN.1 derinlik ve eleman sayısı sınırı
- Desteklenen algoritma allowlist'i
- Bilinmeyen kritik öznitelik politikası
- Sertifika zinciri ve kullanım amacı doğrulaması
- Detached content eşleşmesi
- İmza özniteliklerinin tutarlılığı
- Tekrarlı veya çelişkili alanların reddi
İçerik ayrıştırılmadan önce yalnız dosya uzantısına güvenilmemeli; dış girdiler bellek ve CPU tüketimi açısından sınırlandırılmalıdır.
Elektronik İmza Bağlamı
CMS, elektronik imza sistemlerinde temel kapsayıcılardan biridir. Bununla birlikte bir CMS imzasının kriptografik olarak geçerli olması, ilgili ülkenin hukuki nitelikli elektronik imza koşullarını kendiliğinden karşıladığı anlamına gelmez. Zaman damgası, imza politikası, sertifika profili, uzun dönem doğrulama verileri ve mevzuat ayrı katmanlardır.
Uygulamada Güvenlik
PKCS 7 ve CMS'in değeri, farklı üreticilerin kriptografik iletiyi ortak bir yapıda taşıyabilmesidir. Güvenlik standardın adından değil; güncel algoritma seçimi, doğru sertifika doğrulaması, güvenli anahtar yönetimi, sınırlandırılmış ayrıştırma ve yan kanal oluşturmayan hata davranışından doğar.
Kaynakça
- **[1]** Burt Kaliski. (1998). PKCS #7: Cryptographic Message Syntax Version 1.5. RFC Editor. doi:10.17487/RFC2315
- **[2]** Russ Housley. (2009). Cryptographic Message Syntax (CMS). RFC Editor. doi:10.17487/RFC5652