15 Mayıs 2013 Çarşamba

Bitirme projesi

Üniversitenin son yılında bütün mühendislik fakültelerinde iki dönem süren bir bitirme projesi dersi oluyor. Bu ders iyi kullanılırsa öğrencinin meslek hayatına atılmadan önce kullanabileceği çok iyi fırsata dönüştürülebiliyor. Eğer bir özgür yazılım projesine katılmamışsa yeni mezun bir bilgisayar mühendisinin şunu yaptım diyebileceği bitirme projesinden başka çok az şey oluyor elinde. Bir diğer fırsat alanı da yaz stajları ama o ayrı bir yazının konusu olabilir.

Elbette bir özgür yazılım projesinin parçası olmak cv'ye yazılabilecek en havalı şey. Bunun için ne bir danışmana ihtiyacınız var ne de başka bir şeye. Biraz İngilizce ve çokça çalışmak sizi istediğiniz özgür yazılım projesine dahil edebilir. Bence bir bilgisayar mühendisinin ortak çalışma yürütebildiğini, bir plana bağlı çalışabildiğini gösteren en önemli gösterge okulunun dışındaki birileriyle birlikte bir geliştirme yapmış olmasıdır. Ohloh'daki hesabınız bence sayfalarca cv'den daha etkili olacaktır.

Aşağıdaki önerileri okurken bambaşka doğrular da olabileceğini hesaba katmak, bunları yapmadan da çok başarılı olunabilirken bunları yapıp da başarısız olunabileceğini de unutmamak gerekir.

Danışman seçimi:

  • Bitirme projesinde danışmanınızı siz seçebiliyorsanız (bunun seçime bağlı olmadığı yerler de var) ne yapmak istediğinize bağlı bir seçim yapın. Danışmanınızın sürekli çalışmalarınızla ilgilenmesini, danışmanlık yapmasını istiyorsanız size vakit ayırabilecek birini seçin. Bu konuda hayalci olmayın. Hocanın ders yükünü haftalık mesaisinden çıkartıp kalan zamanı öğrenci sayısına bölmeyin. Gerçekte size ayırılabilecek zaman bu hesapta ortaya çıkanın çok altında olacaktır. Sizin de dersleriniz var ve bunlar hocanın size ayırabileceği vakitlerle nadiren çakışmayacaktır. Bir hocanın haftalık 1-2 saatini size ayırabilmesi durumunu olumlu kabul etmelisiniz. Projenizde daha fazla danışmanlığa ihtiyacınız olacaksa bunu baştan hocayla konuşun.
  • Projenize fazla karışan olmasın istiyorsanız gidin başı en kalabalık hocayı seçin. Hocanın çalışma alanıyla sizin projenin arası ne kadar fazla açılmışsa o kadar serbest kalacaksınızdır muhtemelen. Bunu önermiyorum ama hocanın çalışma alanında birşeyler yapıp gözden ırak olmayı beklememek gerekir diye yazıyorum.
  • Kiminle çalışacağınıza kesinlikle üçüncü sınıfın sonunda karar vermiş olun. Hocanın o yıl mezun olanlara hangi projeleri yaptırdığına bakın. Bazen çok iyi bir danışman sizi pek de ilgilenmediğiniz bir alana yöneltip, sevdirebilir. Danışmanınız olmasını istediğiniz bir kaç hocayla konuşun. Yanına gittiğiniz herkesin "nasıl bir konuda çalışmak istiyorsun" diye soracağını ve sizin "bilmiyorum" cevabınızı beğenmeyeceğini hemen söyleyebilirim.
  • Danışmanınızla ev arkadaşı olmayacağınızdan en çok anlaşabildiğiniz hocayı seçmenize gerek olmasa da en anlaşamadığınız hocayla çalışmak da çok keyifsiz olacaktır.
  • Bitirme projesindeki danışmanınızı en azından haftada bir defa göreceksiniz ve bu onu sınıfta 40-50 kişiyle birlikte görmek gibi olmayacak. Ya tek başınıza ya da ekip arkadaşlarınızla olacaksınız. Muhtemelen arada yaptıklarınızı beğenmeyecek. O hafta niye yeterince çalışmadığınızı soracak. Bazen onun dinlemeye enerjisi olmayacak ama sizin hep anlatacak enerjinizin olması gerekecek. O size kızacak ama siz ona küsemeyeceksiniz, bunu kesaba katın.
  • İlk iş başvurunuzda muhtemelen danışmanınız aranacak referans olarak.
  • Belki danışmanınızın 100. öğrencisi olacaksınız ama o sizin tek danışmanınız olacak. Bu seçimi iyi düşünerek yapın.
  • Sonuçta kiminle çalışırsanız çalışın her şeyi siz yapacaksınız. Çok çalışırsanız başarılı olacaksınız. İşin en net kısmı burası.
