pgp - pretty good privacy

 

PGP (Pretty Good Privacy) Nedir?

PGP (Pretty Good Privacy), dosyaları şifrelemek, dijital imzalar oluşturmak ve daha fazlası için kullanılan bir yazılımdır. GnuPG veya GPG ise, OpenPGP standardının açık kaynaklı bir uygulamasıdır.

GPG, özellikle e-posta iletişiminin gizliliğini korumak amacıyla yaygın olarak kullanılır. Bunun yanında, bir e-posta mesajını imzalayarak içeriğinin bütünlüğünü doğrulamak da mümkündür.

GPG Anahtarının Oluşturulması ve Kullanımı

Bir GPG anahtarı oluşturulurken yapılacak bazı önemli seçimler bulunmaktadır:

  1. İmzalama ve Şifreleme Seçenekleri: GPG anahtarı oluştururken, sadece imzalama mı yoksa hem imzalama hem de şifreleme yapma tercihini seçmeniz gerekir. Bu, anahtarın hangi amaçla kullanılacağını belirler.

  2. Kriptografik Algoritma Seçimi: GPG, farklı şifreleme algoritmalarını destekler. Örneğin, RSA, DSA, ve ECC (Eliptik Eğri Kriptografisi) gibi algoritmalar seçilebilir.

  3. Anahtar Geçerlilik Süresi: Anahtarın ne kadar süreyle geçerli olacağını belirlemeniz gerekir. Süresiz geçerli bir anahtar mı istersiniz, yoksa belirli bir süre sonunda mı geçerliliği sona ersin?

  4. Kişisel Bilgiler: Anahtarın sahibi olarak kimlik bilgilerinizi sağlarsınız. Genellikle ad, e-posta adresi ve anahtarın amacıyla ilgili bir açıklama girilir.

Aşağıda, bir GPG anahtarını oluşturmak için terminaldeki komutlardan örnekler yer almaktadır:

bash
gpg --full-gen-key gpg (GnuPG) 2.4.4; Copyright (C) 2024 g10 Code GmbH This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. Please select what kind of key you want: (1) RSA and RSA (2) DSA and Elgamal (3) DSA (sign only) (4) RSA (sign only) (9) ECC (sign and encrypt) *default* (10) ECC (sign only) (14) Existing key from card Your selection? 9 Please select which elliptic curve you want: (1) Curve 25519 *default* (4) NIST P-384 (6) Brainpool P-256 Your selection? 1 Please specify how long the key should be valid. 0 = key does not expire <n> = key expires in n days <n>w = key expires in n weeks <n>m = key expires in n months <n>y = key expires in n years Key is valid for? (0) Key does not expire at all Is this correct? (y/N) y GnuPG needs to construct a user ID to identify your key. Real name: strategos Email address: strategos@tryhackme.thm [...] pub ed25519 2024-08-29 [SC] AB7E6AA87B6A8E0D159CA7FFE5E63DBD5F83D5ED uid Strategos <strategos@tryhackme.thm> sub cv25519 2024-08-29 [E]

Bu süreçte şunları yapmış olduk:

  1. Kriptografik algoritmayı seçme: Burada ECC (Eliptik Eğri Kriptografisi) seçilmiştir ve Curve 25519 seçeneği tercih edilmiştir.

  2. Anahtarın geçerlilik süresini belirleme: Anahtarın süresiz geçerli olması istenmiştir.

  3. Kişisel bilgilerin girilmesi: Ad, e-posta adresi gibi bilgiler sağlanmıştır.

Anahtar başarıyla oluşturulduktan sonra, aşağıdaki gibi bir çıktı alırsınız:

css
pub ed25519 2024-08-29 [SC] AB7E6AA87B6A8E0D159CA7FFE5E63DBD5F83D5ED uid Strategos <strategos@tryhackme.thm> sub cv25519 2024-08-29 [E]

PGP/GPG ile Dosya Şifreleme ve İmzalama

PGP/GPG, sadece e-posta mesajlarını şifrelemekle kalmaz, aynı zamanda dosya şifreleme ve dijital imza oluşturma işlemleri için de kullanılabilir. Şifreleme işlemi sırasında, public key (açık anahtar) kullanılarak gönderilen mesajın gizliliği korunur. Alıcı, sadece private key (özel anahtar) ile bu mesajı çözebilir.

E-posta ile ilgili bir örnek:

  1. Anahtar Paylaşımı: GPG anahtar çiftini oluşturduktan sonra, public key (açık anahtar) alıcılarla paylaşılır.

  2. Mesaj Şifreleme: Alıcı, sizinle güvenli bir şekilde iletişim kurmak istediğinde, mesajlarını sizin public key’inizi kullanarak şifreler.

  3. Mesaj Çözme: Alıcıdan gelen şifrelenmiş mesajı çözmek için, sadece sizin private key’iniz gereklidir.

