Kriptoloji

 

ve

bir  RSA  Uygulaması

 

 

 

 

 

 

 

Şuayb SÖZBİLİCİ

 

 

Mayıs-2005

 

 

 

 

içindekiler

 

Kriptografi ve Kriptoanaliz                                                                   3

 

Kriptolojinin Amaçları                                                                         4

 

Blok Kriptolama ve Akıcı Kriptolama                                                 4

 

Simetrik Anahtar Kriptolama                                                               4

 

Veri Kriptolama Standardı (DES)                                                          5

 

Genel  Anahtar Kriptolama                                                                  6

 

Simetrik ve Genel Anahtar Kriptolamanın Karşılaştırılması                       7

 

Simetrik ve Genel Anahtarlı Algoritmaların Birlikte

Kullanılması                                                                             8

 

RSA Kripto Sistemi                                                                                      8

 

RSA Algoritması                                                                       8

 

Özel Mesajların Alışverişi                                                           10

 

ElGamal Kriptolama                                                                            10

 

RSA Algoritmasının MATLAB ile Örneklenmesi                                      12

 

Örnek bir Ekran Görüntüsü                                                                 18

 

Kaynaklar                                                                                          18

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Kriptoloji ve Kriptoanaliz

 

Uzun ve büyüleyici bir geçmişe sahip olan Kriptoloji; gizlilik, veri bütünlüğü, doğrulama ve veri kaynağının doğrulanması gibi bilgi güvenliği ile ilişkili yaklaşımların matematiksel tekniklerle incelenmesini ve ifade edilmesini sağlar. En temel ifade şekliyle, bilgilerin başkaları tarafından okunamayacak formlara dönüştürülmesi ve özel araçlar kullanarak sadece ilgili kişiler tarafından orijinal forma dönüştürülme işlemidir kriptoloji. 4000 yıl önce Mısırlılar tarafından ilkel  yapıda kullanıldığı gibi, sürekli gelişim kaydederek her iki dünya savaşının sonucunda da kritik rol oynamış ve günümüzde çok farklı alanlarda geniş bir şekilde kullanılmaya devam etmektedir.

 

Eski Roma imparatoru Sezar’ın kullandığı kriptolama biçimi, kriptolamanın başlangıç formlarına örnek olarak verilebilir. Sezar kriptolamasında, düz metin içerisindeki bir harf, alfabedeki n. harf ise onu alfabedeki n+k. harf ile yer değiştirerek kullanılmaktaydı. Burada k değeri sabit bir tamsayıdır. Sezar k değeri için 3 kullanmıştır. Bu kriptolamaya göre “OPTIK” terimini kriptolayalım:

 

Alfabedeki harfler:

 

ABCDEFGHIJKLMNOPQRSTUVWXYZ

 

Bu harflerin 3 hane kaydırılmış hali:

 

DEFGHIJKLMNOPQRSTUVWXYZABC

 

Dolayısı ile “OPTIK” düz metninin kiptolanmış hali “RSWKN” olur.

 

Kriptoloji, birbirini bütünleyen iki çalışma alanından oluşur: Kriptografi ve Kriptoanaliz. Kriptografi gizli iletişim sistemlerinin tasarlanması ile ilgilenirken, kriptoanaliz de gizli iletişim sistemlerinin uzlaşmalarını sağlama yolları üzerinde çalışır.

 

Öncelikle askeri, diplomatik servisler ve hükümetler tarafından ülkelerin milli sırlarını ve stratejilerini korumak üzere araç olarak baskın bir şekilde kullanılmakta olan kriptoloji, 1960’lı yıllarda bilgisayar ve iletişim sistemlerinin çoğalması ile bilgilerin dijital formda korunması ve güvenlik sistemlerinin sağlanması amacı ile özel sektörden de talep görmeye başlamıştır.

 

IBM tarafından 1970’lerin başlarında çalışmaları başlayan ve 1977 yılında bilgilerin kriptolanması için ABD’nin federal bilgi işleme standardı olarak benimsenen veri kriptolama standardı (Data Encrypting Standard – DES), tarihteki en yaygın kullanıma sahip kriptografi mekanizmasıdır. DES, halen dünya çapında elektronik ticarette güvenlik sağlamak üzere, finans kurumları tarafından önemini sürdürmektedir.

 