Proje seçimi:

  • Proje seçimi aşamasında sizden beklenen hangi alanla ilgilenmek istediğinize karar vermiş olmanız. Bu çerçeveyi belirlediğinizde konuyu hocanın danışmanlığında kararlaştırabilirsiniz. Elbette üzerinde çalışmak istediğiniz konuyu belirleyebilmişseniz bu daha da iyi olacaktır ama danışmanlık denen iş konuya karar verme aşamasında başlıyor çoğu zaman.
  • Kendinizi nasıl bir iş yaşamının içinde düşünüyorsanız bununla ilgili bir proje konusu belirlemeye çalışın. Mesleğe atılmadan önceki son yılınızı bir bakayım bu konuya diyerek geçirmeyin. Meslek hayatınızda tornavida tutmayı planlamıyorsanız bitirme projenizde de tutmayın.
  • Hiç yapılmamış birşeyi yapmaya çalışmayın. Sizden dağların yerini değiştirmeniz beklenmiyor. Bu proje ile kendinize en fazla ne katabilirseniz öyle değerlendirin.
  • Hem ulusal hem de uluslararası bir çok proje yarışması var. Onlardan birine katılmak yararlı bir deneyim olabilir.
  • Meslek hayatınızı da teorik çalışmalarla geçirmeyecekseniz mutlaka sonucunda ortaya birşey çıkan bir proje konusu belirleyin.
  • Okuldan mezun olduğunuzda bitirme projesi de sizin için bitmiş olacak. Bunu düşünerek yıl sonuna kadar tamamlayabileceğiniz bir iş seçin. Kesinlikle mezun olduktan sonra da geliştirmeye devam ederim demeyin. Etmezsiniz.
  • Projenizi belirledikten sonra mümkün olduğunca duyurun. Hakkında blog yazın, kodlarını paylaşın. Fikriniz çalınır diye korkmayın. Zaten işi tamamladığınızda gösterebilmek için yapıyorsunuz. Çalacak olan o zaman çalar. Çok istisnai durumların dışında projeniz hakkında ne kadar çok ses çıkartırsanız o kadar iyi olacaktır sizin için. Konuşabileceğiniz, çalışmalarınızı sunabileceğiniz her fırsatı değerlendirin.
Bireysel çalışma mı ekip çalışması mı?

  • Her ikisinin de zorlukları var. Bireysel çalışırsanız takıldığınız yerden çıkarken yardım alabileceğiniz kimse olmayacaktır ama bu aynı zamanda kimseyi bir yerden çıkarmanızın da gerekmeyeceği demek olur.
  • İkiden daha kalabalık ekiplerin yönetimi işi çok zahmetlidir. Hele ekip elemanlarının arkadaşlarınız olacağını düşünürseniz, ancak çalışma konunuz birbirinden bağımsız alanlara ayrılabiliyorsa ve danışmanınız bu kalabalık ekibi idare etmeyi göze alıyorsa böyle bir işe girişin. Yoksa sonu hüsran olur.
  • İki kişilik bir ekip iyidir aslında. Bazen siz ona sırtınızı dayarsınız, bazen o size. Hem koordine olması hem de birbirinin eksiğini kapatması kolay olur ama sakın sevgilinizle birlikte bir ekip oluşturup bitirme projesi yapmaya kalkmayın.
  • Mezun olduğunuzda mutlaka bir ekiple çalışacaksınız diye illa bitirme projesini de bir ekiple yapmanız gerekmez. İş hayatındaki takım arkadaşlarınız profesyonel insanlar olacağından (tamam beklentilerinizi çok yüksek tutmayın ama bu işten para kazanıyor olacaklar en azından) öğrencilikten çok farklı bir çalışma disiplini olacak herkeste. Çalışacağınız konuya, danışmanınıza ve size bağlı olarak bireysel çalışmak bazen daha iyi olabilir.