GPG Anahtarının Yedeklenmesi ve Taşınması

GPG anahtarınız oldukça önemli bir araçtır, bu yüzden yedeklenmesi gerekir. Örneğin, yeni bir bilgisayar aldığınızda, eski anahtarınızı bu yeni cihaza import ederek, şifrelenmiş mesajları yine çözebilirsiniz.

Anahtar yedeği alma:

bash
gpg --export-secret-keys > backup.key

Anahtarınızı yeni bilgisayara aktarma:

bash
gpg --import backup.key

Mesaj çözme:

bash
gpg --decrypt confidential_message.gpg

Pratik Uygulama:

  1. Anahtar Paylaşımı: Public key'inizi diğer kişilere gönderirsiniz.

  2. Mesaj Gönderme: Kişiler, mesajlarını şifrelemek için public key'inizi kullanır.

  3. Mesaj Çözme: Gönderilen şifreli mesajları private key'iniz ile çözebilirsiniz.

Anahtarınızı korumak önemlidir, çünkü şifreli mesajlar sadece sizin private key'inizle çözülebilir. Bu yüzden, private key’inizi güvenli bir yerde saklamak ve yedeğini almak gereklidir.

Şifreleme Anahtarı Korumaları: GPG anahtarlarını, tıpkı SSH özel anahtarlarını koruduğumuz gibi, parola ile koruyabilirsiniz. Eğer anahtarınız parola korumalıysa, bu parolayı kırmaya çalışabilirsiniz, bunun için John the Ripper ve gpg2john araçlarını kullanabilirsiniz. Bu görevde sağlanan anahtar parola ile korunmamaktadır.

GPG Komutları ve İpuçları

GPG’nin kullanımına dair detaylar için komut satırında man gpg komutuyla GPG'nin kılavuz sayfasına erişebilirsiniz.


English Translation

What is PGP (Pretty Good Privacy)?

PGP (Pretty Good Privacy) is software used for encrypting files, creating digital signatures, and more. GnuPG or GPG is an open-source implementation of the OpenPGP standard.

GPG is commonly used in email communication to protect the confidentiality of messages. Additionally, it can be used to sign an email message and confirm its integrity.

Creating and Using GPG Keys

When creating a GPG key, there are several important choices to make:

  1. Signing and Encryption Options: You choose whether you want the key for signing only or both signing and encryption. This defines the key’s intended purpose.

  2. Cryptographic Algorithm Selection: GPG supports different encryption algorithms, such as RSA, DSA, and ECC (Elliptic Curve Cryptography).

  3. Key Expiry Duration: You specify the validity of the key, whether it should be valid forever or expire after a certain period.

  4. Personal Information: You provide identifying details such as your name, email address, and a comment about the key's purpose.

Here is an example of the terminal commands when generating a GPG key:

bash
gpg --full-gen-key gpg (GnuPG) 2.4.4; Copyright (C) 2024 g10 Code GmbH This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. Please select what kind of key you want: (1) RSA and RSA (2) DSA and Elgamal (3) DSA (sign only) (4) RSA (sign only) (9) ECC (sign and encrypt) *default* (10) ECC (sign only) (14) Existing key from card Your selection? 9 Please select which elliptic curve you want: (1) Curve 25519 *default* (4) NIST P-384 (6) Brainpool P-256 Your selection? 1 Please specify how long the key should be valid. 0 = key does not expire <n> = key expires in n days <n>w = key expires in n weeks <n>m = key expires in n months <n>y = key expires in n years Key is valid for? (0) Key does not expire at all Is this correct? (y/N) y GnuPG needs to construct a user ID to identify your key. Real name: strategos Email address: strategos@tryhackme.thm [...] pub ed25519 2024-08-29 [SC] AB7E6AA87B6A8E0D159CA7FFE5E63DBD5F83D5ED uid Strategos <strategos@tryhackme.thm> sub cv25519 2024-08-29 [E]

Encrypting and Signing Files with PGP/GPG

PGP/GPG can be used for more than just email encryption; it also facilitates file encryption and digital signatures. During encryption, the public key is used to protect the message, and the recipient can decrypt it using the private key.

Backing Up and Transferring Your GPG Key

It’s essential to back up your GPG keys because they are critical. If you get a new computer, you can import your key to the new device and continue decrypting messages.

Backing up your key:

bash
gpg --export-secret-keys > backup.key

Importing your key:

bash
gpg --import backup.key

Decrypting messages:

