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 ed≡1(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:
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):
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):
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