- Üniversite hayatını sadece okuldan ibaret görmeyin. Mezun olduktan sonraki hayatınız da sadece işten ibaret olmayacak. En çok kitap okuduğunuz, müzik dinlediğiniz yıllar üniversite yıllarınız olsun. Üniversitelerde bir sürü öğrenci topluluğu var, ilginizi çeken birine katılın. Beğenmezseniz başkasına katılırsınız. Sosyal faaliyetleri, konserleri küçümsemeyin pişman olursunuz sonra.
- Lisans eğitimi dört yıl ve bu yeterince uzun bir süre. Üniversiteye gelene kadar bilişimle son kullanıcıdan fazla ilgilenmemiş olmak ciddi bir kayıp sayılmaz.
- İşin doğrusu bölüm pek kolay değil. Aslında zor da değil ama lise eğitiminde verilenlerden farklı bir düşünce tarzı gerektirdiğinden [13] öğrenciler zorlanıyorlar diye düşünüyorum. İlkokul birinci sınıftan itibaren sonuç bulmaya ve bu sonucu şıklar arasından seçmeye odaklanmış öğrenciler için yöntem üzerinde düşünmek en zor alışılan şey oluyor. Bu aşamayı halledince gerisi daha kolaylaşıyor. Burası en çok üzerinde çalışılması gereken alanların başında geliyor ve elbette lise eğitiminde değiştirilmesi gereken çok şey var.
- Her bölüm için geçerli olan tavsiye bilgisayar mühendisliği için de geçerli; düzenli çalışmak gerekiyor. Ödevler ve projeler var sürekli. Azıcık savsaklayınca [12] bile ipin ucu kolayca kaçabiliyor.
- Mezun olacağınız yıl sizinle birlikte 10000'den fazla bilgisayar mühendisi mezun olacak. Başka bölümlerden mezun olmuş ve sizinle aynı işleri yapmaya talip olanların sayısı da bundan aşağı olmayacak. Rekabet sadece yurt içindekilerle de sınırlı değil, aynı iş için dünyanın her tarafından, mesela Hindistan'dan, insanlarla rekabet edeceksiniz. Bunun için bölümde anlatılanların haricinde şeyler biliyor olmanız lazım. Onları mutlaka iyi biliyor olmanız lazım ama zaten neredeyse bütün rakipleriniz biliyor olacak. Aynı işi yapabilecek bu büyük kalabalık içinde bir adım öne çıkabilmek için derslerden fazlasına çalışmanız gerekecek.
- Öğrenim hayatınız boyunca okuyacağınız kaynakların büyük bir kısmı İngilizce olacak. Sorularınızı yeri gelecek uluslararası listelere/forumlara sormanız gerekecek. Meslek hayatınızda da mutlaka İngilizce iletişim kurabilmeniz gerekecek. Onun için öncelikle İngilizce çalışın [0].
- Sizin okulunuzda okutulmuyor bile olsa dünyanın dört bir tarafında internet üzerinden ulaşabileceğiniz çevrimiçi kurslara ve eğitimlere katılma fırsatınız var. Bu fırsatları değerlendirin [1].
- Her dersten en yüksek notu almanız gerekmez ama derslerde başarılı olmanın da bir yere kadar önemi var [6].
- Okulu bitirdiğinizde hazırladığınız cv'den önce yaptıklarınıza bakacaklar [2]. Bunun için internette yazdığınız her şeyi kendi adınızla yazın. Bu hem yaptıklarınıza bir aramayla ulaşılmasını sağlar, hem de sizi bir saçmalığı yazmadan önce ikinci bir kez düşünmeye teşvik eder. Salak saçma takma isimler kullanmayın. Kendi adınızla yazamadığınız bir şeyi hiç yazmamak iyi fikir olabilir.
- Adınızı soyadınızı içeren bir alan adı satın alın ve kullanın. 10$'ın altında yıllık ücret ödeyip böyle bir alanı almak mümkün. Daha az kullanılan alan adı uzantılarını yıllık 1$'ın altında bile almak mümkün.
- Hala bir tane yoksa bir blog adresi alın ve yazın. Çoğunluk başlangıçta günlük girdilerini ansiklopedi gibi düşünüyor. Elbette ipuçlarını, sorunları, çözümleri yazmak faydalı ama sadece bunlarla sınırlı yazmanız gerekmez. Hangi konuda yazmak istiyorsanız yazın, fikirleriniz olduğunu zaten biliyor insanlar.
- Öğrenim hayatınız boyunca en çok başvuracağınız kaynaklardan biri wikipedia olacaktır. Burada içerik gönüllüler tarafından geliştiriliyor. Siz de bir hesap açın ve mevcut maddeleri iyileştirin, yeni maddeler ekleyin [3].
- Mutlaka yazılımla ilgili ödevleriniz olacak, takım arkadaşlarınızla birlikte çalışacaksınız. Hem bunlarda kullanmak için hem de kendi projelerinizi barındırmak için bir github hesabı açın. Bu hesabı çok özenli kullanın. Yarım bırakılmış projelerinizle, uydurma gönderim mesajlarınızla [4] bir çöplüğe dönüştürmeyin burasını.
- Bir transifex [5] hesabı alın ve yazılımların çevirilerine katkıda bulunun. Hepimiz Türkçe içerik az diye şikayetçi olurken bunu arttırmaya çaba göstermemek olmaz. Programların çok büyük kısmı sizin kolaylıkla katı verebileceğiniz durumdalar. İngilizcenizin gelişmesine katkıda bulunacağı gibi yazılımların çevirilerine dört yılda hatırı sayılır katkı vermiş olacaksınız.
- İlgi alanınızdaki derneklerden, gruplardan birine dahil olun. Başlangıçta ne yapıldığını görürsünüz, zaten ağır bir yükü de olmaz. Sadece internette örgütlenen gruplar da var, onların da üyesi olmanın, imkan buldukça toplantılarına katılmanın büyük faydasını görürsünüz.
- Okul dönemleri dışında bir çok eğitim etkinliği oluyor, bunlardan mümkün olduğunca fazlasına katılın.
- Takviminize uygun olursa mezun olmadan bir kere bilgisayar mühendisliği öğrencileri kongresine katılın. Etkinliğin içeriğinden çok ileride meslektaş olacağınız arkadaşlarla tanışmış olursunuz.
- Henüz tanışmadıysanız özgür yazılım dünyası ile tanışmak size yepyeni ufuklar açacaktır. Bir yazılımın özgür olması onun kullanımının, dağıtılmasının, değiştirilmiş halinin dağıtılmasının özgür olması ve kaynak kodunun da erişilebilir olmasını sağlar. Özgür yazılımlar sayesinde daha önce keşfedilmiş şeyleri yeniden keşfetmek zorunda kalmayacağınız gibi onlara eklemeler yapabilir, hatalarını düzeltebilir yani yazılım ekosisteminin bir parçası olabilirsiniz. Özgür yazılım dünyası sizi memnuniyetle kabul edecektir. Gönüllüler tarafından yürütülen projelere katkı vermeden önce Nasıl Akıllıca Soru Sorulur [7] belgesini okumanın çok faydasını görürsünüz.
- Google tarafıdan her yıl düzenlenen Summer of Code [8] etkinliği büyük özgür yazılım resminin bir parçası olmanıza imkan veren harika bir fırsattır. Birinci sınıf öğrencisiyken işler o kadar kolay olmayabilir ama bir hedef [9] olarak önünüzde bulunması gerekir diye düşünüyorum. Her yıl ülkemizden de 10-15 kişi kabul ediliyor [10] bu etkinliğe, biri siz olabilirsiniz.
- Lisans eğitimi bitmeden iki yaz stajı yapmanız gerekecek. Bu stajları meslek hayatını tanımak için bir fırsat olarak görün [14]. Yapmış görünmek için bir yerde staj yapmayın. Bazen staj yapılacak yerin adının fiyakalı göründüğü için seçildiğini görüyorum. Bence adı çok bilinen ama gittiğinizde elinizi hiç bir şeye dokunamayacağınız, size bir şey katmayacak bir yerde staj yapmak hiç de iyi bir fikir olmayacaktır. Staj yerini ayarlama işini son dakikaya bırakmayın. Okulda hiç adı geçmeyen, derslerde anlatılmayan şeyleri staj yaptığınız yerde görmek size farklı bakış açıları kazandıracaktır.
- Son sınıfta yapacağız bitirme projesini [11] ciddiye alın.
24 Eylül 2013 Salı
Bilgisayar mühendisliği öğrencilerine tavsiyeler
15 Mayıs 2013 Çarşamba
Bitirme projesi
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 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.
- 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 n (=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
13 Nisan 2012 Cuma
Ders ödevlerini teslim almak için bir yöntem olarak Vikipedi
Üniversitede ödevler temel olarak iki farklı kategoride veriliyor. Uygulamalı ödevlerde ya bir soruyu/sorunu çözmeleri ya da kendi yaratıcılıklarını kullanmaları isteniyor. Bu tip ödevleri değerlendirmek dersi veren için problem olmuyor genelde. Bir konunun araştırılıp yorumlaması istenilen ödevlerin değerlendirilmesi genellikle çok zor oluyor.
Kağıtta alınan ödevler en zor değerlendirilenleri. Onlarca sayfa yazıyı her öğrenci için ayrı ayrı okuyup, birbirinden kopya çekenleri bulmak, alakasız yerlerden aynen yazılmış yazıları ayırt etmek çok emek isteyen işler. Hepimiz öğrencilik yıllarında ödevin arasında Fenerbahçe-Galatasaray maçı anlatımı yazan birilerini duymuşuzdur. İşin doğrusu bu tip ödevlerin büyük çoğunun okunmadığını söylemek yalan olmaz.
Elektronik ortamda alınan ödevleri değerlendirmek için hazır araçlar var. Bir satırı kopyalayıp google'da aratmak bile kopyalanmış ödevleri bulmaya büyük ölçüde yardımcı oluyor. Bu tip ödevleri çok iyi hazırlayan öğrencileri gördükçe bunları başkalarıyla paylaşmak istiyor insan. Ama adı üzerinde ödev olarak hazırlandıklarından zamanla eskiyor ama güncellenmiyorlar. Hem aramalarda da çok gerilerde çıktığından hakettikleri kitlelere ulaşamıyorlar.
Tüm bunları bir araya getirince; yani ödev okumadan önce bir ön değerlendirmeden geçse, eskidikçe güncellense ve ihtiyacı olan önce onu okuyabilse denilince Vikipedi'den başka bir alternatif gelmiyor benim aklıma. Bir kaç yıldır uygulamalı olmayan ödevleri Vikipedi'ye bir madde girilmesi şeklinde veriyorum. Öğrenciler yazdıklarının herkes tarafından okunacağını bildiklerinden fener-galatasaray maçı yazamıyorlar, yazsalar bile çok kısa süre içinde vikipedi'den siliniyor. En önemlisi yapılan çalışma kalıcı oluyor, başkalarının da işine yarıyor.
Her aramada ilk baktıpğımız yer olan Vikipedi'ye daha çok destek olmamız lazım.
yapay zeka çağında hâlâ bilgisayar mühendisi olunmalı mı?
Yazıyı okumaya sabrı olmayanlar için kısaca söyleyeyim: kimse gelecekle ilgili tavsiye verecek bir şey bilmiyor. Önceden de bilmiyordu bugün...
-
İkinci gün sadece öğleye kadar süren çalıştayda iki oturum yapıldı. Bunlardan ilkinde daha önce üzerinde konuşulan sorunlar için katılımcıla...
-
Pardus ülkemizdeki en geniş özgür yazılım topluluğunu bir araya getirmiş bir projedir. Kitlelerin linux ve özgür yazılımla tanışmalarına ve ...
-
Dün özgürlükiçin forumlarında okuduğum konu doğru mu diye gidip yerinde gördüm. Çanakkale'ye bir buçuk ay önce gönderilmiş olan etkileşi...