Blog

Schmidt-Samoa Kripto Sistemi

Schmidt-Samoa kripto sistemi Alman araştırmacı Katja Schmidt-Samoa tarafından ortaya konmuş bir asimetrik şifreleme tekniğidir. Sistemin zorluğu şifreleme esnasında kullanılan açık anahtarın çarpanlarına ayrılmasının zorluğuna dayanmaktadır. Dayanılan zorluk bakımından asimetrik şifreleme algoritmaları sınıflandırılırsa Schmidt-Samoa, şifreleme esnasında az sonra göreceğimiz işlemlerin hepsinin gerçekleştirilmesinin zorunlu olmasından dolayı diğer algoritmalara kıyasla daha yavaştır.

Asimetrik Şifreleme Nedir ?

Aslında bu başlık için farklı bir makale yazılır ancak üst kısımda tanım sırasında kullanıldığından dolayı yazı içerisinde değinmezsek olmaz dedim. Şifreleme algoritmaları temel olarak ikiye ayrılmakta simetrik ve asimetrik algoritmalar. Simetrik algoritmalar veriyi şifrelemek için ve şifrelenen veriyi geriye döndürmek için aynı anahtarı kullanır. Simetrik algoritmaların gücü ortadadır lakin ufak bir sorunumuz var. Anahtarlar aynıyken nasıl güvenli şekilde ileteceğiz ? Bu noktada asimetrik şifreleme teknikleri ortaya çıkar. Temel prensip şu şekildedir : 2 adet anahtarımız var. Bir tanesi özel diğeri kamuya açık. Kamuya açık anahtar ile şifreleme yapılabilmekte, kısıtlama olmaksızın veriler şifrelenebilmekte şifrelenen veriler ancak ve ancak biricik sahibinin özel anahtarı ile çözümlenebilmektedir. Örnek olarak karşımdaki A kişisi bana şifreli veriyi iletti ve bu şifreyi çözmem amacı ile K anahtarını gönderecek. Bu gönderim esnasında ataklara maruz kalmamak amacıyla A kişisine paylaşımından risk doğmayan asimetrik açık anahtarımı gönderiyorum. Kendisi K anahtarını gönderdiğim asimetrik anahtar ile şifreleyerek bana yolluyor. Yolladığı şifreli veri 3. şahısların eline geçse dahi tehlike teşkil etmiyor. Ulaşan şifreli veriyi özel anahtarım ile açarak simetrik anahtarı elde ediyorum. Simetrik anahtar ile asıl veriyi çözerek mesajı güvenli şekilde elde ediyorum.

Bu örnek sadece anahtar değiş-tokuşu amacıyla asimetrik algoritmaların kullanılmasına yönelikte. Ek olarak sayısal imzalar ile kimlik doğrulamada, bütünsel olarak bilgilerin korunmasında kullanılabilir.

Genel olarak zorlukları bir sayının asal çarpanlarına ayrılmasına veyahut ayrık logaritma problemine dayanır. Bu yazıda anlatacağım kriptosistem çarpanlara ayrılmaya dayanmakta.

Genel/Özel Anahtar Üretimi

Öncelikle 2 adet asal sayı seçiyoruz. Seçeceğimiz asalların büyük olması gerekmekte bunun sebebi küçük asallar ile oluşturulabilecek anahtarlar hızlıca hesaplanabilir. Bundan dolayı açık anahtar önceden hesaplanmış olabilir, önceden hesaplandığından kullanılan asallar da biliniyor olabilir ve bu şekilde gizli anahtar hesaplanıp şifre çözülebilir. Unutmayınız ki sayılar büyüdükçe gerekli işlem süresi artacak ve büyük oranda yavaşlama meydana gelecektir.

Evet 2 adet asal seçmiştik. Seçtiğimiz sayılar p ve q olsun. Açık anahtarımızı oluşturmak için p’nin karesi ile q sayısını çarpıyoruz.

PK = p2 x q

Gizli anahtarımızı oluşturmak için:

SK = PK-1 mod EKOK (p-1, q-1)

Mesajı Şifreleme

Anahtarlarımız hazır. Şifreleme için açık anahtarı kullanacağız. Veriyi şifrelemek için kullanacağımız denklem;

VPK mod PK

Şifreli Mesajı Deşifre Etmek

Deşifre esnasında gizli anahtarımız ve kullandığımız asallar gerekmekte. Veriyi deşifre etmek için kullanacağımız denklem;

(vPK mod PK)SK mod p x q

Description: Samoa.jpg

*Denklemlerin uygulama şeması. **Not: Küçük asal büyük tehlike demektir.

 

İmplementasyon Aşmasında Dikkat Edilmesi Gerekenler

Öncelikle aşağıda bulunan kod parçası sadece işlemleri göstermek amacı ile konulmuştur ve büyük asallar ile denediğiniz an elinizde ne şifre ne de şifreli veri olacaktır. Bundan dolayı .NET Framework’e bu kriptosistemi implemente edecekseniz var olan matematik kütüphanesi işinizi görmeyecektir. Ya kendiniz yazmalısınız ya da bu sınırlı arkadaşlardan uzaklaşarak Python ya da C’e kaymalısınız.

Küçük Asallar İçin Kaba Kuvvet Saldırısı

Yazı boyunca küçük asalların kolay kırılabileceğine sık sık değindim. Kaba Kuvvet saldırısında asalların oluşturabileceği 2’li permütasyonları test etmek gerekiyor. Bu amaç doğrultusunda ufak bir fonksiyon yazdım, onu inceleyelim; bu yönlendirmeden (https://github.com/kaganisildak/schmidtsamoabruteforce) kodlara ulaşabilirsiniz. Öncelikle test edilecek asalları tanımladık ardından eklenen asalların oluşturacağı permütasyonları bulmak amacıyla perm fonksiyonunu yazdık. Perm fonksiyonunun ilkel olduğunu göreceksiniz mazur görün. Görselde de görüldüğü üzere 1331 açık anahtarını 2ms’de buldu.




Yazar Hakkında

Lise son sınıf öğrencisi olan Işıldak, 11 yaşında programlama dillerini öğrenmeye başlamış ve daha sonra C, C# ve VB.NET dilleri ile ilgilenmeye başlamıştır. Siber güvenliğin yanı sıra kriptoloji algoritamaları ve gerçekleme, mahremiyet problemleri ve zararlı yazılımlar üzerine çalışmalarını sürdürmekte olan Işıldak, son kullanıcıya yönelik uygulamalar geliştirmektedir.






Yorum Yapmak İçin Giriş Yapın.