ESYAE-imza Kütüphaneleri

User Tools

Site Tools


esya:cades:imza-tipleri

Farklı İmza Tiplerinin Oluşturulması

API tarafından desteklenen imza tiplerinden çok kullanılanları hakkında kısa açıklamaları burada bulabilirsiniz. Hangi imzanın size uygun olduğuna karar vermek için “E- imza Profilleri” dökümanını inceleyebilirsiniz. İmza tipleri hakkında daha geniş bilgi için ise TS ETSI 101 733 dökümanına bakınız.

BES

BES imza, en basit imza türüdür. BES imza sadece o kişinin imzayı attığını garanti eder. İmza zamanı belli olmadığından ancak sertifika geçerli iken imza doğrulanabilir. Sertifika iptal edildiğinde veya sertifika süresi dolduğunda imza doğrulanamaz. BES imza içersine zaman bilgisi eklenebilir, eklenen zamanın herhangi bir hukuki yükümlülüğü, kesinliği yoktur. Beyan edilen zaman şeklinde kullanılabilir.

BaseSignedData bs = new BaseSignedData();		
bs.addContent(new SignableByteArray("test".getBytes())); 
			
//Since SigningTime attribute is optional,add it to optional attributes list
List<IAttribute> optionalAttributes = new ArrayList<IAttribute>();
optionalAttributes.add(new SigningTimeAttr(Calendar.getInstance()));
			
HashMap<String, Object> params = new HashMap<String, Object>();
params.put(EParameters.P_CERT_VALIDATION_POLICY, VALIDATION_POLICY);
				
bs.addSigner(ESignatureType.TYPE_BES, cert, signer, optionalAttributes, params);

BaseSignedData bs = new BaseSignedData();
bs.addContent(new SignableByteArray(Encoding.ASCII.GetBytes("test")));

//Since SigningTime attribute is optional,add it to optional attributes list
List<IAttribute> optionalAttributes = new List<IAttribute>();
optionalAttributes.Add(new SigningTimeAttr(DateTime.UtcNow));

Dictionary<String, Object> params_ = new Dictionary<String, Object>();
params_[EParameters.P_CERT_VALIDATION_POLICY] = VALIDATION_POLICY;

bs.addSigner(ESignatureType.TYPE_BES, cert, signer, optionalAttributes, params_);

İmzanın beyan edilen zamanını almak için buradaki örnek kod kullanılabilir.

Beyan edilen zamanın kullanımında oluşabilecek kötü senaryo aşağıdaki gibidir. İmza atıldığı sırada imzacı sertifikası iptal edilmiştir, fakat kullanıcı imza zamanı olarak daha önceki bir zamanı beyan etmiştir. Beyan edilen zamana güvenildiği durumda geçersiz olan bu imza doğrulanacaktır.

 Şekil 16 Yanlış Beyan İle Kötü Kullanım Senaryosu

EST

EST imza, BES imzadan türemiştir. İçerisinde imzalama zamanını gösteren zaman damgası bulundurmaktadır. İmza atılırken zaman damgası ayarlarının verilmesi gerekmektedir. Aşağıdaki örnek kodda bir EST imzanın nasıl atılacağını bulabilirsiniz.

BaseSignedData bs = new BaseSignedData();		
bs.addContent(new SignableByteArray("test".getBytes()));
				
HashMap<String, Object> params = new HashMap<String, Object>();		
//ilerli for getting signaturetimestamp
TSSettings tsSettings = new TSSettings("http://zd.ug.net", 21,
"12345678".toCharArray(),DigestAlg.SHA1);
params.put(EParameters.P_TSS_INFO, tsSettings);	
params.put(EParameters.P_CERT_VALIDATION_POLICY, TestConstants.getPolicy());
				
//add signer
bs.addSigner(ESignatureType.TYPE_EST, cert, signer, null, params);

BaseSignedData bs = new BaseSignedData();
bs.addContent(new SignableByteArray(Encoding.ASCII.GetBytes("test")));
Dictionary<String, Object> params_ = new Dictionary<String, Object>();
//ilerli for getting signaturetimestamp
TSSettings tsSettings = new TSSettings("http://zd.ug.net", 21, "12345678",,DigestAlg.SHA1);
params_[EParameters.P_TSS_INFO] = tsSettings;
params_[EParameters.P_CERT_VALIDATION_POLICY] = TestConstants.getPolicy();

//add signer
bs.addSigner(ESignatureType.TYPE_EST, cert, signer, null, params_);

