• Web sitemizin içeriğine ve tüm hizmetlerimize erişim sağlamak için Web sitemize kayıt olmalı ya da giriş yapmalısınız. Web sitemize üye olmak tamamen ücretsizdir.
  • Soru mu? Sorun mu? ''Bir Sorum Var?'' sistemimiz aktiftir. Paylaşın beraber çözüm üretelim.

Güncel RSA Algoritması.

Hasan İskan

Şanlıurfa
Moderatör
Üyelik Tarihi
17 Ağu 2022
Konular
177
Mesajlar
696
MFC Puanı
8,020
RSA, güvenilirliği çok büyük tam sayılarla işlem yapmanın zorluğuna dayanan bir şifreleme tekniğidir. Bu algoritma, adını Ron Rivest, Adi Shamir ve Leonard Adleman adlı geliştiricilerinin soyadlarının ilk harflerinden almıştır.

Özellikleri
  • Asimetrik bir şifreleme algoritmasıdır. Simetrik şifrelemedeki gibi tek anahtar kullanılmasının yerine; biri gizli (Private Key) diğeri açık (Public Key) olmak üzere iki anahtar kullanılır.
  • Güvenilirlik derecesi, şifrelemede kullanılan asal sayıların büyüklüğü ile orantılıdır.
  • Özellikle çok kullanıcısı olan sistemlerde güvenli veri paylaşımına ve sayısal imza ile kimlik doğrulaması (authentication) yapılmasına olanak sağlamaktadır.
  • Sistemin güvenilirliğinin yanı sıra hızının da yüksek olması için, kullanılacak anahtarın sayısal büyüklüğü önemlidir. Yeterli güvenilirlik derecesine ulaşmak için gerekli büyüklük Eliptik Eğri Şifreleme (ECC) Algoritması kullanılarak belirlenmektedir.

    191_00010.jpg
Avantajları

  • Simetrik şifreleme, şifrelenmiş veriyi alan tarafın veriyi deşifre edebilmesi için, gizli anahtar paylaşımını gerekli kılar. Ancak RSA asimetrik bir şifreleme tekniği olduğu için gizli anahtarın paylaşılmasına gerek yoktur. Kullanıcıların gizli anahtarlarının saklanması gerekmez. Bu da sistemi büyük bir depolama yükünden kurtarır.
  • Büyük sayılarla işlem yapmak zor olduğu için güvenilirliği son derece yüksek olan bir şifreleme tekniğidir.
Dezavantajları

  • RSA algoritmasının en büyük dezavantajı, asimetrik bir şifreleme algoritması olması ve büyük sayılarla işlem yapması nedeniyle yavaş olmasıdır.
  • Özellikle kablosuz ağ sistemlerinde bu algoritmanın kullanılması bazı sorunlara yol açabilir. Çünkü band genişliğini fazlaca tüketir ve sistemi yavaşlatarak performans düşüşüne neden olur.
.NET Teknolojisi ile RSA Şifreleme

.NET teknolojisi ile yazılım geliştirenler, herhangi bir veride şifreleme yapmak için .NET Framework içerisinde yer alan System.Security.Cryptography kütüphanesini kullanmaktadırlar. Bu kütüphane içerisinde yer alan fonksiyonlar sayesinde, yazılımcı istediği platformda güvenli bir şekilde veri şifreleme ve şifre çözümleme yapabilmektedir. Yazılım geliştiricinin RSA algoritmasını kullanarak şifreleme yapabilmesi için RSACryptoServiceProvider sınıfını kullanması gerekmektedir. Bununla ilgili bağlantıda yer alan uygulama incelenebilir.

Aşağıdaki kod parçası RSA algoritmasına parametre atamaya yarar.

public static RSACryptoServiceProvider rsa;
public static void AssignParameter()
{
const int PROVIDER_RSA_FULL = 1;
const string CONTAINER_NAME = "SpiderContainer";
CspParameters cspParams =
new CspParameters(PROVIDER_RSA_FULL);
cspParams.KeyContainerName = CONTAINER_NAME;
cspParams.Flags = CspProviderFlags.UseMachineKeyStore;
cspParams.ProviderName =
"Microsoft Strong Cryptographic Provider";
rsa = new RSACryptoServiceProvider(cspParams);
}