Kriptoloji alanındaki en çarpıcı gelişme, 1976 yılında Diffie ve Helman tarafından yayınlanan “New Directions in Cryptography” bildirisi ile gerçekleşmiştir. Bu bildiri, genel-anahtar kriptografi kavramı ile birlikte, anahtar alışverişi için yeni ve saf bir metot ortaya koymuştur. Her ne kadar o tarihte bu yazarlar tarafından herhangi bir genel-anahtar pratiği reel olarak gerçekleştirilmemiş olsa da, fikir oldukça anlaşılır olduğundan kriptografi alanında geniş ilgi ve aktivite sağlamıştır.

 

1978’de Rivest, Shamir ve Adleman tarafından, günümüzde RSA olarak bilinen ilk genel-anahtar kriptolama ve imzalama yapısı geliştirilmiştir. RSA’nın yapısı, geniş tamsayıların çarpanlara ayrılması mantığına dayanır. Bir diğer güçlü ve pratik genel-anahtar yapısı, 1985 yılında ElGamal tarafından bulunmuştur.

 

Kriptolanmış verinin güvenliği iki faktöre bağlıdır: kriptografi algoritmasının gücüne ve kullanılan anahtarların gizliliğine. Kriptografi algoritması, kriptolama ve kripto çözme işlemini gerçekleştirmek üzere kullanılan matematiksel fonksiyondur. Kriptografi algoritması, anahtarlar ve kullanılan tüm protokoller bir kriptosistemi oluşturur.

 

Kriptolojinin Amaçları

 

Kriptografi, verilerin kriptolanması ile birlikte birçok avantaj da sağlar. Bunlardan bazıları aşağıda verilmiş ve açıklanmıştır:

 

1.      Gizlilik Bilginin içeriğini, görmeye yetkisi olanlar dışındakilerin görmesine engel olur.

 

2.      Veri bütünlüğü Bilginin yetkisiz kişiler tarafından değiştirilmemiş olduğunu garantiler. Eğer herhangi bir değişikliğe uğramışsa bunun fark edilmesi sağlanır.

 

3.      Doğrulama ve kimlik saptama  Kullanıcı, bilgisayar, kredi kartı benzeri varlıkların kimliğinin doğrulanması sağlanır.

 

4.      İnkar edememe  Bir varlık tarafından gerçekleştirilen işlemin daha sonra o varlık tarafından inkar edilememesini sağlar.

 

Blok Kriptolama ve Akıcı Kriptolama

 

Blok kriptolama, düz metinin belirli büyüklüklerde bloklara ayrılarak kriptolanmasını sağlar. Bloklar genellikle 64 bit ve 128 bit büyüklüğünde seçilir. Akıcı kriptolamada ise, düz metin kriptolanırken aynı anda sadece 1 byte veya 1 bit’lik bilgi işlem görür. DES kriptolama, 64 bit blok büyüklüğüne sahip bir blok kriptolama tekniği iken, AES kriptolama 128 bit’lik bloklarla işlem yapar. RSA ve Diffie-Hellman kriptolama tekniklerinde ise blok büyüklükleri sabit değil değişkendir. RC4 kriptolama ve GSM iletişimlerini kriptolamak üzere kullanılan A5 algoritması da akıcı kriptolamaya örnek olarak verilebilir.

 

Simetrik Anahtar Kriptolama

 

Simetrik anahtarlı kripto işleminde, bir anahtar hem mesajın kriptolanması hem de mesajın kriptosunun çözülmesi işlemlerinde kullanılır ve bu nedenle hızlı çalışır (Şekil-1).

 

 

Şekil 1. Simetrik Anahtar Kriptolama

Kriptolamanın gerçekleştirildiği ve başka yere taşınması gerekmeyen aynı ortamda, oldukça kullanışlı bir tekniktir. Başka bir yere taşınan veriler için kullanılmasının önündeki en önemli zorluk, güvenli olarak anahtar dağıtımında karşılaşılan sıkıntılardır.

 

