24 Kasım 2014 Pazartesi

OpenSSL Kullanarak Asimetrik Şifreleme Yöntemi ile Dosya Şifreleme ve Açma

     Asimetrik şifrelemedeki genel mantık elde iki key'in olmasıdır. Bunlardan biri kişiye özel olan private key bir diğeri ise herkeste olan public key. OpenSSL'in bu şekil yapılan dosya şifrelemesindeki olay ise temelde 2 adımdan oluşuyor.
1- Private key üret
2- Private key'den Public key üret.
Bu iki adımdan sonra şifrelenmesini istediğimiz dosyayı public key ile şifreliyoruz. Ancak buradaki önemli olan nokta encrypt edilmiş dosyayı decrypt etmek için elimizde private key'in olmasıdır. Yoksa babayı alırsınız.

    Elimizde gizli.txt isimli bir dosyanın olduğunu farz edelim. İçeriği ise;

Şimdi şifrelemede kullanılacak olan anahtarları üretmeye başlayalım. Openssl ile RSA bir key üreteceğimiz zaman default olarak 2048 bitlik bir anahtar üretiyor. Bunu ayarlayabilirsiniz.
  • openssl genrsa --> default 2048 bitlik private key ama ekrana çıktıyı basar
  • openssl genrsa -out private.key --> 2048 bitlik RSA fakat dosyaya yazar
  • openssl genrsa -out private.pem 1024 --> 1024 bitlik private key üretir
  • openssl genrsa -out private.pem 4096 --> 4096 bitlik private key üretir.
Şimdi sıra ürettiğimiz private key'den dosyaları şifrelemek için kullanacağımız bir public key üretmekte.


Gördüğünüz üzere 2048 bitlik RSA şifreleme algoritması ile üretilmiş private key'imiz hazır. Private key kullnarak elde edeceğimiz public key üretmekte sıra şimdi. Bunun için;
openssl rsa -in private.key -out public.key -pubout

Buradan şöyle bir çıktı içeren dosya elde edeceğiz.

Yazı uzamış lan bayağı kısa kesmenin vakti geldi.
Şimdi ultra gizli dosyamızı public key kullanarak şifreleyeceğiz. Bunun için;
openssl rsautl -encrypt -pubin -in gizli.txt -out secret.txt -inkey public.key


Buradaki parametrelere bakacak olursak eğer;
rsautl kullandığımız şifreleme algoritmasından ötürü yazıyoruz. -encrypt şifrelemeyi belirtmek amaçlı, -pubin public key için, -in input dosyamız (şifrelenecek olan) -out şifreleme sonucunda oluşacak dosya, -inkey şifrelemek için kullanacağımız public key'imizi belirtiyor.
Bunun sonucunda oluşan şifreli datayı görüyorsunuz bir şeye benzemiyor. Arada küfür bile ediyor olabilir.

Şimdi encrypt yani şifrelenmiş hale getirilmiş dosyayı decrypt hale getirelim.

openssl rsautl -decrypt -in secret.txt -out sonuc.txt -inkey private.key

Burada kullanılan parametreler encryption aşamasında kullandıklarımızla aynı mantıkta. Tek fark şifreyi çözmek için Private key kullanmamız gerekiyor.
Bu işlemin sonucunda başta şifrelediğimiz ultra süper gizli bilgiler içeren dosyaya tekrar ulaşmış oluyoruz.

Edit: Yazarın burada anlatmak istediği, Public key'i yayın sağa sola kimlerde olduğu önemli değil. Data Public key ile encrypt edilir fakat Private key'iniz olmadan sadece çöp datanız olur. Şifrelenmiş dosyayı sadece Private key ile decrypt edebilirsiniz.

Hiç yorum yok:

Yorum Gönder