Bu sayfanın seçili sürümü ile mevcut sürümü arasındaki farkları gösterir.
esya:smartcard:sifreleme-imzalama [2013/07/24 06:38] Beytullah Yiğit created |
esya:smartcard:sifreleme-imzalama [2013/08/29 05:11] (mevcut) Beytullah Yiğit |
||
---|---|---|---|
Satır 1: | Satır 1: | ||
- | ===== SmartCardManager Sınıfı ===== | + | ===== Akıllı Kartla İmzalama-Şifreleme İşlemlerinin Yapılması ===== |
- | Dağıtılan paket içinde örnek kodlar bölümünde SmartCardManager sınıfını bulabilirsiniz. Kendinize göre uyarlayabilmeniz için açık kaynak olarak dağıtılmaktadır. Bu sınıf ile temel imza işlemlerinizi gerçekleştirebilirsiniz. Sınıf aşağıdaki işlemleri sağlayabilir. | + | Akıllı kartta şifre çözme ve imzalama işlemlerinin yapılması için karta giriş yapılması gerekmektedir. SmartCard sınıfının ''decryptDataWithCertSerialNo(...)'',''decryptData(...)'', ''signDataWithCertSerialNo(...)'', ''signData(...)'' fonksiyonları kriptografik işlemleri yerine getirmek için kullanılabilir. Akıllı kart ile yapılacak işlemler, özel anahtar(private key) ile yapılacak işlemler olmalıdır. Açık anahtar ile yapılan işlemlerin herhangi bir güvenlik kısıtı olmadığından, akıllı kartta yapılmasına gerek yoktur. Özel anahtar kullanan işlemler ise imza atma ve şifrelenmiş verinin şifresinin çözülmesi işlemidir. |
- | -Sisteme bir kart takılı ve kartta belirtilen özellikte bir sertifika varsa doğrudan bu kart ve bu sertifika üzerinden işlem yapar. | + | Yalnız imzalama ve şifreleme işlemlerini kullanan modüller ''BaseSigner'' veya ''BaseCipher'' arayüzünde imzacılar ve şifreleyiciler istemektedir. Bu yüzden ''SCSignerWithCertSerialNo'', ''SCSignerWithKeyLabel'', ''SCCipherWithCertSerialNo'', ''SCCipherWithKeyLabel'' sınıfları daha çok kullanılacaktır. |
- | -Birden fazla kart takılı ise kullanıcıya kart seçtirir. Birden fazla belirtilen özellikte sertifika yüklü ise kullanıcıya sertifika seçtirir. | + | |
- | -Eğer APDU ile karta erişilmek isteniyorsa ve kart APDU ile erişimi destekliyorsa APDU ile karta erişim sağlar. C# tarafında APDU erişimi olmadığından sadece pkcs11 erişimi sağlanmaktadır. | + | Aşağıdaki örnek kodda sertifika seri numarası ile işlem yapan sınıflar vardır. |
- | -Aynı kart ile imzalama işlemlerinde sertifikayı ve imzacıyı bellekten çekerek hızlanma sağlar. | + | |
- | -Bir kart ile işlem yaptıktan sonra eğer yeni bir kart takılmışsa veya işlem yapılan kart çıkartılmışsa kart ve sertifika seçme işlemlerini tekrarlar. | + | |
- | Örnek bir kullanım aşağıdaki gibi olabilir. | + | |
<sxh java;title:Java> | <sxh java;title:Java> | ||
- | //Enable APDU usage | + | SCSignerWithCertSerialNo signer = new SCSignerWithCertSerialNo(sc, session, |
- | SmartCardManager.useAPDU(true); | + | slot,signatureCert.getSerialNumber().toByteArray(), Algorithms.SIGNATURE_RSA_SHA1); |
- | //Connect a smartcard. If more than one smart card connected, user selects one of them | + | |
- | SmartCardManager scm = SmartCardManager.getInstance(); | + | |
- | + | ||
- | //Get qualified certificate. If more than one qualified certificate, user selects one of them. | + | |
- | ECertificate cert = scm.getSignatureCertificate(true, false); | + | |
- | //Create signer | + | |
- | BaseSignersigner = scm.getSigner("12345", cert); | + | |
- | + | ||
- | /** | + | |
- | * Create signature | + | |
- | */ | + | |
- | + | ||
- | //If not sign again with selected card logout. | + | |
- | scm.logout(); | + | |
- | //To select new card and new certificate, call reset. | + | |
- | scm.reset(); | + | |
</sxh> | </sxh> | ||
- | Yeni bir kartın takılıp takılmadığı seçili kartın çıkartılıp çıkartılmadığı getInstance() methodu içinde kontrol edilmektedir. Her imzalama işleminden önce SmartCardManager nesnesini getInstance() methodu ile alınız. Yukarıdaki örnek kodda işlemler kısa zamanda ardışıl olarak yapıldığından nesne bir kere alınmış ve o nesne üzerinden işlem yapılmıştır. | + | <sxh csharp;title:C#> |
+ | BaseSigner signer = new SCSignerWithCertSerialNo(sc, session, slots[0], | ||
+ | cert.getSerialNumber().GetData(),SignatureAlg.RSA_SHA1.getName()); | ||
+ | </sxh> | ||
+ | |||
+ | Aşağıdaki örnek kodda anahtar adı ile işlem yapan sınıflar vardır. | ||
+ | |||
+ | <sxh java;title:Java> | ||
+ | SCSignerWithKeyLabel signer = new SCSignerWithKeyLabel(sc, session, slot, | ||
+ | "yasemin.akturk#SIGN0",Algorithms.SIGNATURE_RSA_SHA1); | ||
+ | </sxh> | ||
+ | |||
+ | <sxh csharp;title:C#> | ||
+ | BaseSigner signer = new SCSignerWithKeyLabel(sc, session, slot, | ||
+ | "yasemin.akturk#ug.netSIGN0",SignatureAlg.RSA_SHA1.getName()); | ||
+ | </sxh> |