Bu türden kriptolama kullanan tarafların bir anahtar üzerinde anlaşma sağlamış olmaları ve bu anahtarı kendi aralarında başkalarına karşı gizli tutmaları gerekir. Bu anahtarı ve mesajı elde eden başka birisi kolaylıkla kriptoyu çözer ve mesajın içeriğine ulaşabilir. Birbirinden uzak konumlardaki kişiler için aracı bir kuryeye veya güvenli bir iletişim şekline dayanmaları gerekir.

 

Simetrik anahtar kriptolamaya, DES (Data Encryption Standard), IDEA (International Data Encryption Algorithm), Blowfish, Rijndael ve AES (Advanced Encryption Standard) algoritmaları örnek olarak verilebilir.

 

DES (Data Encryption Standard)

 

DES algoritması, en yaygın kullanıma sahip bir blok kriptolama algoritmasıdır. Uzun yıllar, çoğu insanlar tarafından “gizli kod üretme” ile DES eşanlamlı olarak kullanılmıştır. DES ile kriptolanmış mesajları kırmak üzere Electronic Frontier Foundation tarafından yapılandırılan 220.000$’lık makine ile vurulan darbeye rağmen, “triple-DES” isimli uzatma versiyonu ile DES, ömrünü uzatmış ve daha yıllar boyunca Kamu İdarelerinde ve bankalarda kullanılacak gibi görünüyor.

 

DES algortimasında anahtar uzunluğu 56 bittir. (Anahtar genellikle 64 bit olarak ifade edilir, fakat her sekizinci bit parity biti olarak kullanılır ve ihmal edilir.) Anahtar herhangi bir 56 bit sayı olabilir ve her zaman değiştirilebilir.

 

Düz metin, ilk permütasyondan sonra yarısı sağda yarısı solda her biri 32 bit uzunluğunda iki parçaya bölünür. Daha sonra f fonksiyonu ve anahtar ile birleştirilerek sonraki adıma geçilir. Aynı işlem 16 kez tekrarlanır ve 16. turun sonunda, sağ ve sol parçalar birleştirilir. Son permütasyondan sonra (başlangıçtaki permütasyonun tersi) algoritma tamamlanarak biter.

 

Her bir tur da anahtar bitleri değiştirilir ve anahtarın 56 bitinden 48 biti seçilir. Verinin sağ yarımı genişleme permütasyonu (expansion permutation) yoluyla 32 bitten 48 bite genişletilir. Genişletilen kısım seçilen 48 bit anahtarla XOR işlemine sokulur. Daha sonra 32 yeni bit üreten 8 S-box içerisine gönderilir ve tekrar değiştirilir. Bu dört işlem f fonksiyonunu oluşturur. f fonksiyonunun çıktısı verinin sol yarımı ile XOR işlemine tabi tutulur. Sonuçta elde edilen değer yeni sağ yarım olmakta ve sol yarım ise sağ yarımın eski hali olmaktadır.

 

 

Şekil 2. DES Kriptolama Algoritması

 

 

Açık Anahtar Altyapısı

 

Asimetrik kriptolama diye de adlandırılan Açık Anahtar Altyapısı ile, simetrik kriptolamadaki anahtar dağıtım probleminin üstesinden gelinmiştir. Simetrik kriptolamada, gizli anahtarın herhangi bir yolla karşı tarafa ulaştırılması gerekirken Açık Anahtar Altyapısı ile kriptolamada gizli anahtarın hiçbir şekilde karşı tarafa gönderilmesi gerekmez. Açık Anahtar Altyapısı ile kriptolamada iki farklı anahtar kullanılır: Açık anahtar ve özel anahtar. Kriptolama için Açıkl anahtar kullanılırken, kriptoyu çözmek üzere özel anahtar kullanılır. Açık anahtarın gizli tutulmasına gerek yokken özel anahtarın kesinlikle gizli tutulması gerekmektedir ve özel anahtarın saklanması sahibinin kendi sorumluluğu altındadır. Açık anahtara sahip birisi, bilgileri kriptolayabilir ancak bilgilerin kriptosunu çözemez.

 

 

 

Şekil 3. Açık Anahtar Altyapısı

 