12 Mayıs 2013 Pazar

Bilgisayar mühendisliği öğrencileri için kriptografi dersi

Önce kısaca bu yazı yazıldığındaki durumumuzu özetleyeyim. Hiç bir bilgisayar mühendiliği bölümünde kriptografi zorunlu ders olarak okutulmuyor (veya ben bilmiyorum). Az sayıdaki üniversitede ise çeşitli isimler altında seçmeli ders olarak müfredatta yer alıyor. Ben üç yıldır Çanakkale'de bilgisayar mühendisliği öğrencilerine kriptografi'yi seçmeli ders olarak anlatıyorum.

Kriptografi günümüzde iyi bir matematik alt yapısı olan ve bilgisayar mühendisliği bakışına sahip bilim insanları için disiplinler arası bir çalışma alanı konumunda. Bu alanda çalışmak için mutlaka matematik çalışmayı sevmek gerekiyor. Bir çok kriptografik algoritmayı anlayabilmek için bile temel matematiğin üzerinde bilgi seviyesi gerekli oluyor. Bu nedenle dersi takip etmek, kriptografik algoritmaların büyüleyici güzelliğini görmek diğer derslere göre biraz daha zahmetli olabiliyor. Bu dersi alan üçüncü sınıf bilgisayar mühendisliği öğrencileri dersin tüm detaylarını takip edecek kadar matematikle ilgili olmuyorlar. Lisans seviyesinde bir seçmeli derste öğrencilere kriptografinin nasıl bir çalışma alanı olduğunu ve içindeki çarpıcı güzelliği göstermenin bile başarı olacağını düşünüyorum.

Derste kriptografinin güvensiz bir medyayı kullanarak nasıl güvenli haberleşme yapmayı sağlayabildiğinin yolları anlatılıyor. Anlatılan matematiksel kavramların başında kendisinin hesaplanması kolay fakat tersinin bulunması çok zor fonksiyonlar (tek yönlü fonksiyonlar) geliyor. Bu tip fonksiyonlar veri bütünlüğünün kontrol edilmesinde ciddi kullanım alanına sahipler. Bir veriyi bu tip bir fonksiyonla şifreleyip alıcıya göndermek ilk bakışta iyi fikir gibi görünse de bu veriden anlam çıkarmasını beklediğimiz tarafın da aynı zorluğu yaşayacağını düşünürsek şifrelemede neden kullanılamayacaklarını hızlıca anlayabiliyoruz. Burada imdadımıza tek yönlü fonksiyonların ilave bir bilgi kullanılarak kolayca geri döndürülebilen bir hali olan arka kapılı tek yönlü fonksiyonlar yetişiyor. Bu tip fonksiyonlar bu ilave bilgiyi (anahtar) bilen taraf için kolayca geri döndürülebilirken, bilmeyen taraflar için geri döndürülemez fonksiyonlar olarak tanımlanıyorlar.

Arka kapılı tek yönlü fonksiyonlar kriptografide çok önemli bir yere sahipler. Şifrelemede kullanılan anahtar sadece yetkili taraflarda bulunduğu sürece hangi şifreleme yönteminin kullanıldığının bilinmesi bile bir tehlike oluşturmuyor çünkü fonksiyonlar ancak bu anahtar sayesinde geri döndürülebiliyorlar. Şifreleme ve deşifreleme işlemlerinde aynı anahtarın kullanıldığı bu simetrik kriptosistemlerin önemli algoritmaları derste en basitlerinden daha karmaşık olanlarına doğru anlatılarak kriptografideki gelişimin gözlemlenmesi sağlanmaya çalışılıyor. Elbette konu ikinci dünya savaşında Almanya'nın hesaplarını bozan ve hepimizin kaderinin değişmesinde rolü olan Alan Turing'e, onun çalışmalarına ve hazin sonuna geliyor. Bu aşamada öğrenciler tek kullanımlık şerit haricindeki tüm şifreleme yöntemlerinin kırılabilir olduğu gerçeğiyle yüzleşmiş oluyorlar.