Aşağıdaki kod parçası "AssignParameter" metoduyla aldığı parametreleri kullanarak alınan katar ifadeyi Açık Anahtar (Public Key) yardımıyla şifrelenmesini sağlar.

public static string EncryptData(string data2Encrypt)
{
AssignParameter();
StreamReader reader =
new StreamReader(@"D:\publickey.xml");
string publicOnlyKeyXML = reader.ReadToEnd();
rsa.FromXmlString(publicOnlyKeyXML);
reader.Close();
byte[] plainbytes =
System.Text.Encoding.UTF8.GetBytes(data2Encrypt);
byte[] cipherbytes = rsa.Encrypt(plainbytes, false);
return Convert.ToBase64String(cipherbytes);
}


Aşağıdaki kod parçası "AssignParameter" metoduyla oluşturulmuş Açık Anahtar ve Gizli Anahtar (Private Key) bilgilerinin yerel bir xml dosyasında saklanmasını sağlar. Böylece oluşturulmuş şifreler "EncryptData" ve "DecryptData" metodlarının kullanımına açılır.

public static void AssignNewKey()
{
AssignParameter();
StreamWriter writer =
new StreamWriter(@"D:\privatekey.xml");
string publicPrivateKeyXML = rsa.ToXmlString(true);
writer.Write(publicPrivateKeyXML);
writer.Close();
writer = new StreamWriter(@"D:\publickey.xml");
string publicOnlyKeyXML =
rsa.ToXmlString(false);
writer.Write(publicOnlyKeyXML);
writer.Close();
}


Aşağıdaki kod parçası "EncryptData" metodunun Açık anahtar yardımıyla şifrelediği veriyi Gizli Anahtarı kullanarak tekrar ilk haline çevirmeyi sağlar.

public static string DecryptData(string data2Decrypt)
{
AssignParameter();
byte[] getpassword =
Convert.FromBase64String(data2Decrypt);
StreamReader reader =
new StreamReader(@"D:\privatekey.xml");
string publicPrivateKeyXML = reader.ReadToEnd();
rsa.FromXmlString(publicPrivateKeyXML);
reader.Close();
byte[] plain = rsa.Decrypt(getpassword, false);
return System.Text.Encoding.UTF8.GetString(plain);
}


Kaynak ve Alıntı : İTÜ
 

Hasan İskan

Şanlıurfa
Moderatör
Üyelik Tarihi
17 Ağu 2022
Konular
177
Mesajlar
696
MFC Puanı
8,020
RSA, zorluğunu çok büyük sayılarla işlem yapmasından alan asimetrik bir şifreleme algoritmasıdır. Bu şifreleme algoritması asimetrik çalıştığı için herkese açık (Public) ve gizli (Private) olmak üzere iki anahtar kullanılır.

Tarih​

RSA algoritması 1978’de MIT’de Ron Rivest, Adi Shamir ve Leonard Adleman tarafından açıklandı. RSA harfleri soyisimlerinin baş harflerini temsil etmektedir.

Özellik​

  • Asimetrik bir şifreleme algoritmasıdır. Simetrik şifrelemedeki gibi tek anahtar kullanılmasının yerine; biri gizli (Private Key) diğeri açık (Public Key) olmak üzere iki anahtar kullanılır.
  • Güvenilirlik derecesi, şifrelemede kullanılan asal sayıların büyüklüğü ile orantılıdır.
  • Özellikle çok kullanıcısı olan sistemlerde güvenli veri paylaşımına ve sayısal imza ile kimlik doğrulaması (authentication) yapılmasına olanak sağlamaktadır.
  • Sistemin güvenilirliğinin yanı sıra hızının da yüksek olması için, kullanılacak anahtarın sayısal büyüklüğü önemlidir. Yeterli güvenilirlik derecesine ulaşmak için gerekli büyüklük Eliptik Eğri Şifreleme (ECC) Algoritması kullanılarak belirlenmektedir.

