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. Aşağıda yazılı kod çalıştırıldığı zaman bir private.key adında bir dosya oluşacaktır.
openssl genrsa -out private.key 4096
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.cer
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ık bu imzalanan mesaj bize has olarak saklanabilir ve güvenle taşınabilir. Eğer içerisinde bulunan bir bilgi değiştirilirse imzalamada kullanılan sertifika dosyasını kullanarak yapılan doğrulama ile anlaşılabilir. Doğrulama başarısız olursa imzalanan verinin içerisinde bir bilgi değişmiş demektir.
İ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
PEM dosyası ve x509 hakkında hazırladığım yazıyı okumak için aşağıdaki butona tıklayınız;
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