GPG ve E-Posta Şifreleme (OpenPGP)
Elektronik posta (e-posta), günümüzde en yaygın iletişim araçlarından biridir. Ancak standart e-postalar internet üzerinde çoğunlukla düz metin (plain text) olarak iletilir. Bu durum, kötü niyetli kişiler tarafından ele geçirilmesi halinde içeriklerin okunabilmesine neden olabilir.
Bu sorunu çözmek amacıyla geliştirilen en önemli teknolojilerden biri GPG (GNU Privacy Guard)'dır.
GPG sayesinde;
E-postalar şifrelenebilir.
Dijital imza eklenebilir.
Mesajın değiştirilmediği doğrulanabilir.
Gönderenin kimliği doğrulanabilir.
Güvenli dosya paylaşımı yapılabilir.
Bu makalede GPG'nin çalışma mantığını, OpenPGP standardını, anahtar yönetimini ve e-posta istemcileriyle kullanımını ayrıntılı olarak öğreneceğiz.
GPG Nedir?
GNU Privacy Guard (GPG)
GNU projesi tarafından geliştirilen açık kaynak kodlu bir kriptografi yazılımıdır.
GPG;
OpenPGP standardını uygular.
Ücretsizdir.
Linux
Windows
macOS
üzerinde çalışır.
En yaygın komutu:
gpg
OpenPGP Nedir?
OpenPGP;
PGP (Pretty Good Privacy) standardının açık standart halidir.
RFC 4880 standardı üzerine kuruludur.
OpenPGP;
Anahtar üretimi
Dijital imza
Mesaj şifreleme
Anahtar paylaşımı
Kimlik doğrulama
işlemlerini tanımlar.
GPG Nasıl Çalışır?
GPG hem
Simetrik şifreleme
Asimetrik şifreleme
birlikte kullanır.
İşleyiş şöyledir:
Mesaj↓Rastgele AES anahtarı oluşturulur↓Mesaj AES ile şifrelenir↓AES anahtarı alıcının RSA/ECC anahtarıyla şifrelenir↓İkisi birlikte gönderilir
Bu hibrit yapı sayesinde hem yüksek hız hem de güçlü güvenlik sağlanır.
Asimetrik Şifreleme Mantığı
Her kullanıcı iki anahtara sahiptir.
Public KeyPrivate Key
Public Key
Herkese dağıtılır.
Bununla;
şifreleme yapılır
imza doğrulanır
Private Key
Sadece sahibinde bulunur.
Bununla;
şifre çözülür
dijital imza oluşturulur
Şifreleme Süreci
Ali'nin public key'i:
Ali_Public.asc
Ayşe'nin mesajı:
Merhaba Ali
Ayşe;
Ali'nin Public Key'i
ile mesajı şifreler.
Sonuç:
ciphertext.gpg
Bunu yalnızca Ali kendi private key'i ile açabilir.
Dijital İmza Süreci
Mesaj:
Merhaba
Gönderen;
Private Key kullanarak imza üretir.
Alıcı;
Public Key ile imzayı doğrular.
Böylece;
✔ Mesaj değiştirilmedi
✔ Gönderen gerçekten odur
kanıtı elde edilir.
GPG Kurulumu
Linux
Ubuntu / Debian
sudo apt updatesudo apt install gnupg
Fedora
sudo dnf install gnupg2
Arch
sudo pacman -S gnupg
Windows
Kurulum paketi:
Gpg4win
Kurulum sonrası;
gpgkleopatragpa
programları gelir.
macOS
brew install gnupg
Sürüm Kontrolü
gpg --version
Örnek çıktı:
gpg (GnuPG) 2.4Home:~/.gnupgPubkey:RSAECCED25519Cipher:AESAES192AES256Hash:SHA256SHA384SHA512Compression:ZIPZLIB
İlk Anahtar Çifti Oluşturma
gpg --full-generate-key
Sorular gelir.
Anahtar TürüRSAAnahtar Uzunluğu4096Geçerlilik2 yılAdNuri Tıraşnuri@example.comParola
Sonunda:
Key Created
Anahtarları Listeleme
Public
gpg --list-keys
Private
gpg --list-secret-keys
Fingerprint
Her anahtarın benzersiz kimliği vardır.
Gösterme:
gpg --fingerprint
Örnek:
4A9C 8A72 76A5 92BF991C 5B33 ACF5 C423
Anahtar doğrulamada fingerprint karşılaştırması kritik öneme sahiptir.
Public Key Dışa Aktarma
ASCII biçiminde:
gpg --armor --export nuri@example.com > public.asc
Dosya:
-----BEGIN PGP PUBLIC KEY BLOCK-----...-----END PGP PUBLIC KEY BLOCK-----
Private Key Yedekleme
gpg --armor --export-secret-keys nuri@example.com > private.asc
Uyarı: Private anahtarınızı güvenli, çevrimdışı bir ortamda saklayın. Bu dosyayı ele geçiren kişiler, parolanızı da kırabilirse sizin adınıza imza atabilir ve size gönderilen şifreli içerikleri okuyabilir.
Anahtar İçe Aktarma
gpg --import public.asc
veya
gpg --import private.asc
Dosya Şifreleme
gpg -e -r ali@example.com rapor.pdf
Oluşur:
rapor.pdf.gpg
Dosya Açma
gpg -d rapor.pdf.gpg
veya
gpg --decrypt rapor.pdf.gpg
Simetrik Şifreleme
Anahtar çifti olmadan yalnızca parola ile şifreleme yapılabilir.
gpg -c belge.txt
AES kullanılarak;
belge.txt.gpg
oluşturulur.
Açma:
gpg belge.txt.gpg
Dijital İmza Oluşturma
gpg --sign belge.pdf
veya
ASCII imza:
gpg --clearsign mesaj.txt
Ayrık İmza (Detached Signature)
gpg --detach-sign dosya.iso
Oluşur:
dosya.iso.sig
Doğrulama:
gpg --verify dosya.iso.sig dosya.iso
E-Posta Şifreleme
En yaygın istemciler:
Thunderbird
Outlook (eklenti veya yerleşik destek sürüme göre değişebilir)
Apple Mail (ek araçlarla)
En güçlü destek uzun yıllardır Thunderbird tarafındadır.
Thunderbird ile OpenPGP
Modern Thunderbird'de OpenPGP desteği yerleşik olarak bulunur.
Yapılacaklar:
Hesabı ekleyin.
OpenPGP anahtarınızı oluşturun veya içe aktarın.
Alıcının Public Key'ini ekleyin.
Yeni e-posta oluşturun.
Şifrele ve gerekirse Dijital İmzala seçeneklerini etkinleştirin.
E-postayı gönderin.
Mesaj Akışı
Ayşe↓Mesaj yazdı↓Ali'nin Public Key'i↓Şifreleme↓İnternet↓Ali↓Private Key↓Şifre çözme
Dijital İmzalı E-Posta
Gönderici;
Private Key kullanır.
Alıcı;
Public Key ile doğrular.
Alıcı şu bilgileri görür:
✔ Kim gönderdi
✔ Değiştirilmiş mi
✔ İmza geçerli mi
Anahtar Sunucuları
Public anahtarlar anahtar sunucularında paylaşılabilir.
Örnekler:
keys.openpgp.org
Ubuntu Keyserver ağı (geçmişte yaygın kullanılmıştır)
Anahtar göndermek:
gpg --send-keys KEYID
Anahtar almak:
gpg --recv-keys KEYID
Trust (Güven) Kavramı
GPG'de her Public Key'e güvenilmez.
Seviyeler:
Unknown
None
Marginal
Full
Ultimate
Bu yapı "Web of Trust" modelinin temelidir.
Web of Trust
OpenPGP, merkezi bir sertifika otoritesi (CA) yerine kullanıcıların birbirlerinin anahtarlarını doğrulamasına dayanabilir.
Ali↓Ayşe'ye güvenir↓Ayşe↓Mehmet'in anahtarını doğrulamış↓Ali↓Mehmet'e dolaylı güven duyabilir
Revocation Certificate
Private key kaybolursa;
Revocation Certificate
oluşturulmalıdır.
gpg --output revoke.asc --gen-revoke KEYID
Bu sertifika, ilgili anahtarın artık kullanılmaması gerektiğini duyurur.
Güvenli Anahtar Yönetimi
4096 bit RSA veya modern ECC (ör. Ed25519) kullanın.
Güçlü ve benzersiz parola belirleyin.
Private key'i çevrimdışı yedekleyin.
Revocation sertifikasını önceden oluşturun.
Fingerprint doğrulaması yapın.
Public key'i güvenilir kanallardan paylaşın.
Şüpheli anahtarlara güven derecesi vermeyin.
Sık Kullanılan GPG Komutları
| Komut | Açıklama |
|---|---|
gpg --version | Sürüm bilgisi |
gpg --full-generate-key | Anahtar oluşturur |
gpg --list-keys | Public anahtarları listeler |
gpg --list-secret-keys | Private anahtarları listeler |
gpg --fingerprint | Parmak izi görüntüler |
gpg --export | Public anahtarı dışa aktarır |
gpg --export-secret-keys | Private anahtarı dışa aktarır |
gpg --import | Anahtar içe aktarır |
gpg -e -r kullanıcı | Şifreleme |
gpg --decrypt | Şifre çözme |
gpg --sign | Dijital imza |
gpg --verify | İmzayı doğrulama |
gpg --detach-sign | Ayrık imza oluşturma |
gpg -c | Simetrik şifreleme |
Laboratuvar Uygulamaları
GPG kurulumu ve sürüm kontrolü.
4096 bit RSA veya Ed25519 anahtar çifti oluşturma.
Public ve private anahtarları dışa aktarma ve içe aktarma.
İki kullanıcı arasında şifreli dosya alışverişi.
Dijital imza oluşturma ve doğrulama.
Detached signature ile ISO dosyasını doğrulama.
Thunderbird'de OpenPGP yapılandırması.
İmzalı ve şifreli e-posta gönderme.
Revocation sertifikası oluşturma ve test etme.
Anahtar sunucusundan anahtar yayımlama ve alma (isteğe bağlı).
Sonuç
GPG (GNU Privacy Guard), OpenPGP standardını temel alan güçlü ve açık kaynaklı bir kriptografi çözümüdür. Hibrit şifreleme yaklaşımı sayesinde hem performans hem de güvenlik sunar. Dijital imzalar ile mesajın bütünlüğü ve gönderenin kimliği doğrulanırken, açık anahtar altyapısı sayesinde yalnızca hedef alıcının mesajı okuyabilmesi sağlanır.
Özellikle kurumlar, yazılım geliştiriciler, sistem yöneticileri ve siber güvenlik uzmanları için GPG; güvenli e-posta iletişimi, dosya paylaşımı, yazılım paketlerinin doğrulanması ve gizli bilgilerin korunmasında vazgeçilmez araçlardan biridir. Doğru anahtar yönetimi, düzenli yedekleme ve güvenilir anahtar doğrulama süreçleri ile kullanıldığında, GPG modern bilgi güvenliği uygulamalarının en etkili bileşenlerinden biri olmaya devam etmektedir.
Açık kaynak kodlu GPG (GNU Privacy Guard) kullanarak uçtan uca e-posta şifrelemesini anlatan, siber güvenlik laboratuvarı derslerinde öğrencilere pratik bir uygulama olarak sunabileceğiniz veya doğrudan nuritiras.com.tr adresindeki blogunuzda yayımlayabileceğiniz kapsamlı bir eğitim makalesi taslağını aşağıda bulabilirsiniz.
Adımlar, laboratuvar ortamındaki Pardus 25 sistemlerinin terminal yapısına tam uyumlu olacak şekilde yapılandırılmıştır.
Kriptografi Laboratuvarı: GPG ile Uçtan Uca E-Posta Şifreleme
Dijital iletişimde mahremiyeti sağlamanın en güvenilir yolu uçtan uca şifrelemedir (End-to-End Encryption). Bir e-posta sağlayıcısının (örneğin Google veya Microsoft) veya ağı dinleyen bir saldırganın mesajlarınızı okumasını engellemek istiyorsanız, e-postayı sunucuya göndermeden önce kendi bilgisayarınızda şifrelemeniz gerekir.
Bu laboratuvar çalışmasında, siber güvenlik dünyasının endüstri standardı olan PGP'nin özgür yazılım versiyonu GPG (GNU Privacy Guard) kullanarak kendi şifreleme anahtarlarımızı üretecek ve e-postalarımızı terminal üzerinden şifreleyeceğiz.
Bölüm 1: Asimetrik Kriptografinin Temelleri
GPG, "Asimetrik Kriptografi" prensibiyle çalışır. Bu sistemde her kullanıcının birbirine matematiksel olarak bağlı iki farklı anahtarı bulunur:
Açık Anahtar (Public Key): Kartvizitiniz gibidir. Herkesle paylaşabilirsiniz. İnsanlar size gizli bir mesaj göndermek istediklerinde, mesajı bu açık anahtarı kullanarak "kilitlerler".
Gizli Anahtar (Private Key): Yalnızca sizde kalması gereken ve genellikle bir parola (passphrase) ile korunan anahtardır. Açık anahtarınızla kilitlenmiş bir mesajı, dünyada sadece bu gizli anahtar "açabilir".
Bölüm 2: Kendi Anahtar Çiftimizi Üretmek
Laboratuvardaki Pardus 25 makinelerimizde terminali açalım ve ilk kriptografik kimliğimizi oluşturalım.
1. Anahtar Üretim Komutunu Çalıştırın:
Terminal ekranına aşağıdaki komutu girin:
Bash
gpg --full-generate-key
2. Algoritma ve Boyut Seçimi:
Sistem sizden şifreleme türünü seçmenizi isteyecektir. Varsayılan olan (1) RSA and RSA (default) seçeneğini kabul etmek için Enter'a basın.
Anahtar boyutu (Key size) olarak güncel güvenlik standartlarını karşılayan 4096 değerini girin ve Enter'a basın.
Anahtarın geçerlilik süresini belirleyin (örneğin 1 yıl için 1y veya süresiz için 0 yazabilirsiniz).
3. Kullanıcı Bilgilerinin Girilmesi:
Ad ve Soyad: Kendi adınızı girin.
E-Posta: Bu anahtarla ilişkilendirilecek adresi (örneğin; iletisim@nuritiras.com.tr) yazın.
Sistem son adımda gizli anahtarınızı korumak için sizden güçlü bir parola (passphrase) isteyecektir. Bu parolayı unutursanız, şifrelenmiş hiçbir mesajınızı okuyamazsınız.
Bölüm 3: Açık Anahtarı Paylaşmak (ASCII Zırhı)
Birinin size şifreli e-posta gönderebilmesi için öncelikle açık anahtarınıza sahip olması gerekir. Anahtarımızı bir metin dosyası olarak dışa aktaracağız.
1. Anahtarı Dışa Aktarın:
Aşağıdaki komut, açık anahtarınızı her türlü metin editöründe veya e-postada okunabilecek "ASCII Zırhlı" (ASCII armor) bir metin dosyasına dönüştürür.
Bash
gpg --armor --export iletisim@nuritiras.com.tr > public_key.asc
2. İçeriği Görüntüleyin:
Oluşan dosyanın içeriğine bakmak için cat public_key.asc komutunu kullanabilirsiniz. -----BEGIN PGP PUBLIC KEY BLOCK----- ile başlayan bu karmaşık metni artık web sitenizde yayımlayabilir veya size ulaşmak isteyen öğrencilerinize dağıtabilirsiniz.
Bölüm 4: Mesaj Şifreleme ve Gönderme (Gönderici Tarafı)
Diyelim ki bir öğrenciniz, elde ettiği açık anahtarınızı kullanarak size bir ödev veya gizli bir CTF bayrağı gönderecek.
1. Alıcının Anahtarını İçe Aktarma:
Öğrenci, sizin yayımladığınız public_key.asc dosyasını indirip kendi sistemine (keyring) tanıtmalıdır:
Bash
gpg --import public_key.asc
2. Mesajı Şifreleme:
Öğrenci, size iletmek istediği "Gizli sistem açığı bulundu" metnini içeren rapor.txt isimli bir dosya oluşturur. Ardından bu dosyayı sizin e-posta adresinizi hedef göstererek şifreler:
Bash
gpg --encrypt --armor --recipient iletisim@nuritiras.com.tr rapor.txt
Not: --armor parametresi, çıktının bir dosya (binary) yerine doğrudan e-posta gövdesine kopyalanıp yapıştırılabilecek bir metin (rapor.txt.asc) olmasını sağlar.
Öğrenci artık oluşan bu şifreli metni kopyalayıp Gmail, Outlook veya herhangi bir webmail üzerinden sıradan bir e-posta gibi size gönderebilir. E-posta sağlayıcısı bu metni asla okuyamaz.
Bölüm 5: Şifreli Mesajı Çözme (Alıcı Tarafı)
E-posta kutunuza -----BEGIN PGP MESSAGE----- ile başlayan anlamsız bir metin dizisi düştü. Mesajı okumak için şu adımları izlemelisiniz:
1. Mesajı Kaydetme:
Gelen e-postadaki o karmaşık metni kopyalayın ve bilgisayarınızda gelen_mesaj.asc adında bir metin dosyası oluşturup içine yapıştırın.
2. Şifreyi Çözme:
Terminalde deşifre komutunu çalıştırın:
Bash
gpg --decrypt gelen_mesaj.asc
Sistem, anahtarı oluştururken belirlediğiniz gizli anahtar parolanızı (passphrase) soracaktır. Parolayı doğru girdiğinizde, orijinal rapor.txt içeriği güvenli bir şekilde terminal ekranınıza yansıyacaktır.
Özet: Uçtan uca şifreleme, iletişimin güvenliğini ağ altyapısından alıp doğrudan kriptografik matematiğin ellerine teslim eder. Günlük iletişimde bu işlemleri terminalden yapmak yerine, Thunderbird gibi e-posta istemcileri kullanılarak süreç tamamen otomatik hale getirilebilir.
Bu laboratuvar föyüne, öğrencilerin dijital belgelerin değiştirilip değiştirilmediğini (bütünlüğünü) ve göndericinin kimliğini kanıtlayabilmeleri için "Dosyaları GPG ile Dijital Olarak İmzalama" bölümünü de eklememi ister misiniz?
Makalemizin devamına, kriptografinin bir diğer kritik ayağı olan "Dijital İmza" (Digital Signature) kavramını ekliyorum. Bu modülü doğrudan önceki adımların sonuna (Bölüm 6 olarak) entegre edebilirsiniz:
Bölüm 6: Belgeleri GPG ile Dijital Olarak İmzalama (Kimlik Doğrulama)
Şifreleme (Encryption) işlemi verinin gizliliğini sağlarken, dijital imzalama işlemi verinin kaynağını (kimden geldiğini) ve bütünlüğünü (değiştirilmediğini) kanıtlar.
Siber güvenlikte buna "İnkâr Edememezlik" (Non-repudiation) denir. Bir e-postayı veya dosyayı şifrelemek yerine açıkça (okunabilir şekilde) göndermek isteyebilirsiniz, ancak alıcının bu dosyanın gerçekten sizden geldiğinden ve yolda değiştirilmediğinden emin olmasını istersiniz.
Dijital imza asimetrik kriptografinin ters mantığıyla çalışır: Kendi gizli anahtarınızla imzalarsınız, herkes açık anahtarınızla bu imzayı doğrular.
Laboratuvar: Dosya İmzalama ve Doğrulama
Pardus laboratuvar ortamımızda terminal üzerinden şeffaf (okunabilir) bir dijital imza oluşturalım.
1. İmzalanacak Belgeyi Oluşturma:
Öncelikle öğrencilerimize göndereceğimiz, değiştirilmesini istemediğimiz bir duyuru metni oluşturalım:
Bash
echo "Yarınki CTF yarışması saat 10:00'da laboratuvarda başlayacaktır." > duyuru.txt
2. Belgeyi Temiz İmzalama (Clearsign):
Belgenin içeriğinin okunabilir kalmasını, ancak altına kriptografik bir mühür vurulmasını istiyoruz. Bunun için --clearsign parametresini kullanırız:
Bash
gpg --clearsign duyuru.txt
Bu komutu girdiğinizde sistem sizden gizli anahtarınızın parolasını (passphrase) isteyecektir. Çünkü imzayı ancak gizli anahtarın sahibi atabilir.
3. İmza Dosyasını İnceleme:
Oluşan dosyanın uzantısı .asc olacaktır. İçeriğini görüntüleyelim:
Bash
cat duyuru.txt.asc
Çıktıda, asıl metninizin etrafında -----BEGIN PGP SIGNED MESSAGE----- ve en altta karmaşık karakterlerden oluşan -----BEGIN PGP SIGNATURE----- bloğunu göreceksiniz. Belge artık mühürlenmiştir.
4. İmzayı Doğrulama (Alıcı Tarafı):
Bu .asc dosyasını alan bir öğrenci (veya sistem), dosyanın gerçekten sizin tarafınızdan oluşturulduğunu ve metin üzerinde tek bir harfin bile değiştirilmediğini doğrulamak için şu komutu çalıştırır:
Bash
gpg --verify duyuru.txt.asc
Eğer dosya güvenliyse, terminal ekranında "Good signature from [Adınız] iletisim@nuritiras.com.tr" (Geçerli imza) uyarısı belirir.
Bütünlük Testi: Eğer bir saldırgan duyuru.txt.asc dosyasını bir metin editörüyle açıp saat "10:00" ibaresini "11:00" olarak değiştirirse, imza yapısı bozulacaktır. Dosyayı doğrulayan kişi anında "BAD signature" (Geçersiz imza) hatası alacak ve belgenin manipüle edildiğini anlayacaktır.
Eğitmen Notu: Bu makaleyi yayınlarken, öğrencilerin laboratuvar ortamındaki açık/gizli anahtar konseptini tam oturtabilmeleri için iki kişilik gruplar halinde (Red Team / Blue Team veya Gönderici / Alıcı) birbirlerine şifreli mesaj ve imzalı ödev göndermelerini pratik bir sınav (rubric) görevi olarak verebilirsiniz.
Yorumlar