RSA (şifreleme yönetimi)

RSA, güvenliği tam sayıları çarpanlarına ayırmanın algoritmik zorluğuna dayanan bir tür açık anahtarlı şifreleme yöntemidir. 1978’de Ron Rivest, Adi Shamir ve Leonard Adleman tarafından bulunmuştur. Bir RSA kullanıcısı iki büyük asal sayının çarpımını üretir ve seçtiği diğer bir değerle birlikte ortak anahtar olarak ilan eder. Seçilen asal çarpanları ise saklar. Ortak anahtarı kullanan biri herhangi bir mesajı şifreleyebilir, ancak şu anki yöntemlerle eğer ortak anahtar yeterince büyükse sadece asal çarpanları bilen kişi bu mesajı çözebilir. RSA şifrelemeyi kırmanın çarpanlara ayırma problemini kırmak kadar zor olup olmadığı hala kesinleşmemiş bir problemdir.

Birleşik Krallık haber alma teşkilatı GCHQ’da çalışan İngiliz matematikçi Clifford Cocks 1973’te kurum içi bir dokümanda eşdeğer bir sistemi açıkladı. Fakat bu sistemi hayata geçirmek için epeyce pahalı bilgisayarların kullanılması gerekiyordu ve bilindiği kadarıyla hiç kullanılmadı. Fakat Cocks’un buluşu 1998’e kadar çok gizli olduğu gerekçesiyle açığa çıkarılmadı. Rivest, Shamir ve Adleman RSA yöntemini Cocks’un çalışmasından bağımsız olarak tasarladılar.

MIT'e 20 Eylül 1983'te algoritmayı kullanan bir "Şifreleme iletişim sistemi ve yöntemi" için ABD Patenti 4,405,829 verildi.Patent 21 Eylül 2000'de sona erecek olsa da (patent süresi 17 yıldır), algoritma iki hafta önce 6 Eylül 2000'de RSA Security tarafından kamuya açıklandı. Algoritmanın ayrıntılı bir açıklaması Scientific American'ın Ağustos 1977 sayısında Matematik Oyunları sütununda yayınlandığından, patent başvurusunun Aralık 1977 dosyalama tarihinden önce dünyanın geri kalanının çoğunda düzenlemeler başka yerlerde ve sadece ABD patenti verildi. Cocks'un çalışmaları herkes tarafından biliniyor olsaydı, ABD'deki bir patent de yasal olmayacaktı.

Sistem bir kodlama cihazına sahip en az bir terminale ve bir kod çözme cihazına sahip en az bir terminale bağlanmış bir iletişim kanalı içerir. Aktarılacak bir mesaj, önceden belirlenmiş bir kümede M sayısı olarak kodlanarak kodlama terminalindeki şifreli metne şifrelenir. Bu sayı daha sonra önceden belirlenmiş bir güce (istenen alıcı ile ilişkili) yükseltilir ve son olarak hesaplanır. Kalan veya kalıntı C, ... üssel sayı, önceden belirlenmiş iki asal sayının çarpımına (hedeflenen alıcı ile ilişkili) bölündüğünde hesaplanır.

Güvenlik amacıyla p ve q sayıları rastgele seçilmeli ve yakın uzunlukta olmalıdırlar. Bu sayılar asallık testi kullanılarak etkin bir şekilde bulunabilir.

Bir tam sayı üretin ve adını da koyun. Bu sayı, koşuluna uygun olmalı ve ile en büyük ortak böleni 1 olmalıdır (başka bir deyişle ve kendi aralarında asal olmalıdır).

Bit uzunluğu kısa olan ve küçük Hamming Ağırlığına sahip değerleri (yaygın olarak 0x10001 = 65,537) daha verimli şifreleme sağlarlar. Fakat küçük değerleri (örneğin 3) bazı durumlarda güvenliği azaltabilir.

Alice ortak anahtarı (, )’yi Bob’a gönderir, özel anahtarını gizli tutar. Bob mesajını Alice’e göndermek istediği zaman ilk olarak ’yi ters çevrilebilir bir protokol ile (dolgu şeması) olacak şekilde bir tam sayısına dönüştürür. Daha sonra şifrelenmiş mesaj ’yi olacak şekilde hesaplar. Bunu karesini alarak üs alma yöntemiyle hızlı bir şekilde hesaplayabilir. Bob ’yi Alice’e iletir.

1 ile 3120 arasında 3120 ile aralarında asal olan bir değeri seçelim. değerini asal seçersek sadece 3120’nin böleni olup olmadığını kontrol etmemiz gerekir. olsun.

Küçük şifreleme üssü (örn. = 3) kullanıldığında şifrelenen mesajı da küçükse , değeri ’den küçük bir değere karşılık gelir. Bu durumda şifreli mesajlar tam sayılardaki dereceden kökleri alınarak kolayca çözülebilirler.

Eğer bir mesaj aynı şifreleme üssü ve farklı değerleri ile birden çok kişiye gönderiliyorsa, bu mesaj Çin Kalan Teoremi kullanılarak kolayca çözülebilir.

RSA algoritması herhangi bir rastsallık içermediği için bazı düz mesajlar şifrelenip herhangi bir şifreli mesaja eşit olup olmadığı kontrol edilebilir. Dolayısıyla dolgu kullanılmayan RSA anlamsal güvenliğe sahip değildir.

