GPC (GNU Privacy Guard)Nedir ?
Merhaba Bu yazımda sizlere GPC (Gnu privacy guard) dan bahsedeceğim.
GPC nedir:
GNU Privacy Guard (GnuPG ya da GPG), şifreleme yazılımı PGP yerine GPL lisanslı bir özgür yazılım alternatifidir. Özgür Yazılım Vakfı’nın GNU projesinin bir parçası olarak geliştirilmektedir ve en önemli maddi yardımını Alman hükümetinden almıştır. Basit olarak herhangi bir datanın şifrelenmesini ve çözülmesini kapsar.
Kullandığı algoritmalar aşşağıdaki gibidir :
Açık anahtarlı şifreleme
RSA, ElGamal, DSA
Simetrik Anahtarlı Şifreleme
3DES, IDEA, CAST5, Blowfish, Twofish, AES-128, AES-192, AES-256, Camellia-128, -192 and -256
Özet(Hash) Fonksiyonu
MD5, RIPEMD-160, SHA-1, SHA-256, SHA-384, SHA-512, SHA-224
Sıkıştırma
ZIP, ZLIB, BZIP2
1991 yılında Philip Zimmermann tarafından geliştirilen PGP (Pretty Good Privacy) programına dayanır.Gpg yi gelistiren ise Werner Koch adinda alman bir geliştiricidir.
Asıl güdülmek istenen amac Klasik şifrelemenın yanı sıra güvenliğin yüksek seviyelerde olması veri kaybı yada 3. kişiler tarafından görüntülenme ,değiştirilme, kullanma gibi durumların engellenmesi ihtiyacıdır.
Klasik şifreleme de şifrelenen data için bir parola oluşturulur ve bu parola datalar şifrelenirken kullanılması yanı sıra şifrelenmiş datanın çözülmesinde de kullanılır.Bu yöntemle şifrelediğiniz datayı gönderdiğiniz başka bir kullanıcının bu dataya erişim sağlamasını istiyorsanız, parolayı da bu kullanıcıya ulaştırmanız gerekmektedir. Fakat bu yöntem de sizin datayı ve beraberinde parolayı gönderdiğiniz ağı dinleyen biri varsa data güvenilirliğini yitirir. GnuPG de ise işler farklı ilerliyor GPG de iki tane anahtar olusturuluyor ve Bu iki tane anahtardan biri datayı şifrelemek için kullanılırken public key, diğer anahtar, public key ile şifrelenmiş datanın çözülmesinde için kullanılan private key dir.
Adından da anlaşılacağı gibi public key sizin herkesle paylaşabileceğiniz ve yayınlayabiliceğiniz key iken private key sadece size özel kalmalı ve kimse tarafından öğrenilmemelidir. Bu noktada biri size bir data göndermek istediğinde datayı sizin public key inizi kullanarak şifreliyor ve size gönderiyor bu şifrelenmiş datayı sadece sizin private key iniz çözümleyebilir olduğundan datanın 3. kişiler tarafından ele geçirilmesi yada ağınızı dinleyen biri tarafından çözümlenmesi neredeyse imkansız hale geliyor.
GPG key olusturmayı anlatmadan önce Şifreleme ve İmzalama arasındaki farktan da bahsetmek istiyorum
- Şifreleme yaptığınızda, başka birinin public key’ini kullanırsınız ve datayı yolladığınız kişi bu datayı çözmek için kendi private key’ini kullanır.
- İmzalama yaptığınızda, kendi private key’iniz ile kendi verinizi imzalarsınız ve datayı yolladığınız kişi sizin public key’inizi kullanarak, datanın gerçekten sizden gelip gelmediğini çözümler.
Bu ayrımlar doğrultusunda , eğer bir kişiye bir data gönderiyor ve sadece bu kişinin bu datayı aldığından emin olmak istiyorsanız şifreleme, kamuya bir data paylaşıyor ve bu datayı alanların, datanın kaynağının siz olduğundan emin olmasını istiyorsanız imzalama kullanmalısınız.
GPG kurulumu :
Birçok linux dağıtımı keza macOS lar da dahil olmak üzere bu sistemler içinde gpg ile birlikte gelmektedir. Makinanızda gpg olup olmadığını öğrenmek için
➜ ~ gpg — version
komutunu çalıştırarak öğrenebilirsiniz.
Eğer bilgisayarınız da gpg kurulu değil ise https://gnupg.org/download/ burdan kurabilirsiniz.
GPG yi Komut Satırında Çalıştırmak İçin Başlıca Komutlar
- Versiyon Bilgisi öğrenme:
gpg --version
- Açık ve gizli anahtar çifti üretme:
gpg --gen-key
Bu komutu girdiğinizde key oluşturma esnasında size bir kaç soru soruluyor
gpg --gen-key
gpg (GnuPG) 2.2.19; Copyright (C) 2019 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) RSA and RSA (default)
(2) DSA and Elgamal
(3) DSA (sign only)
(4) RSA (sign only)
Your selection? 1
RSA keys may be between 1024 and 4096 bits long.
What keysize do you want? (2048) 4096
Requested keysize is 2048 bits
Please specify how long the key should be valid.
0 = key does not expire
<n> = key expires in n days
<n>w = key expires in n weeks
<n>m = key expires in n months
<n>y = key expires in n years
Key is valid for? (0) 0
Key does not expire at all
Is this correct? (y/N) yYou 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:
"Real Name (Real name) real@real.mail"
Real name: Name Surname
Email address: mail@mail.com
Comment: Explanation
Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? O
You need a Passphrase to protect your secret key.Enter passphrase:gpg: gpg-agent is not available in this session
We need to generate a lot of random bytes. It is a good idea to perform
some other action (type on the keyboard, move the mouse, utilize the
disks) during the prime generation; this gives the random number
generator a better chance to gain enough entropy.
...
İlk sorulan soru, key yaratılırken hangi tür algoritma kullanılcağıdır.
Daha sonra key uzunluğu sorulacak. Daha güvenli olaması açısından en yüksek boyut seçilebilir.
3. olarak, keylerin son kullanım tarihini oluşturmak istiyorsanız bunu seçebilirsiniz veya 0 seçerek son kullanım tarihi tanımlanmasını atlayabilirsiniz.
Sonraki adımda kişisel bilgilerinizi tanımlamanızı isteyecektir. Bu bilgiler birleştirilip bir User ID oluşturacak ve public key içerisine eklenecektir. Bu bilgiler, public key’inizi kullanmak isteyen kişilere sizi tanıtmada yardımcı olacaktır. Bilgileri girdikten sonra onaylamanızı isteyecektir, “O” girerek onaylayabilirsiniz.
Kişisel bilgilerinizi düzgün ve eksiksiz girdikten sonra, sizden bir parola girmenizi ve doğrulamanızı isteyecektir. Bu parola, kendi bilgisayarınızda depolanacak private key’in güvenliği için gereklidir. Private key kullanılırken sizden yine bu parolayı girmenizi isteyecektir. Güçlü bir parola seçmeniz güvenliğiniz açısından iyi olacaktır.
Tüm bu adımları eksiksiz tamamladıktan sonra public ve private keylerimiz
/home/<user>/.gnupg
altında oluşmuş olacaktır.
- Parmak izlerini listeleme:
gpg --fingerprint
- Makine üzerindeki açık anahtarları listeleme:
gpg --list-keys
- Makine üzerindeki açık anahtarı dışarı aktarmak:
gpg --output acik_anahtar.gpg --armor --export ABCDFE01
- Dışarıdan bir açık anahtarı makineye ekleme:
gpg --import acik_anahtar.gpg
- Makine üzerindeki gizli anahtarları listeleme:
gpg --list-secret-keys
- Makine üzerindeki gizli anahtarı dışarı aktarmak:
gpg --output gizli_anahtar.gpg --armor --export-secret-key ABCDFE01
- Dışarıdan gizli anahtarı makineye ekleme:
gpg --allow-secret-key-import --import gizli_anahtar.gpg
- Var olan anahtar ile veri şifreleme:
gpg --encrypt --armor -r ABCDFE01 metin_dosyasi.txt
- Şifrelenmiş metni çözme:
gpg metin_dosyasi.txt.asc
- İmzalı metin doğrulama:
gpg --verify metin_dosyasi.txt.asc
- Metni imzalama:
gpg --clearsign metin_dosyasi.txt
Son olarak küçük bir örnekle yazımı sonlandırmak istiyorum
GPG ile data şifreleme ve şifreli datayı çözme
Herhangi bir dosyayı şifrelemek için yapmanız gereken
gpg -r <KeyID> -e <dosyaAdi>
Buradaki -r parametresi, hangi kullanıcı ile imzalamak istiyorsak onu seçiyoruz.
Şifrelenmiş bir dosyayı çözmek için de aynı şeklide basit bir komut çalıştırıyoruz
gpg -o <outputFilePath> -d <cryptedFile>
çıktıyı ayrı bir file olarak değil de direk consola basmak istiyorsanız -o parametresine gerek yokur. Dosya çözümlenirken size, daha önce GPG key’leri oluştururken girdiğiniz parola sorulacaktır.
➜ ~ gpg — list-key
/Users/USERNAME/.gnupg/pubring.kbx
— — — — — — — — — — — — — — — — — — — -
pub rsa2048 2020–01–29 [SC] [expires: 2022–01–28]
KEY
uid [ultimate] NAME <MAIL>
sub rsa2048 2020–01–29 [E] [expires: 2022–01–28]
➜ ~ touch gpgdeneme.txt
➜ ~ ls gpgdeneme.txt
gpgdeneme.txt
vim gpgdeneme.txt → DENEME
➜ ~ gpg -r KEY -e gpgdeneme.txt
➜ ~ ls gpgdeneme.txt
gpgdeneme.txt gpgdeneme.txt.gpg
➜ ~ gpg -o cevap.txt -d gpgdeneme.txt.gpg
gpg: encrypted with 2048-bit RSA key, ID — — — — — — — , created 2020–01–29
“NAME <MAIL>”
➜ ~ cat cevap.txt → DENEME
Direk consola basmak için
➜ ~ gpg -d gpgdeneme.txt.gpg
gpg: encrypted with 2048-bit RSA key, ID — — — — — — — , created 2020–01–29
“NAME <MAIL>”
DENEME