PKCS 7: Kriptografik Mesaj Sözdizimi Standardı

Yük. Müh. Muhammet Ali Köker
9 min readFeb 7, 2021

--

Benzeri Makalelerim: RED (Type A) Şifreleme Makinesi

Bilgisayar bilimi, matematik ve kriptoloji birbirleriyle yakından ilgili alanlardır. İnsan yaşamındaki gereksinimler bu alanlardaki araştırma ve geliştirme süreçlerini hızlandırmıştır. Bu süreçlerde siber güvenlik, savunma, iletişim, elektronik imza, elektronik ticaret, kişisel verilerin korunması gibi birçok alanda kriptoloji uygulamaları kullanılagelmiştir.

Yapılan çalışmalar şifre ve deşifre işlemlerinde açık ve gizli olmak üzere farklı anahtarların kullanıldığı “Açık Anahtarlı Şifreleme” tekniklerinin diğer uygulamalara göre daha iyi bir güvenlik sunduğunu göstermiştir.

Bilim ve mühendislikteki her çalışmada olduğu gibi güvenilirlik için standartlara gereksinim duyulmaktadır. Bundan dolayı açık anahtarlı kriptografi ile ilgili olarak PKCS olarak bilinen standartlar yayınlanmıştır.

Bu kapsamda geliştirilen PKCS 7, kriptografik iletilerde sözdizimi kurallarını belirlemek amacıyla yayınlanmıştır. Söz konusu standart diğer PKCS standartları ile birlikte kabul görmüş ve yaygınlaşmıştır.

Resim 1: PKCS- Açık Anahtar Şifreleme Standartları

TARİHÇESİ

1991 yılında RSA isimli güvenlik şirketi tarafından aynı ismi taşıyan kriptografi standardını detaylandıran ilk PKCS sürümü yayınlanmıştır. Adi Shamir, Leab Adleman ve Ron Rivest tarafından kurulan RSA, sonraki yıllarda PKCS 3 üzerinde Diffie Hellman olarak bilinen anahtar değişimi tabanlı algoritma standardını yayınlamıştır. PKCS 5 üzerinde şifre tabanlı olan kriptografi standardı, PKCS 6 üzerinde de sertifika sözdizimleri için genişletilmiş standardı önermiştir. Burada belirtilmeyen diğer standartlar ise iptal edilmiştir.

Sonraki süreçte geliştirilen PKCS 7 standardı ile kriptografik iletilerin sözdizimi ile ilgili en çok kabul gören yaklaşım öne sürülmüştür. Söz konusu standart için 1998 yılında 1.5 sürümü yayınlanmıştır.

RSA tarafından PKCS 7’den sonra da benzeri standartlar geliştirilmiştir. Periyodik olarak düzenlenen konferanslarla tüm standartlar için düzenleme ve geliştirme çalışmaları yapılmaktadır.

PKCS genel olarak RSA tarafından sunulsa da Apple, Microsoft, MIT gibi kuruluşlarca uygulanmakta ve uyarlanmaktadır. Günümüzde birçok kriptografi uygulamasında kabul görmüş, güvenilirlik yönünden çok daha elverişli hale gelmiştir.

Resim 2: RSA Kurucuları

ÇALIŞMASI

PKCS 7 genel olarak kriptografik iletiler için sözdizimi yapısı ile birlikte imzalama, doğrulama ve iletim süreçlerini belirlemiştir. Bu kapsamda kullanılan sayısal imza, imzalayan için kimlik bilgisini garanti etmektedir. Ayrıca kaynak sistem üzerinden iletim sırasında şifrelenmiş iletinin hedefe değiştirilmeden ulaştığı doğrulanmaktadır.

İletinin imzalanması sürecinde ilk olarak kaynak tarafında ileti içeriği temel alınarak özetleme (hashing) işlemi sağlanmaktadır. Bu aşamada RSA veya DSA gibi özel bir anahtar algoritması kullanılarak elde edilen özet şifrelenmektedir. Daha sonra kaynak ileti ile birlikte şifrelenen ve imzaya karşılık gelen özet bilgisi de hedefe gönderilmektedir.