bash
gpg --decrypt confidential_message.gpg

Practical Example

  1. Key Sharing: You share your public key with others.

  2. Message Sending: Others encrypt messages to you using your public key.

  3. Message Decryption: You decrypt the received encrypted messages with your private key.

It’s important to keep your private key secure because only it can decrypt the messages sent to you. Hence, you should always store your private key in a secure location and back it up.


***


Şifreleme (Cryptography), Şifre Kırma (Cryptanalysis) ve Saldırı Yöntemleri: Brute Force & Dictionary Attack


🔐 Cryptography (Şifreleme Bilimi) Nedir?

Cryptography, yani şifreleme bilimi, bilgi ve iletişimi yetkisiz kişilerden korumak amacıyla geliştirilmiş matematiksel yöntemleri içerir. Amacı:

  • Verinin gizliliğini sağlamak (sadece yetkili kişiler okuyabilsin),

  • Verinin bütünlüğünü korumak (değiştirilemediğini garanti etmek),

  • Kimlik doğrulama sağlamak (mesajı kimin gönderdiğini kanıtlamak),

  • Ve inkâr edilemezlik (gönderenin mesajı inkâr edememesi).

Bu bilim, mesajları şifreli (anlaşılamaz) hale getirerek çalışır. Mesajı tekrar anlaşılabilir hale getirmek için özel bir anahtar gerekir.


🧠 Cryptanalysis (Şifre Çözümleme) Nedir?

Cryptanalysis, şifrelenmiş bilgileri anahtar olmadan çözme sanatıdır. Diğer bir deyişle:

  • Amaç, bir şifreleme sistemini kırmak veya

  • Şifreli mesajın içeriğine ulaşmak için açıklar bulmaktır.

Bu, siber güvenlik uzmanlarının olduğu kadar siber saldırganların da başvurduğu bir disiplindir.


💣 Brute-Force Attack (Kaba Kuvvet Saldırısı)

Bu saldırı türünde saldırgan, bir parolayı veya şifreleme anahtarını bulmak için tüm olasılıkları teker teker dener.

Örneğin:

  • 4 basamaklı bir PIN kodu varsa (0000 - 9999 arası), saldırgan hepsini sırayla dener.

  • Avantajı: Sonunda doğruyu bulur.

  • Dezavantajı: Çok zaman ve işlem gücü gerektirir.


📚 Dictionary Attack (Sözlük Tabanlı Saldırı)

Eğer saldırgan, hedef parolanın bir kelime olabileceğini düşünüyorsa (örneğin: “password”, “123456”, “letmein”), her olasılığı denemek yerine, sık kullanılan parolaların bulunduğu bir “sözlük dosyası” kullanır.

  • Bu yöntem, brute-force’tan çok daha hızlıdır çünkü yalnızca olası (ve zayıf) şifreler denenir.

  • Günümüzde çoğu zayıf parola bu şekilde kolayca ele geçirilebilir.


📌 Bu Odada Ne Öğrendin?

Bu TryHackMe odasında şu konuların temelleri işlendi:

  • Asimetrik şifreleme (Public Key Cryptography): Herkese açık bir anahtar (public key) ile şifreleme, sadece size özel olan gizli anahtar (private key) ile çözme mantığı.

  • RSA: Asimetrik kriptografinin en çok bilinen algoritmalarından biri.

  • Diffie-Hellman: Ortak anahtar değişimini güvenli şekilde yapmayı sağlayan bir protokol.

  • SSH Anahtarları: Sunucuya parolasız güvenli giriş için kullanılan anahtar çiftleri.

  • Dijital İmzalar ve Sertifikalar: Verinin gerçekten belirli bir kişiden gelip gelmediğini ve değişmediğini doğrulamak için kullanılır.

  • OpenPGP: E-posta gibi iletişimlerde güvenliği sağlamak için kullanılan açık standart bir şifreleme sistemi.


🔜 Sıradaki Konu: Hashing (Özetleme)

Artık veri şifrelemenin ve anahtar değişiminin temellerini öğrendin. Sırada, verilerin sabit uzunlukta özetlerini çıkaran ve güvenliğin başka bir temel taşı olan hashing konusu var.


digital signatures and certificates

 "Analog" dünyada, zaman zaman bir kağıdı imzalamanız istenir.

Geleneksel, fiziksel dünyada belge imzalamak, sıkça karşılaşılan bir durumdur. Örneğin:


Banka işlemleri: Bir tasarruf hesabı açmak için bankaya gittiğinizde, genellikle bir dizi belgeyi imzalamanız istenir.


Kütüphane üyelikleri: Yerel kütüphaneye üye olmak istediğinizde, başvuru formu doldurup imzalamanız gerekir.