Açık anahtar altyapısı ile kriptolamada, gönderici, alıcının açık anahtarını elde eder ve bu anahtarı kullanarak mesajı kriptolar. Bu kriptolanan mesajın tekrar açık anahtar ile kriptosunun çözülmesi mümkün değildir. Mesaj alıcıya ulaştığında alıcı, kendi özel anahtarını kullanarak mesajın kriptosunu çözebilir.

 

Açık anahtar kriptolamanın en temel amacı, önceden güvenlik anlaşmasına sahip olmayan taraflar arasında da mesajların güvenli olarak alışverişini sağlayabilmektir. Gizli anahtarın hiçbir şekilde başkasına gönderilmesi gerekmediğinden oldukça yüksek güvenlik ve elverişlilik sunar. Bu kriptolama yapısına örnek olarak RSA (Rivest, Shamir, Adleman), Diffie-Hellman, DSA (Digital Signature Algorithm)  ve ElGamal algoritmaları verilebilir.

 

Açık anahtar kriptolamanın bir diğer avantajı ise, inkar edilemeyecek dijital imzalar sağlayabilmesidir. 

 

Simetrik Kriptolama ve Açık Anahtar Altyapısı ile Kriptolamanın Karşılaştırılması

 

Simetrik anahtar ve açık anahtar kriptolama sistemleri, birbirlerini bütünleyen avantajlara sahiptir. Günümüzde kullanılan kriptografi sistemleri genellikle her ikisinin de gücünden faydalanılarak gerçekleştirilmektedir. Bazı avantaj ve dezavantajlar aşağıda sıralanmıştır:

 

1.      Simetrik anahtar kriptolama, genellikle çok yüksek veri taşıma oranı düşünülerek tasarlanır. Bazı donanımsal uygulamalar saniyede yüzlerce megabyte veriyi kriptolamayı başarabilirken, yazılımsal uygulamalarda saniyede megabyte’lar düzeyinde gerçekleşir. Açıkl anahtar kriptolamada işlemler, simetrik anahtar kriptolamaya oranla daha düşük hızda gerçekleşir.

 

2.      Simetrik anahtar kriptolamada anahtar uzunluğu, açık anahtar kriptolamaya göre nispeten kısadır.

 

3.      Simetrik anahtar kriptolamada, iki farklı taraf arasında gerçekleşen iletişim için anahtarı her iki tarafında bilmesi ve gizli tutması zorunlu iken, açıkl anahtar kriptolamada tarafların sadece kendilerine ait özel anahtarı gizli tutmaları yeterlidir.

 

4.      Simetrik anahtar kriptolamada anahtarın güvenlik açısından sık sık değiştirilmesi gerekirken, açık anahtar kriptolamada özel/genel anahtar çiftinin uzun süreler boyunca değiştirilmesine gerek duyulmaz.

 

5.      Çoğu açık anahtar yapılarında, simetrik anahtar yapılarına göre oldukça verimli dijital imza mekanizmaları elde edilir.

 

6.      Simetrik anahtar kriptolamada, büyük ağlar için yönetilmesi gereken çok sayıda anahtar bulunabilirken, açıkl anahtar kriptolamada gereken anahtar çifti daha az olabilmektedir.

 

Simetrik ve Açık Anahtarlı Algoritmaların Birlikte Kullanılması

 

Zaman zaman simetrik ve açık anahtarlı algoritmalar beraber kullanılmaktadır. Böyle bir melez yapı için PGP (Pretty Good Privacy) örnek olarak verilebilir. Simetrik kriptolamanın hızından, açık anahtar kriptolamanın da güvenlik, anahtar dağıtma ve kullanışlılık benzeri avantajlarından faydalanarak daha güçlü sonuçlar elde edilebilmektedir.

 

RSA Kripto Sistemi

 

Ron Rivest, Adi Shamir ve Len Adleman tarafından 1978 yılında geliştirilen RSA’nın temel teknikleri 1973 yılında Clifford Cocks tarafından bulunmuş fakat 1997’ye kadar gizli kalmıştır. RSA, genel anahtar kriptolamasında kullanıldığı gibi dijital imzalar için de kullanılabilmektedir.

 

