İzleyiciler

Egemen Taşkın

2 Şubat 2009 Pazartesi

Pardus Pisi yazıcı

Şu sıralar pyqt ile ilgileniyorum. Localde bulunan pisi paketlerini yedeklemek istediğim zaman sürekli aynı işlemi yapmak bıkkınlık getiriyor. O yüzden küçük bir program yazmaya karar verdim. Program, localde bulunan pisi paketlerini seçtirip cd/dvd'ye yazdırmanızı sağlıyor. Programı çalıştırmak için "http://egemenproject.googlecode.com/files/pisox.tar.gz" adresinden indirip dizin içerisine geçtikten sonra "python formgui.py" yazmanız yeterli olacaktır. 1-Paketleri listelerken 2-Seçilen paketleri yazdırmaya hazırlanırken

12 Ekim 2008 Pazar

Portakal Blog Karambası

   İlk karambamdan sonra blogumuzu takip etmek için bir karamba daha hazırlamanın faydalı olcağını düşündüm. Bu karamba ile blog sayfasına sık sık bağlanmak yerine buradan kolay bir şekilde takip edebileceğim.Yanlız bu karambayı hazırlarken sitemizde bulunan RSS feedlerimizden veri okumanın çok kolay olacağını düşünerek başladım fakat feed dosyalarımız xml kurallarına uymadığı için okuma yapamadım ve böylece xml parse eden modülleri kullanamadım.Onun yerine Python'un re isimli kalıpları bulmamı sağlayan bir modül ile verileri elde etmeyi başardım.İnsan iconuna çift tıklanıldığı takdirde ilgili kişiye ait blog sayfasını açarken sayfa iconuna çift tıklanıldığı zaman ilgili yazıya gitmekte.

  Yazdığım widgeti kurmak oldukça basit;
1-ilk önce indirilen(burdan download edebilirsiniz) tar.gz'yi bir klasöre açıp terminalden cd komutu ile o klasöre geçtikten sonra
2-python setup.py yazıp enter'e basacaksınız
3-Portakal_Blog_Karamba klasörümüzde Portakal_blog.theme diye bir dosya çıkacak ona çift tıkladıktan sonra ekranımızda karambamız belirecek..


Faydalı olması dileğiyle...

9 Ekim 2008 Perşembe

Portakal Karmabası

Bayram tatilinde canım biraz sıkılınca kendimce birşeyler yapayım dedim:D ve Portakal'a özgü hoş bir Karamba ortaya çıktı. Karamba nedir? diye sorarsanız, Karamba; KDE desktop üzerinde kolay bir şekilde widgetler oluşturmamızı sağlayan bir araç.

Yazdığım widgeti kurmak oldukça basit;
1-ilk önce indirilen(burdan download edebilirsiniz) tar.gz'yi bir klasöre açıp terminalden cd komutu ile o klasöre geçtikten sonra
2-python setup.py yazıp enter'e basacaksınız ve sonrasında doldurmanız gereken birkaç şey ortaya çıkacak(Mail hesabınızı, şifre vs.)
3-Portakal_karamba klasörümüzde Portakal.theme diye bir dosya çıkacak ona çift tıkladıktan sonra ekranımızda karambamız belirecek..
Umarım beğenirsiniz...Bu arada, Blogları başlıklar halinde listeleyen bir eklenti yapmak mantıklı geliyor. Çünkü sürekli siteye girip yazıları ve içeriklerin hepsini görmek yerine karambamızdan sadece blog başlıklarını görmek ve ilgi duyulan yazıya erişmek daha mantıklı geliyor. Bir sonraki aşamada onu da yapmayı planlıyorum.
Karamba ile ilgili daha fazla bilgi:http://en.wikipedia.org/wiki/Karamba
Aşağıda 2 adet ekran görüntüsü bulunmakta. İlki masaüstü bilgisayar üzerinde diğeri ise dizüstü üzerinde çalışan karambamız.