Hukuki anlaşmalar: Sözleşmelerin ya da onay formlarının imzalanması da bu kategoriye girer.


Bu durumlarda imzanın amacı, duruma bağlı olarak değişir. Örneğin:


Şartlar ve koşullara onay verme: Bir işlem ya da sözleşme ile ilgili olarak, belirli şartları kabul ettiğinizi onaylar.


Bir işlemi yetkilendirme: Örneğin bir para transferi veya satın alma işlemini onaylama.


Bir öğenin alındığını kabul etme: Aldığınız bir ürün veya hizmetin teslim alındığını belirten bir onay.


Bu imzalar, genellikle sizin rızanızı veya kabulünüzü yasal olarak doğrulayan bir anlam taşır ve gerçek dünyada hukuki bir geçerliliğe sahiptir.


Dijital İmza Nedir?

Dijital imzalar, dijital bir mesajın ya da belgenin geçerliliğini ve bütünlüğünü doğrulamak için kullanılan bir yöntemdir. Bir dosyanın geçerliliğini kanıtlamak, onun kim tarafından oluşturulduğunu veya değiştirildiğini bilmek anlamına gelir. Bu işlem asimetrik şifreleme kullanarak yapılır. Kendi özel anahtarınızla bir imza oluşturursunuz ve bu imza, herkesin erişebileceği halka açık anahtarınızla doğrulanabilir. Yalnızca siz, özel anahtarınıza sahip olmalısınız, bu da dosyayı siz imzaladığınızı kanıtlar. Birçok modern ülkede, dijital ve fiziksel imzalar aynı hukuki değere sahiptir.


Dijital imzanın en basit şekli, belgeyi özel anahtarınızla şifrelemektir. Bu imzayı doğrulamak isteyen biri, sizin halka açık anahtarınızı kullanarak şifreyi çözebilir ve dosyaların eşleşip eşleşmediğini kontrol edebilir. Aşağıdaki şekilde gösterilen süreç, bunu açıklamaktadır.


Bir mesajı imzalama örneği: Bob, bir mesajı kendi özel anahtarıyla şifreler ve Alice, Bob’un halka açık anahtarıyla bunu çözer.


Bazı makalelerde, elektronik imza ve dijital imza terimleri birbirinin yerine kullanılmaktadır. Bu terimler, bir belgenin üzerine imza görüntüsünün yapıştırılmasını ifade eder. Ancak bu yaklaşım, belgenin bütünlüğünü kanıtlamaz çünkü herkes bu görüntüyü kopyalayıp yapıştırabilir.


Bu görevde, dijital imza terimini, bir belgeyi özel anahtarınızla ya da bir sertifika ile imzalamak anlamında kullanıyoruz. Bu süreç, yukarıdaki şekilde olduğu gibidir: Bob, belgesinin bir özetini şifreler ve Alice’e, şifrelenmiş özetle birlikte orijinal belgeyi gönderir. Alice, şifrelenmiş özeti çözer ve aldığı dosyanın özetiyle karşılaştırır. Bu yaklaşım, imzanın doğruluğunu kanıtlar ve bir imza görüntüsünün eklenmesinden çok daha güvenlidir. Özetleme işlemi, "Hashing Basics" odasında ele alınacaktır.


Sertifikalar: Kim Olduğunuzu Kanıtlayın!

Sertifikalar, açık anahtar şifrelemesinin önemli bir uygulamasıdır ve dijital imzalarla bağlantılıdır. En yaygın kullanıldıkları yerlerden biri HTTPS’dir. Peki, web tarayıcınız, konuştuğunuz sunucunun gerçekten tryhackme.com olduğunu nasıl anlar?


Cevap sertifikalardır. Web sunucusunun, gerçek tryhackme.com olduğunu belirten bir sertifikası vardır. Sertifikaların, güven zinciri vardır ve bu zincir, bir root CA (Sertifika Yetkilisi) ile başlar. Cihazınız, işletim sisteminiz ve web tarayıcınız, kurulum aşamasından itibaren otomatik olarak farklı root CA’larına güvenmektedir. Sertifikalar yalnızca Root CA’ların, onları imzalayan kuruluşa güvenmesi durumunda geçerlidir. Bu, bir zincir gibi çalışır; örneğin, sertifika bir kuruluş tarafından imzalanır, o kuruluş bir CA tarafından güvenilir kabul edilir ve CA da tarayıcınız tarafından güvenilir kabul edilir. Bu nedenle, tarayıcınız sertifikaya güvenir. Genellikle uzun güven zincirleri bulunur. Mozilla Firefox'un güvendiği sertifika yetkililerine buradan ve Google Chrome’un güvendiği sertifika yetkililerine ise buradan göz atabilirsiniz.