Simetrik şifreleme çok başarılı çalışmasına rağmen çok ciddi bir sorunu da beraberinde getiriyor: anahtarın karşı tarafa ulaştırılması. İletişimde bulunulan kanal güvensiz olunca anahtarı deşifrelemeyi yapmasını istediğimiz tarafa ulaştırmak önemli bir problem haline geliyor. 1970'lerin sonuna dek bu sorunun üstesinden gelmenin anahtarı bir başka güvenli iletişim kanalı kullanarak göndermekten başka yöntemi bulunmuyordu. Kriptografide önemli bir kilometre taşı ve radikal bir fikir olan şifrelemede başka, deşifrelemede başka anahtar kullanılması fikriyle bu sorunun üstesinden gelmek hedefleniyor. Açık anahtarlı şifreleme olarak adlandırılan bu yöntem ile önerilen birbiriyle ilişkili bir anahtar çifti üretilmesi ve şifrelemede kullanılacak anahtarın herkesin ulaşabileceği şekilde bulundurulması oluyor. Bu harika fikir sayesinde açık anahtarını bildiğiniz birine elinizdeki düz metni şifreleyip gönderip sadece onun bu metni deşifreleyebileceğine inanmanız mümkün oluyor.

Şifreleme yapan tarafın deşifreleme yapamaması elbette çok iyi bir fikir ama bu nasıl gerçekleşecek sorusu da önemli. Sonuçta yapmak istediğimiz şey birbiriyle ilişkili iki anahtar üretmek ve bunların sadece birini bilen bir tarafın diğerini hesaplayamamasını sağlamak. Burada hesaplayamaması derken elbette anlamlı bir zamanda bu hesabın sonuçlanmasını kastediyoruz. Günlük hayatta kullandığımız büyüklükteki sayılarla bu sorunun üstesinden gelmek mümkün değilken ölçek büyüyünce kolay diye düşündüğümüz bir çok işlemin geri döndürülmesinin çok zor olduğunu görüyoruz.

Bu yöntemlerin en çok bilinenlerinden biri olan RSA, 1977 yılında üç büyük bilim insanı tarafından büyük sayıların asal çarpanlarına ayrılmasının verimli bir zamanda yapılamayacağı varsayımından yola çıkılarak oluşturuluyor. Bu yazıda matematiksel alt yapısına değinmenin imkanı yok ama p ve q gibi iki büyük asal sayıyı çarpmak fevkalade kolayken onların çarpımından oluşan (=pxq) sayısını asal çarpanlarına ayırmak geri döndürülmesi çok fazla işlemci zamanı alacak bir işlem olarak karşımıza çıkıyor. Asal sayılar matematikçilerin yüzyıllardır çalıştığı alanlardan biri olmasına rağmen bir asal sayı formülü bulunabilmiş değil. Hatta bu konuda bir ümit de yok benim bildiğim. Büyük sayıların asal çarpanlara ayrılması problemini kullanan Rabin Kriptosistemi gibi başka kriptosistemler de mevcut. Derste bu noktaya gelindiğinde öğrencilerin çarpma gibi basit bir işlemin sayılar yeterince büyük olduğunda geri döndürülemez bir işlem olduğunu görüp büyülenmeleri hedefleniyor ama bu nadiren olan bir şey genellikle.

Açık anahtarlı kriptografide kullanılan çözülmesi zor tek problem elbette asal çarpanlara ayırma değil. Örneğin Merkle-Hellman kriptosistemi alt küme toplamı problemine dayanıyor ve alt küme toplamı problemi de ancak kümenin eleman sayısı çok fazla olduğunda bir problem olarak karşımıza çıkıyor.

Eliptik eğriler de kriptografik olarak önemi olan konular arasında olduğundan onlardan bahsetmeden geçmek mümkün değil. Öğrenciler eliptik eğriler hakkında neredeyse hiç bir şey bilmiyor olmalarına rağmen eliptik eğri kriptografisinin kavramlarını kolayca anlamaları mümkün oluyor.

