ESYAE-imza Kütüphaneleri

User Tools

Site Tools


esya:cades:imza-dogrulama

Farklar

Bu sayfanın seçili sürümü ile mevcut sürümü arasındaki farkları gösterir.

Karşılaştırma görünümüne bağlantı

esya:cades:imza-dogrulama [2013/07/22 11:06]
Beytullah Yiğit created
esya:cades:imza-dogrulama [2013/08/28 08:29] (mevcut)
Beytullah Yiğit
Satır 1: Satır 1:
 ===== İmza Doğrulama İşlemleri ===== ===== İmza Doğrulama İşlemleri =====
  
-İmza doğrulama işlemi birçok kontrolcünün bir araya gelmesiyle yapılmaktadır. Bu kontrolcüler imzanın yapısal kontrollerinden ve sertifika kontrollerinden ​ulaşmaktadır. Sertifika kontrolleri sertifikanın yapısal kontrollerinden,​ sertifikanın güvenilir bir kökten verilmiş olmasından ve sertifika iptal kontrolünden oluşmaktadır. Sertifika iptal kontrolü dışında kalan kontroller matematiksel işlemlerden oluşmaktadır,​ ekstra bir bilgiye ihtiyaç duymamaktadır. Sertifika iptal kontrolü için ise sertifikayı ​verenin ​yayınlandığı uygun zamanlı SİL veya ÇİSDUP bilgisine ihtiyaç duyulmaktadır. Sertifika doğrulama işlemi için sertifika doğrulama işleminin konfigurasyonunu barındıran xml formatında politika dosyasına ihtiyaç vardır. Bu xml dosyasıdışında birçok parametre kullanılabilir. Bu parametrelere Parametreler bölümünden veya EParameters sınıfından bakabilirsiniz.+İmza doğrulama işlemi birçok kontrolcünün bir araya gelmesiyle yapılmaktadır. Bu kontrolcülerimzanın yapısal kontrollerinden ve sertifika kontrollerinden ​oluşmaktadır. Sertifika kontrolleri sertifikanın yapısal kontrollerinden,​ sertifikanın güvenilir bir kökten verilmiş olmasından ve sertifika iptal kontrolünden oluşmaktadır. Sertifika iptal kontrolü için sertifikayı ​veren kuruluşun ​yayınlandığı uygun zamanlı SİL veya ÇİSDUP bilgisine ihtiyaç duyulmaktadır. Sertifika doğrulama işlemi içinsertifika doğrulama işleminin konfigurasyonunu barındıran xml formatında politika dosyasına ihtiyaç vardır. Bu xml dosyası dışında birçok parametre kullanılabilir. Bu parametrelere ​[[esya:​cades:​imza-parametreler |Parametreler]] bölümünden veya ''​EParameters'' ​sınıfından bakabilirsiniz.
  
- Bir imzalanmış verinin doğrulama işleminden SignedDataValidation sınıfı sorumludur. SignedDataValidation sınıfının ​ verify(…) ​  ​methodu ​ kullanılarak ​  ​imza ​ doğrulama ​ işlemi gerçeklenir. verify(…) fonksiyonu imzalanmış verinin byte [] halini ve imzalanmış verinin hangi parametrelere göre  doğrulanacağı bilgisini alır. SignedDataValidation sınıfındaki verify(…) fonksiyonu ile imzalanmış döküman bir bütün ​ halinde doğrulanır. İçindeki imzalardan biri doğrulanamamışsa verify(…),  ​başarısız değer ​ döner. İmza doğrulama yapan  örnek ​ kod bloğu;+İmzalanmış verinin doğrulama işleminden ​''​SignedDataValidation'' ​sınıfı sorumludur. ​''​SignedDataValidation'' ​sınıfının  ​''​verify(…)'' ​  methodu ​ kullanılarak  imza  doğrulama ​ işlemi gerçeklenir. ​''​verify(…)'' ​fonksiyonu imzalanmış verinin byte array halini ve imzalanmış verinin hangi parametrelere göre  doğrulanacağı bilgisini alır. ''​SignedDataValidation'' ​sınıfındaki ​''​verify(…)'' ​fonksiyonu ile imzalanmış dökümanbir bütün ​ halinde doğrulanır. İçindeki imzalardan biri doğrulanamamışsa, ''​verify(…)''​ fonksiyonu ​başarısız değer ​ döner. İmza doğrulama yapan  örnek ​ kod bloğu;
  
 <sxh java;​title:​Java>​ <sxh java;​title:​Java>​
