Tag Archives: şifreleme

Twister

Twitter sık sık erişeme engelleniyor mu? Twitter hesapları takip mi ediliyor? Twitter’a erişemezsek ne mi olacak? Bu soruların cevaplarını Twister’da bulabiliriz.

Twister; Miguel Freitas tarafından yazılmış ve merkezsizleştirilmiş özgür yazılım olan bir P2P mikroblog platformudur. Platform bağımsızdır. GNU/Linux, Windows, Android ve Mac OS için kurup kullanabilirsiniz. Bittorrent ve Bitcoin benzeri bir yapıda çalışmaktadır. Merkezsizleştirilmiş olması kimsenin erişime engelleyemeyeceği, sansürleyemeyeceği ve ifade özgürlüğünü elinizden alamayacağı anlamına gelmektedir. Bununla birlikte, noktadan noktaya şifreleme kullandığı için iletişim (tüm iletişim değil, özel mesaj) gizlice izlenemez. IP kaydınız tutulmaz. Ayrıca, açık kaynak ve ücretsizdir.

Twister nasıl çalışıyor?
Twister; 3 katmandan oluşan bir ağ yapısına sahiptir. Birinci katmanda kullanıcı hesaplarının oluşturulması ve doğrulanması için Bitcoin protokolü kullanılır. Aslında bu tamamen Bitcoin protokolünün kullanılmasından ziyade blok zincirini ifade eder. Bu da şu demektir; blok zincirleri noter görevi görürler ve oluşturulan kullanıcı adının kime ait olduğu ve hangi anahtar çiftine sahip olduğunu onaylarlar. Twister’da doğrulama ve şifrelemeyi oluşturan nokta burasıdır. İkinci katmanda DHT protokolü bulunmaktadır. DHT, üçüncü katman için istemcilerde kullanıcı kaynakları olarak anahtar/değer ve tracker konumlarını barındırır. Son katmanda ise birbirlerini takip eden kullanıcılar için Bittorrent yapısına dayanan bir bildirim (girdiler, uyarılar, cevaplar vs gibi) sistemi vardır. Daha detaylı bilgiye Miguel Freitas yazdığı makaleden ulaşabilirsiniz.

Kurulum
Kurulum GNU/Linux içindir ve oldukça basittir. Diğer sistemler için lütfen buraya bakın. İlk olarak terminali açalım ve derleme için gerekli paketleri kuralım:

sudo apt-get (pacman -S, emerge -av vs) openssl db boost miniupnpc

Daha sonra Twister çekirdeğini kuralım:

kame ~ $ git clone https://github.com/miguelfreitas/twister-core
kame ~ $ cd twister-core
kame ~ $ ./bootstrap.sh
kame ~ $ ./configure --enable-logging --enable-debug
kame ~ $ make
kame ~ $ sudo make install

Son olarak Twister için HTML kullanıcı arayüzünü kuralım:

kame ~ $ mkdir .twister
kame ~ $ cd .twister
kame ~ $ git clone https://github.com/miguelfreitas/twister-html.git html/

Çalıştırma
Kurulum sorunsuz bir şekilde tamamlandıysa aşağıdaki komut satırını herhangi bir değişiklik yapmadan çalıştırıyoruz:

kame ~ $ ./twisterd -daemon -rpcuser=user -rpcpassword=pwd -rpcallowip=127.0.0.1

Adres: http://127.0.0.1:28332/home.html

Blok zincirleri eski olduğu için bir süreliğine güncelleştirme yapacaktır. Ağ durumuna Network sayfasından bakabilirsiniz.

twister network

Görüldüğü üzere blok zinciri güncel ve Twister kullanılmaya hazır. Bu sayfanın alt kısmında tıpkı Bitcoin’de olduğu gibi madencilik yapabilirsiniz. Madenciliğin ne gibi bir katkısı var? Blok zincirlerinin zorluk derecesi arttıkça daha yüksek bir güvenlik sağlanıyor ve ne kadar çok kişi madencilik yaparsa o kadar çok yeni zincir oluşturularak kullanıcıların zincirlere kayıt süresi azalıyor. Güncelleştirme tamamlandıktan sonra Login sayfasından yeni bir kullanıcı oluşturabilirsiniz.

twister login

Kullanıcı oluşturduğunuzda kullanıcı adınıza ait ve saklamanız gereken bir adet anahtar da oluşturulacaktır. Böylece farklı sistemlerde veya cihazlarda Twister kullandığınızda kendi hesabınızı bu anahtar ile aktarabileceksiniz. Profil sayfasında profil fotoğrafı, mekan, website adresi gibi profilinize ait bilgileri girip kaydedeceksiniz. Burada dikkat etmeniz gereken kayıt bağlantısının belirli bir süre aktif olmamasıdır. Çünkü, blok zincirine kayıt olunması biraz zaman alıyor. Kullanıcı adınızı oluşturduktan sonra belirli bir süre bekleyin.

twister profil

Kullanıcı kaydı da gerçekleştirildikten sonra artık siz de mikrobloglama başlayabilirsiniz.

twister profil2