RSA Algoritması

 

p ve q birbirinden farklı iki büyük asal sayı olsun. Modül n, bu iki asal sayının çarpımıdır: . Euler’in fonksiyonu aşağıdaki şekilde elde edilir:

 

 

Şimdi    koşulunu sağlayacak bir n sayısı seçilir:

 

,

 

ve d değeri genişletilmiş Euiclid algoritması kullanarak hesaplanır

 

 

Burada e sayısı genel üs, d sayısı ise özel üs’dür. Modül n ve genel üs e yayınlanır. d değeri ve p ve q asal sayıları gizli tutulmalıdır. Kriptolama işlemi ise,

 

,

 

değerinin hesaplanması ile gerçekleştirilir. Burada M değeri,  koşulunu sağlayan düz metindir. C sayısı ise, M düz metninden aşağıdaki ifade kullanılarak hesaplanır:

 

 

 

 

Anahtar Üretme Algoritmasını özetlersek:

 

1.      Birbirine yakın büyüklüklerde iki büyük asal sayı üretilir.

 

2.      n=p*q ve m=(p-1)*(q-1) çarpımları hesaplanır.

 

3.      1<e<m arasında bir e tamsayısı seçilir (Örneğin gcd(e,m)=1).

 

4.      Gizli üs d hesaplanır (1<d<m) (Örneğin ed1(mod m)).

 

5.      Genel anahtar (n,e) ve özel anahtar (n,d)’dir. p,q ve m değerleri de gizli tutulmalıdır.

 

Örnek bir uygulama gerçekleştirmek üzere p=11 ve q=13 asal değerlerini ele alalım,

 

 

 

şimdi e değerini hesaplayalım:

 

e=2 à gcd(2,120)=2 (hayır)

e=3 à gcd(3,120)=3 (hayır)

e=4 à gcd(4,120)=4 (hayır)

e=5 à gcd(5,120)=5 (hayır)

e=6 à gcd(6,120)=6 (hayır)

e=7 à gcd(7,120)=1 (evet)     böylece e=7 olabilir

 

d değerini hesaplamak üzere;

 

de=1+nm à d=(1+nm)/e

 

n=0 à d=(1+0*120)/7=1/7  (hayır)

n=1 à d=(1+1*120)/7=121/7 (hayır)

n=2 à d=(1+2*120)/7=241/7 (hayır)

n=3 à d=(1+3*120)/7=361/7 (hayır)

n=4 à d=(1+4*120)/7=481/7 (hayır)

n=5 à d=(1+5*120)/7=601/7 (hayır)

n=6 à d=(1+6*120)/7=721/7=103 (evet)  böylece d=103 olur

 

Dolayısı ile genel anahtar (143,7), özel anahtar ise (143,103) olarak elde edilmiştir.

 

Kriptolanacak mesaj M=9 olsun,

 

 

kriptolanmış mesaj 48 olur.

 

Mesajın aktarıldığını düşünelim, özel anahtara sahip alıcıda kriptosunun çözülmesi de,

 

 şeklinde gerçekleştirilir.

 

Sonuç olarak mesajın kriptosu çözüldüğünde mesaj 9 olarak elde edilir.

 

Özel Mesajların Alışverişi

 

Genel-anahtar dizini, her kullanıcının (e,n) çiftini içerir. Bir başkasına, özel mesajlar göndermek isteyen kullanıcılar bu parametreleri edinmek üzere dizine başvururlar. Örneğin bir dizin aşağıdaki şekilde düzenlenmiş olabilir:

 

Kullanıcı

Genel Anahtarlar

Tolga

(ea,na)

Nihat

(eb,nb)

Şuayb

(ec,nc)

...

 

na, Tolgaya ait modül, ea ise genel üssü ifade eder. Tolganın özel bir mesajı Nihat’a göndermesini örnek alarak inceleyelim. Bu örneğe göre Tolga ve Nihat aşağıdaki adımları gerçekleştirirler:

 

  1. Tolga, Nihat’ın dizindeki ismine ulaşır ve ona ait genel üs (eb) ve modül (nb) değerlerini edinir.

 

  1. Tolga,    değerini hesaplar.

 

  1. Tolga C’yi ağ üzerinden Nihat’a gönderir.

 

  1. Nihat C’yi alır.

 

  1. Nihat kendi özel üssünü ve modülünü kullanır ve M’yi elde etmek üzere  ifadesini hesaplar.

 