Diyelim ki bir web siteniz var ve HTTPS kullanmak istiyorsunuz. Bu işlem, bir TLS sertifikasına sahip olmayı gerektirir. Bunu, çeşitli sertifika yetkililerinden yıllık bir ücret karşılığında alabilirsiniz. Ayrıca, kendi alan adlarınız için Let's Encrypt aracılığıyla ücretsiz TLS sertifikaları alabilirsiniz. Bir web sitesi işletiyorsanız, HTTPS’ye geçmek oldukça önemlidir çünkü her modern web sitesi bu protokolü kullanır.









ssh - crypto

Sunucuyu Kimlik Doğrulama (Authenticating the Server)

Eğer daha önce bir SSH istemcisi kullandıysanız, terminal çıktısında aşağıdaki gibi bir onay istemiyle karşılaşmışsınızdır:

bash
root@TryHackMe# ssh 10.10.244.173 The authenticity of host '10.10.244.173 (10.10.244.173)' can't be established. ED25519 key fingerprint is SHA256:lLzhZc7YzRBDchm02qTX0qsLqeeiTCJg5ipOT0E/YM8. This key is not known by any other name. Are you sure you want to continue connecting (yes/no/[fingerprint])? yes Warning: Permanently added '10.10.244.173' (ED25519) to the list of known hosts.

Bu uyarı, SSH istemcisinin sunucunun gizli anahtar parmak izini tanımadığını ve bu nedenle bağlantıyı onaylamadan önce kullanıcının sunucunun kimliğini doğrulamasını istediğini gösteriyor.

  • Gizli anahtar parmak izi (fingerprint): Sunucunun kamusal anahtarından hesaplanan bir değer olup, sunucunun kimliğini doğrulamak için kullanılır. Eğer istemci bu parmak izini daha önce görmemişse, kullanıcıya bunu kontrol etmesi ve bağlantıyı onaylaması istenir.

  • Bu uyarı, Man-in-the-Middle (MITM) saldırısı olasılığına karşı bir uyarıdır. MITM saldırısında kötü niyetli bir kişi, bağlantıyı kesip kendi sunucusunu gerçek sunucu gibi gösterebilir.

Eğer doğru sunucuya bağlandığınızdan emin değilseniz, bağlantıya devam etmemeniz gerekir. Ancak, evet diyerek devam ettiğinizde, SSH istemcisi bu parmak izini kaydeder ve bir sonraki bağlantılarda bu doğrulama işlemi yapılmaz.

Sunucuya Kimlik Doğrulama Uyarısı

Bu tip bir uyarı normalde güvenli bir bağlantıyı sağlamak için gereklidir. SSH istemcisi, bir sunucunun kimliğini doğrulamak için önceki bağlantılarda kaydedilen anahtar parmak izlerini kullanır. Bu sayede bağlantı güvenli bir şekilde yapılır. Eğer parmak izi değişirse, SSH istemcisi tekrar uyarı verir, çünkü bu, bir saldırıyı işaret ediyor olabilir.


İstemciyi Kimlik Doğrulama (Authenticating the Client)

Sunucuya güvenli bir şekilde bağlandıktan sonra, istemcinin kimliği doğrulanmalıdır. Genellikle SSH, kullanıcı adı ve şifreyle kimlik doğrulaması yapar. Ancak, şifrelerin güvenlik riskleri taşıması nedeniyle, bu yöntem çoğu zaman önerilmez.

Şifrelerin zayıf olması, açık olması veya yeniden kullanılabilir olması gibi çeşitli güvenlik problemleri vardır. Bu yüzden daha güvenli bir yöntem olarak anahtar tabanlı kimlik doğrulaması tercih edilir.

Bu tür kimlik doğrulaması, istemcinin özel anahtarı ile sunucuyu doğrulamasını sağlar. Anahtar tabanlı kimlik doğrulamasının avantajı şudur: Bir kişinin özel anahtarını ele geçirmesi durumunda bile, bu anahtar şifresizse, kişinin o sunucuya erişim sağlaması mümkün olur. Bu yüzden anahtarların şifreli olması çok önemlidir.


Anahtar Çifti Üretme (Generating the Key Pair)

Anahtar tabanlı kimlik doğrulaması için bir anahtar çifti oluşturulur. ssh-keygen komutu bu işlemi gerçekleştirmek için yaygın olarak kullanılır. Bu komut, kullanılan anahtar algoritmalarına bağlı olarak farklı türde anahtarlar oluşturabilir. En yaygın anahtar türleri şunlardır:

  • RSA: Yaygın olarak kullanılan bir şifreleme algoritmasıdır.

  • ED25519: Daha güvenli ve verimli bir algoritmadır.

  • ECDSA: Eliptik eğri şifrelemesi kullanan bir algoritmadır.