20 Eylül 2008 Cumartesi

Simetrik Kriptolama ve kullanım alanları

Şu sıralar Emre'nin tavsiye ettiği Ağ güvenliği adlı bir kitabı okumaktayım. Şimdiye kadar okuduklarım bana baya bir ilgi çekici geldi o yüzden öğrendiklerimi sizlerle paylaşmak istedim. Kriptografik fonksiyon çeşitleri 3 ana başlık altında gruplandırılabilir. Bunlar;


1-Secret Key

2-Public Key

3-Hash


1-Secret Key Kriptografi

Bu kriptolama yönteminde sadece bir adet anahtar kullanılır. Yani, şifrelenmek istenen veri, anahtar ile şifrelenir ve ortaya yine şifrelemek istediğimiz veri boyutunda şifreli bir veri ortaya çıkar. Şifre çözümünde ise yine aynı anahtar ile şifrelenmiş veri çözümlenerek veri elde edilir.


(Düz metin,anahtar)-----------------Şifreleme------>Şifrelenmiş metin

(Şifrelenmiş metin,anahtar)-----Deşifreleme----->Deşifrelenmiş metin


Secret Key kriptografi aynı zamanda konvansiyonel kriptografi ya da simetrik kriptografi olarak da bilinmektedir.


Secret Key Kriptografinin güvenlikde kullanım yöntemleri

a)Güvenli olmayan kanallar üzerinden veri iletimi

Veriyi gönderirken hattın dinlenmesini engellemek neredeyse imkansızdır. Örneğin,bir telefon konuşmasına gizlice bağlantı kurulabilir Ya da bir ağ üzerinde gönderilen veri yetkisi olmayan istasyonlar tarafından alınabilir.

Fakat eğer ki güvenli iletişim yapmak isteyen 2(yada daha fazla) kişi ortak bir anahtarı kullanırsa, hattın yine dinlenilmesi olasılığına rağmen veri güvenli bir şekilde taşınır. Gönderici iletmek istediği veriyi ortak anahtar ile şifreler ve alıcı bu anahtar ile veriyi deşifre eder. Sistemi dinleyen kişi olsa dahi ancak şifrelenmiş veriyi elde etmiş olur. Bu kriptografinin klasik kullanımıdır.

b)Güvenli olmayan medya aygıtlarında güvenli veri depolama

Eğer kimsenin görmesini istemediğiniz bir bilgiyi güvenli bir şekilde saklayacaksanız bilgiyi, anahtarı hatırladığınız müddetçe bir anahtar ile şifreleyerek saklamış olursunuz. Elbette, anahtarı unutmak veriye elveda demenize eşdeğerdir bu yüzden anahtar titizlikle saklanmalıdır.

c)Doğrulama

Hani ajan filmlerinde vardır ya hep,2 ajan birbirlerini tanıması için gizli birkaç cümle ya da parola verilir ve bu şekilde birbirlerini doğruladıktan sonra iletişim başlar. Fakat 3.kişinin şifreyi öğrenmesi sonucu büyük bir güvenlik sorunu meydana gelir. Bu sorunu Secret key kriptografi yöntemiyle şu şekilde çözebiliriz;Örneğin Egemen ve Şükrü bir adet ortak anahtara(Bu anahtarın adı K olsun) sahipler ve birbirlerinin gerçek Egemen ve Şükrü olduklarından emin olmak istiyorlar. Egemen ve Şükrü rastgele bir sayı üretirler(Egemen'in ürettiği numara Re,Şükrü'nünki Rş olsun) ve doğrulama aşağıdaki gibi devam eder;


Egemen ______________________Şükrü

Re---------------------------------------------->

<-----------------------------------------------Re, K anahtarı ile şifrelenir

<-----------------------------------------------Rş

Rş, K anahtarı ile şifrelenir------------------------------------------------->