Dijital Dokümanların İmzalanması

 

Genel-anahtar kriptografi tarafından sağlanan en önemli katkılardan birisi, dijital imzalardır. Dijital imzalar için ilk uluslar arası standart 1991 yılında kabul edilmiştir. Bu standart RSA genel-anahtar yapısına dayanır. Türkiye’de geçen yıl kabul edilen 5070 sayılı Elektronik İmza kanunu ardından çıkarılan teknik yönetmelik ve tebliğler RSA’nın Elektronik İmzalarda en az 1024 bit anahtar ile kullanılmasını önermektedir.

 

ElGamal

 

ElGamal Kriptolama ile karşılıklı iletişim kuracak tarafların her biri bir genel anahtar ve özel anahtar oluşturmalıdır. A ve B taraflarının var olduğunu düşünelim:

 

1.      Büyük bir rasgele asal sayı (p) seçilir.

 

2.       koşulunu sağlayan bir rasgele tamsayı seçilir ve  ifadesi hesaplanır.

 

3.      A’nın genel anahtarı ; özel anahtarı ise a’dır.

 

B’nin A’ya göndereceği mesajı (m) kriptolama ve A’nın kriptoyu çözme adımları aşağıdaki gibidir:

 

1.      Kriptolama için B şunları gerçekleştirir:

a.          A’nın doğrulanmış genel anahtarını  elde eder.

 

b.          Mesajı  aralığındaki bir m tamsayısı şeklinde gösterir.

 

c.           koşulunu sağlayan bir rasgele k tamsayısı seçer.

 

d.           ve  ifadelerini hesaplar.

 

e.          Şifreli metin olan ’yı A’ya gönderir.

 

2.      A, c şifreli metini, düzmetin m’ye dönüştürmek üzere kripto çözme işlemini aşağıdaki şekilde gerçekleştirir:

 

a.           ifadesini hesaplamak üzere a özel anahtarını kullanır ( olduğuna dikkat edin).

 

b.           ifadesini hesaplayarak m değerini elde eder.

 

Örnek bir uygulama gerçekleştirmek üzere A’nın asal sayı olarak p=2357 ve bir üreteç olarak    (için) seçtiğini kabul edelim. Özel anahtar a=1751 olarak alınırsa,

 

 

olarak hesaplanır ve A’nın genel anahtarı  olur.

 

Kriptolama işlemi için m=2035 alalım ve B rasgele sayı olarak k=1520 seçmiş olsun,

 

 

olur ve

 

 

elde edilir ve B,  ve  değerlerini A’ya gönderir.

 

 

 

 

 

 

A, kriptoyu çözmek ve m’yi elde etmek üzere,

 

 

değerini elde ettikten sonra,

 

 

olarak sonuca ulaşır.

 

RSA Algoritmasının Matlab ile örneklenmesi

 

rsa_basla.m

 

%******************************************************************************************

% RSA Kriptolama ve Kripto çözme işlemini gerçekleştirecek program için 

% açık metinin girilmesi ve ilgili modüllerden işlemleri gerçekleştirerek 

% kriptolu metnin elde edilmesini, daha sonra da kriptonun çözülmüş halini gösterir.

%******************************************************************************************

 

[p q n phi_n i j] = rsa_giris;

 

acik_metin=input('acik metni girin');

fprintf ('\n');

fprintf ('Açık Metin: %s\n', acik_metin);

fprintf ('\n');

pause;

fprintf ('Açık Metin - (ASCII olarak): ');

fprintf ('\n');

fprintf ('%x ', acik_metin);

fprintf ('\n');

fprintf ('\n');

pause;

 

sifreli_metin = rsa_kripto(acik_metin, i, n);

fprintf ('Kriptolu Metin - (ASCII olarak): ');

fprintf ('\n');

fprintf ('%x ', sifreli_metin);

