Hassas Verilerin İletiminde/Doğrulanmasında Açık Anahtarlı Şifreleme Teknolojisi — GPG4Win*

Ziyahan ALBENiZ
8 min readDec 1, 2018

--

Kurum içi ve kurum dışı ilişkilerde ileti kaynağının ve tutarlılığının doğrulanması; iletilen verilerin güvenliğinin sağlanması büyük önem arz etmektedir.

Bu bağlamda, bir şifreleme ve imzalama standardı olarak Açık Anahtarlı Şifreleme özel olarak da GPG’yi tanıyacak, adım adım Windows işletim sistemi için kurulumunu ve üretilen anahtar çiftlerinden, public (genel) anahtarı alıcılarımızla paylaşmayı göreceğiz.

Herkes tarafından okunabilen ve anlaşılması için herhangi bir çabaya gereksinim duyulmayan veri, kriptoloji terminolojisinde plain text (düz metin) olarak adlandırılmaktadır. Bu verinin çeşitli yöntemlerle karıştırılarak, okunaksız hale getirilmesi işlemine ise şifreleme (encryption) adı verilmektedir. Bu verinin hedef alıcı tarafından tersine bir işlem ile yeniden okunaklı hale getirilmesi ise şifre çözümleme, decryption olarak adlandırılmaktadır.

Tarih boyunca hassas verilerin iletiminde çeşitli yollar denenmiştir. Bunlardan ilk bilineni literatürde Sezar Şifrelemesi olarak bilinen yöntemdir. Bu yöntem iletideki her bir harfin, üçüncü ardışık değer ile değiştirilmesine dayanan şifreleme yöntemidir. Şifrelemede metni karıştırmak için kullanılan bu yönteme, (Her harfi, kendisinden başlayarak üçüncü sıradaki harf ile değiştir.) şifre anahtarı denilmektedir.

Geleneksel Şifreleme

Metnin şifrelenmesi ve şifrenin çözülmesi için ortak bir anahtarın kullanıldığı yöntem, Kriptoloji Bilimi terminolojisinde Geleneksel Şifreleme olarak anılmaktadır. Geleneksel Şifreleme’nin bu karakteristik özelliğinde, hem gönderici hem de alıcı aynı anahtarı kullanarak metni şifrelemekte ve şifrelenen metni orijinal metne dönüştürmektedir:

Geleneksel Şifreleme, hızlı bir yöntem olsa da günümüz dünyasında, şifre anahtarının paylaşılması veya ele geçirilmesi durumunda risk arz etmektedir. Eğer tek bir kişi, kendi dosyalarını ve verilerini şifrelemek için kullanıyor ve aynı şifreleme anahtarının “güvensiz” kanallar ile paylaşılması söz konusu değilse, kullanışlı bir yöntem olabilir.

Açık Anahtarlı Şifreleme

Geleneksel Şifreleme’nin şifreleme anahtarının paylaşılmasındaki problemine bir çözüm olarak 1975 yılında Açık Anahtarlı Şifreleme konsepti geliştirildi. Bu konsepte göre her bir kullanıcı ya da taraf kendisine ait bir public (genel) ve bir de private (özel) anahtarlardan oluşan bir çifte sahip olacak; taraflar birbirleri ile yalnızca public (genel) anahtarlarını paylaşacak idi. Public anahtar ile şifrelenen metnin çözümlenmesi ise ancak tarafların birbirleri ile asla paylaşmadığı ve gizli tuttuğu private (özel) anahtarlar yolu ile yapılacaktı.

Açık anahtarlı şifrelemenin en bilinen örnekleri, Elgamal, RSA, Diffie-Helman ve DSA’dır.

PGP, OpenPGP ve GPG

1991 yılında Amerikan senatosunda taslak olarak görüşülen terör yasası, tüm şifreleme standartlarına devletin gözetimine imkan veren bir arka kapı açılmasını öneriyordu. Kamuoyunda tartışılan bu öneriye çok geçmeden tepkiler yükselmeye başladı. Bu tepkilerden biri de 1991 yılında Philip Zimmermann tarafından geliştirilen açık anahtarlı bir şifreleme stratejisi sunan PGP idi.

PGP

Geleneksel şifrelemenin hızı ve açık anahtarlı şifrelemenin güvenlik ve kullanım kolaylığını bünyesinde barındıran PGP, melez bir şifreleme yöntemidir.

PGP bir metni şifrelerken aşağıdaki yolu izler:

  1. Metni sıkıştırır. (Bu sayede daha hızlı bir aktarım ve güvenliğin güçlendirilmesi sağlanır.)
    Pek çok kripto analiz şifreli metindeki patternleri analiz ederek, şifreyi çözdüklerinden, PGP’nin ilk adımda yaptığı bu sıkıştırma işlemi bu olasılığı elimine etmektedir.
  2. Session-key oluşturur, Bir t zamanına ait, benzersiz bir oturum anahtarı oluşturulur. Bu anahtar oluşturulurken klavye ve mouse’ın random hareketleri kullanılır.
    Bu oturum anahtarı geleneksel şifreleme algoritmasında olduğu şekliyle, güvenli bir şekilde metni şifreler.
  3. Metin şifrelendiğinde bu oturum anahtarı, alıcının public key’i ile tekrar şifrelenir.
    Bu public key ile şifrelenmiş session-key, şifrelenmiş metin ile birlikte alıcıya gönderilir.