Satır 21: Satır 21:
 System.out.println(sdvr.toString());​ System.out.println(sdvr.toString());​
 </​sxh>​ </​sxh>​
 +
 <sxh csharp;​title:​C#>​ <sxh csharp;​title:​C#>​
 byte[] signedData = AsnIO.dosyadanOKU(SIGNATURE_FILE);​ byte[] signedData = AsnIO.dosyadanOKU(SIGNATURE_FILE);​
Satır 26: Satır 27:
 FileMode.Open,​ FileMode.Open,​
 FileAccess.Read));​ FileAccess.Read));​
- 
  
 Dictionary<​String,​ Object> params_ = new Dictionary<​String,​ Object>​();​ Dictionary<​String,​ Object> params_ = new Dictionary<​String,​ Object>​();​
Satır 37: Satır 37:
 if (sdvr.getSDStatus() != SignedData_Status.ALL_VALID) if (sdvr.getSDStatus() != SignedData_Status.ALL_VALID)
 Console.WriteLine("​İmzaların hepsi doğrulamadı"​);​ Console.WriteLine("​İmzaların hepsi doğrulamadı"​);​
- 
 Console.WriteLine(sdvr.ToString());​ Console.WriteLine(sdvr.ToString());​
 </​sxh>​ </​sxh>​
  
-Eğer    ​imzalanan ​ içerik ​  imza içersinde ise içerik BaseSignedData sınıfının getContent() fonksiyonu ile alınabilir.+Eğer    imza bütünleşik ​ise, ''​BaseSignedData'' ​sınıfının ​''​getContent()'' ​fonksiyonu ile imzalanan içerik ​alınabilir.
  
 ==== İmza Doğrulama Sonucu ==== ==== İmza Doğrulama Sonucu ====
  
-SignedDataValidation sınıfının verify(...)fonksiyonu doğrulama sonucu olarak SignatureValidationResult tipinde bir nesne  döner. getSDStatus() ​ fonksiyonu eğer  bütün imzalar doğrulanmış ise ALL_VALID, eğer  imzalardan en az bir tanesi doğrulanamamışsa NOT_ALL_VALID döner.SignedDataValidation nesnesinin toString() ​methodu ​bütün imzaların kontrol sonucu açıklamalarını ​ döner. ​ Eğer   ​özellikle ​ bir  imzanın ​ sonucu elde edilmek isteniyorsa ​ imza  ağacında ​ gezerek ​ elde  edilebilir. ​  ​Bu ​  ​ağaç ​  ​yapısı, ​ BaseSignedData yapısındaki imzaların veri yapısı ile aynıdır. Örneğin birinci ​ paralel imzanın, birinci ​ seri imzasına ve bu imzanın doğrulama sonucuna aşağıdaki örnek kod ile ulaşılabilir.+''​SignedDataValidation'' ​sınıfının ​''​verify(...)'' ​fonksiyonu doğrulama sonucu olarak ​''​SignatureValidationResult'' ​tipinde bir nesne  döner. ​''​getSDStatus()'' ​ ​fonksiyonueğer  bütün imzalar doğrulanmış ise ''​ALL_VALID''​, eğer  imzalardan en az bir tanesi doğrulanamamışsa ​''​NOT_ALL_VALID'' ​döner. ​''​SignedDataValidation'' ​nesnesinin ​''​toString()''​ metodu, ​bütün imzalar ​için kontrol sonucu açıklamalarını ​ döner. ​ Eğer   ​özellikle ​ bir  imzanın ​ sonucu elde edilmek isteniyorsa, bu sonuç ​ ​imza ​ ağacında ​ gezerek ​ elde  edilebilir. ​  ​Bu ​  ​ağaç ​  ​yapısı, ​ BaseSignedData yapısındaki imzaların veri yapısı ile aynıdır. Örneğin birinci ​ paralel imzanın, birinci ​ seri imzasına ve bu imzanın doğrulama sonucuna aşağıdaki örnek kod ile ulaşılabilir.
  
 <sxh java;​title:​Java>​ <sxh java;​title:​Java>​
Satır 65: Satır 64:
 </​sxh>​ </​sxh>​
  
