Good Stuff Happens in 1:1 Meetings: Why you need them and how to do them well
Enigma otomataprojesiveyazilimgerceklemesi
1. Eskişehir Osmangazi Üniversitesi
Enigma Otomata Projesi ve
Yazılım Gerçeklemesi
Prepared for: Yrd.Doç.Dr.Ahmet Yazıcı
Prepared by: Serkan Danışan, Mahmut Bulut, Tuğrul Boztepe
May 28, 2012
Eskişehir Osmangazi Üniversitesi Bilgisayar Mühendisliği Bölümü
2. Eskişehir Osmangazi Üniversitesi
Proje İçeriği
Enigma Önbilgisi
i
Enigmanın Tarihçesi, Kullanım Yerleri ve Bilgisayar Bilimine Etkisi
i
Mekanik Enigma Makinesinin Çalışma Prensibi
i
DFA Yapısına İndirgeme
ii
ROT-N şifrelemesinin ve Enigma Makinesinin indirgenmesi
ii
Kodlama Tipi
ii
Genel DFA
ii
Kodlar
iii
Proje Adı
iii
ROT-N Mantığının Kodlanması
iii
Enigma Mantığının Kodlanması
vi
Enigma Otomata Projesi ve Yazılım Gerçeklemesi
i
3. Eskişehir Osmangazi Üniversitesi
Enigma Önbilgisi
Enigmanın Tarihçesi, Kullanım Yerleri ve Bilgisayar Bilimine Etkisi
II. Dünya Savaşında Almanya tarafından gizli mesajların şifrelenmesi ve tekrar çözülmesi amacı ile kullanılan bir şifre makinesi
olan ve Rotor makineleri sayesinde çalışan Elektro-Mekanik aygıttı.Bu makineyı ünlü bilim adamı Alan Turning
keşfetmiştir.Enigma makinasının birçok türü vardı ve birçok ordu için 1920 li yıllardan başlayarak üretildi.Ancak en çok tarihte
bahsedilen modeli Alman ordusunda kullanılan Wehrmacht Enigma modeliydi.Bu makina almanlar için yararlı gibi görünse de
zamanla zararlı yönü ortaya çıktı. ll.Dünya savaşı ülkelerinden Polonya ve İngiltere tarafından mesajlar çözümlendi.Bu müttefik
ülkelerin savaşı kazanmasında bu çözümlümenin oldukça büyük bir payı vardı.Enigmanın dünya bilimindeki diğer önemli rolü
de şifre çözücü bu makinenin bilgisayar biliminin temelini atmış olmasıdır.
Mekanik Enigma Makinesinin Çalışma Prensibi
Enigma makinesinin işleyişi, düz yazı harflerini şifreli yazı harflerine çeviren 3 ROTORlu bir sistem üzerine kurulmuştur.Rotorlar
diğer rotorlar ile kendi eksenleri etrafında dönerler, böylece yer değiştirme işlemini tamamlarlar. Makinenin klavyesinde bir
harfe basıldığı zaman, önce ilk rotora gönderilir ve makinenin o andaki ayarına göre o harf değiştirilir(başka bir harf ile). Yeni
harf, o andaki ayarına göre dönüştürülecek harf ile yer değiştireceği ikinci rotora geçer. Bu yeni harf üçüncü rotora dönüşerek
geçecek, yine uygun olanla yer değiştirecektir. Sonra, bu yeni harf bir yansıtıcıdan yansıyacak ve 3 rotordan da ters sırayla
geçecektir. Enigmayı zamanında bu kadar güçlü yapan rotorlarının kendi eksenleri etrafında dönmeleriydi. Düz metin harfi ilk
rotordan geçtiğinde ilk rotor bir kere dönecekti. Diğer, ikinci rotor ilk rotor 26 kez(alman alfabesi için) dönene kadar sabit ve
hareketsiz(fonksiyonsuz) kalacaktı. Sonra ikinci rotor harekete başlıyacaktı. İkinci rotor 26 kere döndüğünde(26×26 harf, ilk
rotor 26 kez dönmüştü sonra ilk rotor ikinci 26′yı tamamladığında ikinci rotorda bir kez 26yı tamamlamış oldu ), üçüncü
rotorda 1 yönde hareket edecekti. Döngü bütün mesajın uzunluğu kadar bunun gibi devam edecekti.Sonuç değiştirilen
dönüşüm olarak karşımıza çıkacaktı. Diğer bir deyişle, bir “s” ilk bölümde “b” olarak kodlanabilir oluyor, ama mesajın ilerleyen
bölümlerinde “m” olarak da karşımıza çıkabiliyordu. Rotorların dönmesi prensibi 26x26x26 = 17576 mümkün pozisyona izin
veriyordu.
Enigma Otomata Projesi ve Yazılım Gerçeklemesi
i
4. Eskişehir Osmangazi Üniversitesi
DFA Yapısına İndirgeme
ROT-N şifrelemesinin ve Enigma Makinesinin indirgenmesi
Kodlama Tipi
Programımız’da ise ROT13 şifreleme yöntemi(Sezar yöntemi) ve Wehrmacht Enigma’nın yazılım olarak modellenmiş şekli
Java programlama dilinde kodlandı ve arayüz ile sunuldu.
Genel DFA
ROT13 sistemi ve enigma makinesinin DFA’i aşağıda gösterilmiştir.
Harflere Ayrıştırma Rotor(Öteleme)
Enigma Otomata Projesi ve Yazılım Gerçeklemesi
ii
5. Eskişehir Osmangazi Üniversitesi
Enigma’nın çalışma sistemi kısaca şöyledir;
Şifrelenecek kod başta starting state olarak alınır.Daha sonra alınan string harflerine ayrıştırılır.Ayrıştırılan harfler rötor sistemi ile
alfabede diğer harflere atanır.Enigmanın içinde bu rötor sistemlerinden çokça vardır.Alınan stringin harfleri tüm bu rötor işlem-
lerinden geçtikten sonra tekrar başka bir string(kodlanmış string) olarak alıcıya gönderilir.
Kodlar
Proje Adı
Projemizin adını “trenigma” olarak belirledik. “Kodlar” başlığında belirtilen kodların tamamı bu projenin paketlerinin içinde
halihazırda bulunmaktadır.
ROT-N Mantığının Kodlanması
Rot-N kodlaması(genellikle 13 harf öteleme kullanılır) enigma makinesinin temeli olup tarafımızca kodlaması şöyledir:
Rotter.java kaynak dosyasında Rotter sınıfı constructor’ında argüman olarak öteleme sayısını alacak şekilde(ROT-N’deki N)
yazımı:
public class Rotter {
public Rotter(String str) {
s = str;
}
public String rotter(int rotadd) {
StringBuilder strbld = new StringBuilder("");
for (int i = 0; i < s.length(); i++) {
char c = s.charAt(i);
if (c >= 'a' && c <= 'm') {
c += rotadd;
} else if (c >= 'n' && c <= 'z') {
c -= rotadd;
} else if (c >= 'A' && c <= 'M') {
Enigma Otomata Projesi ve Yazılım Gerçeklemesi
iii
6. Eskişehir Osmangazi Üniversitesi
c += rotadd;
} else if (c >= 'A' && c <= 'Z') {
c -= rotadd;
}
strbld.append(c);
}
return strbld.toString();
}
public String getString(){
return this.s;
}
public void rotterlayered(int rotad, int layer) {
do {
rotter(rotad);
layer--;
} while (layer != 0);
}
private String s;
}
GUI’deki seçimi yaparak encode işlemini gerçekleştiren kod:
if (Rot.getText() != "") {
Rotter rot = new Rotter(Rot.getText());
if (jComboBox1.getSelectedIndex() == 0) {
RotOut.setText(rot.rotter(1));
} else if (jComboBox1.getSelectedIndex() == 1) {
RotOut.setText(rot.rotter(2));
Enigma Otomata Projesi ve Yazılım Gerçeklemesi
iv
7. Eskişehir Osmangazi Üniversitesi
} else if (jComboBox1.getSelectedIndex() == 2) {
RotOut.setText(rot.rotter(3));
} else if (jComboBox1.getSelectedIndex() == 3) {
RotOut.setText(rot.rotter(4));
} else if (jComboBox1.getSelectedIndex() == 4) {
RotOut.setText(rot.rotter(5));
} else if (jComboBox1.getSelectedIndex() == 5) {
RotOut.setText(rot.rotter(6));
} else if (jComboBox1.getSelectedIndex() == 6) {
RotOut.setText(rot.rotter(7));
} else if (jComboBox1.getSelectedIndex() == 7) {
RotOut.setText(rot.rotter(8));
} else if (jComboBox1.getSelectedIndex() == 8) {
RotOut.setText(rot.rotter(9));
} else if (jComboBox1.getSelectedIndex() == 9) {
RotOut.setText(rot.rotter(10));
} else if (jComboBox1.getSelectedIndex() == 10) {
RotOut.setText(rot.rotter(11));
} else if (jComboBox1.getSelectedIndex() == 11) {
RotOut.setText(rot.rotter(12));
} else if (jComboBox1.getSelectedIndex() == 12) {
RotOut.setText(rot.rotter(13));
}
str = Rot.getText();
Rot.setText("");
}
Enigma Otomata Projesi ve Yazılım Gerçeklemesi
v
8. Eskişehir Osmangazi Üniversitesi
Enigma Mantığının Kodlanması
Enigma Mantığı ise Enigma.java içerisindeki “Enigma” sınıfında eski 3 rotorlu mekanik makinedeki rotorların İngiliz
alfabesindeki karşılığı baz alınarak, ayrıca “reflector” denen 3.rotoun şifrelemesini karşı tarafın çözmesini zorlaştımak için
ROT-1 işlemi yaparak 1 kademe çözen 4. dişliyi de içinde bulundurmaktadır ve bu karşılıklar kodun içine gömülmüştür. Ayrıca
kodumuz 6 rotorlu sistemi de içinde bulundurmakta ama kullanmamaktadır, kullanmak için yorum satırlarını kaldırıp 3’lü rotor
atamalarını silmemiz ve birkaç küçük değişiklik 1 yapmamız yeterlidir:
public class Enigma {
/*
public static final Rotor ROTOR_I = new Rotor(new char[]{'E', 'K', 'M', 'F', 'L',
'G', 'D', 'Q', 'V', 'Z', 'N', 'T', 'O', 'W', 'Y', 'H', 'X', 'U', 'S', 'P', 'A', 'I', 'B',
'R', 'C', 'J'});
public static final Rotor ROTOR_II = new Rotor(new char[]{'A', 'J', 'D', 'K', 'S',
'I', 'R', 'U', 'X', 'B', 'L', 'H', 'W', 'T', 'M', 'C', 'Q', 'G', 'Z', 'N', 'P', 'Y', 'F',
'V', 'O', 'E'});
public static final Rotor ROTOR_III = new Rotor(new char[]{'B', 'D', 'F', 'H', 'J',
'L', 'C', 'P', 'R', 'T', 'X', 'V', 'Z', 'N', 'Y', 'E', 'I', 'W', 'G', 'A', 'K', 'M', 'U',
'S', 'Q', 'O'});
public static final Rotor ROTOR_IV = new Rotor(new char[]{'E', 'S', 'O', 'V', 'P',
'Z', 'J', 'A', 'Y', 'Q', 'U', 'I', 'R', 'H', 'X', 'L', 'N', 'F', 'T', 'G', 'K', 'D', 'C',
'M', 'W', 'B'});
public static final Rotor ROTOR_V = new Rotor(new char[]{'V', 'Z', 'B', 'R', 'G',
'I', 'T', 'Y', 'U', 'P', 'S', 'D', 'N', 'H', 'L', 'X', 'A', 'W', 'M', 'J', 'Q', 'O', 'F',
'E', 'C', 'K'});
public static final Rotor ROTOR_VI = new Rotor(new char[]{'J', 'P', 'G', 'V', 'O',
'U', 'M', 'F', 'Y', 'Q', 'B', 'E', 'N', 'H', 'Z', 'R', 'D', 'K', 'A', 'S', 'X', 'L', 'I',
'C', 'T', 'W'});
public static final Rotor ROTOR_VII = new Rotor(new char[]{'N', 'Z', 'J', 'H', 'G',
'R', 'C', 'X', 'M', 'Y', 'S', 'W', 'B', 'O', 'U', 'F', 'A', 'I', 'V', 'L', 'P', 'E', 'K',
'Q', 'D', 'T'});
public static final Rotor ROTOR_VIII = new Rotor(new char[]{'F', 'K', 'Q', 'H', 'T',
'L', 'X', 'O', 'C', 'B', 'J', 'S', 'P', 'D', 'Z', 'R', 'A', 'M', 'E', 'W', 'N', 'I', 'U',
'Y', 'G', 'V'});
1 Kodun logic yapısı değişmemekle birlikte encode() fonksiyonunun içine rotorlar eklenmeli ve rotorlar public olarak deklare
edilmelidir.
Enigma Otomata Projesi ve Yazılım Gerçeklemesi
vi
12. Eskişehir Osmangazi Üniversitesi
for (int i = 0; i < rotor.length; i++) {
encoded.append(rotoredAndReflected(rotor[i]));
}
return encoded.toString();
}
}
Enigma’nın GUI’deki Encode işlemini tamamlama şekli:
if (Enigma.getText() != "") {
Enigma en = new Enigma();
EnigmaOut.setText(en.encdecString(Enigma.getText()));
str2 = Enigma.getText();
Enigma.setText("");
}
Encode işlemlerinin tamamı “private void encodeActionPerformed(java.awt.event.ActionEvent evt)” Action’ının ürünüdür.
Decode işlemlerinin tamamı “private void decodeActionPerformed(java.awt.event.ActionEvent evt)” Action’ının ürünüdür.
Bütün decode işlemleri ise hafızadaki encode işlemi yapılmamış verinin saf olarak geriye döndürülmesi şeklinde yapılmıştır:
if (RotOut.getText() != "") {
Rot.setText(str);
RotOut.setText("");
}
if (EnigmaOut.getText() != "") {
Enigma.setText(str2);
EnigmaOut.setText("");
}
Enigma Otomata Projesi ve Yazılım Gerçeklemesi
x