RSA ANAHTAR DAĞITIMI VE RSA İLE DİJİTAL İMZA OLUŞTURMA



Benzer belgeler
RSA ŞİFRELEME ALGORİTMASI

/*Aşağıda ki kodları doğru şekilde anlar ve kullanırsanız java da sınıfları biraz da olsa anlamış olursunuz.*/

ERDEMLİ ATL TL METEM EĞİTİM ÖĞRETİM YILI NESNE TABANLI PROGRAMLAMA YILLIK ÖDEVİ

TODAİE edevlet MERKEZİ UYGULAMALI E-İMZA SEMİNERİ KASIM E-imza Teknolojisi. TODAİE Sunumu

Nesne tabanlı programlama nesneleri kullanan programlamayı içerir. Bir nesne farklı olarak tanımlanabilen gerçek dünyadaki bir varlıktır.

Uzaktan Eğitim Uygulama ve Araştırma Merkezi

7.1- C#.net Giriş Çıkış İşlemleri ve Visual Studio. M.İLKUÇAR - 1

Liskov Substitution Principle (LSP) Liskov un Yerine Gecme Prensibi KurumsalJava.com

BMÜ-101 ALGORİTMA VE PROGRAMLAMAYA GİRİŞ LABORATUARI

C# Çalışma Örnekleri

Kayıtlı Elektronik Posta e-yazışma Projesi İstemci Kütüphaneleri

Paket Erişimleri. Altuğ B. Altıntaş 2003 Java ve Yazılım Tasarımı - Bölüm 4 1

JAVA PROGRAMLAMA DİLİ ÖZELLİKLERİ

HSancak Nesne Tabanlı Programlama I Ders Notları

11- FONKSİYONLAR (FUNCTIONS)

Uzaktan Eğitim Uygulama ve Araştırma Merkezi

Sunum İçeriği. Programlamaya Giriş

Erişim konusunda iki taraf vardır:

C# Console Uygulamaları ifelse Yapıları 2

Programlama Dilleri 3

DÖNGÜLER (LOOPS) while(), do-while(), for(), foreach()

Lab7 DOĞU AKDENİZ ÜNİVERSİTESİ BİLGİSAYAR VE TEKNOLOJİ YÜKSEKOKULU BİLGİSAYAR PROGRAMCILIĞI. BTEP212 Java. Uygulama1: package javaapplication58;

GENETİK ALGORİTMA GEZGİN SATICI ÖDEVİ

BİL-141 Bilgisayar Programlama I (Java)

BMÜ-112 ALGORİTMA VE PROGRAMLAMA-II LABORATUARI DENEY-2 FÖYÜ

public static int Toplam int x, int y

İş Parçacıkları Thread(s)

Bire-bir Sahiplik İlişkisi ile İlgili Sorular:

NESNEYE YÖNELİK PROGRAMLAMA

DÖNGÜLER BMÜ-101 ALGORİTMA VE PROGRAMLAMAYA GİRİŞ LABORATUARI BMÜ-101 ALGORİTMA VE PROGRAMLAMAYA DENEY-4 FÖYÜ GİRİŞ LABORATUARI.

AES (Advanced Encryption Standard)

ASP.NET CLASS KULLANARAK VERİTABANI İŞLEMLERİ

Facade (Cephe) Tasarım Şablonu KurumsalJava.com

Açık Anahtarlı Kriptografi ve Uygulamalar

Merge Sort Bireşen Sıralama

BM102 BİLGİSAYAR PROGRAMLAMA II LABORATUVAR UYGULAMALARI. 3Hafta

C++ Giriş Ders 1 MSGSU Fizik Bölümü Ferhat ÖZOK Kullanılacak kaynak: Published by Juan Soulié