-Herbir ​imzanın doğrulama sonucu SignatureValidationResult nesnelerinde tutulur. Bir imzacının doğrulama sonucundan seri imzacılarının ​ doğrulama sonuçlarına da  erişilebilir. SignatureValidationResult nesnelerinin toString() ​ fonksiyonu imzacının ve  seri imzacıların doğrulama kontrolcülerinin ​ sonuçlarını ​ döner. Eğer   ​sadece ​  ​o ​ imzaya ait  kontrolcülerin açıklamaları elde edilmek isteniyorsa getValidationDetails() fonksiyonunu kullanınız. İmza tipi geliştikçe kontrol edilmesi gereken yapı ve  sertifika artmaktadır. Zaman  damgaları imza yapısına bir imza olarak eklendiklerinden ayrıca bir imza olarak kontrol edilmektedirler. +Her imzanın doğrulama sonucu ​''​SignatureValidationResult'' ​nesnelerinde tutulur. Bir imzacının doğrulama sonucundanseri imzacılarının ​ doğrulama sonuçlarına da  erişilebilir. ​''​SignatureValidationResult'' ​nesnelerinin ​''​toString()'' ​ ​fonksiyonuimzacının ve  seri imzacıların doğrulama kontrolcülerinin ​ sonuçlarını ​ döner. Eğer   ​sadece ​  ​o ​ imzaya ait  kontrolcülerin açıklamaları elde edilmek isteniyorsa ​''​getValidationDetails()'' ​fonksiyonunu kullanılmalıdır. İmza tipi geliştikçekontrol edilmesi gereken yapı ve  sertifika ​sayısı ​artmaktadır. Zaman  damgalarıimza yapısına bir imza olarak eklendiklerinden ayrıca bir imza olarak kontrol edilmektedirler. 
-SignatureValidationResult nesnesinden bir ​ imzanın ​ doğrulama sonucu getSignatureStatus() fonksiyonu ile Signature_Status yapısında alınabilir. Eğer  imza sonucu INCOMPLETE ise sertifika doğrulama verisine ulaşılamamıştır.+ 
 +''​SignatureValidationResult'' ​nesnesinden bir imzanın doğrulama sonucu ​''​getSignatureStatus()'' ​fonksiyonu ile ''​Signature_Status'' ​yapısında alınabilir. Eğer  imza sonucu ​''​INCOMPLETE'' ​ise sertifika doğrulama verisine ulaşılamamıştır.
  
 ==== Ön Doğrulama ==== ==== Ön Doğrulama ====
  
-Bir  imzanın ​ doğrulanması için  imza  atıldıktan ​ sonra   ​sertifika ​ iptal  bilgilerinin güncellenebilmesi için belirli ​ bir süre   ​geçmesi ​ gerekmektedir. ​ Bu  süreye ​  "​kesinleşme süresi"​(grace period) denilmektedir. API'de bu  süre  P_GRACE_PERIOD parametresi ​ ile ayarlanabilir;​ varsayılan değeri 86400 saniye yani 24 saattir.+Bir  imzanın ​ doğrulanması için ​imza ​ atıldıktan ​ sonra   ​sertifika ​ iptal  bilgilerinin güncellenebilmesi için belirli ​ bir süre   ​geçmesi ​ gerekmektedir. ​ Bu  süreye ​  "​kesinleşme süresi"​(grace period) denilmektedir. API'de bu  süre  ​''​P_GRACE_PERIOD'' ​parametresi ​ ile ayarlanabilir;​ varsayılan değeri 86400 saniye yani 24 saattir.
  
-Bir  imza doğrulanmaya çalışıldığında ​ kesinleşme süresi ​geçmese ​bile  imza ve sertifika doğrulanabilmektedir. Öndoğrulama denilen bu doğrulama bir kesinlik içermemektedir. Kesin bir  doğrulama yapılabilmesi için  kesinleşme süresinin ​ geçmesi gerekmektedir. Bir imzanın doğrulanmasının ön doğrulama olduğunu aşağıdaki örnek ​ kod ile öğrenebilirsiniz. Ön doğrulama için olgulaşmamış anlamına gelen "​PREMATURE"​ kelimesi, kesinleşmiş imza için olgunlaşmış anlamına gelen "​MATURE"​ kelimesi kullanılmaktadır. +Bir  imza doğrulanmaya çalışıldığında ​kesinleşme süresi ​bitmemiş olsa bile  imza ve sertifika doğrulanabilmektedir. Öndoğrulama denilen bu doğrulama bir kesinlik içermemektedir. Kesin bir  doğrulama yapılabilmesi için  kesinleşme süresinin ​ geçmesi gerekmektedir. Bir imzanın doğrulanmasının ön doğrulama olduğunu aşağıdaki örnek ​ kod ile öğrenebilirsiniz. Ön doğrulama için olgunlaşmamış anlamına gelen "​PREMATURE"​ kelimesi, kesinleşmiş imza için olgunlaşmış anlamına gelen "​MATURE"​ kelimesi kullanılmaktadır. 
-SignatureValidationResultnesnesinin ​getValidationState()fonksiyonu ile ön doğrulama yapılıp yapılmadığı bilgisi alınabilir.+ 
 +''​SignatureValidationResult''​ nesnesinin ''​getValidationState()'' ​fonksiyonu ile ön doğrulama yapılıp yapılmadığı bilgisi alınabilir.
  
 <sxh java;​title:​Java>​ <sxh java;​title:​Java>​