Hedef tarafından alınan şifrelenmiş özet değer, kaynağın özel anahtarı ile ilgili olan ortak anahtarla çözülmektedir. Bu aşamada kaynak ile hedefte aynı özetleme algoritması kullanılmaktadır. Genel olarak ileti içeriği de şifrelenmekte ve çözülmektedir. Her durumda kaynak özeti ile hedef tarafından yeniden hesaplanan özet bilgisi karşılaştırılmaktadır. Böylece söz konusu imzanın doğrulanması sağlanmaktadır.

İmzalama süreçlerinde ilgili iletinin içeriğinin sadece kaynak ve hedef tarafından okunabilmesini sağlamak amacıyla şifreleme kullanılmaktadır. Kaynak tarafında simetrik bir anahtar kullanılarak iletinin içeriği şifrelenmektedir. Bu süreçte ortak bir anahtar kullanılarak simetrik anahtar da şifrelenmektedir. Hedefte özel bir anahtar ile söz konusu simetrik anahtar ve bu anahtar ile ileti içeriği çözülmektedir.

Resim 3: PKCS 7 Çalışma Akış Şeması

KRİPTOGRAFİK İLETİ SÖZDİZİMİ (CMS)

Daha önce belirtildiği gibi iletilerin şifrelenmesi, imzalanması, iletilmesi ve doğrulanması ile ilgili süreçlerde ilgili ileti için genel kabul görmüş bir sözdizimine gereksinim duyulmuştur. PKCS 7, söz konusu gereksinimi karşılamakta ve sonuçta ilgili süreçlerin güvenilirliğini garanti etmektedir.

CMS ile verinin şifreleme sürecinde kullanılan diğer bilgilerle birlikte kapsül olarak ele alınması sağlanmaktadır. Burada kapsül zarfı olarak adlandırılan ve iç içe olabilen veri kümeleri söz konusudur. İleti içeriği ile gönderilen diğer veriler ile çözümleme ve daha yüksek doğrulama olanağı sunulmaktadır.

PKCS 7 uygulamalarında tercihen şifreleme yönünden daha basit algoritmalar ve daha düşük boyutlu kapsül zarfları kullanılabilmektedir. Bu durumda temel içerik söz konusudur.

Ancak genel olarak yüksek doğruluk sunmak amacıyla geliştirilmiş içerik tercih edilmektedir. Veriler olabildiğince yüksek güvenlik sunan algoritmalar ile şifrelenmekte, imzalama ve doğrulama aşamaları daha gelişmiş doğruluk sunacak şekilde tasarlanmaktadır.

Geliştirilmiş sınıflar taban sınıf özelliklerini içerecek şekilde tasarlanabilmektedir. Burada taban sınıf iç içerik, geliştirilmiş sınıfta yer alan diğer özellikler dış içerik olarak değerlendirilmektedir. Nesne yönelimli programlama yaklaşımında yer alan kalıtım temelli mimariler söz konusu sürecin uygulanmasını kolaylaştırmaktadır.

CMS sözdizimi öncelikle içerik türünün belirtildiği “Content Type” alanı ile başlamaktadır. Daha sonra alan olarak sırasıyla sürüm bilgisi, tercihen kaynak bilgisi, alıcı bilgisi, mesaj doğrulama kodu (MAC) algoritması, tercihen özümleme (digest) algoritması, kapsülleme içerik bilgisi, tercihen yetkilendirme öznitelikleri, elde edilen MAC kodu, tercihen yetkisizleştirme öznitelikleri yer almaktadır.

Resim 4: Kriptografik İleti Sözdizimi Veri Türleri

Kapsül zarfı içinde yer alan içerikte ileti özeti (hash) değeri mevcutsa veri “imzalı veri” türündedir. Bu durumda sözdizimine göre içerik türü bilgisi “Signed Data” olarak belirtilmektedir. Hedefler için şifrelenmiş içerik ve ilgili şifreleme anahtarının birlikte bulunduğu veriler de “zarflı veri” olarak değerlendirilmektedir. Bu durumda ise içerik türü “Enveloped Data” şeklinde olmaktadır. Bunlara ek olarak veri hem imzalı hem de zarflı olabilmektedir.