Örneğin, ed25519 türünde bir anahtar çifti oluşturmak için şu komutu kullanabilirsiniz:

bash
root@TryHackMe# ssh-keygen -t ed25519

Bu komutla ed25519 türünde bir anahtar çifti üretirsiniz. Komut çalıştırıldığında, aşağıdaki gibi bir çıktı elde edersiniz:

bash
Generating public/private ed25519 key pair. Enter file in which to save the key (/home/strategos/.ssh/id_ed25519): Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /home/strategos/.ssh/id_ed25519 Your public key has been saved in /home/strategos/.ssh/id_ed25519.pub The key fingerprint is: SHA256:4S4DQvRfp52UuNwg++nTcWlnITEJTbMcCU0N8UYC1do strategos@g5000
  • Bu komutla, özel anahtar /home/strategos/.ssh/id_ed25519 dosyasına, kamusal anahtar ise /home/strategos/.ssh/id_ed25519.pub dosyasına kaydedilir.

  • Passphrase: Bu, özel anahtarın şifreli olarak saklanmasını sağlar. Eğer bir passphrase girilirse, özel anahtara erişmek için bu şifre gerekecektir.


Anahtarları Görüntülemek

Anahtar çiftlerini oluşturduktan sonra, aşağıdaki gibi her iki anahtarı da görüntüleyebilirsiniz.

Kamusal anahtar (id_ed25519.pub):

bash
strategos@g5000:~/.ssh$ cat id_ed25519.pub ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAINqNMqNhpXZGt6T8Q8bOplyTeldfWq3T3RyNJTmTMJq9 strategos@g5000

Bu kamusal anahtar, sunucuda authorized_keys dosyasına eklenmelidir. Bu dosya, sunucuya kimlik doğrulaması yapılacak anahtarların listesini tutar.

Özel anahtar (id_ed25519):

bash
strategos@g5000:~/.ssh$ cat id_ed25519 -----BEGIN OPENSSH PRIVATE KEY----- b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAAAMwAAAAtzc2gtZW QyNTUxOQAAACDajTKjYaV2Rrek/EPGzqZck3pXX1qt090cjSU5kzCavQAAAJA+E+ajPhPm owAAAAtzc2gtZWQyNTUxOQAAACDajTKjYaV2Rrek/EPGzqZck3pXX1qt090cjSU5kzCavQ AAAEB981T2ngdoNm8gEzRU35bGHofqRMjfo5egxl0/9fap/NqNMqNhpXZGt6T8Q8bOplyT eldfWq3T3RyNJTmTMJq9AAAACm9xYWJAZzUwMDABAgM= -----END OPENSSH PRIVATE KEY-----

Özel anahtar, sadece özel bir bilgisayarda tutulmalı ve asla paylaşılmamalıdır. Eğer bu anahtar paylaşılırsa, diğer kişilerin sunucuya erişim sağlamasına izin vermiş olursunuz. Bu nedenle, özel anahtarlarınızı sadece gizli tutmak önemlidir.


SSH Anahtarlarının Güvenliği

Özel anahtarınızı şifrelemeden paylaşmayın. Bu, bir şifre gibi işlev görür ve sunuculara giriş yapmanıza olanak tanır. Bir SSH anahtarını paylaşmak, bu anahtarın başkaları tarafından kullanılmasına yol açabilir.

Eğer özel anahtar şifreliyse, anahtara yalnızca şifreyi bilerek erişilebilir. Şifre, sunucuya gönderilmez; sadece anahtarın şifrelenmiş kısmını açmak için kullanılır.

Anahtarın şifresini kırmak, örneğin John the Ripper gibi araçlarla mümkündür. Bu yüzden, karmaşık bir şifre seçmek ve özel anahtarı gizli tutmak çok önemlidir.


Anahtarların Yetkilendirilmesi ve Kullanımı

  • SSH anahtarlarını authorized_keys dosyasına eklemek gerekir. Bu dosya, sunucuda hangi anahtarların güvenli bir şekilde bağlanmasına izin verildiğini gösterir. Anahtarınız bu dosyada yer almazsa, sunucuya bağlanamazsınız.

  • Anahtarları doğru bir şekilde paylaşmak için ssh-copy-id komutunu kullanabilirsiniz. Bu komut, kamusal anahtarı sunucuya otomatik olarak kopyalar.

Örnek kullanım:

bash
ssh-copy-id user@remote_host