Metnin çözülmesi işleminde ise tersine bir yol izlenir:

Alıcı tarafındaki PGP, alıcının gizli (private) anahtarını kullanarak, geçici session key’i deşifre eder. Bu elde edilen session-key ile metin deşifre edilir ve sıkıştırılan dosya eski haline getirilir.

PGP geleneksel şifrelemenin hızı ile, açık anahtarlı şifrelemenin, anahtar dağıtım kullanım kolaylıklarını birleştirerek, harika bir kombinasyona ulaşır.

OpenPGP ismi ile açık bir standart haline gelen PGP’yi aşağıdaki amaçlar için kullanabiliriz.

  • Özel yazışmaların ve önemli bilgilerin şifreli olarak iletilmesi
  • Bir dosyanın şifrelenmesi
  • Yazışmaların bütünlüğünün doğrulanması (Aktarılan mesaj, gerçekten de gönderilen mesaj mı? İletim esnasında bir bozulmaya, değişikliğe uğramış mı?)
  • İletilen bir dosyanın bütünlüğünün doğrulanması. (Dosya aktarımında bir sıkıntı yaşanmış mı? Aktarım sırasında dosyaya herhangi bir şey enjekte edilmiş mi?)
  • İletişimin taraflarının doğrulanması (Bu mesaj gerçekten X kişisinden mi geliyor?)

GPG

PGP açık bir standart haline getirildikten sonra GNU Privacy Guard (GnuPG veya GPG), 1997'de Werner Koch tarafından programlandı.

PGP’de dosya imzalama

Yukarıdaki satırlarda bir verinin şifrelenmesine değindik. PGP’nin güçlü yanlarından biri de dosya imzalama konusunda sunduğu özelliklerdir.

PGP’de dosya imzalama şu şekilde gerçekleşir:

  1. Dosyanın özet değeri alınır.
  2. Dosyanın özet değeri, göndericinin PRIVATE (özel) anahtarı ile şifrelenir.
  3. Dosya, oluşturulan imza eki ile (*.sig uzantılı bir dosya) alıcıya gönderilir.

Alıcı tarafında imzanın doğrulanması için aşağıdaki adımlar izlenmektedir:

  1. Dosyanın özet değeri alınır. (SUM1)
  2. Dosya ile birlikte gönderilen imza dosyası (*.sig), göndericinin genel anahtarı (public key’i) ile deşifre edilir. Ve göndericinin, dosya göndermeden önce hesap ettiği özet değeri elde edilir. (SUM2)
  3. Eğer SUM1 ve SUM2 birbirine eşit ise dosyanın mesajın geçerliliği doğrulanır.

GPG4Win’in Kurulumu ve Anahtar Çiftlerinin (Private ve Public) Oluşturulması

GPG’yi sistemimize kurmak için GPG4Win’i adım adım bilgisayarımıza kuracağız.

  1. https://gpg4win.org/download.html adresinden GPG4Win’in en güncel sürümü indirilir. (Gpg4win 2.3.4–2017–07–06)

İndirilen paket aşağıdaki programları içermektedir:

GnuPGP: Şifreleme programının kendisi.

Kleopatra: GPG4Win için bir yönetim arabirimi. Anahtar ve sertifikalarımız ile ilgili tüm işlemlerimizi bu ekrandan yapabiliriz.

GNU Privacy Assistant (GPA): Kleopatra’ya ek olarak, anahtarlarımızı yönetebileceğimiz bir başka program.

GnuPG for Outlook (GpgOL): Microsoft Outlook 2003, 2007 ve 2013 için imzalama ve şifreleme mekanizmasını kullanmamıza olanak veren bir eklenti.

GPG Explorer eXtension (GpgEX): Bu eklenti sayesinde, şifreleme ve imzalama fonksiyonları, Windows Explorer’ın sağ tuş menüsüne (context) menüsüne eklenir.

Claws Mail: GPG’yi destekleyen tam donanımlı bir eposta programı.

2) Kurulum tamamlandıktan sonra masaüstünde ya da başlat menüsü altındaki düğümden Kleopatra programının ikonu tıklanarak, Kleopatra programı açılır.

3) Hali hazırda bir PGP anahtarına sahipsek File -> Import Certificates menüsünden import edebiliriz. Eğer bir private-public anahtar çiftine sahip değilsek, File>New Certificate menüsünü tıklayarak, anahtar oluşturma sihirbazını açıyoruz:

Create a personal OpenPGP key pair seçeneğini seçerek bir sonraki adıma geçiyoruz.