Zarflı içerik türünden farklı olarak verinin sadece şifrelenmiş halinin bulunduğu, hedef ve anahtar bilgisinin ise bulunmadığı veriler ise “şifrelenmiş veri” olarak değerlendirilmekte, içerik türü ise “Encrypted Data” olarak belirtilmektedir.

Sadece içerik tür bilgisi ve özeti mevcutsa “özümsenmiş veri” söz konusudur. Bu durumda da “Digested Data” içerik türü belirtilmektedir.

Resim 5: Kriptografik İleti Sözdiziminde Biçimi

DOLDURMA (PADDING) SÜRECİ

Kriptografi algoritmalarında verinin başına, ortasına veya sonuna içerikten bağımsız veri ekleme söz konusu olmaktadır. Bu işlem standart veri boyutunu sağlamak için yapılabileceği gibi kriptanalistleri yanıltma amaçlı olarak da yapılabilmektedir.

PKCS 7 yaklaşımına göre doldurma süreci tüm veri için geçerli olmaktadır. Her durumda eklenen byte adedi aynı zamanda eklenen byte değerine karşılık gelmektedir. Örneğin 10 adet doldurma byte değeri bulunuyorsa eklenen değerlerde onluk tabanda 10, onaltılık tabanda 0x0A olmaktadır.

1 byte işaretsiz tamsayı olarak en fazla 255 değerini alacağından 1 byte’tan büyük değerler için daha fazla alan kullanılmaktadır. Bu süreçte içeriğin boyutu doldurulan alanın boyutunun tam katıysa fazladan veri blokları ilave edilmektedir.

Her durumda doldurma işlemi belirli bir standarda göre yapıldığından hedef üzerinde verinin hangi kısmının gerçek veri, hangi kısmının doldurma değeri olduğu belirlenebilmektedir.

PKCS 7 ile belirlenen doldurma yaklaşımı PKCS 5’te belirlenen yaklaşımla benzerlik göstermektedir. PKCS 5 farklı olarak 8 byte (64 bit) uzunluğunda blok şifrelemeyi temel almaktadır.

Resim 6: Doldurma (Padding) Süreci

KRİPTOANALİZ VE YAPILAN ÇALIŞMALAR

PKCS 7 ileti sözdizimini ve ilgili süreçleri belirleyen bir standarttır. Kullanılan şifreleme algoritması ve algoritma ile ilgili kriptoanaliz süreçleri bu standardın kapsamı dışındadır. Ancak doğrudan standart ile belirtilen ileti sözdizimi ve doldurma (padding) süreçlerinde kriptoanaliz yapılabilmektedir.

Doldurma saldırısı (Padding Attack), yan kanal saldırısı (Side Channel Attack) ve tüm olasılıkları deneme saldırısı (brute force attack) yöntemleri ile kriptoanaliz gerçekleştirilmekte, zayıf güvenlikli PKCS 7 — CMS iletileri çözülebilmektedir.

Makale kapsamında doldurma saldırısı detaylı olarak incelenmiş, konuyla ilgili olarak Python programlama dili ile bir kriptoanaliz yazılımı uygulanmıştır.

Resim 7: PKCS 7 İçin Padding Saldırısı

KRİPTOANALİZ DETAY

Doldurma başlığı altında belirtildiği gibi PKCS 7 standart bir doldurma (padding) sürecini kapsamaktadır. Analiz sürecinde özel olarak kahin (oracle) olarak adlandırılan yazılım, ileti üzerindeki bloklarda doldurma işleminin doğruluk durumuna yanıt vermesi yaklaşımını temel almaktadır. Bu yöntem genellikle blok şifrelemede şifre bloku zincirleme (CBC) söz konusuysa kullanılmaktadır. Sistemin veya hesaplanan değerin hatalı olması, geçersiz bir doldurma işlemi yapıldığını dolayısıyla sonucun yanlış olduğunu göstermektedir.