Yukardaki şemada da görüldüğü üzere,Egemen karşıdaki kişinin Şükrü olduğunu anlama için Re'yi Şükrü'ye gönderiyor. Şükrü Re'yi alıp ortak olan K anahtarı ile şifreleyip geri gönderiyor. Egemen, Şükrü'nün gönderdiği şifrelenmiş veriyi anahtar ile açıp Re'ye eşit olup olmadığını kontrol eder. Şükrü de aynı şekilde karşıdaki kişinin Egemen olup olmadığını anlayabilir. Fakat akıllara şöyle bir fikir gelebilir;Bu iletişimi dinleyen 3.bir kişi olursa iletişim güvensiz olmaz mı?Bu sorun şu şekilde çözümlenebilir;Örneğin,yine aynı örnek üzerinden diyelim ki Egemen Şükrü ile birbirlerini doğrulamak isterlerken Kutay bu iletişimi dinliyor ve Şükrü'ye kendini Egemen olarak tanıtmaya çalışıyor ve bunun için de Şükrü'ye bir rastgele sayı ya da bir değer göndererek kendisi için şifrelemesini istiyor ve eline K anahtarı ile şifrelenmiş bir veriler elde ediyor. Bu durumda Kutay'ın K anahtarını elde etme gibi bir şansı doğduğu için anahtarın çok uzun olması önem taşıyor.


d)Sağlamlık Kontrolü

Bir Secret Key şemasından gönderilen mesajla ilgili sabit uzunlukta kriptografik bir checksum üretilebilir. Peki nedir bu checksum?Sıradan bir cheksum bir mesajın bozulmasına karşı koruyan bir yöntemdir. Örneğin, Egemen Şükrü'ye bilgi yolluyacak. Bunun için Egemen gönderdiği mesajın başına gönderdiği bilginin byte uzunluklarını da beraberinde gönderir. Şükrü aldığı mesajı 2'ye böler. İlki bildiğimiz checksum, 2.si ise verinin kendisidir. Verinin byte uzunluklarını toplar ve checksum değeriyle karşılaştırılır. Doğruysa veri bozulmadan gelmiş demektir. Checksum en basit şekilde bu biçimde çalışır. Fakat, Kutay yine araya girip mesajda bazı değişiklikler yapabilir. Mesajda yapılan bu değişikliği engellemek için, bir secret checksum algoritması gereklidir, öyle ki Kutay algoritmayı bilmediği için mesaj için doğru checksum'ı hesaplayamaz. Mesajı bir anahtar ile şifreleme sonucunda algoritma sabit uzunlukta bir adet doğrulama kodu(MAC-Message Authentication Code) üretir. Kutay mesajı değiştirmeye kalkışması anahtarı bilmesi gerekir ama bilmediğinden dolayı MAC'i tahmin etmeye çalışır ama tipik bir MAC 48 bit uzunluğunda olduğu için tahmin etme olasılığı 280 trilyonda birdir.

13 Eylül 2008 Cumartesi

PYIK ve Donanımsal Güvenlik