RSA yönteminde iki şifreli mesajın çarpımı, kendilerine karşılık gelen düz mesajların çarpımının şifrelenmiş haline eşittir. Yani, Bu çarpımsal özelliğinden dolayı RSA’e seçilmiş şifreli mesaj atağı gerçekleştirilebilir. Örneğin, bir şifreli mesaj olan 'nin çözümünü elde etmek isteye bir saldırgan rastgele bir değeri seçip, özel anahtara sahip kişiye şüpheli gözükmeyen mesajını gönderip deşifre etmesini isteyebilir. Çarpımsal özellikten dolayı , 'in şifreli halidir. Eğer saldırgan atakta başarılı olursa değerini elde eder ve ile çarpıp kolayca m değerini bulur.

Tüm bu problemleri ortadan kaldırmak için kullanılan RSA uygulamaları şifrelemeden önce düz mesaj olan ’ye rastsallaştırılmış dolgu uygularlar. Bu dolgu ’yi güvensiz düz metin aralığında olmaktan korur ve ’in sabit bir şifreli mesajı olmasını engeller. Dolgulama için tasarlanan PKCS#1 standardının ilk versiyonlarının adaptif seçilmiş şifreli mesaj atağına karşı dayanıksızlığı ortaya çıkınca sonraki versiyonlar bu atağı engellemek için OAEP içermekteler.

RSA ayrıca mesajları imzalamak için de kullanılabilir. Alice’in Bob’a imzalanmış bir mesaj göndermek istediğini düşünelim. Alice kendi özel anahtarını kullanarak bunu gerçekleştirebilir. Mesajın özet değerini hesaplayıp mod ’de kuvvetini alır ve imza olarak mesaja iliştirir. Bob mesajı aldığı zaman aynı özetleme algoritmasıyla mesajın özetini hesaplar. Bob ayrıca mesajın imzasının mod ’de kuvvetini alır ve mesajın özetiyle karşılaştırır. Eğer iki değer birbirine eşitse mesajın Alice’den geldiğini anlar. RSA ile imza gerçekleştirilirken de RSA-PSS gibi güvenli dolgu şemaları kullanılması gereklidir. Ayrıca güvenlik açısında şifrelemede ve imzada aynı anahtar kullanılmamalıdır.

olduğunu biliyoruz. Yani negatif olmayan bir tam sayısı için yazabiliriz. Eğer med m mod p ve med m mod q olduğunu gösterirsek Çin Kalan Teoreminden med m mod pq olduğunu ispatlamış oluruz.

Son eşitlik Euler teoremi’nin bir sonucudur. Eğer ve aralarında asal değilse bu argüman doğru olmaz. m 0 mod p vem 0 mod q'' durumları yukarıdaki ispatta olduğu gibi gösterilebilir.

Aşağıdaki RSAEncrypt metodu veriyi şifrelemeyi sağlar. Metottaki ilk parametre şifrelenecek veridir. Byte array şeklindedir. Metottaki ikinci parametre (RSAalg.ExportParameters(false)) anahtar bilgisinin dışa verilip verilmeyeceğini ifade eder. False olarak değer atanmışsa public anahtar dışa verilir, true olarak değer atanmışsa public ve private anahtarlar dışa verilir. Kodumuzda false olarak değer atandığı için sadece public anahtar dışa verilir. Metottaki üçüncü parametre boolean bir değerdir. Padding mode olarak isimlendirilir. Padding boolean değerinin kullanılması gereklidir çünkü metoda gönderilen verinin şifrelenecek verinin tamamının olup olmadığını bu flag değerinden anlarız. Şifrelenecek veri çok büyük boyutlarda olabilir bu da verinin bloklara bölünmesini gerektirir. Bloklara bölünen verinin tamamının şifrelendiği bu flag değerden anlaşılır. Eğer padding değeri true ise bu halde gelişmiş OAEP 16 kullanılır. Aksi takdirde geleneksel PKCS 1 v1.5 kullanılır.

Aşağıdaki decryptedData metodu veriyi deşifrelemeye sağlar. Metottaki ilk parametre deşifrelenecek veridir. Byte array şeklindedir. Metottaki ikinci parametre (RSAalg.ExportParameters(true))anahtar bilgisinin dışa verilip verilmeyeceğini ifade eder. False olarak değer atanmışsa public anahtar dışa verilir, true olarak değer atanmışsa public ve private anahtarlar dışa verilir. Kodumuzda true olarak değer atandığı için private ve public anahtar dışa verilir. Metottaki üçüncü parametre boolean bir değerdir. Padding mode olarak isimlendirilir. Padding boolean değerinin kullanılması gereklidir çünkü metoda gönderilen verinin şifrelenecek verinin tamamının olup olmadığını bu flag değerinden anlarız. Şifrelenecek veri çok büyük boyutlarda olabilir bu da verinin bloklara bölünmesini gerektirir. Bloklara bölünen verinin tamamının şifrelendiği bu flag değerden anlaşılır. Eğer padding değeri true ise bu halde gelişmiş OAEP 16 kullanılır. Aksi takdirde geleneksel PKCS 1 v1.5 kullanılır.