Açık anahtarlı kriptografi sadece simetrik şifrelemede kullanılan anahtarın taraflar arasında değişimini sağlamakla kalmıyor elbette. Simetrik şifreleme kullanılırken mevcut olmayan elektronik imza kavramı da açık anahtarlı şifreleme ile hayatımıza giriyor. Elektronik imza ile ıslak imzada bulunan inkar edilemezlik, taklit edilemezlik, veri bütünlüğünün kontrolü [2] gibi kavramlar elektronik belgeler için de kullanılabilir hale geliyor. Dersin bu aşamasına gelindiğinde bütün öğrencilerden eposta adresleri için oluşturdukları elektronik imzaları sunuculara yerleştirmeleri ve bu imzaların parmak izlerini sınıftaki arkadaşları ile paylaşmaları isteniyor. Bu anahtar imzalama partisi sayesinde elektronik imzalar güvenli bir şekilde paylaşılmış oluyor.

Açık anahtarlı şifreleme denilince Diffie-Hellman anahtar değişim protokolünün şaşırtıcı algoritması ile herkesin erişebildiği bir medya üzerinden sadece gönderenin ve alanın bildiği bir sırrın oluşturulmasını da anlatmadan geçmek mümkün değil [1]. Renklerle bile kolayca anlatılabilen bu algoritmanın akıl dolu bambaşka bir güzelliği mevcut olsa da bundan etkilenen çok fazla olmuyor.

Simetrik ve açık anahtarlı kriptografinin çeşitli algoritmalarını görmüş olan öğrenciler artık kendilerini şaşırtacak bir şey kalmadığını düşünürken kriptografide sorunlar ve çözümler tükenmiyor. Dönem başından itibaren iletişim kanalının güvensiz olduğu ve bu kanalı dinleyen üçüncü taraflar olabileceği anlatılırken bu iletişimi dinleyen pasif bir dinleyici olup olmadığı nasıl anlaşılır sorusu gündeme geliyor artık. Veri iletişimini pasif olarak dinleyen, müdahalede bulunmayan birinin fark edilmesi klasik kriptografik yöntemlerle mümkün değilken kuantum kriptografi bu soruna da bir çözüm getiriyor. Lise ve üniversite eğitim hayatında kuantum mekaniği ile ilgili hiç bir şey görmemiş bilgisayar mühendisliği öğrencilerine Heisenberg'in belirsizlik teoremini anlatacak kadar teorik bilgi verdikten sonra BB84 anahtar değişimi algoritmasının gerçek üstü gibi görünen etkileyici algoritması anlatılıyor.

Yaklaşık 30 yıllık bir geçmişi olan BB84 gözlem yapanın gözlediğine müdahale ettiği gerçeğine dayanıyor. Sadece kriptografi için değil sosyal olarak da çok geniş etkileri olan Heisenberg'i bile hayatında hiç duymamış olan öğrencilerin BB84'ü anlayıp etkilenmeleri elbette hiç kolay olmuyor.

Artık görülecek her garipliği gördük diyen öğrencilere son olarak deterministik olmayan kriptosistemlerin de varlığını göstererek kriptografinin büyük resmini görmelerine yardımcı olmayı hedefliyoruz. Deterministik kriptosistemler aynı anahtarı kullandıkları sürece bir düz metni her seferinde aynı şifrelenmiş metne dönüştürürken probabilistik kriptosistemler aynı anahtarı kullanmalarına rağmen her seferinde farklı şifrelenmiş metinler üretmeleriyle bambaşka bir güzelliğe sahipler. Anahtar üretimi sırasında bütün kriptosistemler rasgelelik içerseler de probabilistik açık anahtarlı kriptosistemlerin şifreleme işlemi sırasında da rasgelelik içermesine rağmen geri döndürülebilir olmaları ilk bakışta şaşırtıcı geliyor ama Blum-Goldwasser, Goldwasser-Micali ve Okamoto-Uchiyama gibi algoritmaların detaylarıyla konunun anlaşılması hedefleniyor.

Kriptografinin bu geniş yelpazesi ve gerektirdiği yoğun matematik göz önüne alındığında bir dönemlik bir ders ile öğrencilere kazandırılabilecek şeylerin oldukça sınırlı olduğunu söyleyebilirim. Ben bu dersi düzenli takip eden bir öğrencinin veri şifreleme, deşifreleme, imzalama gibi kavramlar hakkında bilgi sahibi olmasını ve ileride bu konular hakkında araştırma yapmak istediğinde hedefine kolayca ulaşabilmesini hedefliyorum. Hiç kriptografi ile ilgili çalışmayacak bir bilgisayar mühendisinin bile veri iletişimi, saklanması gibi konularda nelerin yapılabilir, nelerin yapılamaz olduğu konusunda bir vizyonunun olması gerektiğini düşünüyorum. Neredeyse bütün web trafiğinin https üzerinden aktığı düşünülürse bu protokolün nasıl çalıştığını [3] bilmeyen bir bilgisayar mühendisi olmaması gerektiğini düşünüyorum.