Twister’la ilgili bilemeniz gereken bir kaç nokta var. Bunları sıralayacak olursak:

  • Twister’ın yapısı gereği sizleri takip eden kullanıcıları göremiyorsunuz. Ama takip ettiğiniz kullanıcılar görülmektedir.
  • Kullanıcı adınız için oluşturulan anahtarı kaybederseniz kullanıcı adınızı geri alma şansınız kalmaz.
  • Unutulmaması gereken nokta da Internet trafiğiniz gözetim altında ise Twister sizlere gizlilik sağlayamaz.
  • Twister, secp256k1 adında Bitcoin ile aynı eliptik eğri parametresini kullanmaktadır. NSA’in sec256r1 parametresini kırdığı biliniyor. Fakat, aynı durum Bitcoin ve Twister’da kullanılan parametre için -şimdilik- geçerli değildir.

Son olarak, Twister Türkçe dile de sahiptir. Daha çok ilgi görmeyi hakediyor ve özellikle engellemeler yüzünden gittikçe yalama olan Twitter gibi platformlar yerine tercih edilebilir. Bir diğer durum da Twitter kullanıcılarının ifade özgürlüğü haklarını mahkemelerde savunsa da, NSA ve PRISM ile işbirliği yapmasa da ifade özgürlüğünü bir şirketin eline bırakmak yanlış olacaktır. Bu yüzden bireylerin Twistter gibi uygulamalara önem vermeleri ve desteklemeleri gerekmektedir.

DNSCrypt

Veri trafiğini daha iyi şifrelemenin en iyi yollarından biri de DNSCrypt kullanmaktır. Sizleri küresel dinleme ve yapacağınız hatalardan korumayacak ama DNS trafiğiniz şifreli bir hale dönüşecektir.

DNSCrypt kısaca, bir istemci ile DNS çözücü arasındaki iletişimi şifreleyen bir araçtır. Diğer bir deyişle, DNSCrypt proxysi doğrudan yerel çözücü olarak kullanabileceğiniz ya da DNSCrypt protokolü olarak DNS isteklerini gönderen, şifreleyen ve doğrulayan yerel bir servis sağlamaktadır. Bununla birlikte, DNSCrypt yüksek hızlı ve yüksek güvenlikli elliptic-curve kriptosu kullanmakta ve istemci ile birinci-seviye çözücü arasındaki iletişimi korumaya odaklanmaktadır.

DNSCrypt’i bu kadar farklı kılan şeylere bakarsak eğer, SSL nasıl HTTP web trafiğini HTTPS şifreli web trafiğine çeviriyorsa DNSCrypt de sıradan bir DNS trafiğini şifreli DNS trafiğine dönüştürmektedir. Bu da kullanıcıya dinleme ya da man-in-the-middle saldırıları gibi durumlarda koruma sağlamaktadır. Ayrıca, DNSCrypt platform bağımsız bir uygulamadır ve GNU/Linux, Windows ya da iOS (jailbreak şartı var) sistemlerde rahatlıkla kullabilirsiniz. Örneğimiz GNU/Linux üzerinde olacak fakat sizler farklı platformlar için en altta verilmiş bağlantılar üzerinden hareketle gidebilirsiniz.  Bununla birlikte, dağıtımınızın ne olduğunu bilmiyorum. Eğer, kullandığınız dağıtımın depolarında dnscrypt paketi yok ise direkt 2. yönteme bakabilirsiniz.

1. Depodan kurulum

İşlemlerimizi terminal üzerinden root olarak gerçekleştireceğiz. Hemen bir tane açın ve:

kame ~ $ apt-get install dnscrypt-proxy (pacman -S dnscrypt-proxy veya dağıtımınız neyse onun paket yöneticisi ile kurulumu gerçekleştirin.)

Kurulum tamamlandıktan sonra dnscrypt-proxy servisini başlatın. Debian ve türevi dağıtımlarda bu otomatik olarak gerçekleşecektir. Eğer başlamazsa:

kame ~ $ /etc/init.d/dnscrypt-proxy start

systemd kullanan farklı bir dağıtımda:

kame ~ $ systemctl enable dnscrypt-proxy
kame ~ $ systemctl start dnscrypt-proxy

yaparak başlatabilirsiniz.

2. Elle kurulum

Eğer depolarınızda yok ise aşağıdaki adımları gerçekleştirin.

kame ~ $ wget -c http://download.dnscrypt.org/dnscrypt-proxy/dnscrypt-proxy-1.3.3.tar.gz
kame ~ $ tar xzf dnscrypt-proxy-1.3.3.tar.gz
kame ~ $ cd dnscrypt-proxy-1.3.3
kame ~ $ ./configure
kame ~ $ make
kame ~ $ sudo make install

Bu aşamaların herhangi birinde (make install hariç) hata alırsanız mevcut hatayı aratarak eksik kütüphane veya paketleri kurmanız gerekebilir.

3. Kullanım

Kurulum aşamalarını tamamlamış iseniz artık kullanıma geçebiliriz. Statik IP ayarları yaparak kullanımını göstereceğim. Sadece DNS sunucusuna yazarak da kullanabilirsiniz. Seçim size kalmış.

kame ~ $ sudo ifconfig

eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.1.3  netmask 255.255.255.0  broadcast 192.168.1.255
        inet6 fe80::52e5:49ff:feda:8b5a  prefixlen 64  scopeid 0x20
        ether 50:e5:49:da:8b:5a  txqueuelen 1000  (Ethernet)
        RX packets 345058  bytes 405146897 (386.3 MiB)
        RX errors 0  dropped 8  overruns 0  frame 0
        TX packets 231282  bytes 53324829 (50.8 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

Görüldüğü üzere eth0 kullanmış olduğum bağlantım. inet değeri ise bilgisayarımın ip’si. Ağ yöneticiniz NetworkManager veya başka bir şey olabilir. Ağ yöneticinizinde düzenlemek üzerekullandığınız bağlantıyı (eth0, wlan0 vs.) açın (örneğin Edit connections -> Ethernet (eth0) -> Edit -> IPv4 Settings) ve:

Adress: 192.168.1.3
Netmask: 255.255.255.0
Gateway: 192.168.1.1

şeklinde düzenleyin. Son olarak DNS Servers (DNS sunucusu) kısmına 127.0.0.1 yazın, kaydedin ve ağ yöneticinizi tekrar başlatın. 127.0.0.1, bizim yerel DNSCrypt proxymizdir. Bundan sonraki süreçte artık trafiğimiz şifreli bir şekilde akmaya başlayacaktır.

Dikkat etminiz gereken en önemli nokta DNSCrypt erişime engelli siteleri aşmak için bir araç olmadığıdır. Veri trafiğini en iyi şekilde şifrelemeye çalışmakta fakat bu süreçte IP’niz gizlenmiyor, yeriniz değişmiyor, Internete çıkış noktanız farklılık göstermiyor. Bunu kesinlikle aklınızdan çıkarmayın. Diğer platformlar için indirme bağlantıları aşağıdadır:

Büyük Birader’le Mücadele Etmek

Çocukluğumda yaptığım yaramazlıklar için en çok duyduğum öğüt, “karda yürü ama izini belli etme” idi. Her anımızın gözetlendiği, bir şekilde kaydı tutulduğu ya da bir şekilde bize ait özel dediğimiz verilerin okunduğu şu günlerde Büyük Birader’le mücadeleye nereden başlamalı, bir giriş olarak anlatmak istedim.

  • Biraz paranoya iyidir

Anonimlikte, bence, motivasyon çok önemli. Her adımınızı gözetleyen Büyük Birader’e karşı zihnen de bir mücadele vermektesiniz ve bu konuda motive, sizlere çok büyük bir destek kaynağı olacaktır. Motivasyonun yanına biraz da paranoya eklersek, bence harika olur. Paranoya’nın kısa bir tanımına bakalım:

Paranoya, bireyin herhangi bir olay karşısında olayın oluşumundan farklı olarak gelişebileceğini kendi içerisinde canlandırma yolu ile öne sürdüğü ve sınırsız sayıda çeşitlendirebileceği hayal ürünlerinin tümüdür.

Sizlere yazılarımda devamlı “tehlike modeli“‘nden bahsetmekteyim. Tehlike modeli oluşturmak (kişisel görüşüm) biraz da paranoyaya dayanıyor (ayrıca hesapları ayrıbilmekte örnek bir model var). Çünkü her olay karşısında, bu olayın gelişimi için farklı canlandırmalar oluşturuyor ve buna karşı güvenliğinizi sağlamak üzerine yeni yöntemler geliştiriyorsunuz. Elbette bunu hastalık boyutuna taşımak kişise zarar verecektir. Fakat, paranoyanın model geliştirmedeki etkisini gözardı etmemek gerekli. Anonimlikle ilgili ısrarla söylediğim şeylerden birisi de; “kimsiniz ve kimden saklanıyorsunuz, neden ve ne tür bir risk almayı hedefliyorsunuz?”. Yani, anonimlik düzeyiniz hesaplanabilir, biraz paranoyak olun, iyi bir model oluşturun ve kendinizi koruyun!

  • Kriptografiye önem vermek

Türkiye’deki üniversitelerde kriptografi ile ilgili ne kadar eğitim veriliyor ya da ne kadar insan bu konuda bilgilendiriliyor, bunun üzerine pek bilgi sahibi değilim. Kriptografi çok çok önemli bir konu ve üzerine ciddi olarak düşülmesi, ayrıca bu konuda yerel literatüre çok şey katılması gerekli olduğu düşünüyorum. Kısa bir tanım yapacak olursak:

Kriptografi, gizlilik, kimlik denetimi, bütünlük gibi bilgi güvenliği kavramlarını sağlamak için çalışan matematiksel yöntemler bütünüdür. Bu yöntemler, bir bilginin iletimi esnasında karşılaşılabilecek aktif ya da pasif ataklardan bilgiyi -dolayısıyla bilgi ile beraber bilginin göndericisi ve alıcısını da- koruma amacı güderler.

Sizin için önemli olan tüm verileri şifrelemelisiniz. Bunun daha başka bir açıklaması yok. Eğer mümkünse tüm verilerinizi şifreleyin. Bu, sizi güvende tutmanın temel ve başlıca yollarından biridir. Bu konuda ne tür araçlar kullanabilirsiniz, kısaca bir göz atacak olursak:

* E-postalarınız için GnuPG kullanabilirsiniz.
* Dosyalar için ccrypt ya da encfs kullanabilirsiniz.
* Disk için TrueCrypt ya da dm-crypt + LUKS kullanabilirsiniz.
* Anlık mesajlaşmalarda OTR eklentisini kullanabilirsiniz.
* Ağ için SSH kullanabilirsiniz.

Örnekler elbette çoğaltılabilir. Burada iş sadece şifrelemekle bitmiyor. Temel bir örnek ve tavsiye olarak, kullanacağınız şifre ya da şifreler sizinle ilgili ya da size ait herhangi bir bilgi içermemeli. Güvenli bir şifrenin yolu akılda kalması (inanın kalıyor) zor da olsa, rastgele şifrelerden geçiyor. Bu, sözlük saldırılarında ya da brute force saldırılarında sizlere ciddi bir avantaj sağlamakta. Dikkati çekmek istediğim bir diğer nokta ise kanun uygulayıcılarının yoktan delil var etme ya da herhangi bir şeyi delil olarak kullanma konusundaki tutumları. Bu nedenle, şifrelediğiniz herhangi bir şey yazılı/basılı olarak elinizde bulunmamalı. Elinizdeki basılı dökümanlarla işiniz bittiyse, yakın gitsin. Yedek alacaksanız, aldığınız bu önemli ve şifreleri verilerin yedeğini ailenize, eşinize, dostunuza ait bilgisayarlarda saklamamanız tavsiyedir.

  • Hesapları ayırabilmek

Hesapları ayırmaktan kastettiğim, anonim kimliğiniz ile gerçek kimliğinizi içeren hesapların ayrımını yapmak çok önemli. Anonim hesabınız üzerinden gerçek hesaplarınıza bir bağlantı kurulmamalı. Eğer bu bağlantı kurulursa, artık anonim de değilsinizdir. Anonimlik, tanımı gereği içinde anonim özneleri aşmaya çalışan saldırganları da içerir. Yani, eğer bir anonimlik varsa bu anonimliği ortadan kaldırabilmek için çalışanlar da olacaktır. Bu, kanun uygulayıcı olur, gizli servisler olur, başka bir anonim özne olur. Önemli olan bir saldırgan varlığını asla unutmamak.

Bir diğer nokta da anonim hesabınız üzerinden gerçekte tanıdığınız ve sizin bu kimliğinizi bilen insanlarla pek iletişime geçmemeniz (özellikle telefonla) gerekliliği. Bu konuda kararınız net olmalı ya da en azından ne kadar bilgiye sahip ya da ne zaman bilgiye sahip olacaklarını iyi kararlaştırmak gerekli. Bu, bence çeşitli riskleri de beraberinde getiriyor. Saldırgan ne kadar dar bir çevre oluşturabilirse, sizin kimliğinizi tespit etmesi de o kadar çabuk olabilir. Şimdi bunu basitçe örneklendirelim (şema eklendi):

model

Ben anonim kimliği “X“, gerçek kimliği “A” olan bir bireyim. “X” kimliğini gerçekte kim olduğunu (A’yı) bilen “W“, “Y” ve “Z” gerçek kimlikleri var. Ayrıca, “X” kimliğini aşıp “A” kimliğine ulaşmak isteyen saldırgan “S” var. Eğer, saldırgan “S“, benim “W“, “Y” veya “Z” gerçek kimlikleri ile iletişimde olduğumu bir şekilde farkederse saldırı kapsamını daha karmaşık ve kapsamlı bir halden daha spesifik ve daha dar bir hale getirir. Gerekirse, “W“, “Y” ya da “Z“‘ye doğrudan veya dolaylı olarak baskı/saldırı düzenleyerek benim gerçek kimliğime ulaşabilir. Bu saldırı, örneğin, bir man-in-the-middle saldırısı olabilir. Siz “X” anonim kimliği üzerinden “W” gerçek kimliği ile iletişime geçerken, saldırgan araya girip mesaj içerikleri ile oynayarak sizin “A” gerçek kimliğinizi elde edebilir. Bu bahsettiğim örnek, ayrıca bir tehlike modelidir. Bu yüzden ısrarla diyorum ki, bir tehlike modelinizin olması şart!

  • Kayıtlar

Özellikle /tmp, /var/log ve kullanıcı dizininde (/home/kullanıcı) kalan geçmiş ya da yedek dosyaları sizin için bir risk teşkil etmekte. Kullandığınız program, araç vs. her ne ise bunun nerede kayıt tuttuğunu bilmeniz sizin faydanıza olacaktır. Bir diğer noktada terminal üzerinde gerçekleştirdiğiniz şeylerin (kabuktan kabuğa değişmekte) de ayrı ayrı kaydı tutulmakta. Örneğin:

bash: .bash_history
zsh: .zsh_history
vim: .viminfo
.
.

Yedekler için:
*.swp
*.bak
*~
.
.

Bu sizin kullandığınız ortama göre değişim göstereceği için temel olarak sıralayabileceğim belli başlı şeyleri örnek olarak gösterdim. Sistemden çıkış yaparken bunları silerseniz ya da en azından nelerin kaydını tuttuklarını incelerseniz sizin yararınıza olur. Uygulama olarak Bleachbit, temizleme konusunda tercih edilebilir (Emre’ye teşekkürler.).

  • Karda yürü ama izini belli etme

Ceza hukukunun ciddi bir eleştirisini hukukçu olmadığım için yapamam. Fakat, kanun uygulayıcılarının hukuk dışı deliller elde ederek bireyi hapse atıp, daha sonra mahkemede tutuklu olarak yargılamaya başlaması ne vahim bir durumda olduğunun göstergesidir. Sonuca gelirsek, iyi bir motivasyon, biraz paranoya, önemli verileri şifreleyip anonim kimliğimizle gerçek kimliğimizin ayrımı tam olarak yapabilmek, kendimize uygun tehlike modelleri geliştirip bunlara karşı savunma yöntemleri hazırlamak, ve son olarak karda yürüyüp izimizi belli etmemek! Ayrıca, bu yöntemler sadece burada yazanlarla sınırlı değildir. Herkesin ayrı bir modeli olacak ve yöntemler de ona göre şekillenecektir.

Büyük Birader’i artık her zamankinden daha soğuk bir kış bekliyor.

Şifreler, Şifreler Ve Şifreler

Basit ve etkili bir şifrelemeden bahsettim fakat bir şifrenin nerede saklandığı, nasıl saklandığı, bu şifrelerin nasıl kırıldığında dair bir yazım yoktu. En azından temel kriptografi bilgisi ve basit bir Hashcat örneği ile bu eksikliği giderebilirim. Yazının eksik kaldığı noktalar elbette vardır ve herhangi bir grubu tatmin etme amacı yoktur. Bu yazı bunun ve bunun derlenmiş halidir.

  • Şifreler nerede saklanıyor?

Veritabanlarında. İlk bakışta dalga geçiyorum gibi gelecek ama durum bu. Unix ve Unix benzeri işletim sistemlerinde şifreler tek bir metin dosyasında, Windows’ta ise binary dosyasında saklanmaktalar. Elbette şifrelerin kriptosuz hallerini herhangi bir metin dosyasında bulundurmak mantıklı değildir. Bu dosyayı eline geçiren bir saldırgan şifrelerinize de sahip olacaktır. Bu nedenden dolayı bütün işletim sistemleri şifreleri bir hash algoritması ile çalıştırır, sonuç olarak veritabanlarında kriptografik hash olarak saklarlar. Bu ise şunu sağlar; eğer bir saldırgan bu veritabanını bir şekilde eline geçirirse, hash olarak saklanmış şifreleri bakarak çözemeyecektir.

Örneğin, GNU/Linux’ta kullanıcı için bir şifre oluşturduğunuz zaman bu şifre sha-512 algoritması ile hashlenerek /etc/shadow dosyası içinde yerini alır (AES ve Rijndael şifrelemesini de ekleyelim). Bu dosyaya baktığımız zaman;

kame:$6$7gNvdbpz$c6fb024a22c4db9101ea1d20596034../:15758:0:99999:7:::

$6 = Sha-512 hash algoritması.
$7gNvdbpz = Salt değeri.
$6fb024a22c4db9101ea1d20596034.. = Şifre.
:15758= Son şifre değişikliği tarihi (gün sayısıdır, başlangıç tarihi 1 Ocak 1970).
:0 = Şifre değişiklikleri arasındaki minimum süre.
:99999 = Şifrenin maksimum geçerlilik süresi (gün sayısıdır).
:7 = Hesap kapatıldıktan sonra şifrenin dolma süresi.

  • Peki hash nedir?

Hash, bir hashing algoritmasının (md5, sha-1, sha-2 vs.) kriptografik çıktısıdır. Bir hashing algoritması açık metin ile şifrelenmiş metin arasında tek yönlü bir dönüşüm sağlar. Bu şu demektir; eğer ben herhangi bir açık metni bir hashing algoritması ile şifrelenmiş metne dönüştürmüşsem, hashing algoritmasını tekrar kullanarak şifrelenmiş metinden açık metne ulaşamayacağım. Herhangi bir hashing algoritması tarafından boyutu standart olmayan bir girdinin şifrelenmiş çıktısı hashing algoritmasına göre eşit uzunluktadır. Diğer bir deyişle, bir e-kitabın boyutu ya da bir filmin boyutu ya da bir metnin boyutu ne olursa olsun, çıktının uzunluğu algoritmaya göre sabittir. Bunun kriptografide önemli olmasının sebebi, eğer bütün algoritmalar kendi türleri içinde aynı uzunlukta çıktıyı verirse, girdinin boyutunu ya da türünü belirlemek mümkün olamaz.

  • Salting, biz buna tuzlama mı desek?

Salting‘in türkçeye nasıl çevrildiğini ya da ne denildiğini bilmiyorum. Nedir noktasına gelirsek eğer, Salt rastgele verilen bir değer olup gizli değildir ve rastgele oluşturulur, şifre hashi ile birlikte saklanır. Büyük boyutlardaki salt değeri önceden hesaplanmış saldırılarını, mesela rainbow tablousu, her şifreyi eşsiz olarak hashleyerek engeller. Yani Ali ile Ayşe, aynı veritabanında saklanan tıpatıp aynı şifrelere sahip olsa bile, salt değerleri ile birbirinden farklı hash değerlerine sahip olacaklar ve bir saldırgan veritabanına erişse bile bu iki kişinin şifresinin aynı olduğunu bilemeyecektir.

Saldırganın başarılı olabilmesi için her salt değerini de ayrı ayrı hesaba katması gerekmektedir. Salting’in kullanılmasının nedeni şifrelerdeki entropi düzeyini arttırmaktır. Bir diğer deyişle, bizlere fazladan koruma sağlar.

Kripto fonksiyonunda iki girdi vardır. Bunlar $salt ve $key’dir, crypt($salt, $anahtar). Eğer salt değerimizin “0Z” ve şifremizin “kame” olduğunu varsayarsak $salt + $şifre;

0Zkame

Artık bu hashlenecek ve şifre veritabanında saklanacaktır. Bu şifrenin eğer bir kullanıcı şifresi olduğunu varsayarsak, /etc/shadow altında hash ile birlikte saklandığını görebiliriz. Örneğin, sisteme giriş yapmak istediğimizde, doğrulama yapmamız gerekecektir. Doğrulama, kullanıcı adı ve şifresi girildiğinde önce salt değerini alacak ve girilen şifre ile birlikte kripto fonksiyonunu çalıştıracaktır. Ardından, eğer şifreniz doğru ise hashler birbirini tutacak ve sisteme girebileceksiniz.

  • Birkaç örnek

En popüler hashing algoritmalarından biri (bugünlerde zayıf olduğu sıkça tekrarlansa da) MD5‘tir. MD5 hashing algoritması 128 bit yani 16 byte’tır. Çıktısı 32 haneli, onaltılı (0,…,9, a,…,f) (hex) sayıdan oluşur. Yani, 2 hex = 1 byte, 16 byte = 128-bit.

kame” dizisini MD5’e dönüştürürsek;

kame ~ % echo -n 'kame' | md5sum | cut -f 1 -d " "
366b18ce0695e44bfc30423b9eb8a793

İçinde sadece “test” yazan “test.txt” dosyasını MD5’e dönüştürürsek;

kame ~ % md5sum test.txt
098f6bcd4621d373cade4e832627b4f6  test.txt

MD5’e göre daha güçlü ve NSA tarafından tasarlanan bir diğer hashing algoritması ise SHA-2‘dir. SHA-2, 224, 256, 386 ve 512 gibi çeşitli bit uzunluklarında 4 farklı seçenek sunar.

kame ~ % echo -n 'kame' | sha256sum | cut -f 1 -d " "
be45d72f76fc702161620f5d5462443cb038fffd5b839d28d5c85dcf3b46cac5

kame ~ % sha256sum test.txt
9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08  test.txt

256/128 = 2 > 32 x 2 = 64! Yani, algoritma, 64 hex haneli hash üretir.

Hashing algoritmaları ayrıca bir veriyi doğrulamak için de kullanılmaktadır. Örneğin, Internet üzerinden indirmek istediğiniz herhangi bir dosya için yayınlayan kişi bu dosyaya ait bir hash bilgisi de vermektedir. Böylece indirdiğiniz dosya ile Internette verilen hashleri karşılaştırıp doğrulama yapabilirsiniz.

Hashlere saldırılar ikiye ayrılmaktadır. Birincisi çevrimiçi saldırılar, yani elinizde kırmak isteyeceğiniz bir hash listesi yoktur, Internet üzerinden bulunan bir uygulama ya da servise, veritabanlarında bulunan hashlerle karşılaştırması için çoklu şifre tahminlerinde bulunursunuz. İkincisi ise çevrimdışı olan saldırılardır. Bunlarda ise elinizde bulunan veya bir yerlerden elde ettiğiniz hash listesini çeşitli saldırı türleri ile kırmaya çalışırsınız. Bu saldırı türlerinden en bilinenleri, bruteforce, rainbow tablosu ve sözlük saldırılarıdır.

  • Bruteforce

Varolan bütün kombinasyonların denenmesi anlamına gelmektedir. Kullanılan karakterlere göre değişmektedir. Örneğin sadece a,z aralığı ya da a,z ve A,Z aralıkları veya A,Z,0,9 aralığı gibi çok çeşitli kombinasyonlar oluşturabilirsiniz. En yavaş yöntem olabilir fakat sadece kombinasyon oluşturmaz. Ayrıca her kombinasyon için hash de oluşturur ve bunları karşılaştırır.

Elbette 4 hanelik bir şifrenin hash’ini kırmak çok uzun sürmez fakat hanesi sayısı artarsa, bunu kırmak için geçecek süre de artacaktır.

  • Rainbow Tablosu

Bir Rainbow (gökkuşağı) tablosu, daha önceden hesaplanmış hash’leri içermektedir. Yani, diğer bir deyişle, hash’ler hazır ve karşılaştırılmayı beklemektedir. En önemli artısı, işlemci yükünü azaltarak küçük boyutlu işlerde çok etkili sonuç verir. Sözlük saldırılarında, önce hash oluşturup ardından bunu kırmak istediğimiz hash ile karşılaştırırız. Gökkuşağı’nda ise hashlere zaten sahibiz ve tek yapmamız gereken bunları karşılaştırmak. İyi bir gökkuşağı tablosu oluşturmak vakit alacak bir iştir fakat etrafta çok büyüt boyutlu ve işe yarar tablolar da dolanmaktadır.

Gökkuşağı tablosunun etkisini azaltmak için yukarıda bahsettiğim salt yöntemi etkili bir yöntemdir.

  • Sözlük

Sözlük, kelimelerden, karakterlerden ve bunların kombinasyonlarından oluşan basit bir metin dosyasıdır. Sağda solda gördüğünüz “wordlist” ya da kelime listeleri de aynı anlama gelmektedirler. Sözlük, genel olarak kullanıcının basit şifreler kullanması fikrine dayanır. Bu yüzden herhangi bir sözlük metin dosyasına baktığınız zaman “12345678”, “qwerty” gibi ya da “home”, “pass” gibi dizilerden oluştuğunu görebilirsiniz.

Sözlük saldırıları şu şekilde olur; kırmak istediğiniz hash’e karşılık sözlükteki her dizinin bir hash karşılığı oluşturulur ve bununla karşılaştırılır. Eğer iki hash de birbirini tutarse, kırılmış demektir. Günümüzde artık CPU’lar epey güçlü olduğu için 1-2 dakika içerisinde 14 milyon girdi test edilebilir.

Bu saldırıları gerçekleştirebileceğimiz çevrimdışı bir uygulama arıyorsak eğer Hashcat bu iş için biçilmiş kaftan.

  • Hashcat

Hashcat, çok hızlı ve çok yönlü hash kırıcısı (cracker)’dır. Dağıtımlarınızın repolarında muhtemelen vardır, kurarsanız altta vereceğim örnek üzerinde nasıl çalıştığını daha iyi anlayabilirsiniz.

kame
dizisinin MD5 çıktısı “366b18ce0695e44bfc30423b9eb8a793” olduğunu yukarıda söylemiştik. Bunu bir metin dosyası içine, örneğin test.txt, yapıştırın ve kaydedin. Bu örneğimiz için bize bir sözlük lazım;

1ANORMUSWL
RockYou

İstediğinizi indirebilirsiniz. Bu örnekte 1ANORMUSWL dosyasını kullanacağım.

kame ~ % hashcat -m 0 -a 0 -o /home/kame/hashcat/sonuc.txt /home/kame/hashcat/test.txt /home/kame/hashcat/pass/1aNormusWL.txt
Initializing hashcat v0.46 by atom with 8 threads and 32mb segment-size...

Added hashes from file /home/kame/hashcat/test.txt: 1 (1 salts)
Activating quick-digest mode for single-hash


NOTE: press enter for status-screen

366b18ce0695e44bfc30423b9eb8a793:kame

All hashes have been recovered

Input.Mode: Dict (/home/kame/hashcat/pass/1aNormusWL.txt)
Index.....: 1/5 (segment), 3498468 (words), 33550338 (bytes)
Recovered.: 1/1 hashes, 1/1 salts
Speed/sec.: - plains, 33.39M words
Progress..: 3428536/3498468 (98.00%)
Running...: --:--:--:--
Estimated.: --:--:--:--

Started: Tue Oct 29 20:49:48 2013
Stopped: Tue Oct 29 20:49:49 2013

Görüldüğü üzere “-m“, seçtiğim hash algoritmam, 0, yani MD5, “-a” ise saldırı türüm , 0, yani doğrudan (burada sözlüğe bakıp her dizi için hash karşılaştırması yapıyor).

Herhangi bir sözlük kullanmadan bu saldırıyı yapmak istersek;

kame ~ % hashcat -m 0 -a 3 -o /home/kame/hashcat/sonuc.txt /home/kame/hashcat/test.txt ?l?l?l?l

Terminal çıktısı çok uzun olduğu için onu koymadım. Burada, farklı olarak saldırı türünü 3, yani bruteforce olarak belirledik ve sözlük yerine “?l” parametresini, yani sadece küçük harfleri (a,…,z) kullanmasını söyledik. 4 tane koymamın nedeni 4 haneden (kame) oluşması. Hangi şifrenin kaç haneden oluştuğunu, hangi karakterleri içerebileceğini bilemeyeceğimiz için saldırı modellerini kendiniz geliştirmeniz gerekmektedir.

Hashcat, çok başaralı ve hızlı bir hash kırıcısıdır. Burada çok temel bir örnek vererek anlatmam, sizlerin sağda solda denk getirdiğiniz herhangi bir hash algoritmasını oturup kırsın diye değildir. Daha fazla ayrıntılı bilgi almak isterseniz Hashcat’in wikisi, özellikle mask saldırısı ya da RTFM ve internette bulabileceğiniz sayısız döküman var.

Ccrypt İle Şifreleme

Platform bağımsız ve kullanması kolay bir uygulama olarak, ccrypt, dosya şifrelemede kullanmak için gayet basit ve güvenli, ayrıca sistem kaynaklarını da bir o kadar az tüketen bir araç olarak durmakta. Bu basit rehberi en azından denemeniz ve hatta kalıcı olarak kurup kullanmanız için hazırladım.

ccrypt, dosyaları şifrelemek ve şifresini çözmek için kullanılan, Rijndael Blok Şifresi üzerine kurulu açık kaynak, özgür yazılım bir uygulamadır. ccrypt’in sahip olduğu algoritma simetrik değildir. Bununla birlikte, ccencrypt ile dosya şifrelerken ccdecrypt ile şifre çözemektedir (ccrypt -e ya da ccrypt -d ile de yapabilirsiniz). Ayrıca ccat ile şifresiniz çözdüğünüz dosyayı sadece terminal ekranına yazdırabilir ve bilgisayarınızda geçici dosyalar bırakma riskinizi düşürebilirsiniz.

  • ccrypt güvenliği

ccrypt 256-bitlik bir şifrelemeye sahiptir. AES’in de seçtiği Rijndael Blok Şifresi‘ni kullanmaktadır. ccrypt’in AES ile farkı ise, AES 128-bit blok boyutu kullanırken kullanırken, ccrypt, Rijndael’in izin verdiği 256-bit blok boyutu kullanmaktadır. Bu onu elbette AES’ten daha az güvenli yapmamaktadır. Sadece AES standartına sahip değildir. Ayrıca, bu şifreleme eğer kırılırsa duyulması da o kadar çabuk olacaktır.

ccrypt ile bir dosyayı şifrelerseniz eğer, ccrypt o dosyanın üzerine yazacak, yeni bir dosya oluşturmayacaktır. Bununla birlikte, artık harddiskinizde orjinal dosya olmayacaktır. Fakat, siz bu dosyayı silseniz dahi donanım ataklarında harddiskiniz/ram’iniz/takasınız bu dosyanın izini taşıyabilir. Eğer bu izleri silmek isterseniz, bunun için çeşitli araçlar mevcut. Bunlardan bir tanesi GNU/Linux için wipe.

Eğer, şifreleme esnasında “–tmpfiles” parametresi kullanırsanız, orjinal dosyanın üzerine yazmak yerine geçici bir dosya oluştabilir, ardından da wipe ile silebilirsiniz.

kame ~ % ccencrypt --tmpfiles sifrelenecekdosya && ls

sifrelenecekdosya
sifrelenecekdosya.cpt

  • Dosya ve dizin şifreleme, şifre çözme

ccrypt ile herhangi bir dosyayı sorunsuz bir şekilde şifreleyebilirsiniz. Fakat, sizinleri şifrleyemezsiniz. Dizin için farklı bir yol izleyeceğiz.

Dosya şifreleme;
kame ~ % ccencrypt sifrelenecekdosya
Enter encryption key:
Enter encryption key: (repeat)

Gördüğünüz üzere ccencrypt (ya da ccrypt -e sifrelenecekdosya) ile dosyamızı anahtarımız ile şifrelemiş olduk. Anahtarı ise unutmamanız çok önemli. Tamamen unutursanız eğer şifrelenen dosyayı kurtarmanız mümkün olmayacaktır.

Dizin şifreleme;
kame ~ % tar -zcvf sifrelenecekdizin.tar.gz dizin/
kame ~ % ccencrypt sifrelenecekdizin.tar.gz

İlk komutumuz dizin adındaki dizinimizi (balık adındaki balık, komik değil biliyorum.) tar.gz formatında sıkıştırmak olacaktır. Ardından arşiv dosyamızı ccrypt ile sorunsuz bir şekilde şifreleyebilirsiniz.

Şifre çözme;
kame ~ % ccdecrypt sifrelenmisdosya.cpt
Enter decryption key:

ccrypt’in şifrelediği dosyaların uzantısı “.cpt” olarak değiştirmektedir. Eğer şifreyi çözmek isterseniz kullandığınız ccdecrypt ile (ya da ccrypt -d sifrelenmisdoya.cpt) anahtarınızı girerek dosyanızın şifresini çözebilirsiniz.

  • Anahtarımı unuttum, ne yapmalıyım?

Eğer anahtarınızı unutmuşsanız, şifrelediğiniz dosyaya erişmeniz mümkün olmayacaktır. Fakat, ccguess ile şifrenizi yanlış yazmış olabileceğinizi düşünerek ne olabileceğine dair bir kalıp deneyebilirsiniz.

Diyelim ki, şifrenizi “abcdefg” yaptınız (ben yaptım siz yapmayın), ve aklınızda sadece a, b, c, d ile e’yi içerdiği kalmış;

kame ~ % ccguess sifrelidosya.cpt
Enter approximate key: abcde


Generating patterns...1..2..3..4..5..sorting...done.

Possible match: abcdefg (2 changes, found after trying 1890639 keys)

Burada şu unutulmamalı; anahtarınız ne kadar çok karakter içerirse doğru tahmin için o kadar çok karakteri doğru hatırlamak zorundasınız, yoksa çabalarınız boşuna olacaktır.

  • Şifreleme esnasında sistem çöktü, peki şimdi ne olacak?

Örneğin, elinizde 100mb bir dosya var ve tam bunu şifrelerken ya da şifreyi çözerken sisteminiz kitlendi, elektrikler gitti vs. Ayrıca, bu dosyanın yedeğini şifrelemeden önce almadınız ve tek kopya şifrelemeye çalıştığınız dosya. Öncelikle yapmanız gereken şifrelenen dosyayın şifresini “-m” parametresi ile çözmek olacaktır.

kame ~ % ccdecrypt -m bozukdosya.cpt

Bu yöntemle dosyanın çözülen şifrelenmiş kısmı ile bozuk kısmından oluşan 2 ayrı dosya oluşturacak. Orjinal dosyayı bu iki kısmı birleştirerek tekrar oluşturabilirsiniz, fakat şifreleme ve çözümün birleştiği noktadaki 32-63 byte’lık bölümü malesef kaybedeceksiniz.

  • Anahtar oluştururken neleri kullanmamalı?

Yazdırılabilir ASCII karakterlerin hepsini kullanabilirsiniz. Sadece ‘\n’, ‘\r’ ve ”’ı kullanamazsınız. Bunların dışında, işletim sisteminiz eğer bazı özel karakterleri yazdıramıyorsa, doğal olarak onları da anahtar oluştururken kullanamayacaksınız.

  • Windows’ta şifreledim, GNU/Linux veya Mac Os’ta açabilir miyim?

Evet! ccrypt, platform bağımsız bir uygulamadır.

  • Şifrelenecek dosyanın boyutu önemli mi?

Hayır! İstediğiniz büyüklükte bir dosyayı ccrypt ile şifreleyebilirsiniz. Önemli olan sisteminizin bunu kaldırabilmesi.