CMS – Kriptografik Mesaj Söz Dizimi

199 Kişi Okudu

CMS İngilizce olarak açılımı Cryptographic Message Sytax olarak ifade edilir. Kriptografik Mesaj Söz Dizimi olarak Türkçeleştirilmiştir. Mesajları imzalamak amacıyla söz dizini standardı tanımalar.

Dijital ortamlarda gerçekleştirilen mesajların sağlıklı bir şekilde taşınabilmesi çok önemlidir. Bunun sağlanabilmesi içinde çeşitli kriptografik tekniklere başvurulmaktadır. Bu tekniklerin başında Elektronik imza gelir, dijital verilerin korunması ve taşınma esnasında değiştirilmesine karşı önemli bir koruma sağlamaktadır.

İmza ve Elektronik İmza Nedir?

İmza, yazılı, sanatsal veya dijital nesnelerin sahipleri adına oluşturulan benzersiz ve her defasında aynı olan bir işaret, çizim veya kod bütünüdür. Elektronik imza ise, 5070 sayılı Elektronik İmza Kanunu [1]’nda tanımlandığı şekliyle; başka bir elektronik veriye eklenen veya elektronik veriyle mantıksal bağlantısı bulunan ve kimlik doğrulama amacıyla kullanılan elektronik veriyi ifade eder.

Elektronik İmza Nedir?

Elektronik İmza bir takım matematiksel işlemler sonucu ortaya çıkar, her belge için belgenin içeriğine bağlı olarak farklılıklar gösterebilir. Elektronik İmza oluşturulurken çeşitli şifreleme ve özet çıkartma algoritmaları kullanılır. Bu teknikler de her belgenin kendine özgü imzalara sahip olmasına neden olabilir. Hatta Elektronik İmzaların içerisine istenilen bir mesajda eklenebilir.

Kriptografik Mesaj Söz Dizimi ( Cryptographic Message Sytax (CMS)) Nedir?

CMS verileri korunması için IETF tarafından tanımlanmış bir mesaj sarmalama standardıdır [2]. CMS söz dizimi içerisinde dijital imza, mesajın özet değeri, kimlik doğrulama veya şifrelemek için kullanılan standartları içerir. CMS birden çok imzalama işlemini imkan tanımaktadır.

Basitçe elektronik imza, CMS söze dizini ile oluşturulabilir. CMS söz dizini içerisinde, imzalanan mesajın tipi, imzalanan mesajın özeti (HASH) ve imzayı atan kişinin sertifika bilgini içerir. CMS standardına göre imzalanan verilerin zaman damgası sertifikayı oluşturan kişi tarafından verildiği için sertifikanın geçerlilik süresi ile ilgili kanıtlanamayan bir yapı oluşmaktadır. Ayrıca CMS sertifikalara verilen süre içerisinde geçerliliğini sağlamaktadır.

OpenSSL İle CMS İmzalama ve İmza Doğrulama

OpenSSL kullanarak CMS standardı ile bir mesaj sarmalayalım ve sarmalanmış olan bu mesajı doğruluma örneği yapalım. [3]

Asimetrik Anahtarın Oluşturulması

Mesaj içeriğini imzalamak için gizli anahtar (pirvate key) ve açık anahtar sertifikasının (public key certificate) var olması gerekiyor. Bu anahtar çiftleri RSA algoritması ile üretilebilir.

openssl genrsa -out private.key 4096

Yukarıda yazılı kod çalıştırıldığı zaman bir private.key adında bir dosya oluşacaktır.

Sertifika Oluşturma

Gizli anahtar kullanılarak bir açık anahtar sertifika dosyası oluşturulmalıdır.

openssl req -new -days 365 -sha256 -x509 -key private.key -out publickey.cer -subj "/C=TR/ST=IZMIR/L=BORNOVA/O=INTERNET/OU=IT Dept/CN=$(whoami)s Sign Key"

Yukarıdaki kod çalıştırıldığı zaman publickey.cer isminde bir dosya oluşacaktır.

-days n n bir tam sayıdır. sertifikanın geçerlilik süresini belirler girilen bu sayı süresince sertifika onaylanır. Süreyi geçildiği zaman sertifika artık onaylanmayacaktır. n değeri girilmez ise varsayılan olarak 30 kabul edilecektir.

 C      = Ülke Kodu, (Türkiye İçin TR gibi)
 ST     = Bölge
 L      = Şehir
 O      = Organizasyon Adı
 OU     = Organizasyon Birimi
 CN     = Genel Ad ( Örneğin Şirket Adı )

Sertifika Geçerlilik Süresi Öğrenme

Elinizde bulunan sertifikanın geçerlilik süresini öğrenmek için aşağıda bulunan OpenSSL komut satırını sertifikanın bulunduğu dizinde çalıştırmak yeterli olacaktır.

openssl x509 -enddate -noout -in publickey.pem

Mesajı Sertifikalama Ve İmzalama

Anahtarı ve sertifikayı oluşturduk şimdi sıra mesajı sertifikalama (digital certificate) ve imzalamada (sign) .

openssl cms -sign -binary -in mesaj.txt -out imzalananMesaj.txt -signer publickey.cer -inkey private.key -outform DER -nodetach

Yukarıdaki komut çalıştırıldığı zaman imzalananMesaj.txt adında bir dosya oluşacaktır. Bu dosya içerisinde sertifika, mesaj ve açık anahtar ile ilgili bilgiler yer almaktadır. Normalde kolaylıkla okunabilen mesaj bu işlemden sonra sarmalanmış (kapsüllenmiş) bir şekilde karşımıza çıkıyor.

Bu aşama ile mesajımızı imzalamış olduk. Artı bu imzalanan mesaj bize has olarak saklanabilir ve güvenle taşınabilir. Eğer içerisinde bulunan bir bilgi değiştirilirse bu sertifika dosyası kullanılarak doğrula ile anlaşılabilir.

İmzalanmış Dosyanın Doğrulanması Okunur Mesajın Oluşturulması

Elimizde bulunan imzalanmış mesaj bir yazı editörü ile açıldığı zaman okunması güç olabilir veya taşınma esnasında değiştirilmiş olabilir bunu anlamak mesajı doğrulamamız gerekiyor. Kolay anlaşılabilmesi içinde içerisinde bulunduğu kapsülden çıkartarak anlaşılır bir şekilde okunacak mesaj haline dönüştürmemiz gerekiyor.

openssl cms -verify -binary -CAfile publickey.cer -in imzalananMesaj.txt  -out mesajCOZULDU.txt -inform DER

Kaynaklar

[1] Elektronik İmza Kanunu :
http://www.mevzuat.adalet.gov.tr/html/1328.html

[2] IETF :
https://www.rfc-editor.org/rfc/rfc5652

[3] OpenSSL:
https://www.openssl.org/docs/man1.1.0/man1/cms.html

[4] Elektronik İmza Formatı:
https://kamusm.bilgem.tubitak.gov.tr/dosyalar/makaleler/EDevletUygulamalariIcinElektronikImzaFormatlari.pdf

CMS TABANLI KÜTÜPHANE KULLANARAK ETSI UYUMLU ELEKTRONİK İMZA MODÜLÜ VE ÇEVRİMİÇİ UYGULAMA GELİŞTİRMEK:
https://dspace.gazi.edu.tr/bitstream/handle/20.500.12602/147527/?sequence=1&isAllowed=y

Yayınlayan

Ahmet Yasin CİVAN

Mekatronik Mühendisi, Gömülü Yazılım Geliştiricisi.