Avantajları​

  • Simetrik şifreleme, şifrelenmiş veriyi alan tarafın veriyi deşifre edebilmesi için, gizli anahtar paylaşımını gerekli kılar. Ancak RSA asimetrik bir şifreleme tekniği olduğu için gizli anahtarın paylaşılmasına gerek yoktur. Kullanıcıların gizli anahtarlarının saklanması gerekmez. Bu da sistemi büyük bir depolama yükünden kurtarır.
  • Büyük sayılarla işlem yapmak zor olduğu için güvenilirliği son derece yüksek olan bir şifreleme tekniğidir.

Dezavantajları​

  • RSA algoritmasının en büyük dezavantajı, asimetrik bir şifreleme algoritması olması ve büyük sayılarla işlem yapması nedeniyle yavaş olmasıdır.
  • Özellikle kablosuz ağ sistemlerinde bu algoritmanın kullanılması bazı sorunlara yol açabilir. Çünkü band genişliğini fazlaca tüketir ve sistemi yavaşlatarak performans düşüşüne neden olur.

Çalışması​

Hemen adımlara bakmadan evvel ve kafamızın karışmaması adına Totitent fonksiyonunun neyi ifade ettiğine bir göz atalım isterseniz:

Totient (kısaca φ, n) sayılar teorisinde, bir tam sayının o sayıdan daha küçük ve o sayı ile aralarında asal olan sayma sayı sayısını belirten fonksiyondur.

  1. Yeterince büyük iki adet asal sayı seçilir: Bu sayılar örneğimizde p ve q olsunlar.
  2. n=pq hesaplanır. Buradaki n sayısı iki asal sayının çarpımıdır ve hem umumî hem de hususî şifreler için taban (modulus) olarak kabul eder.
  3. Totient fonksiyonu hesaplanır. Bu örnek için çarpanların ikisi de asal sayı olduğu için φ(n) = (p-1)(q-1) olarak bulunur.
  4. Hesaplanan totient fonksiyonu değeri (φ(n) ) ile aralarında asal olan öyle bir e sayısı alınır ki 1 < e < φ(n) olmalıdır. Bu seçilen e sayısı umumî anahtar olarak ilan edilebilir.
  5. d gibi bir sayı hesaplanır ki bu sayı için şu denklik geçerli olmalıdır : de ≡ 1 mod ( φ(n) ). Bu d değeri hususî şifre olarak saklanır. Bu sayının hesaplanması sırasında uzatılmış öklit (extended euclid) algoritmasından faydalanılır.
Örnek:

  • İki asal sayı seçilir
p = 61 ve q = 53

  • n değeri hesaplanır n = pq şeklinde
n = 61 * 53 = 3233

Totient fonksiyonu hesaplanır

φ(n) = (p-1)(q-1)

φ(n) = (61-1)(53-1) = 3120

  • totient fonksiyon sonucu ile aralarında asal olan ve 1 den büyük bir sayı seçilir
e > 1 => e = 17 (3120 ile aralarında asal) , bu sayı aynı zamanda umumî şifredir.

  • Hususî şifre olması için bir d sayısı seçilir:
de ≡ 1 mod(n) olacak şekilde d sayısı bulunur , d = 2753 (çünkü 17 * 2753 = 46801 = 1 + 15 * 3120 ) Bu sayının hesaplanması sırasında uzatılmış öklit (extended euclid) yöntemi kullanılmıştır.

  • Örneğin mesaj olarak 123 gönderilecek olsun:
12317 mod 3233 = 855 olarak şifreli metin bulunur.

  • açacak taraf için tersi işlem uygulanır:
8552753 mod 3233 = 123 şeklinde orjinal mesaj geri elde edilir.
 

Pozitivizm

Süper Moderatör
İçerik Üreticisi
Üyelik Tarihi
28 Şub 2020
Konular
1,842
Mesajlar
22,002
MFC Puanı
255,010
Matematik dersinde logaritma konusu görür gibiyim:D
 
Üst