Bilkent Hidromobil takımında yaptığım sıradan 7 segmentli ekranların bulunduğu bir nevi ufak araç bilgisayarı bize yetmedi hem de görünüm bakımından bize pek tat vermedi.Biz de yeni çıkan eepc serilerinden birini alıp içine bir linux dağıtımı kurduktan sonra çevresel arabirimlerden(sensörler,GPS vs) bir mikrodenetleyici ve usb aracılığıyla bilgiyi nasıl elde edip hoş bir arayüz tasarlarızı düşündük.Önümüze çıkabilecek en büyük engellerden birisi de bir programlama dilini kullanarak USB'den veri okuyup göndermek.Aslında komplex bir iş fakat uzun araştırmalar sonucunda Microchip firmasının PIC18 serisi ürünlerinin USB portlarının bulunduğu bilgisini elde ettik fakat bu durum bilgisayar tarafında USB'den bilgi okuma/gönderme gerektiren kütüphaneleri elde etmekte sıkıntı olacağını düşündük.Bu işi seri portla yapsaydık ne kadar kolay olurdu derken FTDI çipleri ile tanıştık. FTDI çipleri aslında çokça kullanılan çiplerden ve biz bu çipi mikrodenetleyici ve bilgisayarın USB portları arasında kullanmayı düşünüyoruz.Peki bu bize ne sağlayacak?Her iki tarafta da seri porttan bilgi okur/yazar gibi yapıp aslında USB protokolunu kullanmamızı sağlayacak.Böylelikle iki tarafta da işimiz çok kolaylaşmış olacak. Hidromobil ile ilgili bazı fikirler üretirken biz bu FTDI/Mikrodenetleyici ikilisini güvenlik adına kullanabilirmiyiz gibi bir fikir oluştu, peki nasıl?Mesela şu anda arkadaşlarım ile üzerinde çalıştığımız PYIK(Python ve Django ile insan kaynakları yönetim projesi) projesinde,proje ile ilgili ayarların saklandığı settings.py isimli dosyamızda Django'nun oluşturduğu bir secret key bulunmakta. Django bunu büyük ihtimalle kriptolama işlemlerinde kullandığını düşünüyorum çünkü kimseyle bu şifreyi paylaşmamamız yönünde uyarısı bulunmakta, aynı zamanda biz bu secret key'i kullanıcı hesabı aktifleştirmede de kullanıyoruz fakat secret key'i bilgisayarın herhangi yerinde saklamak yerine mikrodenetleyicide saklamak ve kripto ile yapılan kontrolleri yine mikrodenetleyicinin yapması yönünde. Örnegin biz PYIK projesinde;kullanıcı aktivasyonu için mail ile bir link yollayacağız, www.pyikonline.net/username=egemen&activation=527d7b1913b9536011b942add7f93151. Bu activation nedir acaba? diyenleriniz olabilir.Activation md5 ile kullanıcı isminin yani bu örnekte egemen textinin kriptolanıp bir kere daha bizim secret key ile kriptolanma sonucu oluşan bir text. Kullanıcı bu linke tıkladığında kullanıcı ismini ve activation anahtarını alıp,aldığımız kullanıcı ismini md5 ile kriptoladıktan sonra settings.py içerisindeki secret key ile bir kere daha kriptolayıp kullanıcıdan gelen activationu karşılaştırıp ona göre kullanıcıyı aktif yapacak.İşte bu noktada sisteme sızılma halinde secret keyimiz elde edilmiş olacak bu da bize çeşitli sorunlar teşkil edebilir.Fakat bu işi mikrodenetleyici ile yapsaydık şöyle olurdu; Mikrodenetleyiciye hesabı aktif edilmek istenen kullanıcının biraz önceki örnekteki gibi activation anahtarı ve aktive olmak isteyen kullanıcının adı gelecek.Mikrodenetleyici içerisinde kullanıcı adı, md5 ile kriptolanıp ardından secret key ile bir kere daha kriptolanıp activation ile karşılaştırılacak.Eğer ki sonuç doğru ise 1 yanlış ise 0 döndürecek.Böylelikle secret key'i donanımsal bir koruma altına almış olacağız fakat bunun da her güvenlik sisteminde olduğu gibi bazı dezavantajları da var elbette, örneğin hız gibi; mikrodenetleyiciler genelde 20-100mhz civarı gibi hızlarda çalıştığı için sistem başlı başına yavaşlar ama sonuçta hem çok ucuz hem de güvenli bir sistem elde etmiş oluruz:)Sağolsun Emre ile kriptolama yöntemleri ile ilgili bazı şeyleri konuştuktan sonra birçok işlemi mikrodenetleyici ile gerçekleştirebileceğimin farkına vardım. Bu konuda daha çok bilgi sahibi olup farklı fikirlerimi gerçekleştirmek istiyorum.Tabi bunun için çokça okumak gerekiyor:)