4) Bizi karşılayan ekrandaki alanları doldurarak devam ediyoruz:

Varsayılan ayarlar ile kullanabiliriz. Anahtar çiftimizin zaman aşımı (expire) değerini, şifreleme türünü (RSA, DSA) hangi amaçlar ile kullanılacağını Advanced Settings altından ayarlayabiliriz. Bu kılavuzda varsayılan ayarlar ile devam ediyoruz.

5) Bu adımda oluşturulan sertifika ile ilgili özet bilgileri bize sunan ekranla karşılaşıyoruz. Show Details ‘i tıklayarak oluşturmak üzere olduğumuz sertifika hakkında ayrıntılı bilgilere ulaşabiliriz:

6) Sıradaki ekran bizden bir parola belirtmemizi isteyecek. Bu gizli anahtarımızı oluşturacak paroladır. Bu esnada program bizden, benzersiz bir anahtar oluşturmak için klavye girdileri, fare hareketleri gibi bu sürecin tekilliğini besleyen girdiler istemektedir.

7) Anahtar çiftimiz başarı ile oluşturulduktan sonra bizi karşılayacak ekrandaki seçenekler ile, anahtar çiftimizin bir yedeğini alabilir; e-posta ile genel anahtarımızı paylaşabilir ya da public key’imizi bir key dizin servisine gönderebiliriz. (Eğer herhangi bir anahtar dizin servisi belirtilmedi ise, Kleopatra varsayılan olarak keys.gnupg.net adresine göndermektedir.)

8) Anahtar çiftlerimizi Kleopatra ana ekranındaki My Certificates sekmesi altında görebilmeliyiz.

Bu ekranda paylaşmak istediğimiz anahtarımızın üzerine sağ tuşla tıklayıp Export Certificates ya da CTRL+E tuş kombinasyonlarını kullanarak, Public veya Private anahtarımızı export edebiliriz.

Kleopatra’yı bilgisayarımıza kurup, anahtar çiftlerimizi oluşturduktan sonra PGP ile iletişim kurmak istediğimiz alıcı tarafın Public key’ine ihtiyacımız olacak. Alıcının public key’ini şu şekilde elde edebiliriz:

  • Alıcının kendisinden public key’ini isteyebiliriz.
  • Key serverlar üzerinden alıcıya ait public key’e ulaşabiliriz.
  • Kleopatra File->Look Up Certificates on Server seçeneği üzerinden birden çok key server’da aratabilir ve Kleopatra ekranımıza otomatik olarak ekleyebiliriz.

top_secret_message.txt isimli dosyada özel bir mesajımız olduğunu düşünelim:

Bu mesajı genel anahtarını (public key’ini) edindiğimiz bir kullanıcıya şifreleyerek göndermek istiyoruz. Bunun için dosya üzerinde sağ tuşla tıklayarak, GpgEX fonksiyonlarından Encrypt (Şifrele) ya da Sign and Encrypt seçeneklerinden birini seçebilirim:

Bizi karşılayan ekranlardan sırasıyla yine Encrypt ve mesajın alıcısını seçerek, işlemimi sonlandırıyorum:

Kleopatra, clipboard ile etkileşimli çalışabilmektedir. Önbelleğe kopyalanmış bir metni şifreleyebilir ya da önbellekteki şifreli metni decrypt edebilir.

Dosya İmzalama

Dosyalarda kaynak ve tutarlılık doğrulama için Windows Explorer sağ tuş menüsüne eklenen Sign ya da Enctrypt and Sign seçeneklerinden birini kullanabiliriz.

Parolamızı giriyoruz:

Dosyamıza ek olarak, dosya_adi.sig uzantılı bir dosya oluşturulacak. Bu *.sig uzantılı dosyayı da dosyamızla birlikte alıcıya gönderiyoruz.

Alıcıdan gelen imzalanmış dosyaların doğrulanması için de tam tersi bir işlem sırası geçerli.

  • Alınan dosya sağ tuşla tıklanır, eğer sadece imzalı bir dosya ise, Verify, şifrelenmiş ve imzalı bir dosya ise Verify and Decrypt seçenekleri tıklanır
  • Doğrulamak için, hangi kullanıcıdan geldi ise, o kullanıcının public key’i seçilir.

Anahtar paylaşımı sorunsalı açık anahtarlı şifrelemenin önemli bir problemidir. Bununla ilgili olarak Arka Kapı Dergi 4. sayısında Recep Kızılarslan tarafından kaleme alınan “Açık Anahtarlı Şifrelemede Anahtar Değişim Problemi ve Keybase” yazısını okumanızı tavsiye ederim.

*Bu yazı Uluslararası Siber Güvenlik Federasyonu (USGF) ‘nin yayınladığı Siber Güvenlik Dergisi’nin ikinci sayısında yayımlanmıştır.

--

--

Ziyahan ALBENiZ

Security Enthusiast, TheTargetNews.com, @Arka Kapı, @Karar Twitter: @ziyaxanalbeniz