İmza zamanı belli olduğundan, BES tipi imzadan farklı olarak sertifika doğrulamada kesin sonuçlara ulaşılabilir. İmza zamanını almak için buradaki örnek kod kullanılabilir.

ESXLong

ESXLong imza aynı zamanda bir EST imzadır. ESXLong imza, EST imzadan farklı olarak imza içerisinde sertifika doğrulamada kullanılacak olan doğrulama verisini içerir. . Bundan dolayı ESXLong imza atılırken veya bir imza ESXLong’a çevrilirken sertifika doğrulama işlemi yapılmak zorundadır. Sertifika ömrü dolduktan sonra doğrulamada kullanılacak veriye ulaşmada sorunlar çıkabilir. ESXLong imza, doğrulama verisini içinde barındırdığından bu tür sorunların çıkmasını engeller. EST imza atılırken kullanılan örnek kodun aynısı sadece eklenecek imza türü değiştirilerek kullanılabilir.

ESA

ESA imza tipi kriptografik algoritmaların zamanla güvenilirliğini kaybetmesine karşı geliştirilmiş bir imza türüdür. Şu anda güvenerek kullandığımız algoritmalar, 5-10 yıl sonra güvenilemez olabilir. Bu algoritmalar güvenilmez duruma geçmeden önce, imzaların ESA tipine çevrilmesi gerekmektedir. Fakat imza atıldıktan hemen sonra imzanın ESA'ya çevrilmesi fazladan bir güvenlik sağlamaz. Algoritmaların bir kısmı güvenilmez duruma geçerken, daha güvenilir yeni algoritmalar kullanılmaya başlanacaktır. ESA tipine çevrim sırasında bu yeni algoritmalar kullanılmalıdır.

ESA'yı kullanmanın bir diğer amacı da imza üzerinde değişiklik yapılmasını engellemek olabilir. ESA ile imzanın altındaki tüm seri imzalar korunur. Bu yüzden seri imzalar için ayrıca arşiv zaman damgası almaya gerek yoktur. Eğer seri imza kullanılıyorsa; ESA'ya çevrilen imzanın altındaki imzaların veri yapısında bir değişiklik yapılamaz. Bu değişiklikler imza türünün değiştirilmesi, imzanın silinmesi olabilir. Arşiv zaman damgası v2 özelliği bulunduran ES-A tipindeki imzada, yeni bir seri imza yahut doğrulama verisi de imzaya eklenemez. Arşiv zaman damgası v3 özelliği bulunduran ES-A tipindeki imzada ise, bu eklemeler yapılabilir.

Bir imza atılırken ESA tipinde atılamaz. Öncelikle başka bir tipte atılmalı, daha sonra ESA tipine çevrilmelidir. ESA tipine dönüşüm sırasında arşiv tipi zaman damgası kullanılmaktadır. Bundan dolayı parametreler yardımıyla zaman damgası ayarları verilmelidir.

byte [] signatureFile = AsnIO.dosyadanOKU(TestConstants.getDirectory() +  "testdata/ESXLong-1.p7s");
BaseSignedData bs = new BaseSignedData(signatureFile);
		
Map<String,Object>parameters = new HashMap<String, Object>();
		
//Archive time stamp is added to signature, so time stamp settings are needed.
parameters.put(EParameters.P_TSS_INFO, TestConstants.getTSSettings());
parameters.put(EParameters.P_CERT_VALIDATION_POLICY, TestConstants.getPolicy());
		
bs.getSignerList().get(0).convert(ESignatureType.TYPE_ESA, parameters);
		
AsnIO.dosyayaz(bs.getEncoded(), TestConstants.getDirectory()+"testdata/ESA-2.p7s");
byte[] content = AsnIO.dosyadanOKU(TestConstants.getDirectory() + "testdata\\ ESXLong-1.p7s");
BaseSignedData bs = new BaseSignedData(content);

Dictionary<String, Object> parameters = new Dictionary<String, Object>();

//Archive time stamp is added to signature, so time stamp settings are needed.
parameters[EParameters.P_TSS_INFO] = TestConstants.getTSSettings();
parameters[EParameters.P_CERT_VALIDATION_POLICY] = TestConstants.getPolicy();

bs.getSignerList()[0].convert(ESignatureType.TYPE_ESA, parameters);

AsnIO.dosyayaz(bs.getEncoded(), TestConstants.getDirectory() + "testdata\\ESA-2.p7s");

esya/cades/imza-tipleri.txt · Son değiştirilme: 2014/01/21 09:30 Değiştiren: Beytullah Yiğit