Satır 88: Satır 89:
 </​sxh>​ </​sxh>​
  
-Ön doğrulama ile kesin doğrulama arasında doğabilecek fark; ön doğrulama sırasında geçerli olan bir sertifikanın,​ kesin doğrulamada iptal edilmiş ​olmasıdır. Kullanıcı akıllı kartını çaldırdığında bu senaryo ile karşılaşılabilir. +Ön doğrulama ile kesin doğrulama arasında doğabilecek fark; ön doğrulama sırasında geçerli olan bir sertifikanın,​ kesin doğrulamada iptal edilmiş ​olabilmesidir. Kullanıcı akıllı kartını çaldırdığında bu senaryo ile karşılaşılabilir. 
-ÇiSDuP için kesinleşme süresi kısa olabilmektedir. Yalnız iptal bilgileri ​ için SİLkullanılıyorsa bu süre uzayabilmekte+ 
-"​E-İmza Profilleri"​ dökümanı ÇiSDuP kullanıldığında ​ kesinleşme süresinin çok  kısa olduğundan ​ yok   ​sayılabileceğini ​ öngörüyor.ÇiSDuPkullanarak ​sertifika doğrulama yapıldığında,​ kesinleşme süresi ​kadar beklenmediğinden büyük avantaj sağlanmaktadır.+ÇiSDuP için kesinleşme süresi kısa olabilmektedir. Yalnız iptal bilgileri ​ için SİL kullanılıyorsa bu süre uzayabilmektedir. 
 + 
 +"​E-İmza Profilleri"​ dökümanı ÇiSDuP kullanıldığında ​ kesinleşme süresinin çok  kısa olduğundan ​ yok   ​sayılabileceğini öngörüyor. ​ÇiSDuP kullanarak ​sertifika doğrulama yapıldığında,​ kesinleşme süresi ​için beklenmediğinden büyük avantaj sağlanmaktadır. 
 + 
 +==== Ayrık İmzanın Doğrulanması ==== 
 + 
 +Ayrık imza doğrulanırken,​ imzalanan dökümanının parametre olarak verilmesi gerekmektedir.Bunun için ''​P_EXTERNAL_CONTENT'' ​  ​parametresine ISignable türünden nesne verilmelidir. 
 + 
 +<sxh java;​title:​Java>​ 
 +byte[] signedData = AsnIO.dosyadanOKU(SIGNATURE_FILE);​ 
 +ISignable content = new SignableFile(new File(CONTENT_FILE));​ 
 +  
 +ValidationPolicy policy =   
 +PolicyReader.readValidationPolicy(new FileInputStream(POLICY_FILE));​ 
 +Hashtable<​String,​ Object> params = new Hashtable<​String,​ Object>​();​ 
 +params.put(EParameters.P_CERT_VALIDATION_POLICY,​ policy); 
 +params.put(EParameters.P_EXTERNAL_CONTENT,​ content ); 
 +  
 +SignedDataValidation sdv = new SignedDataValidation();​ 
 +SignedDataValidationResult sdvr = sdv.verify(signedData,​ params); 
 + 
 +if(sdvr.getSDStatus() != SignedData_Status.ALL_VALID) 
 + System.out.println("​İmzaların hepsi doğrulamadı"​);​  
 + 
 +System.out.println(sdvr.toString());​ 
 +</​sxh>​ 
 +<sxh csharp;​title:​C#>​ 
 +byte[] signedData = AsnIO.dosyadanOKU(SIGNATURE_FILE);​ 
 +ISignable content = new SignableFile(new FileInfo(CONTENT_FILE));​ 
 + 
 +ValidationPolicy policy =  
 +PolicyReader.readValidationPolicy(new FileStream(POLICY_FILE,​  
 +FileMode.Open,​ FileAccess.Read));​ 
 +Dictionary<​String,​ Object> params_ = new Dictionary<​String,​ Object>​();​ 
 +params_[EParameters.P_CERT_VALIDATION_POLICY] = policy; 
 +params_[EParameters.P_EXTERNAL_CONTENT] = content; 
 + 
 +SignedDataValidation sdv = new SignedDataValidation();​ 
 +SignedDataValidationResult sdvr = sdv.verify(signedData,​ params_); 
 + 
 +if (sdvr.getSDStatus() != SignedData_Status.ALL_VALID) 
 +Console.WriteLine("​İmzaların hepsi doğrulamadı"​);​ 
 + 
 +Console.WriteLine(sdvr.ToString());​ 
 +</​sxh>​ 
esya/cades/imza-dogrulama.1374491169.txt.gz · Son değiştirilme: 2013/07/22 11:06 Değiştiren: Beytullah Yiğit