NESNE TABANLI PROGRAMLAMA-1 DERS UYGULAMALARI (22 EYLÜL - 14 KASIM

Sınav Dağılım & IMKB Endeks

BMÜ-111 Algoritma ve Programlama. Bölüm 5. Tek Boyutlu Diziler

Java da Soyutlama ( Abstraction ) ve Çok-biçimlilik ( Polymorphism )

// hataları işaret eden referans

Chain of Responsibility Tasarım Şablonu KurumsalJava.com

Sınıflar ve Yapılar Arasındaki Farklılıklar. Değer ve Referans Türde Olan Aktarımlar

NESNEYE DAYALI PROGRAMLAMA 9. HAFTA UYGULAMA DERSİ

BİL132 Bilgisayar Programlama II

PAKET ERİŞİMLERİ SINIFLARIN YENİDEN KULLANIMI. BMU-112 Algoritma ve Programlama-II Yrd. Doç.Dr. İlhan AYDIN

7. HAFTA. Erişim Belirleyiciler

Timer İle arka plan renk değişimi

İNÖNÜ ÜNİVERSİTESİ MÜH. FAK. BİLGİSAYAR MÜH. BÖL. ALGORİTMA VE PROGRAMLAMA 2 DERSİ LAB. ÖDEVİ

Java String İşlemleri

C# Yazım Kuralları ERCİYES. Ü. BİLGİSAYAR M. COMPUTER PROGRAMMING II 1 FEHİM KÖYLÜ

İçerik. Temel Kavramlar. Nesne Nedir? 1. Nesne : Örnek. Nesne Nedir? 2. Geçen hafta: Bu hafta: BBS-515 Nesneye Yönelik Programlama

MAT213 BİLGİSAYAR PROGRAMLAMA I DERSİ Ders 1: Programlamaya Giriş

Temel Kavramlar BBS-515 Nesneye Yönelik Programlama

Internet te Veri Güvenliği

BĠLGĠSAYAR PROGRAMLAMA II C++ Programlamaya GiriĢ Published by Juan Soulié

Statik veri üyeleri sınıf dosyası içerisinde, ancak sınıf bildirimi dışında başlatılmalıdır. Statik üye fonksiyonları

Java ile Nesneye Yönelik Programlama (Object Oriented Programming)

Güncel Kriptografik Sistemler

S. N ala l n n T OP OP A B Ğ Fatih i h A BL B AK K

Java C.Thomas Wu 2004b kitabından Türkçeleştirilerek ve örneklendirilerek hazırlanmıştır.

1. Aşağıdaki program parçacığını çalıştırdığınızda result ve param değişkenlerinin aldığı en son değerleri ve programın çıktısını yazınız.

Klavyeden Basit Giriş/Çıkış İşlemleri

Final Sınavı Örnek Soruları Bahar 2018

while(), do-while(), for() M.İLKUÇAR 2010 MAKU-MYO

Dizi ( Array ) ve Dizgi ( String )

C++ Dersi: Nesne Tabanlı Programlama

Durum Yönetimi. Olan sayfalar ekleyelim. BasitSayac.aspx

Operator Aşırı Yükleme (Operator OverLoading)

Örnek 1: Programı yazın ve çalıştırın.

Soru 1: Fahrenheit cinsinden verilen sıcaklığı Kelvin'e çeviren bir program yazınız. Aşağıdaki dönüşüm formülünü kullanabilirsiniz:

Bahar. BM 211 Programlama Dilleri 3 1

Decorator Tasarım Şablonu

İçerik. Kapsülleme ( Encapsulation ) Java da Kalıtım: Örnek 2.1. Kalıtım ( Inheritance ) Tekrar Ziyaret. Java da Kalıtım: Örnek 2.2.

Merge (Bireşim) Algoritmayı önce bir örnek üzerinde açıklayalım.

BIL1202 ALGORİTMA VE PROGRAMLAMAYA GİRİŞ

Kapsülleme ( Encapsulation ) BBS-515 Nesneye Yönelik Programlama

ŞİFRELEME BİLİMİ. Prof. Dr. Şeref SAĞIROĞLU Gazi Üniversitesi Mühendislik Fakültesi Bilgisayar Mühendisliği Bölümü Maltepe/Ankara

Java da, tüm değişkenlerin kullanılmadan önce tanımlanması edilmesi gerekir. Bir değişken tanımlamanın temel gösterimi bu şekildedir:

Görsel Programlama DERS 03. Görsel Programlama - Ders03/ 1

C# da basit console uygulamaları. C# da basit console uygulamaları

CharArrayReader. Kılgıladığı Arayüzler: Bildirimi: Değişkenleri (fields): java.io.reader Sınıfından Kalıtsal Gelen Değişken:

KRİPTOLOJİYE GİRİŞ Ders 1. Yrd. Doç. Dr. Barış Koçer

İST 264 VERİ YAPILARI Bitirme Sınavı A Grubu

Veritabanı İşlemleri

HSancak Nesne Tabanlı Programlama I Ders Notları

Kodlanacak programlama dilinin kaynaklarından faydalanılarak kod yazımı yapılır.

Business Delegate Tasarım Şablonu KurumsalJava.com

C# Metotlar ve Metot Tanımlama

BIL101 07/11/2012 Lab5 Programlama Sorulari

Ders 8 Konu Özeti ve Problemler

Kodlanacak programlama dilinin kaynaklarından faydalanılarak kod yazımı yapılır.

BİL-141 Bilgisayar Programlama I (Java)

Internet te Veri Güvenliği

RSA ŞİFRELEME ALGORİTMASI VE ARİTMETİK MODÜL UYGULAMASI

7.1- Operatörler ve Giriş-Çıkış İşlemleri. M.İLKUÇAR - 1

Simetrik (Gizli) Kriptografik Sistemler Blok Şifreler Standartlaştırma. DES-Data Encryption Standard (Bilgi Şifreleme Standardı)

MAT213 BİLGİSAYAR PROGRAMLAMA I DERSİ Ders 11: Metot Kavramı

Nesneye Dayalı Programlama

Transkript:

RSA ANAHTAR DAĞITIMI VE RSA İLE DİJİTAL İMZA OLUŞTURMA İlk defa 1977 yılında Ron Rivest, Adi Shamir ve Leonard Adleman tarafından oluşturulan RSA algoritması geliştiricilerinin soyisimlerinin ilk harfleriyle anılmaktadır. Bu yazımızda RSA'da yer alan anahtar dağıtımı algoritması ve dijital imza oluşturmayı inceleyeceğiz. Anahtar Sözcükler: Şifreleme Algoritması, RSA, Dijital İmza, Anahtar Dağıtımı, Microsoft.NET, Kriptoloji RSAOAEPKeyExchangeFormatter sınıfı, RSA kullanarak Optimal Asymmetric Encryption Padding (OAEP) anahtar değişimi verisini oluşturur. AsymmetricKeyExchangeFormatter sınıfından türeyen bu sınıfın şu erişilebilir özellikleri vardır: Parameters, RSA tarafından anahtar değişimi sırasında kullanılacak parametreleri belirtir. Rng, anahtar değişimi sırasında kullanılacak Rastgele Sayı Üretici (Random Number Generator) algoritmayı belirler. Dışarıdan değiştirerek kendi özel algoritmanızı da kullanabilirsiniz. CreateKeyExchange, şifrelenmiş anahtar değişimi verisini oluşturur. SetKey, anahtar değişimi sırasında kullanılacak olan şifreleme algoritmasının genel RSAOAEPKeyExchangeDeformatter sınıfı, RSA kullanarak Optimal Asymmetric Encryption Padding (OAEP) anahtar değişimi verisini deşifreler. AsymmetricKeyExchangeDeformatter sınıfından türeyen bu sınıfın tek bir erişilebilir özelliği vardır: Parameters, RSA tarafından anahtar değişimi sırasında kullanılan parametreleri verir. DecryptKeyExchange, şifrelenmiş anahtar değişimi verisinden gizli bilgiyi elde etmek deşifreleme yapar. SetKey, anahtar değişimi sırasında kullanılacak olan deşifreleme algoritmasının özel 1

RSAPKCS1KeyExchangeFormatter sınıfı, RSA kullanarak PKCS#1 anahtar değişimi verisini oluşturur. AsymmetricKeyExchangeFormatter sınıfından türeyen bu sınıfın şu erişilebilir özellikleri vardır: Parameters, RSA tarafından PKCS #1 anahtar değişimi sırasında kullanılacak parametreleri belirtir. Rng, anahtar değişimi sırasında kullanılacak Rastgele Sayı Üretici (Random Number Generator) algoritmayı belirler. Dışarıdan değiştirerek kendi özel algoritmanızı da kullanabilirsiniz. CreateKeyExchange, şifrelenmiş anahtar değişimi verisini oluşturur. SetKey, anahtar değişimi sırasında kullanılacak olan şifreleme algoritmasının genel RSAPKCS1KeyExchangeDeformatter sınıfı, RSA kullanarak PKCS #1 anahtar değişimi verisini deşifreler. AsymmetricKeyExchangeDeformatter sınıfından türeyen bu sınıfın erişilebilir özellikleri şunlardır: Parameters, RSA tarafından anahtar değişimi sırasında kullanılan parametreleri verir. Rng, anahtar değişimi sırasında kullanılan Rastgele Sayı Üretici (Random Number Generator) algoritmasını verir. DecryptKeyExchange, şifrelenmiş anahtar değişimi verisinden gizli bilgiyi elde etmek deşifreleme yapar. SetKey, anahtar değişimi sırasında kullanılacak olan deşifreleme algoritmasının özel RSAPKCS1SignatureFormatter sınıfı, RSA kullanarak PKCS #1 version 1.5 imzasını oluşturur. AsymmetricSignatureFormatter sınıfından türeyen bu sınıfın erişilebilir bir özelliği bulunmamaktadır. Bu sınıfın erişilebilir metotları ise şunlardır: CreateSignature, imzayı oluşturur. Bir imza oluşturmadan önce SetHashAlgorithm metotunun çağırarak bir algoritma belirtmeniz gerekmektedir. SetHashAlgorithm, imzanın oluşturulması sırasında kullanılacak olan algoritmayı değiştirmenize izin verir. SHA1 gibi algoritmanın ismini vermeniz yeterli olacaktır. SetKey, anahtar değişimi sırasında kullanılacak olan şifreleme algoritmasının özel 2

RSAPKCS1SignatureDeformatter sınıfı, RSA kullanarak PKCS #1 version 1.5 imzasını doğrular. AsymmetricSignatureDeformatter sınıfından türeyen bu sınıfın erişilebilir bir özelliği bulunmamaktadır. Bu sınıfın erişilebilir metotları ise şunlardır: SetHashAlgorithm, imzanın oluşturulması sırasında kullanılacak olan algoritmayı değiştirmenize izin verir. SHA1 gibi algoritmanın ismini vermeniz yeterli olacaktır. SetKey, anahtar değişimi sırasında kullanılacak olan şifreleme algoritmasının genel VerifySignature, SetHashAlgorithm ile belirtilmiş algoritmayı kullanarak imzayı doğrular. RSA kullanarak imza oluşturma ve imzayı doğrulama işlemi ile ilgili basit bir konsol uygulaması geliştirelim: C# using System; using System.Security.Cryptography; namespace TestConsoleApplication public class TestUygulaması static void Main() try //RSACryptoServiceProvider nesnesi oluşturalım RSACryptoServiceProvider RSA = new RSACryptoServiceProvider(); //İmzalamak için kullanacağımız bir hash tanımlayalım. byte[] Hash = 59,4,248,102,77,97,142, 201,210,12,224,93,25,41,100,197,213,134,130,135; //RSAOPKCS1SignatureFormatter nesnesi oluşturalım, RSAPKCS1SignatureFormatter RSAFormatter = new RSAPKCS1SignatureFormatter(RSA); //İmza oluşturmak için SHA1 algoritmasını //kullanacağımızı belirtelim. RSAFormatter.SetHashAlgorithm("SHA1"); //Hash değeri için imzayı oluşturalım. byte[] SignedHash = RSAFormatter.CreateSignature(Hash); //RSAPKCS1SignatureDeformatter nesnesi oluşturalım, RSAPKCS1SignatureDeformatter RSADeformatter = new RSAPKCS1SignatureDeformatter(RSA); //SHA1 ile imzanın oluşturulduğunu biliyoruz. //İmzayı doğrulamak için SHA1 kullanılacağını belirtelim. RSADeformatter.SetHashAlgorithm("SHA1"); //Hash değerini doğrulayalım, 3

if(rsadeformatter.verifysignature(hash, SignedHash)) Console.WriteLine("İmza Doğrulandı."); else Console.WriteLine("İmza Doğrulanamadı."); catch(cryptographicexception e) Console.WriteLine("Şifreleme Hatası Oluştu: "+e.message); Console.Read(); VB.NET Imports System Imports System.Security.Cryptography Module TestConsoleApplication Sub Main() Try 'RSACryptoServiceProvider nesnesi oluşturalım Dim RSA As New RSACryptoServiceProvider 'İmzalamak için kullanacağımız bir hash tanımlayalım. Dim Hash As Byte() = 59, 4, 248, 102, 77, 97, 142, 201,210,12, 224, 93, 25, 41, 100, 197, 213, 134, 130,135 'RSAOPKCS1SignatureFormatter nesnesi oluşturalım, 'Anahtar bilgisini transfer edecek olan 'RSACryptoServiceProvider nesnesiyle ilişkilkendirelim. Dim RSAFormatter As New RSAPKCS1SignatureFormatter(RSA) 'SHA1 algoritmasını kullanacağımızıbelirtelim. RSAFormatter.SetHashAlgorithm("SHA1") 'Hash değeri için imzayı oluşturalım. Dim SignedHash As Byte()= RSAFormatter.CreateSignature(Hash) 'RSAPKCS1SignatureDeformatter nesnesi oluşturalım, 'Anahtar bilgisini transfer edecek olan 'RSACryptoServiceProvider nesnesiyle ilişkilkendirelim. Dim RSADeformatter As New RSAPKCS1SignatureDeformatter(RSA) 'SHA1 ile imzanın oluşturulduğunu biliyoruz. 'İmzayı doğrulamak için SHA1 kullanılacağını belirtelim. RSADeformatter.SetHashAlgorithm("SHA1") If (RSADeformatter.VerifySignature(Hash, SignedHash)) Then Console.WriteLine("İmza Doğrulandı.") Else Console.WriteLine("İmza Doğrulanamadı.") End If Catch e As CryptographicException Console.WriteLine("Şifreleme Hatası Oluştu: " + e.message) End Try Console.Read() End Sub End Module C++.NET #include "stdafx.h" 4

#using <mscorlib.dll> using namespace System; using namespace System::Security::Cryptography; int _tmain() try //RSACryptoServiceProvider nesnesi oluşturalım RSACryptoServiceProvider gc* RSA = gc new RSACryptoServiceProvider(); //İmzalamak için kullanacağımız bir hash tanımlayalım. Byte Hash[]= 59,4,248,102,77,97,142, 201,210,12,224,93,25,41,100,197,213,134,130,135; //RSAOPKCS1SignatureFormatter nesnesi oluşturalım, RSAPKCS1SignatureFormatter gc* RSAFormatter = gc new RSAPKCS1SignatureFormatter(RSA); //İmza oluşturmak için SHA1 algoritmasını //kullanacağımızı belirtelim. RSAFormatter->SetHashAlgorithm("SHA1"); //Hash değeri için imzayı oluşturalım. Byte SignedHash[] = RSAFormatter->CreateSignature(Hash); //RSAPKCS1SignatureDeformatter nesnesi oluşturalım, RSAPKCS1SignatureDeformatter gc* RSADeformatter = gc new RSAPKCS1SignatureDeformatter(RSA); //SHA1 ile imzanın oluşturulduğunu biliyoruz. //İmzayı doğrulamak için SHA1 kullanılacağını belirtelim. RSADeformatter->SetHashAlgorithm("SHA1"); //Hash değerini doğrulayalım, if(rsadeformatter->verifysignature(hash, SignedHash)) Console::WriteLine("İmza Doğrulandı."); else Console::WriteLine("İmza Doğrulanamadı."); catch(cryptographicexception* e) Console::WriteLine(String::Concat(S"Şifreleme Hatası Oluştu: ",e->message)); Console::Read(); return 0; J# package TestConsoleApplication; import System.*; import System.Security.Cryptography.*; public class TestUygulaması public TestUygulaması() 5

/** @attribute System.STAThread() */ public static void main(string[] args) try //RSACryptoServiceProvider nesnesi oluşturalım RSACryptoServiceProvider RSA = new RSACryptoServiceProvider(); //İmzalamak için kullanacağımız bir hash tanımlayalım. ubyte[] Hash = 59,4,248,102,77,97,142, 201,210,12,224,93,25,41,100,197,213,134,130,135; //RSAOPKCS1SignatureFormatter nesnesi oluşturalım, RSAPKCS1SignatureFormatter RSAFormatter = new RSAPKCS1SignatureFormatter(RSA); //İmza oluşturmak için SHA1 algoritmasını //kullanacağımızı belirtelim. RSAFormatter.SetHashAlgorithm("SHA1"); //Hash değeri için imzayı oluşturalım. ubyte[] SignedHash = RSAFormatter.CreateSignature(Hash); //RSAPKCS1SignatureDeformatter nesnesi oluşturalım, RSAPKCS1SignatureDeformatter RSADeformatter = new RSAPKCS1SignatureDeformatter(RSA); //SHA1 ile imzanın oluşturulduğunu biliyoruz. //İmzayı doğrulamak için SHA1 kullanılacağını belirtelim. RSADeformatter.SetHashAlgorithm("SHA1"); //Hash değerini doğrulayalım, if(rsadeformatter.verifysignature(hash, SignedHash)) Console.WriteLine("İmza Doğrulandı."); else Console.WriteLine("İmza Doğrulanamadı."); catch(cryptographicexception e) Console.WriteLine("Şifreleme Hatası Oluştu: "+ e.get_message()); Console.Read(); RSA anahtarlarının dağıtımı ve RSA kullanarak dijital imza oluşturmayı örnek kodlarıyla incelediğimiz bu makalemizin de sonuna geldik. RSA algoritmasını uygulamalarınızda birebir kullanabilirsiniz. Bir sonraki makalemizde görüşünceye kadar güvende kalın... Yunus Emre ALPÖZEN 25.03.2005 6