Background Image

BLOG

DKHOS - Crypto 300 - Laptoptan fakslanan sahte rapor
17 Şubat 2018 CTF

DKHOS - Crypto 300 - Laptoptan fakslanan sahte rapor


Crypto 300 sorusu diğer sorulara nazaran ismi hem sorudan çok alakasız hem de aslında istenilen ipucunu veren bir soruydu. Sorunun ismi bütün olarak bakıldığında çok anlamsızdı, ancak bu bilinçli yaptığımız bir seçimdi. Bu sayede anlamdan çok baş harfler ile bir bağlantı kurup LFSR kısaltmasını sezdirmeyi amaçlamıştık. Zaten ilerleyen zamanda soruda kullanılan yapının LFSR olduğunu da ipucu olarak vermiştik. Soruda geçen bir diğer kritik nokta ise "Karakuzgun" kelimesiydi. Verilen şifreli metinlerin sonunda bu kelimenin geçtiğini de belirtiyorduk. Dikkat edilmesi gereken son şey ise 7 bit ASCII kullanılmış olmasıydı, buna göre bir dönüşüm yapılması gerekmekteydi.

Öncelikle LFSR dediğimiz yapı kabataslak bu şekilde,

Her tur bitler bir sağa kayarak belirtilen/seçilen konumdaki bitler XOR operasyonuna sokuluyor. Bu işlemlerin belli bir süre uygulanması ile de anahtarımızı oluşturabiliyoruz. Her LFSR'ın kulandığı bir polinom ve ilk durumunda içerisinde olan bir bit serisi vardır. LFSR'lar her ne kadar dışarıdan bakıldığında tahmin edilemez bir sonuç üretiyor gibi gözükse de aslında verilen belli uzunlukta bir LFSR çıktısından bu LFSR'ı oluşturan bir algoritma mevcut, Berlekamp–Massey algoritması. Kendisi ile ilgili detayları şuradan okuyabilirsiniz, 

http://www-users.math.umn.edu/~garrett/students/reu/MB_algorithm.pdf

Buradan sonra yapmamız gereken şey tüm bu parçaları birleştirmekti. "Karakuzgun"'u 7bit ASCII ile binary gösterime çevirip verilen şifreli metinlerin son 70  (7*10) karakteri ile XOR'lamak ve buradan elde edeceğimiz çıktıyı Berlekamp–Massey algoritmasına vermekti. Veirlen 3 şifreli metinin bir tanesinde "Karakuzgun" geçmiyordu ama diğer ikisinde bu işlemi gerçekleştirdiğimizde polinomu elde edebiliyorduk.

Bu işlemi internetten bir site bularak da gerçekleştirebilirdik veya kendi kodumuzu da yazabilirdik. Bunun sonucunda elde ettiğimiz polinomun kat sayıları (16,15,13,4) ve LFSR'ın boyutu da 16 bit idi. Burada 16 bit LFSR için özel bir polinom seçtim bu sayede çıktısının boyutu 65535 karakter boyunca kendisini tekrar etmeyecekti yani maksimum uzunluk veren özel bir polinomdu bu sayede şifreli metinlerden bir tekrar serisi yakalamak mümkün değildi. Bahsettiğim ilk değer olarak da (seed) LFSR'ın içerisine "0000000000000001" yazarsak  ve LFSR'ın çıktılarıyla şifreli metinlerimizi XOR'lar isek sonuç olarak flag'imize ulaşıyorduk.

Şifrelenen metin ise Kurt Gödel'in çok önemli makalesinden alıntılardı olurda okumak isterseniz diye aşağıya İngilizce çevirisini de bırakıyorum

https://www.research.ibm.com/people/h/hirzel/papers/canon00-goedel.pdf