fprintf ('\n');

fprintf ('\n');

pause;

acik_metin2 = rsa_dekripto(sifreli_metin, j, n);

fprintf ('Kriptosu Çözülmüş Metin - (ASCII olarak): ');

fprintf ('\n');

fprintf ('%x ', acik_metin2);

fprintf ('\n');

fprintf ('\n');

pause;

fprintf ('Kriptosu Çözülmüş Mesaj:');

fprintf ('\n');

fprintf ('%c',acik_metin2);

fprintf ('\n');

 

rsa_giris.m

 

%******************************************************************************************

% RSA hesaplama işlemleri için gerekli girdilerin hazırlanmasını sağlar.

%

% Kullanım Şekli:

% function [p,q,n,phi_n,i,j] = rsa_giris

%

% Çıktılar:

% p     - Birinci asal değer (gizli)

% q     - İkinci asal değer (gizli)

% n     - pq çarpımı  (genel)

% phi_n - pq çarpımının Euler fonksiyonu (gizli)

% i     - i sayısı    (genel)

% j     - j sayısı    (gizli)

%******************************************************************************************

 

function [p,q,n,phi_n,i,j] = rsa_giris

 

fi_N_max = 1000;

 

% İki asal sayı üret

 

fprintf ('p asal sayısının üretilmesi:');

fi_generated = 0;

while (fi_generated == 0),

    p = fix(rand * fi_N_max);

    fi_generated = prime_test(p);

    fprintf ('.');

end;

fprintf ('\n',p);

 

fprintf ('q asal sayısının üretilmesi:');

fi_generated = 0;

while (fi_generated == 0),

    q = fix(rand * fi_N_max);

    fi_generated = prime_test(q);

    fprintf ('.');

end;

fprintf ('\n');

 

% modülü üret

n = p*q;

 

% Euler fonksiyonu

phi_n = (p-1)*(q-1);

 

% i,j seçimi:

% i*j == 1 (mod phi_n)

% sayıyı çarpanlara ayırmak üzere r*phi_n + 1 kullanıyoruz, Çarpanlara

% ayırma sonucunda i ve j sayıları elde edilir. ij = r*phi_n + 1 ise mod

% phi_n'e göre ij çarpımı 1'e eşlenik  olur.

 

fprintf ('(i,j) çiftinin üretilmesi:');

fi_factorized = 2*phi_n + 1;

i = 0;

j = 0;

while j==0,

    for i=fix(fi_factorized^.5-1):-1:3;

        if (rem(fi_factorized,i)==0)

            j = fi_factorized/i;

            break;

        end;

        if (rem(i,100)==0)

            fprintf ('.'); 

        end;

    end;   

    fi_factorized = fi_factorized + phi_n;

    if (j==0)

        fprintf ('\n(i,j) tekrar çalıştırılıyor:');

    end;

end;

fprintf ('\n');

 

fprintf ('=====================================================\n');

fprintf ('RSA başlatıldı:\n');

fprintf ('\n');

fprintf ('\t p=%i - ilk asal deger (özel)\n ',p);

fprintf ('\t q=%i - ikinci asal deger (özel)\n',q);

fprintf ('\t n=%i - modül (genel)\n',n);

fprintf ('\t phi(n)=%i - Euler fonksiyonunun degeri (özel)\n',phi_n);

fprintf ('\t i=%i - kriptolama için genel anahtar (genel)\n',i);

fprintf ('\t j=%i - gizli kripto cozme anahtari (özel)\n',j);

fprintf ('=====================================================\n');

 

rsa_kripto.m

 

%******************************************************************************************

% RSA Kriptolama modülü

%

% Kullanım şekli:

% function [sifreli_metin] = rsa_kripto (acik_metin, i, n)

%

% Girdi parametreleri:

% acik_metin - Açık Metin

% i         - i sayısı

% n         - n sayısı

%

% Çıktılar:

% sifreli_metin - Şifreli Metin

%******************************************************************************************

 

function [sifreli_metin] = rsa_kripto (acik_metin, i, n)

 

  sifreli_metin = zeros(1,length(acik_metin));

  for fi_i = 1:length(acik_metin)

      sifreli_metin(fi_i) = modpow(acik_metin(fi_i),i,n);

  end;

 

