GPG (GnuPG) ile Şifreleme İşlemleri
Warning: mysqli_query(): (HY000/3): Error writing file '/tmp/MYoqrfBD' (Errcode: 28 - No space left on device) in /usr/share/nginx/html/syslogs/wp-includes/class-wpdb.php on line 2349
Bildiğiniz gibi gpg epey uzun zamandır kullanımda olan ve hemen her linux dağıtımında ön yüklü olarak gelen güzel bir veri şifreleme ve imzalama programıdır. gpg, önemli dataları bir yerde saklamak ya da güvensiz ortamlarda (misal internet üzerinde) veri transferi sırasında, veri güvenliğini sağlamak için kullanılması yerinde olan programlardan birisidir. |
Freeware olarak ortaya çıkan pgp'nin, tamamen özgür bir muadili olarak Gnu Project altında geliştirilen gpg'yi çok fanatik olmamakla birlikte ben de önemli verileri şifrelemek için kullanmaktayım. Yakın geçmişte sık sık görüldüğü gibi mail listelere mail gönderirken şifrelemeye gerek duymazssınız ama illaki şifrelenmeye değer önemli verileriniz bulunuyordur.
Herneyse, bu yazıda GPG ile şifreleme işlemlerinin nasıl yapılabileceğine değinmek istiyorum.
GPG KULLANIMI
Yazının başında da bahsettiğim gibi hemen her linux dağıtımında gpg ön tanımlı olarak gelmektedir. Bundan dolayı herhangi bir kuruluma ihtiyaç yok. Ayrıca, gpg'nin windows'lar için de bir sürümü bulunmaktadır. Windows altında gpg kullanmak istiyorsanız http://www.gnupg.org/ indirip sisteminize kurabilirsiniz. Ben bu yazıda anlatılanları Ubuntu 9.4 üzerinde gerçekleştirdim.
Gpg ile şifreleme, yapabilmek için oluşturacağınız public ve pricate key'leri kullanabilir, ya da anahtar'a ihtiyaç duymadan direk bir parola belirleyerek şifreleme yapabilirsiniz. Bu yazıda her iki yöntemle şifreleme işlemi de anlatılacaktır.
PUBLIC ve PRIVATE KEY KULLANARAK ŞİFRELEME
Bu bölümde, önce public ve private anahtarların oluşturulmasından, public key'inizin başkaları tarafından edinilebilmesi için bir public key server'a gönderilmesinden ve bir dosyanın şifreleneceğinden sonrasında şifrenin nasıl çözüleceğinden bahsedeceğim.
Önce anahtarları oluşturalım.
Anahtarların Oluşturulması
Önce, private key'i oluşturacağız, bu key encrypt ve decrypt işlerinde kullanılacak olan size özel key'dir. Oluşturmak için komut satırında şu komutu verin.
$ gpg --gen-key
Bu komutu verdiğiniz zaman cevaplamanız gereken aşağıdaki gibi bir kaç soru ile karşılacaksınız.
- Key tipi = Default olarak 1 diyebilirsiniz.
- Key size'ı = Default değer 2048 iyidir.
- Key'in geçerlilik süresi = 0 diyip hiç expire olmamasını sağlayabilirsiniz.
- Adını, e-mail adresiniz ve sizi tanımlayan bir uzun açıklama.
- Passphrase= Bir şifre belirleyin ve asla unutmayun. Encrypt ettiğiniz datalar, bu şifreyi unutmanız durumunda decrypt edilemeyecektir.
Tam ekran çıktısı şu şekilde:
gpg (GnuPG) 1.4.9; Copyright (C) 2008 Free Software Foundation, Inc.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
Please select what kind of key you want:
(1) DSA and Elgamal (default)
(2) DSA (sign only)
(5) RSA (sign only)
Your selection? 1
DSA keypair will have 1024 bits.
ELG-E keys may be between 1024 and 4096 bits long.
What keysize do you want? (2048) 2048
Requested keysize is 2048 bits
Please specify how long the key should be valid.
0 = key does not expire
= key expires in n days
w = key expires in n weeks
m = key expires in n months
y = key expires in n years
Key is valid for? (0) 0
Key does not expire at all
Is this correct? (y/N) y
You need a user ID to identify your key; the software constructs the user ID
from the Real Name, Comment and Email Address in this form:
"Heinrich Heine (Der Dichter) "
Real name: Cagri
Email address: cagri @ cagriersen.net
Comment: Cagri Ersen GPG Key'i
You selected this USER-ID:
"Cagri (Cagri Ersen GPG Key'i) "
Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? O
You need a Passphrase to protect your secret key.
Enter passphrase:
Repeat passphrase:
Bu aşamadan sonra key oluşturulacak ve çıktı şuna benzer olacaktır.
Private key oluşturuldu.
Şimdi bir de public key oluşturalım. Bu key'i herhangi bir ortamda yayınlayabilir ve public anahtarınızı edinen kişilerin bu anahtarı kullanarak size özel şifreleme yapabilmesine olanak sağlayabilirsiniz. Bu şekilde gönderdikleri dosyayı sizden başka kimse çözümleyemez.
Komut şu şekilde:
$ gpg --armor --output pubkey.txt --export 'Adınız'
Ayrıca, public anahtarınızı, key sunucularına da gönderebilirsiniz. Böylece, public anahtarınızı bir yerlerde yayınlamasanız bile bu key sunucularından çekilebilir.
Public Key'in Key Sunucusuna Register Edilmesi
Önce gpg.conf dosyanıza kullanacağınız key sunucusunu ekleyin. Ben pgp.mit.edu sunucusunu kullanıyorum:
Conf dosyasını editleyin:
vi ~/.gnupg/gpg.conf
Sonra da aşağıdaki satırı ekleyin:
$ keyserver hkp://pgp.mit.edu
ve kaydederek çıkın.
NOT: pgp.mit.edu veri gönderip almak için 11371. portu kullanıyor. Eğer bu port firewall'dan kapalı ise, public key gonderimi yapamazsınız. Bu durumda alternatif olarak subkeys.pgp.net adresini kullanabilirsiniz. |
Key göndermek öncelikle oluşturduğunuz anahtarın ID'sini bilmeniz gerekmektedir. Bunun için –list-keys komutu kullanılabilir ve key listesinin çıktısını alınabilir:
$ gpg --list-keys
Çıktı şu aşağıdaki gibidir ve kırmızı ile işraretli bölüm key'in ID'sidir.
pub 1024D/915CD73A 2009-08-22
uid Cagri (Cagri Ersen GPG Key'i)
sub 2048g/29538C7D 2009-08-22
ID'si saptadıktan sonra şu şekilde gönderim yapılabilir:
$ gpg --send-keys 915CD73A
Public ve Private key'ler ile ilgili işlemler bu kadar.
Şimdi dosya şifreleme işlemlerine bakabiliriz.
Dosya Şifreleme (Encrypt)
Örneğin elimde bir dokumanlar.tar.gz isimli bir gzip dosyası mevcut. Bu dosyayı şu şekilde encrypt edebiliriz:
$ gpg -e -r 'Cagri' dokumanlar.tar.gz
Bu şekilde, dokumanlar.tar.gz.gpg isminde ecnrypted bir dosya elde etmiş oluyoruz. Şu durumda, dokumanlar.tar.gz dosyasını silebilirsiniz. Ancak hiç bir şekilde private key'i sisteminizden silmemeli ve key'i oluştururken belirlediğiniz şifreyi unutmamalısınız. Aksi taktirde dosyayı decrypt edemezsiniz.
Şifrelenmiş Dosyayı Açmak (Decrypt)
Bir önceki adımda oluşturduğumuz dokumanlar.tar.gz.gpg dosyasını çözümlemek için şu komutu kullanabilirsiniz.
$ gpg -o dokumanlar.tar.gz -d dokumanlar.tar.gz.gpg
Komutu verdiğiniz zaman private key'inizin passphrase'ini girmeniz istenecektir. Parolanızı girdiğiniz zaman encrypt dosya RCPT.tar.gz ismi ile decrypt edilecektir.
Bir de, birisi için, o kişinin public key'ini kullanarak encrypted dosya oluşturmak ve dosyayı o kişiden başkasının açamamasını sağlayabilirsiniz.
Bir Başkası Adına Encrypted Dosya Oluşturmak
Daha öncede bahsettiğim gibi, örneğin birisi size, sadece sizin decrypt edebileceğiniz bir dosya göndermek istemesi durumunda, bu işlemi yapabilmesi için public anahtarınıza sahip olması gerekir.
Örnek olarak bir arkadaşımıza önemli bir dosyayı şifreleyip mail yolu ile göndermek istiyoruz diyelim. Bu durumda, ilgili arkadaşın public anahtarına ihtiyacımız bulunmaktadır. Eğer bu kişi public key'ini örneğin kendi web sitesinde yayınlıyorsa, direk bu dosyayı download edebilir ve şu şekilde import edebiliriz:
$ gpg --import pubkey.txt
Eğer public key herhangi bir yerde yayınlanmıyorsa, key sunucularından da edinmemiz mümkün olabilir. Zira, biz de yazının ilk bölümünde key oluşturduktan sonra public key'imizi key sunucusuna register etmiştik.
Key sunucusunda e-mail adresinden hareketle arama yapmak için komut şu şekilde:
$ gpg --search-keys falanca@falancacom
Ya da isimden yola çıkarak arama için şu şekilde bir komut girebiliriz; örneğin şifreli dosya göndereceğimiz arkadaşın adı Osman Falangil olsun.
$ gpg --search-keys 'Osman Falangil'
Not: Aramanın yapılacağı key server gpg.conf dosyasında tanımlı olması gerekir. Bu işlemden yukarıda bahsetmiştim. Eğer yoksa muadil olarak gpg –keyserver hkp://pgp.mit.edu –search-keys ‘Ad Soyad' komutu kullanılabilir.
Arama sonucu şuna benzer olacaktır:
(1) Osman Falangil (Osman Falangil PGP Key) 1024 bit DSA key 915CD73A, created: 2009-08-22 (2) Osman Falangil 1024 bit DSA key E95A4656, created: 2009-08-21
Görüldüğü gibi iki adet key bulunuyor. 1'e basıp enter derseniz, ilgili key import edilecektir. Doğrulamak için list komutundan yararlanabilirsiniz:
$ gpg --list-keys
Key'i import ettikten sonra, dokumanlar.tar.gz isimli dosyayı sadece ilgili arkadaşın açabileceği şekilde encrypt edelim:
$ gpg -e -r 'Osman Falangil' dokumanlar.tar.gz
Artık, dokumanlar.tar.gz.pgp isimli dosyayı gönül rahatlığı ile göndrebiliriz.
Eğer size, public key'iniz kullanılarak şifrelenmiş bir dosya gönderilirse, dosyayı açmak için ekstradan yapmanız gereken bir şey yok, her zamanki gibi decrypt etmeniz ve passphrase'inizi girmeniz yeterlidir.
Komut şu şekilde:
$ gpg -o falan.doc -d falan.doc.gpg
Anahtar kullanarak şifreleme işlemleri bu kadar. Bir de anahtarlarla uğraşmadan, encrypte edilecek bir dosyay direk olarak parola tanımlama ile yapılabilecek bir şifreleme şekli bulunuyor.
PAROLA İLE DOSYA ŞİFRELEMESİ
Bu yöntem, öncekine oranla daha basit ancak dosya belirlediğiniz parolayı bilen herkes tarafından açılabilir. Bu anlamda anahtar'la şifrelemeye oranla biraz daha güvensizdir.
Örneğin, dokumanlar.tar.gz isimli dosyayı, parola belirleyerek şifrelemek için şu şekilde bir komut kullanılabilir:
$ gpg --force-mdc -c dokumanlar.tar.gz Enter passphrase: PAROLANIZ Repeat passphrase: PAROLANIZ
Bu şekilde, dokumanlar.tar.gz.gpg isimli encrypted bir dosya oluşturulur. Bu aşamadan sonra tar.gz isimli dosyayı silebilirsiniz ancak belirlediğiniz parolayı unutursanız, dosyayı bir daha açamazsınız. Bu nedenle dikkatli olun.
Parola ile encrypt edilen dosyayı şu şekilde açmak mümkün:
$ gpg dokumanlar.tar.gz.gpg
Evet, gpg ile ilgili genel geçer şifreleme işlemleri bu şekildeydi; detaylı bilgi için aşağıdaki linklerden yararlanabilirsiniz:
http://www.gnupg.org/documentation/
http://www.linuxjournal.com/content/tech-tip-encrypt-files-gpg
http://www.madboa.com/geek/gpg-quickstart/
Bu yazılar da ilginizi çekebilir:
- openSSL ve TSA ile Otomatik Log Imzalayıcı (Shell) Script
- SSH Tunneling ile Güvenli Surf ve SSH Port Forwarding
- OpenSSL ile 5651 Sayılı Kanun Gereği Log Imzalamak
- lsof (LiSt Open Files) Kullanımı ve Örnek Komutlar
- Herkes tarafından yazılabilir dosyaların saptanması
merhaba dosyaadı.conf dosyasını pc de hangi klasore atıyor?
[Cevapla]
dosyadı.conf ile ne kastediyorsunuz ?
gpg.conf ‘u kastediyorsanız , kullanıcınızın home klasorunde .gnupg dizini altında bulunur.
[Cevapla]
merhaba
1 yil once yine bu yaziyi okurken sifreledigim bir dosyam var.
Simdi bu dosyayi acmak istiyorum fakat dosyayi sifreledigim Pc formatlamistim. Public keyimi ‘keys.gnupg.net’ adresinde buldum ama private keyim olmadigindan dosyayi acamiyorum.Acaba dosyayi acabilme sansim var mi?
Simdiden tesekkurler.
[Cevapla]
Selamlar,
Privite key’i kaybettiyseniz dosyayı açamazsınız malesef.
[Cevapla]
peki bu bilgisayara format atma durumunda nasıl yedekleme yapacağız?
[Cevapla]
kardeş gizli anahtarı dışa aktar. ama şifresini unutma ve gizli anahtarı iyi sakla. daha sonra sistemi formatladıktan sonra gizli anahtarı içe aktar.bu kadar tekrar devam edebilirsin aynı anahtarla.
|Anony
[Cevapla]
meraba
diyelim ki gizli anahtarı dışa aktardık. daha sonra cd ye attık. cd ye attıktan sonra gizlianahtarın şifresini değiştirdik. yeniden cd ye atmamız gerekir mi bu kez?
[Cevapla]