Bu komut, kamusal anahtarınızı uzaktaki ~/.ssh/authorized_keys dosyasına ekler ve anahtar tabanlı kimlik doğrulamasını sağlar.


SSH Anahtarlarıyla “Daha İyi Bir Shell” Almak

CTF'lerde veya penetrasyon testlerinde, SSH anahtarları, ters bağlantılar (reverse shell) gibi durumlarda çok kullanışlı olabilir. Anahtarları sunucuda bırakmak, sizi geri erişim sağlamada rahatlatabilir. Bu durum, ters shell'den (reverse shell) farklı olarak, daha güvenli ve kararlı bir bağlantı sağlar.


Sonuç olarak:

  • Sunucuyu kimlik doğrulama: Sunucunun parmak izini doğrulamak, güvenli bağlantı için gereklidir.

  • İstemci kimlik doğrulama: Anahtar tabanlı kimlik doğrulaması, şifrelerin güvenlik risklerini ortadan kaldırır.

  • Anahtarları güvenli tutma: Özel anahtarınızı paylaşmayın ve şifreli tutun.

diffie-hellman key exchange

 Simetrik Şifreleme ve Anahtar Paylaşım Sorunu

Simetrik şifrelemede, verileri şifrelemek ve çözmek için aynı anahtar (key) kullanılır. Ama problem şurada:

Bu anahtarı karşı tarafa nasıl güvenli bir şekilde ileteceğiz? Eğer biri bu anahtarı ele geçirirse, tüm iletişim tehlikeye girer.


Bu problemi çözmek için kullanılan en akıllıca yöntemlerden biri:


Diffie-Hellman Anahtar Değişimi (Key Exchange)

Amaç: İki kişi (örneğin Alice ve Bob), önceden bir anahtar paylaşmadan, güvenli olmayan bir kanal üzerinden ortak bir gizli anahtar oluşturmak istiyorlar. Bu ortak anahtarı sonra simetrik şifrelemede kullanacaklar.


Temel Fikir:


Ortak bazı bilgiler (örneğin bir asal sayı ve bir "taban") herkese açık olarak paylaşılır.


Alice ve Bob, kendi gizli sayılarıyla bu ortak bilgileri karıştırarak birbirlerine özel hesaplamalar sonucu oluşan açık anahtarları gönderirler.


Daha sonra bu açık anahtarları tekrar kendi gizli sayılarıyla birleştirerek aynı ortak gizli anahtarı elde ederler.


Adım Adım Sayısal Örnek (Basitleştirilmiş)

Gerçekte sayılar çok büyük olur ama burada sade ve anlaşılır olması için küçük değerler kullanıyoruz.


🔐 Ortak Değerler

Asal sayı: p = 29


Taban (generator): g = 3

→ Bu ikisi herkes tarafından biliniyor. İnternette bile açıkça paylaşılabilir.


👤 Alice'in Özel Anahtarı:

a = 13 (saklı tutulur, kimse bilmez)


👤 Bob’un Özel Anahtarı:

b = 15 (saklı tutulur, kimse bilmez)


📨 Herkesin Kendi Açık Anahtarını Hesaplaması:

Alice: A = g^a mod p = 3^13 mod 29 = 19


Bob: B = g^b mod p = 3^15 mod 29 = 26

→ Bu açık anahtarlar karşılıklı olarak gönderilir.


🔁 Ortak Anahtarın Oluşturulması:

Alice: B^a mod p = 26^13 mod 29 = 10


Bob: A^b mod p = 19^15 mod 29 = 10

✅ Her iki taraf da aynı sonucu aldı: 10

→ Bu artık şifrelemede kullanılacak gizli ortak anahtar.


🔒 Gerçek Uygulamada Nasıl Kullanılır?

Yukarıdaki örnek sadece anahtar paylaşım için.


Daha sonra bu ortak anahtar ile AES gibi simetrik şifreleme algoritmaları kullanılabilir.


Diffie-Hellman, gizli anahtarı paylaşmadan oluşturduğu için çok güvenlidir.


🛡️ Güvenlik ve RSA ile İlişkisi

Diffie-Hellman: Ortak gizli anahtar üretmek için kullanılır.


RSA: Kimlik doğrulama, dijital imza ve şifreli mesaj iletimi için kullanılır.

Bu iki yöntem genelde birlikte çalışır. Mesela bir bağlantıda:


Diffie-Hellman ile ortak anahtar üretilir.


RSA ile bu işlemi gerçekten doğru kişiler yaptığı kanıtlanır.

→ Böylece Man-in-the-Middle (ortadaki adam) saldırısı engellenir.

RSA

 