rsa_dekripto.m

 

%******************************************************************************************

% RSA Kripto Çözme modülü

% Kullanım Şekli:

% function [acik_metin] = rsa_dekripto (sifreli_metin, j, n)

%

% Girdi parametreleri:

% sifreli_metin - Şifreli Metin

% j           - j sayısı

% n          - n sayısı

%

% Çıktılar:

% acik_metin   - Açık Metin

%******************************************************************************************

 

function [acik_metin] = rsa_kripto (sifreli_metin, j, n)

 

  acik_metin = zeros(1,length(sifreli_metin));

  for fi_i = 1:length(sifreli_metin)

      acik_metin(fi_i) = modpow(sifreli_metin(fi_i),j,n);

  end;

modpow.m

 

%***********************************************************************************

% n modülüne göre n'in m. kuvvetini hesaplar

% sonuc = n^m mod mod

%

% Kullanım Şekli:

% function [sonuc]=modpow (n,m,mod)

% Örneğin modpow (2,10,10) ifadesi 4 sonucunu verir,

% çünkü 2^10=1024 mod 10 = 4'dür.

%

% Girdi Parametreleri:

% n   - üssü alınan sayı

% m   - üs

% mod - modül

%

% Çıktılar:

% sonuc - modüle göre n^m'in kalanı

%***********************************************************************************

 

function [sonuc]=modpow (n,m,mod)

  sonuc = 1;

  for fi_i = 1:m

      sonuc = rem(sonuc*n, mod);

  end;

 

asal_test.m

 

%***********************************************************************************

%  Burada sayıların asal olup olmadığı n sayısının 2 ile n^0.5 arasındakı

%  sayılara bölünme durumuna göre basitçe test edilir. Test oldukça yavaş

%  gerçekleşir ancak bu programdaki amacımıza uygun olarak doğru çalısır. 

%  Daha hızlı işlem yapılması gerektiğinde Rabin testi gibi bir mantık

%  kullanılabilir.

%

%  Kullanım şekli:

%  function [asal] = asal_test (n)

%

%  girdi parametreleri:

%  n - test edilecek sayı

%

%  çıktılar:

%  asal ise 1, asal değilse 0

%***********************************************************************************

 

 

function [asal] = asal_test (n)

  asal = 1;

  for fi_i = 2:fix(n^0.5)

      if rem(n, fi_i)==0

          asal = 0;

      end;

  end;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Örnek bir Ekran Görüntüsü

 

» rsa_basla

p asal sayısının üretilmesi:....

q asal sayısının üretilmesi:...

(i,j) çiftinin üretilmesi:..

=====================================================

RSA başlatıldı:

 

             p=857 - ilk asal deger (özel)

             q=53 - ikinci asal deger (özel)

             n=45421 - modül (genel)

             phi(n)=44512 - Euler fonksiyonunun degeri (özel)

             i=75 - kriptolama için genel anahtar (genel)

             j=1187 - gizli kripto cozme anahtari (özel)

=====================================================

acik metni girin

'Optik Haberleşme'

 

Açık Metin: Optik Haberleşme

 

Açık Metin - (ASCII olarak):

4f 70 74 69 6b 20 48 61 62 65 72 6c 65 fe 6d 65

 

Kriptolu Metin - (ASCII olarak):

87d8 43a6 187d 2154 731d 3660 1279 6f93 4b8e 5274 1733 2b9b 5274 3b97 8414 5274

 

Kriptosu Çözülmüş Metin - (ASCII olarak):

4f 70 74 69 6b 20 48 61 62 65 72 6c 65 fe 6d 65

 

Kriptosu Çözülmüş Mesaj:

Optik Haberleşme

»

 

 

Kaynaklar

 

[1]  Çetin Kaya Koç, High-Speed RSA Implementation, RSA Laboratories, 1994

 

[2]  A. Menezes, P. Van Oorschot ve S. Vanstone, Handbook of Applied Cryptography,  CRC Press, 1996

 

[3]  An Introduction to Cryptograph, Network Associates