Nasıl ve Ne Kadar Güvenlik?
Güvenlik konusunda kime güveneceksiniz? Hangi algoritma? Hangi ürün? En güçlü şifrelemeyi kim yapar? Şirketinizin hassas belgelerini ya da sizinle ilgili kişisel detayları en iyi kim gizler? Belki de en iyisi kendi güvenlik ve şifreleme algoritmanızı kendiniz geliştirmenizdir. Öyle midir? Eğer elinizin altında dünyanın en iyi matematikçilerinden oluşan ve tüm vakitlerini şifreleme konusuna vakfeden, son 30 yıldaki gelişmeleri yalayıp yutmuş bir araştırmacı ekibi yoksa tavsiyem kendi şifreleme algoritmalarınızı geliştirmekten medet ummayın ve size bu yönde telkinlerde bulunan cafcaflı şirketlere, onların etkileyici ilanlarına kulak asmayın. Elektronik belgelerinizin, e-postalarınızın, iletişiminizin şifrelenmesi çok ciddi bilimsel uzmanlık gerektiren konulardır!
"Bu durumda bu işten vaz geçelim çünkü biz bu konuda uzman ya da Einstein gibi bir dahi değiliz ayrıca bu tip bir araştırmaya ayıracak paramız da zaten yok," diyen karamsarlara güzel bir haberim var. Konuyla ilgili yüzlerce uzman son 30 yılda çok ciddi yöntemler, algoritmalar geliştirdiler; bu algoritmalar diğer uzmanlar tarafından yıllarca didik edildi, en ufak bir açığı olan yöntemler elendi ve geriye kala kala en sağlamları kaldı, bunlar da en saygın kurumlar tarafından pratik olarak kabul edildiler.
Güzel haberler bununla bitmiyor, bu yöntemlerden ve algoritmalardan yola çıkan özgür ve açık kodlu yazılım camiasındaki uzmanlar bizim gibi uzman olmayan kullanıcıların en sağlam şifreleme yöntemlerinden faydalanabilmeleri için gerekli yazılımları geliştirdiler, kullanımımıza sundular.
"Pekiyi tamam da ben dosyalarımı mesajlarımı nasıl şifreleyeceğim? Hangi program? Hangi seçenekler?" diye sabırsızlananlara biraz daha sabırlı olmalarını söylemek durumundayım çünkü bahsedeceğim programlardaki temel işlemleri anlamanız için bu kavramlardan yüzeysel olarak da olsa haberdar olmanız gerekiyor. Karşılığında elde edeceğiniz güçlü şifreleme buna değecektir, inanın.
Anahtarlar, İmzalar, Yöntemler, Dosyalar, Kullanıcılar
Bilgisayarınızdaki bir belgeyi şifrelemek için kullanabileceğiniz iki yöntem vardır: Simetrik ve asimetrik yöntem. Bunlarla ilgili olarak bilmeniz gereken temel şey şudur: Simetrik yöntem tek bir anahtar kullanır yani programa bir anahtar verirsiniz ve "al bu anahtarı kullanarak şu dosyayı şifrele" dersiniz, dosyanız şifrelenir. Güzel. Artık şifreli bir dosyanız var ve bunu da arkadaşınıza yollayabilirsiniz; eğer kötü niyetli ve meraklı kişiler bir şekilde bu mesajı ele geçirirse ellerinde bir yığın anlamsız karakter olacaktır. Bu anlamsız yığından anlamlı ve orjinal mesaja geçmenin pratik olarak tek yolu da "anahtar"a sahip olmaktır. Fena bir yöntem değil. Eğer arkadaşınızda da ilgili anahtar varsa arkadaşınız aldığı bu anlamsız gibi görünen veri yığınını kolayca "deşifre" edebilecektir. Anahtar deyip durduğumuz şey ise uzun bir karakter dizisinden başka bir şey değildir ve elinizin altında bir bilgisayar olduğuna göre epey uzun ve karmaşık bir karakter dizisi oluşturabilirsiniz öyle değil mi? Hatta mesela her mesaj için farklı bir anahtar kullanarak güvenliğinizi kat kat sağlamlaştırabilirsiniz. Yalnız burada belki gözünüzden kaçan küçük ama önemli bir nokta var sanırım:
Bu "anahtar"ları arkadaşınıza nasıl vereceksiniz? Mesela yurtdışında oturan bir arkadaşınıza? E-posta ile? Peki ya rakipleriniz e-postaları ele geçirirse? O zaman bütün güvenlik iptal olur. Anahtarları şifrelemek? Bunun için de bir anahtar gerekir ki bu durumda da en başa dönmüş oluruz!
İşte burada ikinci yöntem devreye girer: Asimetrik yöntem. Gene dosyalarımızı şifreleyeceğiz ancak bu durumda iki anahtar kullanacağız daha doğrusu biz gene bir anahtar kullanacağız ancak bu anahtarı arkadaşımıza göndermemiz gerekmeyecek! Garip bir durum ve şöyle bir açıklaması var: Bu sistemde her kullanıcının iki anahtarı vardır, açık anahtar (public key) ve gizli anahtar (private key). Açık anahtar da tıpkı yukarıda belirtildiği gibi uzun bir karakter(sayı da diyebiliriz) dizisidir ve adından anlaşılabileceği gibi cümle aleme ilan edebileceğiniz bir anahtardır, mesela web sayfanızda yayınlayabilirsiniz! Arkadaşınızın açık anahtarını öğrendikten sonra ilgili hassas belgeyi bu anahtarla şifrelersiniz. İşin püf noktası burada! Bir kez bu belge arkadaşınızın açık anahtarı ile şifrelendikten sonra artık onu sadece ve sadece arkadaşınızın gizli anahtarı çözebilir. Asimetrik denmesinin de sebebi de budur yani bir belgeyi şifrelemek için kullandığınız anahtarı onu deşifre etmek yani çözmek için kullanmanız mümkün değildir. Daha kesin bir dille söylemek gerekirse eğer belgeyi arkadaşınızın açık anahtarı ile şifreledikten sonra belgenin orjinalini silerseniz artık siz bile ona ulaşamazsınız, çözülebilmesi için arkadaşınızın şifreli belgeyi alıp kendi gizli anahtarını kullanarak deşifre etmesi gerekir. Bunu sadece arkadaşınız yapabilir. Benzer şekilde eğer arkadaşınız sizin "açık anahtar"ınızı kullanarak bir belgeyi şifrelerse artık o gizli mesaj sadece ve sadece sizin "gizli anahtar"ınız kullanılarak deşifre edilebilir.
Güzel bir haber daha, yukarıdaki yöntemlerle bir belgeyi şifrelemekle kalmayıp aynı zamanda onu sayısal olarak imzalayabilirsiniz de! Böylece arkadaşınız o belgeyi deşifre etmekle kalmayıp aynı zamanda sizden geldiğine de emin olabilir. Bu yüzden bir belgeyi imzalarken dikkatli olun çünkü ileride bir gün "Hayır bu belgeyi ben oluşturmadım!" dediğiniz takdirde insanları ikna etmeniz biraz zor olacaktır, muhtemelen matematiğe ve teknolojiye daha çok güveneceklerdir.
"Bu kadar laf salatası yeter artık şu belgelerimi güvenli bir şekilde şifrelemek istiyorum!" diyenler derin bir nefes alsınlar ve bir sonraki bölümü dikkatlice okusunlar, sindirmeleri gereken epey malzeme bulacaklar (afiyet olsun).
GnuPG, WIPE ve Diğer Dost Programlar
"GnuPG" (GNU Privacy Guard) özgür ve açık kodlu yazılım felsefesi ile pek çok güzel yazılım üreten GNU organizasyonunun güvenlik konusundaki en kapsamlı, temel ve her türlü standart ile uyumlu yazılımıdır. Bu yazılım hemen her Linux dağıtımı ile standart olarak gelmekte ve sisteminize kurulmaktadır. Aşağıda vereceğim örnekler Debian GNU/Linux 3.0 işletim sistemi çalıştıran ev bilgisayarımdan alınmıştır ve her türlü Linux, UNIX (ve hatta MS Windows) uyumlu işletim sisteminde kullanıcı tarafında bir değişiklik gerektirmeden kullanılabilir. Bu yazılımın güvenliğinden şüphe eden ciddi şahıslara şunu söylemem belki bir nebze yüreklerine su serpecektir: GnuPG sisteminin geliştirilmesine Almanya Ekonomi ve Teknoloji Bakanlığı resmi olarak maddi destek vermektedir ve açık kaynak kodlu güvenlik yazılımını kendi özel ihtiyaçlarına uyarlamak için her türlü teknik ve bürokratik çalışmayı gerçekleştirmektedir.
GnuPG'yi kullanacak birinin ilk yapması gereken "anahtar"larını oluşturmaktır ve bunun için aşağıdaki komutu (gpp --gen-key) vermesi yeterlidir ($ sembolüne kadar olan yazılar benim sistemime özgüdür, sizinkinde farklı olabilir, bu bir şeyi değiştirmez):
fz@debian:~$ gpg --gen-keyBilgisayarın buna tepkisi aşağıdaki gibi olacaktır:
gpg (GnuPG) 1.0.6; Copyright (C) 2001 Free Software Foundation, Inc. This program comes with ABSOLUTELY NO WARRANTY. This is free software, and you are welcome to redistribute it under certain conditions. See the file COPYING for details. Please select what kind of key you want: (1) DSA and ElGamal (default) (2) DSA (sign only) (4) ElGamal (sign and encrypt) Your selection? 1Program bu aşamada bizden bir anahtar çifti oluşturmamızı istemektedir daha doğrusu kendi yapacağı bu iş için hangi seçeneği tercih ettiğimizi sormaktadır. Eğer yöntemler konusunda detaylı bilgi sahibi değilseniz üzülmenize gerek yok çünkü bilgisayar 1. seçeneği önermektedir ve bunu seçip devam etmemizin güvenlik açısından bir sakıncası yoktur. Bu seçimden sonra ise başka bir seçim bizi beklemektedir:
Please select what kind of key you want: (1) DSA and ElGamal (default) (2) DSA (sign only) (4) ElGamal (sign and encrypt) Your selection? 1Burada da önerileni yani 1. seçeneği seçip devam edebiliriz ve sonra:
DSA keypair will have 1024 bits. About to generate a new ELG-E keypair. minimum keysize is 768 bits default keysize is 1024 bits highest suggested keysize is 2048 bits What keysize do you want? (1024)Her zaman olduğu gibi bilgisayarın önerisini kabul edip enter tuşuna basalım ve devam edelim:
Requested keysize is 1024 bits Please specify how long the key should be valid. 0 = key does not expireYukarıda bilgisayar bize oluşturacağı anahtarların ne kadar süre ile geçerli olacağını başka bir deyişle bunların son kullanma tarihini sormaktadır. Eğer çok özel bir durumunuz yoksa önerilen seçenek olan sıfırı seçerek bu anahtarların sürekli geçerli olduklarını söylersiniz ancak gene de bilgisayarın paniklemesine engel olamazsınız! := 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)
Key does not expire at all Is this correct (y/n)? yGüvenlik önemli tabii ama yani henüz paranoyak olacak kadar önemli işlerle uğraşmıyorum (sizi bilemem tabii). Evet diye cevaplayıp devam ediyoruz:
You need a User-ID to identify your key; the software constructs the user id from Real Name, Comment and Email Address in this form: "Heinrich Heine (Der Dichter)Yukarıdaki gibi bir görüntü ile karşılaştığınızda artık bilgisayara kendinizi tanıtmanın zamanı gelmiştir. Sisteminizde sizin dışınızda arkadaşlarınızın da açık anahtarları bulunabilir ve bu yüzden bilgisayarın sizi diğerlerinden ayırd edebilmesi gerekir. Bunun için isim, e-posta adresi ve bir yorum (takma isim gibi de düşünebiliriz ya da açıklayıcı herhangi bir ibare) yeterli olacaktır:"
Real name: Emre Sevinc Email address: fz@debian.org Comment: FZ You selected this USER-ID: "Emre Sevinc (FZ)O yani Okay deyip devam edelim:" 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:Bilgisayarınıza bir şekilde girmiş birinin sizin adınıza şifreli bir mesaj oluşturup sağa sola yollamasını ister misiniz? Ben istemem. Bu yüzden yukarıda bir "parola cümlesi" (passphrase) iki kere girilmeli. Mümkünse annenizin kızlık soyadından daha zor tahmin edilebilen bir şey olsun! İstediğiniz kadar uzun bir sözcük, sayı, cümle, bütün bunların karışımı olabilir, yeter ki sizden başka birisinin tahmin edemeyeceği ama sizin kolayca hatırlayabileceğiniz bir şey olsun. Bu arada yukarıda benim yazdığım parola cümlesi görünmüyor öyle değil mi? Doğru çünkü sizin ekranınızda da görünmeyecek (güvenlik bazen biraz rahatsız edici olabiliyor kabul ediyorum) bu yüzden yazarken dikkatli olun. Parola cümlenizi sakın ama sakın unutmayın (sonra demedi demeyin!).
Bu aşamadan sonra artık anahtarlarınız bilgisayar tarafından pişirilmeye hazır. Sizin yapmanız gereken pek bir şey kalmadı. Yukarıda parola cümlenizi girdikten sonra yazılım size şunları söyleyecektir:
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. ++++++++++++++++++++++++++++++++++++++++++++++++++.++++++++++..++++++++++++++++++++++++++++++++++++++++.++++++++++++++++++++.+++++.+++++>++++++++++..............................................+++++ 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. +++++..++++++++++++++++++++.++++++++++.++++++++++++++++++++.++++++++++....+++++++++++++++.++++++++++.++++++++++++++++++++++++++++++++++++++++>+++++....................<+++++>+++++.........................+++++^^^^ public and secret key created and signed. fz@debian:~$Hayır bilgisayar saçmalamıyor sadece karmaşık bir anahtar dizisi oluşturmak için biraz çaba sarf ediyor ve tesadüfi (random) sayılardan faydalanmaya çalışıyor, eğer yukarıdaki mesajı aldığınızda farenizi birkaç saniye gelişigüzel sağa sola oynatırsanız program anahtar üretimi esnasında bundan faydalanacaktır, tabii klavyeye gelişigüzel basmayı da tercih edebilirsiniz, ya da her ikisi birden. Odanın ışıklarını açıp kapatabilir ve odada zıplayabilirsiniz. Şart değil aslında. Mutlaka etkisi olur tabii gene de şart değil (şimdilik). Tesadüfi sayılar, bunların şifreleme ile ilgisi, bu bağlamdaki önemi ve bilgisayar kadar olağanüstü bir makinanın nasıl olup da tesadüfi sayı üretmekte zorlandığı ayrı bir yazının konusu olabilecek kadar derin.
Neyse artık anahtarlarımız oluştuğuna göre gelin hassas bir belgeyi şifreleyelim. Peki bu belgeyi hangi arkadaşımız için şifreleyeceğiz? Şu anda sistemde tek bir anahtar çifti var o da bize ait. Bu problem değil, eğer sadece biz varsak sistemde o halde biz de belgeyi kendi kendimiz için şifreleyebiliriz yani kendimizi arkadaş kabul edebiliriz (kendi ile barışık olmanın bir avantajı da bu gibi örnekler vermeyi mümkün kılması). Bir kez bu belgeyi kendi açık anahtarımızla şifreledikten sonra ancak ve ancak kendi açık anahtarımız ve parola cümlemizle açabiliriz.
Nasıl? Şu şekilde: Ben kendi sistemimde hassas.txt diye bir dosya yarattım. Bu dosyanın içeriğini görmek için cat komutunu kullanacak olursak:
fz@debian:~/pcworld$ cat hassas.txt BU BILGI COK GIZLI KALMALI!!!Şimdi bu hassas bilgiyi (!) içeren hassas.txt dosyasını GnuPG ile şifreleyelim:
fz@debian:~/pcworld$ gpg -se hassas.txt You need a passphrase to unlock the secret key for user: "Emre Sevinc (FZ)Neler oldu? Gerekli komutu verdik ve bilgisayara hassas.txt adlı dosyayı şifrelemesini ( (e)ncrypt ) ve imzalamasınız ( (s)ign )söyledik. Buna karşılık bilgisayar önce bizi tanıdı ve sonra da bundan emin olabilmek için parola cümlemizi girmemizi istedi (evet görünmüyor yazarken, unutmamanızı söylemiştim). Ardından da "ben bu belgeyi" kimin adına şifreleyeceğim diye sordu ve biz de cevaben kendimizle ilgili girdiğimiz comment'i yazdık. Şifreleme işlemi sessizce gerçekleştirildi yeni bir dosya oluşturuldu. Yeni bir dosya? İsmi ne peki? Aksini belirtmediğiniz sürece GnuPG orjinal dosya isminin sonuna .gpg uzantısını ekler yani oluşan yeni ve şifreli (ve imzalı) dosyanın ismi "hassas.txt.gpg"dir. Peki bu dosya neye benziyor? Gene cat komutunu kullanalım:" 1024-bit DSA key, ID ACE54758, created 2002-11-11 You did not specify a user ID. (you may use "-r") Enter the user ID: FZ fz@debian:~/pcworld$
fz@debian:~/pcworld$ cat hassas.txt.gpg ½CqDË%D1Î祬§váíg´{Ã)§fï÷á࿺{Ù!Qìc¨½»Ê[ì^É#¹ÛLkDñöÚ±#VûşMä5 úqÅ"ë{%§¬ ÊñcnMKî(ÙHxÓ a,ñkcJÒ®aÄYØê´äÚfãZ_ Å ó]øz3¶©ï%ÿôúøU;!¾·Î/ÏêH+u*x4+5!²DÓÓìzØOÍdç×UZJkñ©Ïpj/Íjó E !~yöLÊ`Õ"ÛÚ÷ñIÍ!fX̨8ÜÏëÒõWDKm(´]pG~DV¢L²_'ó_:#ÄÒëî¢íû¹ííw fz@debian:~/pcworld$Yeterince anlamsız görünüyor mu? Güzel. İstediğimiz de buydu. Peki ama bu anlamsız gibi görünen ve fakat bizim hassas bilgilerimizi içeren mesajı nasıl deşifre edeceğiz? Basit, aşağıdaki komutu kullanarak:
fz@debian:~/pcworld$ gpg -dv hassas.txt.gpg gpg: public key is 44CB2544 gpg: using secondary key 44CB2544 instead of primary key ACE54758 You need a passphrase to unlock the secret key for user: "Emre Sevinc (FZ)Yani sisteme hassas.txt.gpg isimli şifreli dosyayı deşifre edip ( (d)ecrypt ) imzayı da teyit etmesini ( (v)erify ) söylediğimizde GnuPG bize parola cümlemizi sorup bunun doğruluğunu kontrol edecek ve sonra dosyanın orjinalini orjinal ismi ile diske yazacaktır." gpg: using secondary key 44CB2544 instead of primary key ACE54758 1024-bit ELG-E key, ID 44CB2544, created 2002-11-11 (main key ID ACE54758) gpg: encrypted with 1024-bit ELG-E key, ID 44CB2544, created 2002-11-11 "Emre Sevinc (FZ) " gpg: RIJNDAEL encrypted data gpg: original file name='hassas.txt' BU BILGI COK GIZLI KALMALI!!! gpg: Signature made Mon Nov 11 20:38:36 2002 EET using DSA key ID ACE54758 gpg: Good signature from "Emre Sevinc (FZ) " fz@debian:~/pcworld$
Açık kaynak kodlu özgür yazılım ortamında veri güvenliği ve şifreleme ile ilgili olarak daha önce herhangi bir uygulama yapmadıysanız yazının bu aşamasında artık epey bilgi yüklemesine maruz kalmış durumdasınız demektir. Tavsiyem yukarıdaki pratik örneklerin üzerinden birkaç kez geçmeniz, mümkünse kendi sisteminizde bu örnekleri denemeniz ve aklınıza takılan yerleri not etmenizdir.
Yazı dizimizin ilk bölümünün sonuna yaklaşırken nihai olarak bahsetmek istediğim bir program daha var. Bu program dosyaları silmek ile ilgili. Daha doğrusu diskten kazımak ile ilgili!
"Dosya silmekten kolay ne var! rm komutu ne güne duruyor, bir kez rm komutu ile dosyaları uçurdum mu onlara hangi çılgın erişebilir şaşarım!" diyen sabırsızlara üzülere söylemeliyim ki maalesef elektromanyetik alan teorisine dayanan sevgili harddiskinizden bitleri, byteları silip atmak ve bunu geri dönülemez bir şekilde yapmak hiç de kolay değil. Peter Norton'un undelete özelliğini keşfederek nasıl zengin olduğunu unutmayın! Efendim? O eski MS-DOS günlerinde miydi? Ve biz GNU/Linux kullanıyoruz öyle değil mi? Hiç fark etmez!
Pek çok yötemin yanı sıra Manyetik Kuvvet Mikroskopisi (MFM) ile diske yazılmış iki ya da üç katman aşağıdaki veriler okunabilir. Bu yüzden de rm ve benzeri komutlar işe yaramaz, onlar sadece dosyanın haritadaki yerini silerler ve bu yüzden de dosyaya ulaşmanızı epey zorlaştırırlar ancak dosyanın kendisine bir şey yapmazlar. Oysa yapılması gereken dosyanın bulunduğu disk bölgesinin üzerinden defalarca geçmek ve o bölgeyi gelişigüzel karakter dizileri ile doldurmaktır. İşte Berke Durak tarafından geliştirilmiş wipe adlı tam olarak bu işi yapar. Söz konusu program benim kullandığım Debian GNU/Linux 3.0 işletim sistemi CD setinde mevcuttu ancak eğer sizin sisteminizde yoksa o zaman KAYNAKÇA bölümdeki ilgili adrese giderek programın son sürümünü çekip sisteminize kurabilirsiniz.
Bu bilgilerden sonra birkaç paragraf yukarıda kullandığımız hassas.txt adlı dosyaya dönelim, o dosyayı şifrelemiştik ve istediğimiz zaman açabilecek durumdayız öyle değil mi? Öyleyse dosyanın orjinali ortalıkta durmasa daha iyi olur. Madem hassas.txt çok hassas bilgileri içeren bir dosya o halde biz de uygun araçları kullanırız (her işe uygun bir araç vardır ve zaten doğrusu da uygun aracı kullanmaktır). Nasıl mı? Basit, şu şekilde:
fz@debian:~/pcworld$ wipe hassas.txt Okay to WIPE 1 regular file ? (Yes/No) Yes Operation finished. 1 file (0 special) in 0 directories wiped, 0 errors occured. fz@debian:~/pcworld$Dosyayı harddiskten bir güzel kazıdık ve komut satırına geri döndük. Tabii wipe gibi bir komutun ciddi bir komut olduğunuzu aklınızdan çıkarmayın lütfen yani yukarıda gördüğünüz gibi program sizden uzun uzun bir Yes onayı istiyor dosyayı silmek için ve bunun geri dönüşü yok, o yüzden Yes yazıp enter tuşuna basmadan önce beş kere falan düşünmenizi tavsiye ederim. Bu aşamadan sonra artık hassas.txt adlı dosyaya ne siz ne de kötü niyetli kişiler ulaşabilir!
Gelecek ay yazmayı planladığım 2. bölümde GnuPG sistemi ile ilgili biraz daha detaylı bilgi vereceğim ve bu sistemi kullanarak arkadaşlarınızın açık anahtarlarını nasıl depolayabileceğinizi, bunlardan nasıl bir anahtar halkası (keyring) oluşturabileceğinizi, bir mesajı arkadaşınıza yollamak üzere nasıl şifreleyebileceğinizi anlatmaya çalışacağım. Ayrıca komut satırı lafı duyunca tüyleri diken diken olan kullanıcı grubu için arka planda GnuPG sistemini kullanan şirin ve "kullanıcı dostu" grafik kullanıcı arayüzlerine değineceğim elimden geldiğince.
O zamana dek her türlü önerinizi ve eleştirinizi http://fazlamesai.net adresinde dile getirebilirsiniz.
KAYNAKÇA
1) http://www.gnupg.org
2) http://gsu.linux.org.tr/wipe/
3) The GnuPG Privacy Handbook
4) "Applied Cryptography", Bruce Schneier, http://www.counterpane.com/applied.html