🔐 RSA Nedir ve Neden Güvenlidir?

RSA (Rivest-Shamir-Adleman), herkese açık anahtar kriptografisi (public-key cryptography) yöntemlerinden biridir.
Temel amacı, güvenli olmayan ortamlarda (örneğin internet) güvenli veri iletimini sağlamaktır.
RSA sayesinde, saldırganlar iletişimi dinliyor olsa bile, mesajı çözmeleri mümkün değildir.


⚙️ RSA’nın Dayandığı Matematiksel Temel

RSA, büyük sayıların çarpanlarına ayrılmasının zor olması prensibine dayanır.

  • İki büyük asal sayıyı çarpma işlemi kolaydır.

  • Ancak, bu çarpım sonucunda elde edilen çok büyük bir sayıyı tekrar çarpanlarına ayırmak (faktörlemek) çok zor ve hesaplaması çok pahalı bir işlemdir.

🔢 Örnek:

  • Asal sayı 1: 982451653031

  • Asal sayı 2: 169743212279

  • Çarpımları: 166764499494295486767649

Bu çarpma işlemini bilgisayarla yapmak kolaydır.
Ama 166764499494295486767649 sayısının çarpanlarını bulmak çok daha zordur.

Gerçek RSA uygulamalarında kullanılan asal sayılar genelde her biri 300 basamaklıdır.
Bu yüzden faktörleme işlemi günümüz bilgisayarlarıyla pratik olarak imkânsızdır.


🔑 RSA’da Anahtar Kullanımı

Asimetrik kriptografi mantığı burada da geçerlidir:

RolAçıklama
Herkese Açık Anahtar (Public Key)Herkesle paylaşılır, şifreleme için kullanılır
Özel Anahtar (Private Key)Sadece sahibinde bulunur, şifre çözme (decryption) için kullanılır

Örnek Senaryo:

  • Alice, Bob’a mesaj göndermek istiyor.

  • Bob’un herkese açık anahtarıyla mesajı şifreler.

  • Bu mesajı sadece Bob, özel anahtarıyla çözebilir.


➗ Modüler Aritmetik ve Sayısal RSA Örneği

Kriptografi temellerinde geçen mod işlemi burada hayati önem taşır.

Basit RSA Örneği:

  1. Bob iki asal sayı seçer: p = 157, q = 199

  2. n = p × q = 31243

  3. Euler fonksiyonu: ϕ(n) = n - p - q + 1 = 30888

  4. e = 163 seçilir → ϕ(n) ile aralarında asal.

  5. d = 379 bulunur → e × d mod ϕ(n) = 1

Böylece:

  • Public key: (n, e) = (31243, 163)

  • Private key: (n, d) = (31243, 379)

Şifreleme:

Mesaj: x = 13
Şifreli hali: y = x^e mod n = 13^163 mod 31243 = 16341

Çözme:

Şifre çözülürken: x = y^d mod n = 16341^379 mod 31243 = 13

Ve Alice’in gönderdiği orijinal değer geri elde edilir.

Not: Gerçek sistemlerde bu hesaplamalar çok daha büyük sayılarla yapılır.


🧩 RSA ve CTF’ler (Capture The Flag)

CTF yarışmalarında RSA’ya sıkça rastlanır.
Genellikle aşağıdaki değişkenler verilir:

DeğişkenAçıklama
p, qAsal sayılar
np × q
ePublic key’in parçası
dPrivate key’in parçası
mMesaj (plaintext)
cŞifreli mesaj (ciphertext)

Yarışmalarda genellikle c, n ve e verilir; geri kalanları hesaplayıp m'yi yani mesajı bulman beklenir.

🔧 Araçlar:

  • RsaCtfTool — Otomatik çözümler için çok başarılıdır.

  • rsatool — Anahtar üretimi ve çözümleme için kullanılır.


English Summary

RSA is a public-key encryption algorithm based on the difficulty of factoring large composite numbers. Multiplying two large primes is easy, but factoring their product is computationally hard.

Key Concepts:

  • Public key (n, e) is used to encrypt

  • Private key (n, d) is used to decrypt

  • Security comes from the fact that even if n is known, figuring out p and q is extremely hard.

RSA in Practice:

  1. Pick primes p, q; compute n = p × q

  2. Compute ϕ(n) and choose e such that gcd(e, ϕ(n)) = 1

  3. Find d such that (e × d) % ϕ(n) = 1

  4. Encrypt with: c = m^e mod n

  5. Decrypt with: m = c^d mod n

CTF Tips:

Learn to work with:

  • n, e, d, p, q, m, c
    Use tools like RsaCtfTool to break weak or misconfigured RSA setups.