14 Mart 2013 Perşembe

Açık Anahtarlı Şifreleme & GPG

Bu dönem okuldaki seçmeli dersler arasından Kriptoloji seçtim. Derste çeşitli şifreleme algoritmaları gördük. Sezar, Vigenere, Kerberos gibi.

Şifreleme işlemlerinde temel kaygı şifreleme yapan anahtar ve deşifreleme yapan anahtar aynı olduğu zamanlarda birisi anahtarı ele geçirirse, şifreli metni deşifreleyebileceğidir. Yani bu durumda en başta anahtarın güvenliğinin sağlanması gerekir. Açık anahtarlı şifreleme algoritmalarında ise bu probleme çözüm olarak bir anahtar ya sadece şifreleyebilsin, ya da sadece deşifreleyebilsin olmuştur. Biz de geçen hafta derste açık anahtarlı şifreleme algoritmalarından biri olan RSA'yı işledik. Bu işlemde kişi kendi belirlediği iki asal sayıyı belirli işlemlerden geçirip bir açık anahtar bir de gizli anahtar üretmektir. Açık anahtarı kendisine şifreli metin gönderilebilmesi için herkese verir. Sonra kendisine gelen şifreli metinleri kendi gizli anahtarı ile açar.

Bu şekilde açık ve gizli anahtarlar oluşturmak için çeşitli araçlar vardır. E-posta istemcileri, Seahorse gibi. Ben burada terminalden gpg ile gizli ve açık anahtarın nasıl üretibileceğinden bahsettim. gpg zaten dağıtımlarda genelde kurulu geliyor. Bu arada GPG (GNU Privacy Guard), GPL ile lisanslanmış bir şifreleme yazılımı.
Terminalden aşağıdaki gibi parametresiyle gpg komutunu verelim:
$ gpg --gen-key
gpg (GnuPG) 1.4.11; Copyright (C) 2010 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

Burada RSA'yı seçip diğer sorularıda geçtikten sonra karşımıza anahtarların üretilmesi için şöyle bir yazı çıkacak:
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.


Ben bu işlem için "ls -R /"  diyorum :) Sonra bir yerde kesiyorum tabi listelemeyi. Anahtarlar üretildikten sonra anahtarların parmak izi bilgisini ekranda görebiliriz.
Key fingerprint = D9F2 4673 D60E 47EE EB46  1BB3 1EDE B418 711C B3B7
uid                  Ebru Akagunduz (Açıklama) 
sub   2048R/07684591 2013-03-14 
Daha sonra bir dosyadaki metni aşağıdaki gibi açık anahtarımızla "--encrypt" diyerek şifreleyebiliriz.
$ gpg --encrypt -r ebru.akagunduz@gmail.com duzmetin.txt 
Açarken de "--decrypt" parametresini kullansak yeterli olur.
$ gpg -ao public.key --export 711CB3B7
Açık anahtarı elde etmek için
$ gpg -ao private.key --export-secret-keys 711CB3B7 
Gizli anahtarı elde etmek için kullanılır. Burada -a parametresi düz metin formatında almak için, -o parametresi de dosyaya yazıdrmak için kullanılır.

Aslında gpg daha bir çok kullanışlı parametreye sahip. Çok da sevdim kendisini. Ama ben burada bu kadar bahsedebildim. Afiyet olsun :)

2 yorum:

  1. yazı için eline sağlık.
    gpg konsol çıktılarını aynen kopyalamışsın ya, satırlar bölünmemiş çok kötü görünüyor tarayıcıda.

    YanıtlaSil
    Yanıtlar
    1. Yazalı uzun zaman oldu, tam hatırlamıyorum kopyalarken dikkat etmemiş olabilirim. Ancak kimi zaman düzgün görünüyor, kimi zaman dediğiniz gibi. Şuan düzgün görünüyor ben de mesela.

      Sil