Örneğin C1, C2, C3 şifreli blokları ve P1, P2 blokları mevcutsa farklı senaryolarda analiz söz konusu olmaktadır. Analiz sürecinde kriptanalist P2 blok şifresini çözmek ister ve sadece son blokta doldurma olduğunu bilirse C1 için son byte’ı değiştirerek saldırı gerçekleştirebilmektedir. Sonuçta ilgili algoritma gereği P1 bloğunun tamamının değiştiği, ancak P2 bloğunun sadece son byte’ının değiştiği görülecektir. Bu aşamada kahin yazılımı söz konusu P2 bloğu için doldurma işleminin doğru olup olmadığını tespit etmektedir. Sonuçta veri bloğunun boyutuyla doğru orantılı iterasyonlar gerçekleştirilerek P2 için son byte elde edilmiş olacaktır.

Bunun dışında yan kanal saldırısı ile şifrelenip çözülen farklı veri blokları için şifreleme algoritmasının ve parametrelerinin kısmen tespiti sağlanabilmektedir. Tüm olasılıkların denendiği brute force yaklaşımında ise güvenlik yönünden çok zayıf olan CMS verilerinin çözülmesi mümkün olabilmektedir. Olasılık çok fazla ise paralel algoritmalar, GPU akselerasyonlu algoritmalar daha kısa sürede sonuca ulaşma konusunda yardımcı olmaktadır.

Resim 8: PKCS 7 İçin Kriptoanaliz

ALGORİTMA DEĞERLENDİRME

PKCS 7 ve kapsadığı ileti sözdizimi ile ilgili yaklaşım birçok yazılım ve donanım üreticisi tarafından geniş kabul görmüştür. Web sitelerinde, elektronik posta sistemlerinde, elektronik imza yazılımlarında, sertifika uygulamalarında yaygın olarak tercih edilen standartlar ile güvenilir ve farklı platformlara uyumlu projeler geliştirilebilmektedir.

Verilerde şifreli ve zarflı veri türlerinin bulunması, standartlara tam olarak uyum sağlanması gibi durumlar şifreli verilerin çözülmesini zorlaştırmaktadır. Aslında yaygın olarak kullanılan PKCS gerçeklemelerinde varsayılan yapılandırma çoğu durumda yüksek güvenlik sunmaktadır.

PKCS 7 birçok alanda kullanılmasına rağmen özellikle elektronik imza sistemleri ile özdeşleşmiştir. Yüksek güvenlik ve güvenilirlik gerektiren sistemlerde biyometrik yöntemler giriş sistemleri ile birlikte elektronik imza yöntemleri de yaygın olarak kullanılmaktadır. Bu süreçte PKCS 7 ve diğer standartlar e-imzanın taklit edilmesi ve yeniden kullanılması gibi durumları önlemektedir.

PKCS 7 ayrıca web ve e-posta sunucularında kullanılan SSL sertifikaları için de bir alternatif sunmaktadır. Sertifikalar ile ilgili dosyalar genellikle P7B ve P7C dosya uzantılarına sahiptir. Dosya içeriğinde BEGIN ile başlayıp END ile sonlanan kısımda tutulan, özel anahtar içermeyen veri bloğu şeklinde bulunmaktadır. Bu sertifikalar diğer SSL biçimleri olan PEM ve DER ile, PKCS 12 ile tanımlanan PFX biçimiyle benzer özellikler taşımaktadır.

OpenSSL isimli kütüphane kullanılarak diğer SSL biçimlerinde olduğu gibi PKCS sertifikaları ile ilgili uygulamalar geliştirilebilmektedir. Söz konusu kütüphane iletinin biçimi, şifrelenmesi, zarflı veri haline getirilmesi ve doğrulanması gibi süreçlerde kapsamlı bir yapılandırma imkanı sunmaktadır.

Veri bütünlüğü, yüksek güvenlikli kimlik doğrulama, veri gizliliği sağlama konusunda PKCS tüm standartları ile önemli bir çözüm sunmaktadır.

Resim 9: Elektronik İmza Donanımları

DİĞER PKCS STANDARTLARI

PKCS varsayılan olarak bir şifreleme algoritması önermemekte, genel bir ileti sözdizimi açıklamaktadır. Uygulamalarda kullanılan şifreleme algoritmaları diğer PKCS standartlarının kapsamındadır.