Giderek daha yaygın kullanım alanları ortaya çıkan blokzincir kavramı ve uygulamaları da anlatılarak ders dönemi sonlandırılmış oluyor.

Son olarak; yazıda İngilizce wikipedia'ya bir çok bağlantı var. Bu maddelerin büyük bölümünün Türkçe wiki'de ya hiç karşılığı yok ya da çok kısa maddeler olarak bulunuyorlar. Her dönem kriptografi dersini alan öğrencileri bu ve benzeri maddeleri yazmaları/genişletmeleri konusunda teşvik ediyorum. Umudum odur ki bir kaç yıl sonra kriptografinin temel kavramlarının tamamı Türkçe wikipedia'da da mümkün olduğunca detaylı bir şekilde okunabilecek hale gelecektir.

[1] https://www.nyucel.com/2019/07/guvensiz-kanaldan-anahtar-degisimi.html
[2] https://www.nyucel.com/2017/02/sha1in-krlmas-ne-anlama-geliyor.html   

[3] https://www.nyucel.com/2017/05/https-nasl-calsyor.html

4 Mayıs 2013 Cumartesi

Muğla Özgür Yazılım seminerinin ardından

26 Nisanda Enis Karaarslan'ın davetlisi olarak Muğla Üniversitesine Linux ve Özgür Yazılımlar hakkında konuşmak için gittik. Bir ay sonra meslektaş olacağımız öğrencilerim Serhat Rıfat Demircan ve Ahmet Can Kepenek, üçüncü sınıfta ilk konuşmasını yapan Ebru Akagündüz ve ikinci sınıf öğrencilerimden Esra Altıntaş ile birlikte güzel iki gün geçirdik.


2007'de Ulaknet Çalıştayına ve 2010'da Akademik Bilişim Konferansına katıldığımda gittiğim Muğla'yı ilk defa Enis sayesinde etraflıca gezme fırsatım oldu. Doğal güzellikleriyle gerçekten görülmeye değer bir şehir Muğla. Üniversitenin fiziksel şartları da bir arada değerlendirildiğinde Muğla'nın bana yaşanabilir bir şehir olarak göründüğünü söylemeliyim.

Yaklaşık dört saat süren konuşmamız sırasında 80 kişilik salon neredeyse tamamen doluydu. Ben ilk olarak Linux ve özgür yazılımlar hakkındaki büyük resmi çizmeye çalıştım. Daha önce defalarca aynı konuda konuştuğum için dinleyiciler için sıkıcı bir konuşma olmadığını tahmin ediyorum. Benden sonra konuşan Serhat ve Ahmet daha önce iki Akademik Bilişim Konferansında dörder günlük python eğitimi verdiklerinden oldukça tecrübeli konuşmacılar olarak özgür yazılım projelerine katkıda bulunmanın yollarından bahsettiler. Daha sonra ilk konuşmasını yapacağı için çook heyecanlı olan Ebru ve Serhat örnekler üzerinden Gnome bugzillasından birer hatayı nasıl kapattıklarını, sürecin nasıl işlediğini anlattılar. Her ikisi de yaptıkları işleri çok samimi bir anlatımla kendi akranları olan dinleyicilere aktardılar. Son dakikaya kadar heyecandan eli ayağı titreyen Ebru kendi beklentisinin de üzerinde bir canlılıkla konuştu. İkinci sınıf olan Esra bu sefer konuşmadı ama bundan sonraki etkinliklerde o da konuşmacılar arasında olacak.

Bizi dostça misafir eden Enis hocaya bütün ekip adına teşekkür ediyorum. Ahmet, Esra ve Serhat'a da kendileriyle gurur duyduğumu buradan da yazmış olayım.

izlediklerimden öğrendiğim bir şeyler var

İzlediğim ilk büyük konser 1990'ların başında Ankara'da Zülfü Livaneli konseriydi. Henüz Sovyetler Birliğinin olduğu zamanlardan bah...