GPG ile Şifreli Mesajlaşma ve Dijital İmza

1 35

Özellikle kriptografiyle uğraşanlar ya da teknolojiye hakim kişiler arasında, iletişim bilgilerine GPG anahtarlarını eklediklerini hiç fark ettiniz mi? Uzun bir süredir bunun çok havalı bir şey olduğunu düşünüyordum.

Son zamanlarda üzerinde çalıştığım kurumsal bir proje, GPG’ye olan takdirimi daha da artırdı. Bu proje, bankalara SFTP üzerinden dosya gönderip almayı içeriyordu ve bu da dosyaların GPG ile şifrelenmesini ve şifresinin çözülmesini gerektiriyordu. Bu süreç, bana GPG’nin nasıl çalıştığını ve neden bu kadar güçlü bir araç olduğunu uygulamalı olarak anlamamı sağladı.

Bu yazıda o deneyimi paylacağım. GPG’nin ne olduğunu, PGP’den nasıl farklılaştığını ve en önemlisi nasıl kullanabileceğini anlatacağım. İster dosyalarını güvenli hale getirmek, ister iletişimlerini korumak, ister sadece bir kriptografi ustası gibi hissetmek iste, GPG bilmeye değer bir araç—ve açık anahtarını paylaşmak belki de yapabileceğin en havalı şey olabilir.

Guy Fawkes mask (Kaynak: Pexels)

Arka Plan

GPG (GNU Privacy Guard), verileri şifrelemek ve dijital olarak imzalamak için kullanılan açık anahtarlı bir kriptografi aracıdır. PGP (Pretty Good Privacy) ile aynı prensiplere dayanır ve onun açık kaynaklı alternatifidir.

GPG, verileri güvenli bir şekilde iletmek için simetrik ve asimetrik şifrelemenin gücünü birleştirir. İşte nasıl çalıştığını basitleştirilmiş bir şekilde anlatan bir açıklama:

GPG Çalışma Prensibi

1. Adım: Rastgele Bir Simetrik Anahtar Oluşturulur

Bir mesajı veya dosyayı şifrelediğinizde, GPG önce rastgele bir simetrik anahtar üretir. Bu anahtar, içeriği AES gibi hızlı ve güvenli bir simetrik şifreleme algoritmasıyla şifrelemek için kullanılır.

2. Adım: Simetrik Anahtar, Alıcının Açık Anahtarıyla Şifrelenir

Daha sonra GPG, simetrik anahtarın kendisini alıcının açık anahtarıyla şifreler. Bu adım sayesinde yalnızca karşılık gelen özel anahtara sahip olan alıcı, simetrik anahtarı çözüp içeriğe ulaşabilir.

3. Adım: Şifrelenmiş Mesaj ve Anahtar Gönderilir

Şifrelenmiş içerik ve şifrelenmiş simetrik anahtar bir araya getirilir ve alıcıya gönderilir.

4. Adım: Alıcı, Simetrik Anahtarı Çözer

Alıcı, özel anahtarını kullanarak şifrelenmiş simetrik anahtarı çözer. Özel anahtar yalnızca alıcıya ait olduğundan, bu anahtara başkası erişemez.

5. Adım: Simetrik Anahtar, İçeriği Çözmek İçin Kullanılır

Simetrik anahtar çözüldükten sonra, alıcı bu anahtarı kullanarak içerikteki gerçek veriyi şifreli halinden çözer ve orijinal mesaj ya da dosyaya ulaşır.

GPG Neden Güvenli ve Verimlidir?

GPG ile her veri şifrelemede yeni bir simetrik anahtar oluşturulur. Bu rastgelelik, aynı mesajı defalarca şifreleseniz bile her seferinde farklı şifreli çıktılar elde edilmesini sağlar.

AES gibi simetrik şifreleme algoritmaları, asimetrik algoritmalara göre çok daha hızlıdır. Bu hibrit yaklaşım, hem güvenliği hem de verimliliği bir arada sunar.

Açık/özel anahtar kullanımı sayesinde yalnızca hedef alıcı, simetrik anahtarı çözebilir ve bu da sürecin tamamını güvence altına alır.

Simetrik ve asimetrik şifrelemenin bu şekilde bir araya gelmesi, hem performans hem de güvenlik açısından dengeli bir yapı sunar. Bu da GPG’yi güvenli iletişim ve dosya paylaşımı için ideal bir araç haline getirir.

GPG Anahtarlarınızı Oluşturmak

Dosyaları şifrelemeye veya şifresini çözmeye başlamadan önce, kendi GPG anahtarlarınızı oluşturmanız gerekir. Bu işlem, biri açık (public), diğeri özel (private) olmak üzere bir anahtar çifti yaratmayı içerir. Açık anahtar başkalarıyla paylaştığınız anahtardır; özel anahtar ise sizde kalır ve sizin açık anahtarınızla şifrelenmiş mesajları veya dosyaları çözmek için kullanılır.

Öncelikle, sisteminizde GPG yüklü olduğundan emin olun. Aşağıdaki komutları kullanarak GPG’yi yükleyebilirsiniz:

Anahtar oluşturma sürecini başlatmak için aşağıdaki komutu çalıştırın:

Bu komut sizi kurulum süreci boyunca yönlendirecektir. Aşağıdaki bilgileri girmeniz istenecek:

🔑 Anahtar Türü (Key type): Varsayılan seçeneği, yani genellikle “RSA and RSA” olanı seçin. Bu seçenek hem imzalama hem de şifreleme için RSA algoritmasını kullanır.

🔐 Anahtar Boyutu (Key size): Bir anahtar boyutu belirtin. Önerilen 3072-bit RSA anahtarıdır. Bu uzunluk, 128-bit AES anahtarına denktir ve 2030 sonrasına kadar güvenli olduğu düşünülmektedir.

⏳ Geçerlilik Süresi (Expiration date): Süresiz geçerli olması için bu değeri 0 olarak ayarlayın. Dilerseniz belirli bir süre de tanımlayabilirsiniz.

👤 Kullanıcı Kimliği (User ID): Adınızı ve e-posta adresinizi girin. Bu bilgiler, anahtarı listelerken onun kimliğini tanımlamak için kullanılır.

🔒 Parola (Passphrase): Özel anahtarınızı korumak için güçlü bir parola belirleyin. Bu parola, anahtarınızı izinsiz kullanıma karşı korur.

Anahtarınız oluşturulduktan sonra, aşağıdaki komutu kullanarak onu listeleyebilirsiniz:


Açık ve özel anahtar çiftinizi aşağıdaki komutları kullanarak dışa aktarabilirsiniz:

–armor seçeneği, anahtarın metin tabanlı formatta kaydedilmesini sağlar; bu da güvenli şekilde saklamayı kolaylaştırır. Ayrıca, özel anahtarı dışa aktarırken sizden parolanız istenir.

Özel anahtarınız, açık anahtarınızla şifrelenmiş mesajları ve dosyaları çözmek için kritik öneme sahiptir. Bu anahtarı güvende tutmak ve kimseyle paylaşmamak çok önemlidir. Özel anahtarınızı kaybetmeniz, şifreli dosyalara erişiminizi kaybetmeniz anlamına gelir; paylaşmanız ise güvenliğinizi tehlikeye atar.

Başkalarının Açık Anahtarlarını Yüklemek

 Başka birine şifreli dosya veya mesaj gönderebilmek için, onların açık anahtarına ihtiyacınız vardır. Onların açık anahtarını aldıktan sonra, bu anahtarı GPG anahtar kümenize (keyring) aktarabilir ve onları şifrelemek için kullanabilirsiniz.

Bu deney için Dr. Tanja Lange‘nin açık anahtarını klonladım. Siz de denemenizde benim açık anahtarımı klonlayabilirsiniz.

Terminalde açık anahtar dosyası ile aynı dizinde çalışırken şu komutu çalıştırmanız gerekiyor:

Başarıyla anahtarın içe aktarıldığını doğrulayan bir çıktı görmelisiniz:

Anahtarı içe aktardıktan sonra, onu doğrulamak iyi bir uygulamadır:

Bu, az önce içe aktardığınız benim açık anahtarımı ve Lange’nin açık anahtarını gösterecektir.

Başkasının Açık Anahtarı İle Şifrelemek

Bu kişiye şifreli bir dosya veya mesaj göndermeniz gerektiğinde, onların açık anahtarını kullanacaksınız. Örneğin, Dr. Lange için message.txt dosyasını şifrelemek için:

Bu komut, yalnızca Dr. Lange’nin özel anahtarını kullanarak şifresini çözebileceği message.gpg adlı şifreli bir dosya oluşturur.

Bu yapı ile, gönderdiğiniz dosya veya mesajları yalnızca alıcının okuyabileceğinden emin olarak güvenli bir şekilde başkalarıyla iletişim kurabilirsiniz.

İmza Eklemek

Önceki bölümde, Dr. Lange’nin açık anahtarıyla bir mesaj şifreledim. Ancak, Dr. Lange mesajın benden geldiğini nasıl doğrulayabilir? O, ancak ve sadece ben imzamı eklediğimde emin olabilir. Mesajı, onun açık anahtarıyla şifrelerim. Bu arada, mesajı özel anahtarım ile imzalamam gerekir. Sonrasında, Dr. Lange mesajı benim açık anahtarım ile doğrulayabilir. Unutmayın, benim açık anahtarım zaten herkese açıktır.

Şifreli Mesajın Açılması

Eğer biri size açık anahtarınızı kullanarak şifreli bir mesaj göndermişse, bu mesajı özel anahtarınızla çözebilirsiniz. İşte bunu adım adım nasıl yapacağınız:

Aşağıdaki komutu kullanarak dosyayı şifresini çözebilirsiniz:

Eğer özel anahtarınız bir parola ile korunuyorsa, şifre çözme komutunu çalıştırdıktan sonra GPG sizden parolanızı girmenizi isteyecektir. Parolanızı girerek işlemi tamamlayabilirsiniz.

Python ile GPG

