Lab erişimi için: https://tryhackme.com/r/room/encryptioncrypto101
Bu oda şunları kapsayacaktır:
- Kriptografinin güvenlik ve CTF’ler (Capture The Flag) için neden önemli olduğu
- Kriptografinin iki ana sınıfı ve bunların kullanımları
- RSA ve RSA’nın bazı kullanımları
- İki Key Exchange yöntemi
- Kuantum Bilgisayarların yükselişi ile şifrelemenin geleceği hakkında notlar
Not: Bu oda, bazı araçlarla tanışık olmanızı ve araçları nasıl kullanacağınız konusunda bazı araştırmalar yapmanızı bekler!
Bu terimlerin birçoğu TryHackMe’nin Hashing ve Kripto 101 odası ile paylaşılmaktadır, bu nedenle zaten aşina iseniz bazı kısımları atlayabilirsiniz.
- Ciphertext: Bir düz metnin şifrelenmiş hali, şifreli veri.
- Cipher: Veriyi şifreleme veya deşifre etme yöntemi. Modern şifreler kriptografik olup, Caesar gibi birçok kriptografik olmayan şifre de vardır.
- Plaintext: Şifreleme öncesi veri, genellikle metin ama her zaman değil. Bir fotoğraf veya başka bir dosya olabilir.
- Encryption: Veriyi şifreli metne dönüştürme, bir şifre kullanılarak yapılır.
- Encoding: Şifreleme şekli değildir, sadece base64 gibi veri temsil yöntemidir. Anında geri dönüştürülebilir.
- Key: Şifreli metni doğru şekilde deşifre etmek ve düz metni elde etmek için gereken bilgi.
- Passphrase: Anahtardan ayrı olarak, bir parolaya benzer ve bir anahtarı korumak için kullanılır.
- Asymmetric Encryption: Şifreleme ve deşifre için farklı anahtarlar kullanır.
- Symmetric Encryption: Şifreleme ve deşifre için aynı anahtarı kullanır.
- Brute Force: Kriptografiyi her farklı parola veya her farklı anahtarı deneyerek saldırma yöntemi.
- Cryptanalysis: Kriptografiye zayıflık bularak saldırma yöntemi.
- Alice ve Bob: Genellikle iletişim kurmak isteyen iki kişiyi temsil etmek için kullanılır. Alice ve Bob olarak adlandırılırlar çünkü baş harfleri A ve B’dir. Daha fazla bilgi için buraya bakabilirsiniz; Alice ve Bob, iletişimde yer alan birçok farklı kişiyi temsil etmek için alfabeye yayılır.
Uyarı: Bu oda oldukça teoriktir. Kriptografi geniş bir konudur ve bu oda sadece yüzeyini kazımayı amaçlar.
Şifreleme (Cryptography) Güvenliğin Korunmasında Kullanılır:
Şifreleme, verilerin gizliliğini korumak, bütünlüğü sağlamak ve kimlik doğrulaması yapmak için kullanılır. Muhtemelen her gün şifrelemeyi kullanıyorsunuz ve şu anda şifreli bir bağlantı üzerinden bu metni okuyor olabilirsiniz.
- TryHackMe’ye giriş yaparken: Kimlik bilgileriniz sunucuya gönderildi ve bu bilgiler şifreliydi; aksi takdirde bağlantınızı izleyen biri bu bilgileri ele geçirebilirdi.
- SSH bağlantısı kurarken: İstemciniz ve sunucu arasında şifreli bir tünel oluşturulur, böylece oturumunuzu izleyen kimse olmaz.
- Banka ile bağlantı kurarken: Bankanın gerçek olduğunu doğrulamak için şifreleme kullanan bir sertifika bulunur.
- Dosya indirirken: Dosyanın doğru indirildiğini kontrol etmek için şifrelemeyi kullanabilirsiniz, bu verinin bir kontrol toplamını doğrulamak anlamına gelir.
Genellikle doğrudan şifreleme ile etkileşime girmeniz gerekmez, ancak şifreleme, dijital olarak yaptığınız hemen hemen her şeyi sessizce korur.
Hassas Kullanıcı Verilerinin Saklanması: Veriler saklanırken hem dinlenme halinde (depoda) hem de iletilirken şifrelenmelidir. Ödeme kartı bilgileri ile ilgileniyorsanız, PCI-DSS gibi standartlara uymalısınız. Tıbbi veriler de benzer standartlara sahiptir. GDPR ve California’nın veri koruma yasaları gibi mevzuatlar ile veri ihlalleri, hem tüketici hem de işletme olarak son derece maliyetli ve tehlikeli olabilir.
Şifreler: Şifreleri şifrelemeyin, bir şifre yöneticisi gibi özel bir durum hariç. Şifreler düz metin olarak saklanmamalıdır ve güvenli bir şekilde yönetmek için hashleme kullanılmalıdır.
Modüler Aritmetik ve Modulo Operatörü
Şifrelemede sıkça karşılaşılan biraz matematiksel bir konu, Modulo (kalan) operatörüdür. Neredeyse her programlama dili bu operatörü uygular veya bir kütüphane aracılığıyla sağlar. Büyük sayılarla çalışmanız gerektiğinde, Python gibi bir programlama dili kullanmak iyidir çünkü tam sayılar sınırsız büyüklükte olabilir ve bir yorumlayıcıya kolayca erişebilirsiniz.
Bir bölme işlemini ilk öğrendiğinizde, cevabınıza kalanı eklemeyi muhtemelen öğrenmişsinizdir. X % Y
, X’in Y’ye bölünmesinden kalanıdır.
Örnekler:
25 % 5 = 0
(5*5 = 25 olduğu için tam olarak bölünür ve kalan yoktur)23 % 6 = 5
(23, 6’ya tam olarak bölünmez, kalan 5 olur)
Modular aritmetiğin önemli bir özelliği, tersinir olmamasıdır. Yani, size bir denklem verdiğimde: x % 5 = 4
, x
için geçerli olabilecek sonsuz değer vardır.
Şifrelemenin iki ana kategorisi vardır: simetrik ve asimetrik.
- Simetrik Şifreleme: Aynı anahtar veriyi şifrelemek ve çözmek için kullanılır. Simetrik şifreleme örnekleri arasında DES (Kırılmış) ve AES bulunur. Bu algoritmalar genellikle asimetrik şifrelemeye göre daha hızlıdır ve daha küçük anahtarlar kullanır (AES için 128 veya 256 bit anahtarlar yaygındır, DES anahtarları ise 56 bit uzunluğundadır).
- Asimetrik Şifreleme: Bir çift anahtar kullanır; biri veriyi şifrelemek için, diğeri ise çözmek için kullanılır. Örnekler RSA ve Eliptik Eğri Şifreleme’dir. Genellikle bu anahtarlar bir genel anahtar ve bir özel anahtar olarak adlandırılır. Özel anahtar ile şifrelenen veri, genel anahtar ile çözülebilir ve tersi de geçerlidir. Özel anahtarınız gizli tutulmalıdır, bu yüzden “özel” olarak adlandırılır. Asimetrik şifreleme genellikle daha yavaştır ve daha büyük anahtarlar kullanır; örneğin RSA genellikle 2048 ila 4096 bit anahtarlar kullanır.
RSA ve Eliptik Eğri Şifreleme, farklı matematiksel olarak zor (çözülmesi güç) problemler etrafında döner, bu da onlara güçlerini sağlar. RSA hakkında daha fazla bilgiyi daha sonra ele alacağız.
Matematik Tarafı RSA, büyük bir sayının faktörlerini hesaplamanın matematiksel olarak zor bir problem olmasına dayanır. İki asal sayıyı çarpmak oldukça hızlıdır, örneğin 17*23 = 391, ancak 14351’in hangi iki asal sayının çarpımıyla oluştuğunu bulmak oldukça zordur (referans olarak 113×127).
Saldırı Tarafı RSA’nın arkasındaki matematik, CTF’lerde (Capture The Flag) sıkça karşımıza çıkar, genellikle bazı değişkenleri hesaplamayı veya bazı şifrelemeleri kırmayı gerektirir. RSA’nın Wikipedia sayfası ilk başta karmaşık görünebilir, ancak size hemen hemen tüm bilgileri sağlayacak ve bu bilgilerle zorlukları tamamlayabilirsiniz.
CTF’lerde RSA zorluklarını aşmak için bazı mükemmel araçlar mevcuttur ve kişisel favorim RsaCtfTool dir, bu araç çok iyi çalıştı. Ayrıca rsatool ile de bazı başarılar elde ettim.
CTF’lerde RSA için bilmeniz gereken ana değişkenler p, q, m, n, e, d ve c’dir.
“p” ve “q” büyük asal sayılardır, “n” ise p ve q’nun çarpımıdır.
Açık anahtar n ve e’dir, özel anahtar ise n ve d’dir.
“m” mesajı (düz metin) temsil eder ve “c” şifrelenmiş metni (şifreli metin) temsil eder.
RSA ile İlgili CTF’ler Şifreleme CTF zorlukları genellikle bu değişkenlerin bir setini sunar ve bir mesajı kırmanız ve çözmeniz gerekir, böylece bayrağı (flag) alabilirsiniz.
RSA’nın matematiği oldukça karmaşıktır ve hızla karmaşıklaşabilir. Matematiği hakkında daha fazla bilgi edinmek istiyorsanız, MuirlandOracle’ın blog yazısını okumayı öneririm: MuirlandOracle’ın yazısı.
Asimetrik kriptografinin çok yaygın bir kullanımı, simetrik şifreleme için anahtarların değiştirilmesidir.
Asimetrik şifreleme genellikle daha yavaştır, bu nedenle HTTPS gibi şeylerde simetrik şifreleme daha iyidir.
Ancak soru şu: Anahtarı, kişilerin casusluk yapabileceği şekilde iletmeden sunucu ile nasıl anlaşabilirsiniz?
Metafor Zamanı Gizli bir kodunuz ve bu kodu nasıl kullanacağınızı belirten talimatlarınız olduğunu hayal edin. Talimatları başkalarının okuyamayacağı şekilde arkadaşınıza göndermek istiyorsanız, arkadaşınızdan bir kilit isteyebilirsiniz.
Sadece onların bu kilidin anahtarı olduğunu varsayalım ve size bu kilidi kullanarak kilitleyebileceğiniz yok edilemez bir kutunuz olduğunu varsayalım.
Talimatları kilitli bir kutuda arkadaşınıza gönderirseniz, kutu onlara ulaştığında açabilir ve talimatları okuyabilirler.
Bundan sonra, casusluk yapma riski olmadan gizli kod ile iletişim kurabilirsiniz.
Bu metaforda, gizli kod simetrik şifreleme anahtarını, kilit sunucunun açık anahtarını ve anahtar sunucunun özel anahtarını temsil eder.
Sadece bir kez asimetrik kriptografi kullanırsınız, bu nedenle hızlıdır ve şimdi simetrik şifreleme ile özel olarak iletişim kurabilirsiniz.
Gerçek Dünya Gerçekte, konuştuğunuz kişinin söyledikleri kişi olup olmadığını doğrulamak için biraz daha kriptografi gerekir; bu, dijital imzalar ve sertifikalar kullanılarak yapılır. HTTPS’in (anahtarların değiş tokuş edilmesi gereken bir örnek) nasıl çalıştığı hakkında daha fazla detaylı bilgi bulabilirsiniz: Robert Heaton’ın blog yazısı.
Dijital İmza Nedir? Dijital imzalar, dosyaların kimlik doğruluğunu kanıtlamak, kim tarafından oluşturulduğunu veya değiştirildiğini ispatlamak için kullanılan bir yöntemdir. Asimetrik kriptografi kullanılarak, özel anahtarınızla bir imza üretirsiniz ve bu imza, açık anahtarınızla doğrulanabilir. Sadece siz özel anahtarınıza erişim hakkına sahip olduğunuz için, bu dosyayı imzaladığınız kanıtlanmış olur. Dijital imzalar ve fiziksel imzalar Birleşik Krallık’ta hukuki olarak eşdeğer kabul edilir.
En basit dijital imza şekli, belgeyi özel anahtarınızla şifrelemek ve birinin bu imzayı doğrulamak istemesi durumunda, belgenin sizin açık anahtarınızla şifresinin çözülmesi ve dosyaların eşleşip eşleşmediğinin kontrol edilmesidir.
Sertifikalar – Kim Olduğunuzu Kanıtlar! Sertifikalar, dijital imzalarla bağlantılı olarak açık anahtar kriptografisinin bir diğer önemli kullanım alanıdır. HTTPS’te sıkça kullanılırlar. Web tarayıcınız, konuştuğunuz sunucunun gerçek tryhackme.com olup olmadığını nasıl bilir?
Cevap, sertifikalardır. Web sunucusu, gerçek tryhackme.com olduğunu belirten bir sertifikaya sahiptir. Sertifikaların bir güven zinciri vardır ve bu zincir bir kök CA (sertifika yetkilisi) ile başlar. Kök CA’lar, cihazınız, işletim sisteminiz veya tarayıcınız tarafından otomatik olarak güvenilir olarak kabul edilir. Altındaki sertifikalar, Kök CA’ların o kurumu güvenilir olarak belirlediği için güvenilir. Altındaki sertifikalar da Kök CA tarafından güvenilen kurumu tanıdığı için güvenilir ve bu şekilde devam eder. Uzun güven zincirleri vardır. Yine, bu blog yazısı bunu benden çok daha iyi açıklıyor: Robert Heaton’ın blog yazısı
Kendi HTTPS sertifikalarınızı sahip olduğunuz alanlar için Let’s Encrypt aracılığıyla ücretsiz olarak alabilirsiniz. Bir web siteniz varsa, bunu kurmak için değerli olabilir.
Soru: TryHackMe’nin HTTPS sertifikası kim tarafından verilir?
Cevap: E5
Şifreleme ve SSH Kimlik Doğrulama Varsayılan olarak, SSH kullanıcı adları ve şifreler kullanılarak kimlik doğrulaması yapılır, tıpkı fiziksel makineye giriş yaparken olduğu gibi.
Bir noktada, SSH’nin anahtar kimlik doğrulaması ile yapılandırıldığı bir makineyle karşılaşmanız neredeyse kesindir. Bu yöntem, istemcinin sunucuda geçerli ve yetkili bir kullanıcı olduğunu kanıtlamak için açık ve özel anahtarları kullanır. Varsayılan olarak, SSH anahtarları RSA anahtarlarıdır. Hangi algoritmanın kullanılacağını seçebilir ve/veya SSH anahtarını şifrelemek için bir şifre ekleyebilirsiniz. Anahtar çiftlerini oluşturmak için genellikle ssh-keygen
programı kullanılır.
SSH Özel Anahtarları Özel SSH anahtarlarınızı şifreler gibi düşünmelisiniz. Onları paylaşmayın; özel anahtarlar adından da anlaşılacağı gibi gizli tutulmalıdır. Birisi özel anahtarınıza sahipse, bu anahtarı şifrelenmediği sürece sunuculara giriş yapmak için kullanabilir.
Anahtarın şifresini çözmek için kullanılan şifrenin, sunucuya kimliğinizi doğrulamak için kullanılmadığını belirtmek çok önemlidir; bu şifre sadece SSH anahtarını şifrelerden arındırır. Şifre asla iletilmez ve sisteminizden ayrılmaz.
John the Ripper gibi araçları kullanarak şifrelenmiş bir SSH anahtarına saldırabilirsiniz, bu da güvenli bir şifre kullanmanın ve özel anahtarınızı gizli tutmanın önemini vurgular.
Bir uzak makineye giriş yapmak için bir SSH anahtarı oluştururken, anahtarları kendi makinenizde oluşturmalı ve ardından yalnızca açık anahtarı kopyalamalısınız, bu şekilde özel anahtar hedef makinede hiç bulunmaz. CTF kutularına erişim için oluşturulan geçici anahtarlar için bu kadar önemli olmayabilir.
Bu Anahtarları Nasıl Kullanırım? Anahtarları depolamak için varsayılan yer ~/.ssh
klasörüdür. Bu dizindeki authorized_keys
(Amerikan İngilizcesi yazımı) dosyası, anahtar kimlik doğrulaması etkinleştirilmişse sunucuya erişmeye izin verilen açık anahtarları tutar. Birçok dağıtımda varsayılan olarak anahtar kimlik doğrulaması etkinleştirilmiştir, çünkü bu, şifre kullanarak kimlik doğrulama yapmaktan daha güvenlidir. Genellikle kök kullanıcı için sadece anahtar kimlik doğrulaması etkinleştirilmiştir.
Özel bir SSH anahtarını kullanmak için, izinlerin doğru şekilde ayarlanmış olması gerekir, aksi takdirde SSH istemciniz dosyayı uyarı vererek görmezden gelir. Sadece sahip anahtarı okuyabilir veya yazabilir (600 veya daha sıkı izinler). ssh -i keyNameGoesHere user@host
komutu, standart Linux OpenSSH istemcisi için bir anahtar belirlemenin yoludur.
SSH Anahtarlarını Daha İyi Bir Shell İçin Kullanma SSH anahtarları, tersine bağlantı shell’ini “geliştirmek” için mükemmel bir yoldur, kullanıcının giriş izni olması durumunda (www-data genellikle izin vermez, ancak normal kullanıcılar ve kök kullanıcılarda bu mümkündür). Bir kutuda authorized_keys
içinde bir SSH anahtarı bırakmak, yararlı bir arka kapı olabilir ve Control-C veya sekme tamamlamama gibi dengesiz tersine bağlantı shell sorunlarıyla uğraşmanız gerekmez.
Anahtar Değişimi Nedir? Anahtar değişimi, iki kişinin/partinin gözlemcinin bu anahtarları elde edemeyeceği bir şekilde ortak kriptografik anahtarlar oluşturmasını sağlar. Genellikle, ortak simetrik anahtarlar oluşturmak için kullanılır.
Diffie-Hellman Anahtar Değişimi Nasıl Çalışır? Alice ve Bob güvenli bir şekilde konuşmak istiyorlar. Ortak bir anahtar oluşturmak istiyorlar, böylece simetrik kriptografi kullanabilirler, ancak asimetrik kriptografi ile anahtar değişimi yapmak istemiyorlar. İşte burada DH Anahtar Değişimi devreye girer.
Alice ve Bob, A ve B olarak adlandıracağımız, oluşturdukları bazı gizli bilgilere sahiptirler. Ayrıca, C olarak adlandıracağımız bazı ortak, herkese açık materyalleri de vardır.
Bazı varsayımlar yapmamız gerekiyor. İlk olarak, gizli bilgileri/materyali birleştirdiğimizde, bunları ayırmak imkansız veya çok zor olmalıdır. İkinci olarak, bunların birleştirilme sırası önemli değildir.
Alice ve Bob, gizli bilgilerini ortak materyalle birleştirir ve AC ve BC oluştururlar. Daha sonra bunları birbirlerine gönderirler ve kendi gizli bilgileriyle birleştirerek iki aynı anahtar, her ikisi de ABC oluştururlar. Artık bu anahtarı iletişim kurmak için kullanabilirler.
Ek Kaynaklar Görsel bir açıklama isterseniz, harika bir video buradadır: YouTube Video
DH Anahtar Değişimi, genellikle RSA açık anahtar kriptografisi ile birlikte kullanılır, böylece konuştuğunuz kişinin kimliğini dijital imzalarla doğrulayabilirsiniz. Bu, birinin Bob gibi davranarak bağlantıyı adam ortada (man-in-the-middle) saldırısı ile hedef almasını engeller.
PGP Nedir? PGP, Pretty Good Privacy’nin kısaltmasıdır. Dosyaları şifrelemek, dijital imzalama yapmak ve daha fazlasını gerçekleştirmek için kullanılan bir yazılımdır.
GPG Nedir? GnuPG veya GPG, GNU projesinden açık kaynaklı bir PGP uygulamasıdır. CTF’lerde dosyaları şifrelemek için GPG kullanmanız gerekebilir. PGP/GPG ile özel anahtarlar, SSH özel anahtarlarıyla benzer şekilde şifrelerle korunabilir. Anahtar şifre korumalıysa, bu şifreyi John The Ripper ve gpg2john kullanarak kırmayı deneyebilirsiniz. Bu görevde sağlanan anahtar bir şifre ile korunmamaktadır.
GPG’nin kılavuz sayfası çevrimiçi olarak buradadır.
AES Nedir? AES, bazen yaratıcılarının adı olan Rijndael ile anılır, Advanced Encryption Standard’ın kısaltmasıdır. Kısa anahtarlar ve diğer kriptografik kusurları olan DES’in yerine geçmiştir.
AES ve DES, veri blokları üzerinde çalışır (blok, sabit boyutlu bir bit dizisidir).
AES’in açıklanması karmaşıktır ve genellikle bu kadar sık ortaya çıkmaz. Nasıl çalıştığını öğrenmek isterseniz, buradan mükemmel bir video izleyebilirsiniz: Computerphile Video
Kuantum Bilgisayarlar ve Şifreleme Kuantum bilgisayarlar, birçok şifreleme türü için yakında bir sorun olacak.
Asimetrik Şifreleme ve Kuantum Yeterince güçlü kuantum bilgisayarların 2030 civarında mevcut olmasının olası olduğu düşünülmektedir. Bu bilgisayarlar mevcut RSA veya Eliptik Eğri Kriptografisi (ECC) kullanan şifrelemeleri çok hızlı bir şekilde kırabilir. Bunun nedeni, kuantum bilgisayarların bu algoritmaların güçleri için dayandığı matematiksel problemleri çok verimli bir şekilde çözebilmesidir.
AES/DES ve Kuantum 128 bit anahtarlarla AES’in de kuantum bilgisayarlar tarafından yakın gelecekte kırılması muhtemeldir, ancak 256 bit AES bu kadar kolay kırılmayabilir. Triple DES de kuantum bilgisayarların saldırılarına karşı savunmasızdır.
Mevcut Tavsiyeler NSA, asimetrik şifreleme için RSA-3072 veya daha iyisinin ve simetrik şifreleme için AES-256 veya daha iyisinin kullanılmasını önermektedir. Kuantum güvenli kriptografik algoritmalar için şu anda birkaç yarışma düzenlenmektedir ve kuantum bilgisayarlar RSA ve AES için bir tehdit haline gelmeden önce yeni bir şifreleme standardı alacağımız muhtemeldir.
Kuantum Bilgisayarlar ve Kriptografi Hakkında Daha Fazla Bilgi Edinin Bu konuda daha fazla bilgi edinmek isterseniz, NIST’in mevcut şifreleme ile ilgili sorunları ve bu sorunlar için önerilen çözümleri detaylandıran kaynakları vardır: NIST Kaynağı
Ayrıca, kuantum bilgisayarlar ve kuantum güvenli kriptografi konusunda benim tanışmamı sağlayan “Cryptography Apocalypse” adlı kitabı Roger A. Grimes’in öneririm.