PKCS 1, RSA tarafından geliştirilen aynı isimli kriptografi standardının belirlendiği sürümdür. Algoritma temel olarak p ve q olmak üzere 2 büyük asal sayının çarpımı olan n değeri ile çalışmaktadır. Burada söz konusu çarpanların 1 eksiklerinin çarpımını veren totient fonksiyonu ile aralarında asal olan e sayısı belirlenmektedir.

PKCS 3, Diffie Helman olarak da bilinen anahtar değişimi algoritmasını açıklamaktadır. Algoritma güvensiz ortam üzerinde oluşturulan gizli ve ortak anahtarın daha sonra güvenli ortamda veriyi şifreleme amaçlı kullanılmasını temel almaktadır.

PKCS 5, şifre tabanlı olarak kriptografi ve doldurma standardı belirlemiştir.

PKCS 6, sertifika sözdizimleri için genişletme sunmuştur.

PKCS 8, gizli anahtarlara bilgi için sözdizimi standardı belirlemiştir.

PKCS 9, seçili nesne sınıfları ve ilgili özellikler için standartlar belirlemiştir.

PKCS 10, sertifika istekleri için bir biçim tanımlamıştır.

PKCS 11, token arabirimleri üzerinde standart belirlemiştir.

PKCS 12, kişisel bilgi aktarımında sözdizimi için standart belirlemiştir.

PKCS 13, eliptik eğri tabanlı kriptografi algoritması ile ilgili standartlar belirlemiştir.

PKCS 14, sözde ve rasgele sayı üretimi ile ilgili standartlar belirlemiştir.

PKCS 15, token bilgilerinin biçimlendirilmesi ile ilgili standartlar belirlemiştir.

PYTHON İLE KRİPTOANALİZ UYGULAMASI

Makale kapsamında incelenen doldurma saldırısı yöntemi Python programlama dili ile uygulanmış, örnek bir veri üzerinde kriptoanaliz işlemi gerçekleştirilmiştir. Github üzerindeki örnekler incelenerek geliştirilen projede OracleModule isimli modül kullanılmış, PKCS7 ile uyumlu padding işlemi gerçekleştirilmiştir. Sonuçta şifrenin ilgili yöntemle çözülmesi sağlanmıştır.

Resim 10: Python İle Uygulama Kaynak Kodu
Resim 11: Python İle Uygulama Kaynak Kodu (Devam)

KAYNAKÇA

http://www.alikoker.com.tr/pkcs-7-cms

Açık Anahtarlı Şifreleme, Vikipedi. (Erişim Tarihi: 19.02.2021)

Aterya M. PKCS Standartlarına Giriş (2016).

Baidya B. Açık Anahtar Kriptoloji Standarları (2014). (Erişim Tarihi: 19.02.2021)

Klima V, Rosa Tomas. PKCS 7'de CBC Şifreli Mesajlara Yönelik Yan Kanal Saldırıları (2013). Çek Cumhuriyeti

Kriptografide Doldurma, Vikipedi. (Erişim Tarihi: 19.02.2021)

Kriptografik İleti Sözdizimi Standardı, Vikipedi. (Erişim Tarihi: 19.02.2021)

Microsoft Docs. PKCS 7 Kriptografik İleti Sözdizimi Konseptleri (2018). (Erişim Tarihi: 20.02.2021)

Padding Oracle Atağı, Vikipedi. (Erişim Tarihi: 19.02.2021)

Parker A. Sayısal imza ve PKCS 7'ye Giriş (2018). (Erişim Tarihi: 19.02.2021)

PKCS 7 Nasıl Çalışır, SAP Yardım Portalı. (Erişim Tarihi: 19.02.2021)

RSA Laboratuvarları Teknik Bildirisi. PKCS 7 Kriptorgrafik İleti Standartları (1993).

Wang Yongge. Açık Anahtar Kriptografi Standartları (2012). Kuzey Carolina Üniversitesi

--

--

Yük. Müh. Muhammet Ali Köker

Bilgisayar ve Mekatronik Mühendisi, İçişleri Bakanlığı & Argus, Adli Bilişim & Siber Güvenlik MSc, İşletme BSc, MARMARA GAZİ AKÜ İÜ SAÜ KKÜ, www.alikoker.com.tr