Üretim hattında çalıştıracağınız bir uygulamada GPG kullanacaksanız shell komutları yerine python kütüphanesini kullanmanız daha rasyonel olacaktır.

Kütüphaneyi indirelim:

GPG objesi, terminal aracılığıyla içe aktarılan anahtarları otomatik olarak yükleyecektir. Eğer terminal üzerinden anahtarları zaten içe aktardıysanız, bu anahtarlar burada kullanılabilir olacaktır. Aksi takdirde, anahtarlar Python programı tarafından içe aktarılacaktır.

Başkasının açık anahtarı ile mesaj şifreleme:

Sizin açık anahtarınız ile şifrelenmiş bir mesajı açma:

Artıları ve Eksileri

Her ne kadar PGP’yi ana hatlarıyla biliyor olsam da girizgahta da bahsettiğim gibi GPG ile fiilen tanışmam iki ayrı banka gerçekleştirdiğimiz bir proje ile gerçekleşti. Bankaya gönderilecek para transferi işlemlerinin bir dosya ile bankanın sftp sunucusuna konulması gerekiyordu. Bunu yaparken bankaya ait açık anahtar ile dosyayı şifreliyor, kendi gizli anahtarımız ile de imzalamamız gerekiyordu. Banka, dosyayı aldıktan sonra kendi gizli anahtarı ile şifreli dosyayı açabiliyor bize ait açık anahtar ile de dosyanın imzasını doğrulayabiliyordu.

Banka para transferi işlemini asenkron olarak gerçekleştirdikten sonra cevabı aynı sftp sunucusuna bir dosya bırakarak bizi haberdar ediyordu. Bunu yaparken cevap dosyasını bize ait açık anahtar ile şifreliyor ve kendilerine ait gizli anahtar ile imzalıyordu. Biz de kendimize ait gizli anahtar ile bu şifreli cevap dosyasını açıyor, bankaya ait açık anahtar ile de imzasını doğruluyorduk.

Bahsettiğim bu altyapı 2024 yılında İngiltere’de çokça büyük iki bankası tarafından halen kullanılmaktaydı.

Dolayısıyla, GPG kriptografi konusunda bir standard olduğu için kurumsal uygulamalarda yaygın olarak kullanılmaktadır

Öte yandan, GPG nihayetinde bir linux paketidir ve linux komut satırında komutlar çalıştırmayı gerektiğinden basit ve hafifsiklet olarak nitelendiremeyiz. Eğer python için hafifsiklet bir şey arıyorsanız dijital imzalar için LightDSA, veri şifreleme için de LightPHE uygulamalarına göz atmanızı tavsiye ederim. Anahtar değişimini ise Eliptik Eğri Diffie-Hellman yöntemiyle 2-3 satırda LightECC kullanarak gerçekleştirebilirsiniz.

Özet

Bu yazıda, GPG anahtarınızı e-posta adresinizle paylaşmanın sadece havalı bir uygulama olmakla kalmayıp, aynı zamanda güvenli iletişimi sağlamak için güçlü bir yöntem olduğunu keşfettik. Hem simetrik hem de asimetrik şifrelemeyi birleştirerek, GPG mesajlarınızı özel ve korumalı tutmak için sağlam bir yöntem sunar.

GPG ilk başta karmaşık görünebilir, ancak dijital etkileşimlerde gizlilik ve güvenliği ön planda tutan herkes için değerli bir araçtır. İster hassas bilgiler paylaşıyor olun, ister başkalarıyla işbirliği yapıyor olun, ya da sadece şifrelemeye yeni başlıyor olun, GPG’yi ve nasıl çalıştığını anlamak çevrimiçi gizliliğinizi korumada büyük fark yaratabilir.

O yüzden bir dahaki sefere e-posta adresinizi paylaştığınızda, GPG anahtarınızı da eklemeyi düşünün – bu sadece güvenliğinizi artırmakla kalmaz, aynı zamanda iletişimlerinize ek bir güven katmanı ekler. Sonuçta, gizliliğin giderek zor elde edildiği bir dünyada, güvenli olmak gerçekten havalıdır!

Referans

S. I. Serengil, A Gentle Introduction to GPG for Encrypted Message Exchange, 21.04.2025 tarihinde erişildi.

1 Comment
  1. […] GPG’nin (GNU Privacy Guard) son sürümü, varsayılan olarak eliptik eğri tabanlı algoritmaları benimseyerek önemli bir değişikliğe gitmiştir—özellikle, şifreleme için ECDH (Eliptik Eğri Diffie-Hellman) ve imzalar için EdDSA (Edwards-eğrisi Dijital İmza Algoritması). Aslında, GPG sürüm 2.1’den beri eliptik eğri kriptografisini (ECC) desteklemekteydi, ancak 2.3 sürümüyle birlikte artık varsayılan olarak ECC anahtar çiftleri üretmeye başlamıştır. Bu değişiklik, RSA’nın hegemonyasının sonunu işaret etmektedir; çünkü eliptik eğri kriptografisi (ECC), çok daha yüksek verimlilikle aynı güvenlik seviyesini vaat etmektedir. […]

Email adresiniz yayınlanmayacaktır.