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 Key
Private 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 update
sudo apt install gnupg

Fedora

sudo dnf install gnupg2

Arch

sudo pacman -S gnupg

Windows

Kurulum paketi:

Gpg4win

Kurulum sonrası;

gpg
kleopatra
gpa

programları gelir.


macOS

brew install gnupg

Sürüm Kontrolü

gpg --version

Örnek çıktı:

gpg (GnuPG) 2.4
Home:
~/.gnupg
Pubkey:
RSA
ECC
ED25519
Cipher:
AES
AES192
AES256
Hash:
SHA256
SHA384
SHA512
Compression:
ZIP
ZLIB

İlk Anahtar Çifti Oluşturma

gpg --full-generate-key

Sorular gelir.

Anahtar Türü
RSA
Anahtar Uzunluğu
4096
Geçerlilik
2 yıl
Ad
Nuri Tıraş
Email
nuri@example.com
Parola

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 92BF
991C 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:

  1. Hesabı ekleyin.

  2. OpenPGP anahtarınızı oluşturun veya içe aktarın.

  3. Alıcının Public Key'ini ekleyin.

  4. Yeni e-posta oluşturun.

  5. Şifrele ve gerekirse Dijital İmzala seçeneklerini etkinleştirin.

  6. 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ı

KomutAçıklama
gpg --versionSürüm bilgisi
gpg --full-generate-keyAnahtar oluşturur
gpg --list-keysPublic anahtarları listeler
gpg --list-secret-keysPrivate anahtarları listeler
gpg --fingerprintParmak izi görüntüler
gpg --exportPublic anahtarı dışa aktarır
gpg --export-secret-keysPrivate anahtarı dışa aktarır
gpg --importAnahtar içe aktarır
gpg -e -r kullanıcıŞifreleme
gpg --decryptŞifre çözme
gpg --signDijital imza
gpg --verifyİmzayı doğrulama
gpg --detach-signAyrık imza oluşturma
gpg -cSimetrik şifreleme

Laboratuvar Uygulamaları

  1. GPG kurulumu ve sürüm kontrolü.

  2. 4096 bit RSA veya Ed25519 anahtar çifti oluşturma.

  3. Public ve private anahtarları dışa aktarma ve içe aktarma.

  4. İki kullanıcı arasında şifreli dosya alışverişi.

  5. Dijital imza oluşturma ve doğrulama.

  6. Detached signature ile ISO dosyasını doğrulama.

  7. Thunderbird'de OpenPGP yapılandırması.

  8. İmzalı ve şifreli e-posta gönderme.

  9. Revocation sertifikası oluşturma ve test etme.

  10. 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

Bu blogdaki popüler yayınlar

Android Telefon/Tablet Ekranını Pardus ETAP 23 Yüklü Akıllı Tahtaya Yansıtma

Pardus Etap 23’de Unutulmuş Etap Yetkili Parolasını Sıfırlama

Pardus Etap 23 Yazıcı Kurulumu