OpenSSL Pub/Pri Key Pair oluşturmak ve dosya şifrelemek

Merhabalar, bugün gizli tutmak istediğiniz dosyalarınızı en güvenli şekilde nasıl şifreleyeceğiniz hakkında çok küçük bir örnek vereceğim.

Ben bu örnekleri gerçekleştirirken Ubuntu Gnome 16.04 LTS kullandım, vereceğim örnek OpenSSL kurulu olan tüm Linux Distrolarında aynı şekilde çalışacaktır aynı şey Mac OS X işletim sistemleriniz içinde geçerli olacaktır.

Öncelikle örnek olarak şifrelemek istediğimiz bir dosya oluşturalım.

echo "Çok gizli şeyler" > plain.txt

Aşağıdaki komutla içinde "Çok gizle şeyler" bulunan plain.txt isimli bir dosya oluşturuyoruz.

Kendinize ait bir public/private key pairine sahipseniz bu adımları atlayıp direk encryption/decryption bölümlerine geçebilirsiniz.

Şimdi şifrelemek için öncelikle bir private key oluşturuyoruz.

openssl genrsa -out private.pem 8192

Bu komutla private.pem ismiyle 8192 bitlik key size ile bir private key oluşturduk.

Bu key size'ın büyük olması private keyiniz için yapılacak brute force saldırıların süresini azaltarak daha güvenli bir şifreleme sağlarken, encryption-decryption gibi işlemlerinin süresini benzer oranda arttıracağını unutmamalıyız.

Oluşturduğumuz Private Key'i decryption işlemini gerçekleştirirken daha sonra kullanacağız.

Şimdi Private Keyimizi kullanarak encryption işleminde kullanılmak üzere Public Keyimizi yaratacağız.

openssl rsa -in private.pem -pubout -out public.pem

Bu komutla beraber public.pem dosyamızı oluşturmuş olduk.

Şimdi dosyamızı şifrelemek için aşağıdaki komutu kullanabiliriz.

cat plain.txt | openssl rsautl -encrypt -pubin -inkey public.pem -out secret.txt

Burada yaptığımız işlem sırasıyla

  • cat plain.txt komutuyla dosyamızı okuduk.
  • | openssl komutunu kullanarak bu komuttan aldığımız output'u openssl programına pipe ettik.
  • rsautl açılımı RSA Util olan parametreyi kullanarak encrypt decrypt işlemlerini gerçekleştirmemiz için diğer parametreleri kullanabilir hale geldik.
  • -encrypt şifreleme yapmak istediğimizi belirttik.
  • -pubin -inkey public.pem kısmında ise daha önce oluşturduğumuz public keyi kullanarak şifreleme yapacağımızı belirttik, bu public keyle oluşturulan şifreleri sadece ilk kısımda oluşturduğumuz private keyimiz açabilir.
  • -out secret.txt kısmında ise şifrelenen dosyayı nereye ve hangi isimle kaydetmek istiyorsak onu belirtiyoruz. Bu kısımda direk plain.txt üzerine override işlemide yapabilmeniz mümkün.

Yeni oluşan dosyayı cat ettiğimde aşağıdaki çıktıyla karşılaştım.

alt

Gördüğünüz gibi dosya tamamen anlaşılamaz bir hale geldi fakat ihtiyacınız olduğu zaman Private Keyinizle dosyayı eski haline getirebilirsiniz.

cat plain.txt | openssl rsautl -decrypt -inkey private.pem > plain_restored.txt

Aşağıdaki komut yukarıda kullandığımız encrypt komutuna çok benziyor o yüzden detaylar için tekrar üst kısmı okuyabilirsiniz. Burada -decrypt diyerek decryption yapmak istediğimizi belirtiyoruz ve private.pem dosyamızı kullanarak dosyamızı geri açıyoruz. Bu işlemi plain_restored.txt dosyamıza yönlendiriyoruz ve

cat plain_restored.txt

Yazdığımızda volla Çok gizli şeyler

Ek olarak pub/pri cryptography dışında eklemek istediğim OpenSSL'de yeni öğrendiğim ve çok sevdiğim bir hashing özelliği üstüne olacak.

Bunun için herhangi bir programlama diliyle basit bir arayüzde yapabilirdim fakat OpenSSL bunu direk sağlıyor.

Eskiden SHA-1, MD-5 gibi keyleri oluşturmak için md5, sha1 hashing yapan bir siteye girip hashlemek istediğim inputu yazıp output alıyordum, fakat şöyle bir özellik farkettikten sonra beni oldukça hızlandırdı.

echo -n "Batikan" | openssl md5 yazdığımda aldığım çıktı;

5626de056133c56b01a967dcee7d1f42

Keza aynı örneği SHA-1 ile yaptığımda;

08d4653348a94683ed269617b63a934b29878ed8

openssl dgst --help komutuyla kullanabileceğiniz tüm algoritmalara erişebilirsiniz.

Ben algoritmalar için aşağıdaki çıktıyı aldım.

-md4 to use the md4 message digest algorithm -md5 to use the md5 message digest algorithm -ripemd160 to use the ripemd160 message digest algorithm -sha to use the sha message digest algorithm -sha1 to use the sha1 message digest algorithm -sha224 to use the sha224 message digest algorithm -sha256 to use the sha256 message digest algorithm -sha384 to use the sha384 message digest algorithm -sha512 to use the sha512 message digest algorithm -whirlpool to use the whirlpool message digest algorithm

Şimdilik bu kadar, tekrar görüşünceye dek herkese sevgiler ve mutluluklar.

PS: Burada yazılanları kötü amaçla kullanıp arkadaşlarınızın dosyalarını encryptleyip kendinize yemek ısmarlatmak gibi küçük hainlikler ve trollüklerden ben sorumlu değilim :))

Batıkan Senemoğlu

Read more posts by this author.

İstanbul, Turkey https://batikansenemoglu.com