Linux'ta GPG Kullanımı

Faruk Eskicioğlu (farukesk/~/comu.edu.tr)
A. Murat Eren (meren/~/comu.edu.tr)

08/2001 Çanakkale, v0.1


   Bu belgede kısaca Linux'ta komut satırından GPG kullanımı hakkında bilgi verilmektedir. GPG'nin kullandığı kriptografi algoritmalarından bahsedilmeyecektir. Neden GPG kullanmanız gerektiği, anahtarlara neden ihtiyaç duyduğunuz gibi bilgileri zaten biliyor olduğunuz kabul edilmiştir. Bu belgenin son sürümüne http://zion.comu.edu.tr/~evreniz/belgeler/pgp/pgp.html adresinden ulaşabilirsiniz.

0. Giriş




   İzleyen bölümlerde PGP sisteminin kullamına yönelik bir kaç komut sunulacak. Bunun için PGP`nin açık kodlu versiyonu olan GnuPG(GNU Privacy Guard) kullanılacaktır. Bu yazılımın Linux versiyonu http://www.gnupg.org/download.html adresinden temin edilebilir.

   GPG'nin komut satırından kullanımındaki genel sözdizimi şöyledir:

]$ gpg [seçenek(ler) ve parametre(ler)] [komut(lar) ve parametre(ler)]



   I. Anahtar Kullanımı




   I.a. Anahtar Yaratma İşlemi:

   Söz Dizimi:

]$ gpg --gen-key


   Bir anahtar çifti (public ve private) oluşturmak için kullanılır. Bu komut ilk olarak hangi şifreleme algoritmasını kullanmak istediğinizi sorar. 3 seçenek vardır. öntanımlı değer 1 no`lu seçenek "DSA and ElGamal"dır ve kullanılması tavsiye edilen seçenek de budur. Daha sonra anahtar boyutunu sorar, öntanımlı ve tavsiye edilen değer 1024`tür, 1024 bitlik anahtar son kullanıcı için yeterli güvenliği sağlayacak kadar geniş bir uzay sunar. Daha sonra anahtarın geçerlilik süresini sorar "0" girilirse anahtarın geçerlilik süresi sonsuzdur (eğer bu değer girilirse emin olup olmadığınız sorulur). Daha sonra anahtar sahibinin gerçek adı, e-posta adresi ve ek açıklama sorulur (ek açıklama kısmına unvan, kurum gibi bilgiler girilebilir). Ardından girilen tüm bilgiler sunulur ve değişiklik yapmak isteyip istemediğinizi sorulur (girilen bilgiler daha sonra "Anahtar Yönetimi" ile değiştirilebilir. Bu konuya ilerde değinilecektir). Son olarak bir parola girilir ve doğrulaması yapılır. Bu parola özel anahtarınızla bir şifreleme ya da deşifreleme yapacağınız zaman sizden istenecektir, özel anahtarınızı sizden başka birisinin kullanması ihtimalini ortadan kaldırmak için bir önlemdir. Parola girildikten sonra anahtar çiftlerinin yaratılması süreci başlar. Bu sürede farenin hareket ettirilmesi, ölü klavye tuşlarına basılması rastgele sayı üretiminde uygulamaya kaynak sağlar, sistemin etkin çalışmasında faydalıdır.

   I.b. Anahtar Gönderme İşlemi

   Söz Dizimi:

]$ gpg [seçenekler] --export [Kullanici_ID]


   Anahtarların export edilmesi için kullanılır. Bu da genel anahtarınızı insanlara dağıtabilmeniz için genel anahtarınızı bir dosyaya yazma noktasında kullanacağınız bir şeydir. Bu komut seçeneksiz olarak çalıştırıldığında öntanımlı olarak çıktısını stdout'a verir. Bu çıktı daha sonra herhangi bir şekilde (keyserver kullanarak, kişisel web sitesine konularak vs.) insanlarla paylaşılır ve insanlar paylaştığınız açık anahtarınızı kullanarak, sizden gelen imzalı bilgileri doğrulayıp okuyabilirler, verileri yalnızca sizin deşifre edebileceğiniz şekilde şifreleyip size gönderebilirler.

   Örnekler:

]$ gpg --output cikti_dosyasi --export farukesk

# Bu komut farukesk isimli kullanıcının ortak anahtarını # binary şekilde cikti_dosyasi isimli dosyaya yazar.


]$ gpg --armor --output farukesk.asc --export farukesk

# Bir öncekinden farkı, çıktı dosyası ikili
# dosya değil bir ASCII dosyadır (ASCII armored)


]$ gpg--output cikti_dosyasi --export-secret-key farukesk

# farukesk kullanıcısının özel anahtarını ikili olarak farukesk.sasc
# isimli dosyaya yazar. Özel anahtarın gizliliğinin sağlanması
# gereklidir.


]$ gpg --keyserver keyserver.pgp.com --send-keys farukesk

# Ayrıca GPG, anahtarlarınızı paylaşmanız için yukarıdaki gibi
# bir yol sunar. Internet'e bağlıyken bu komut farukesk kullanıcısının
# genel anahtarını, keyserver.pgp.com adresindeki anahtar sunucusuna gönderir.


   I.c. Anahtar Alma İşlemi

   Söz Dizimi:

]$ gpg --import [dosya_adi]


   Genel anahtarını insanlarla paylaşmak istemiş (public keyini export etmiş ve bir key servera ya da web sitesine koymuş, ya da bir şekilde size göndermiş) bir kişinin genel anahtarını keyring'inize dahil etmenizi sağlar. Örneğin certserver.pgp.com sunucusundan, genel anahtarına sahip olmak istediğiniz kişinin adını ya da e-posta adresini aratabilir, bulunan anahtarı bir dosyaya kopyalayabilir ve bu içeriği bu kişinin genel anahtarı olan dosyayı, yukarıdaki komutla keyring'inize dahil edebilirsiniz. Bu işlem sonucunda siz, söz konusu kişiden gelen imzalanmış verileri doğrulayıp okuyabilir ve yalnızca onun deşifre edebileceği şekilde veri şifreleyip kendisine gönderebilirsiniz.

   I.d. Anahtar Yönetimi

   GPG anahtar çiftlerini bir veritabanında saklar (aksi belirtilmemişse ~/.gnupg/ klasörü içerisinde bulunurlar). Anahtar yönetimi de bu veritabanını kullanarak anahtarlar üzerine işlem yapılmasını sağlar. Yapılabilecek işlemler ve sözdizimleri aşağıdaki gibidir:

]$ gpg --list-keys

# Sisteme dahil edilmiş ortak anahtarları listeler.


]$ gpg --list-sigs

# sisteme dahil edilmiş imzaları listeler.


]$ gpg --fingerprint

# Sistemdeki anahtarların sahiplerinin parmak izlerini hexadecimal
# formda listeler. Bu, anahtarların sahiplerinin gerçek sahiplerinin
# olup olmadıklarını kontrol etmede kullanılır.


]$ gpg --list-secret-keys

# Sisteme dahil edilmiş olan özel anahtarları listeler.


]$ gpg --delete-key [Kullanıcı_ID]

# Sisteme dahil edilmiş Kullanici_ID'li kullanıcının genel anahtarını siler.
# Bu kullanıcının özel anahtarı da sistemde mevcutsa ilk önce bunun silinmesi gerekir.


]$ gpg --delete-key [Kullanıcı_ID]

# Sisteme dahil edilmiş Kullanici_ID'li kullanıcının genel anahtarını siler.
# Bu kullanıcının özel anahtarı da sistemde mevcutsa ilk önce bunun silinmesi gerekir.


   Anahtarlarla çalışmak için bir önemli komut daha vardır:

]$ gpg --edit-key kullanici_ID


   Bu komut ile bir komut satırına düşersiniz. Bu komut satırında, anahtarın geçerlilik tarihini değiştirebilir, anahtara yeni bir parmak izi ekleyebilir ve anahtarı kendi özel anahtarınız ile imzalayabilirsiniz.

I.e. Anahtar İmzalama

   Eğer edindiğiniz bir ortak anahtar yanlış bir ortak anahtarsa bu anahtar şifrelemede kullanılamaz. Bu durumda söz konusu ortak anahtar imzalanabilir ve bu şekilde şifreleme için kullanılabilir. Fakat bu işlemin yapılması için anahtarın gerçekten tahmin ettiğiniz kişinin olduğundan emin olmalısınız.

]$ gpg --edit-key [Kullanici_ID]

# Bu komutla düşülen komut satırında sign komutu verilerek bu işlem yapılır.
# Bu komut girildikten sonra imzalama özel anahtar ile yapılacağı için özel # anahtarınızın parolası sorulur.



   II. Şifreleme ve Deşifreleme




   Bu iki işlem için önemli bir ortak nokta vardır. Eğer sistemde birden fazla özel anahtar yüklüyse işlemin hangi kullanıcı olarak yapıldığını belirtmek gerekir. Belirtilmezse, işlemi yapan kullanıcı öntanımlı kullanıcıdır. Belirtme işlemi bir seçenektir -u kullanici_adi şeklinde yapılır.

   II.a. Şifreleme

   Söz Dizimi:

]$ gpg -e -r [Alıcı] [Veri]


   Bu komut ile Alıcı kullanıcısının genel anahtarı bu komutun girildiği sistemde mevcutken, Alıcı kullanıcısının özel anahtarını kullanarak açabileceği şifrelenmiş ve sıkıştırılmış veriyi gpg uzantılı bir dosyaya yazar. Ayrıca, herhangi birisinin şifrelediğiniz bu verinin kendisi tarafından gönderildiğini iddia etme riskini ortadan kaldırmak için bu veriyi kendi özel anahtarınızla imzalamalısınız. Bu işin tamamını aşağıdaki komut ile yapabilirsiniz, bu komut çıktısını asc uzantılı bir dosyaya üretir:

]$ gpg -u [Gonderen] -r [Alıcı] --armor --sign --encrypt [Veri]


   Not: -u opsiyonunu kullanmazsanız, veri otomatik olarak sistemdeki öntanımlı özel anahtar ile imzalanır. Eğer sistemde birden fazla özel anahtar varsa, Gonderen yerine bu anahtarlardan kullanmak istediğinizin ID'sini yazarak, imzalama işlemini gerçekleştirebilirsiniz. Hatırlayacağınız gibi, anahtar ID'lerini görmek için gpg --list-keys çıktısından faydalanabilirsiniz.

   Örnekler:

]$ gpg --output cikti_dosyasi --export farukesk

# Bu komut farukesk isimli kullanıcının ortak anahtarını
# binary şekilde cikti_dosyasi isimli dosyaya yazar.


]$ gpg -e -r [Alıcı] -u [Gönderen] mesaj

# Bu komut gonderen kullanıcısı olarak mesaj dosyasındaki veriyi Alıcı kullanıcısı
# için şifreler ve çıktısını komutu çağırdığınız dizinin içinde mesaj.gpg dosyasına yazar.


]$ echo "Merhaba, bu mesajı zyariz gonderdi :)" | gpg -u farukesk -r meren -ea | mail [email protected]

# Bu komut "Merhaba, bu mesajı zyariz gonderdi :)" mesajını farukesk kullanıcısı olarak
# ascii modda meren kullanıcısı için şifreler, çıktısını da [email protected] adresine postalar.


   II.b. Deşifreleme

   Söz Dizimi:

]$ gpg -d [Veri]


   Genel anahtarınıza sahip birisinin, onu kullanarak yalnızca sizin açmanız için şifrelediği veriyi deşifre etmenizi sağlar. Seçeneksiz kullanımda çıktısını stdout'a yazar. -o dosya seçeneğinin eklenirse çıktı dosya dosyasına yazılır.

   Örnek:

]$ gpg --output dosya --decrypt sifreli_dosya

# Bu komut sifreli_dosya isimli dosya içerisindeki şifreli veriyi özel anahtarınızın
# parolasını istedikten sonra deşifreler ve çıktıyı dosya dosyasına yazar.



   III.İmzalama ve İmza Doğrulama




   Bu işlemin genel amacı gönderdiğiniz verinin göndericisinin siz olduğunu belgelemektir. Bunun yanında imzalama, veriyi sıkıştırabilir bu sayede de veriyi sizin ortak anahtarınıza sahip olmayan birisi okuyamaz.

   III.a. İmzalama

   Söz Dizimi:

]$ gpg -s [Veri]


   Bu komut veriyi imzalar ve sıkıştırır. Çıktı gpg uzantılı okunamaz bir dosyadır. Komuta eklenecek --clearsign parametresi, çıktının okunabilir bir asc uzantılı dosyaya saklanmasını sağlar. İmzalama işlemi özel anahtarınız ile yapılır.

   Örnekler:

]$ gpg --detach-sign dosya

# İkili dosyaları imzalarken önerilir. Çünkü bu komutla izma başka bir
# dosyaya (bu örnekte dosya.sig) atılır. Böylece ikili dosyanın bütünlüğü korunmuş olur.


]$ gpg -u [Gonderen] -r [Alıcı] --armor --sign --encrypt [Veri]

# Bu komut dosya dosyasındaki veriyi şifreler, imzalar ve çıktısını
# dosya.asc dosyasına ASCII formda yazar.


   III.b. İmza Doğrulama

   Söz Dizimi:

]$ gpg --verify [Veri]


   Bu komut veri dosyasındaki imzalanmış verideki imzayı doğrular. Bunun için veriyi imzalayan kişinin genel anahtarı sistemde var olmalıdır. gpg -v [Veri] komutu, eğer veri okunmaz haldeyse (genel olarak gpg uzantılıysa) mesajın okunabilir halini başka bir dosyaya (genel olarak uzantısız bir dosyaya) yazar.


   IV. Yasal Açıklamalar




   Telif Hakları

   Bu belgenin (Linux'ta GPG Kullanımı), 0.1 sürümünün telif hakkı © 2001 Faruk Eskicioğlu ve A. Murat Eren'e aittir. Bu belgeyi, Free Software Foundation tarafından yayınlanmış bulunan GNU Özgür Belgeleme Lisansının 1.1 ya da daha sonraki sürümünün koşullarına bağlı kalarak kopyalayabilir, dağıtabilir ve/veya değiştirebilirsiniz. Bu Lisansın bir kopyasını http://www.gnu.org/copyleft/fdl.html adresinde bulabilirsiniz.

   Feragatname

   Bu belgedeki bilgilerin kullanımından doğacak sorumluluklar, ve olası zararlardan belge yazarı sorumlu tutulamaz. Bu belgedeki bilgileri uygulama sorumluluğu uygulayana aittir.

   Tüm telif hakları aksi özellikle belirtilmediği sürece sahibine aittir. Belge içinde geçen herhangi bir terim bir ticarî isim ya da kuruma itibar kazandırma olarak algılanmamalıdır. Bir ürün ya da markanın kullanılmış olması ona onay verildiği anlamında görülmemelidir.



   Belge ile ilgili görüş ve önerilerinizi lütfen iletmekten çekinmeyiniz. GPG, açık anahtarlı kriptografi teknikleri üzerine temellenmiş bir uygulamadır. Açık anahtarlı kriptografi hakkında daha geniş bilgiyi http://zion.comu.edu.tr/~evreniz/belgeler/pkc/pkc.html adresinden temin edebilirsiniz.