Tag Archives: gpg

Amerika’nın Günümüz Kriptografi Standartları Üzerindeki Etkisi

Kriptografi’ye girişin ikinci bölümünde Amerika’nın günümüzde sık kullanılan kriptografi standartları üzerinde nasıl bir etkisi var bunu inceleyeceğiz.

NSA skandallarından sonra kriptografinin ne kadar önemli olduğu, bir insan hakkı olan gizliliği yıllarca ne kadar küçümsediğimiz ve tüm bu gözetim ve izlemelere ne kadar hazırlıksız olduğumuz ortaya çıktı. Bununla birlikte, mesaj içeriğinin şifrelenerek araya girmeler olsa dahi iletişimin sadece gönderen ve alıcı arasında anlaşılır olmasını sağlamak için yıllardır algoritmalar oluşturulmaktadır. Ayrıca, kriptografide sık kullanılan algoritmalar kimler tarafından oluşturuldu, bunların bir standartı var mıdır ve algoritmalar üzerinde kimlerin etkisi vardır görmek iletişimin gizliliği açısından son derece önemlidir. Bu yüzden ilk olarak belli başlı bazı terimlerin neler olduğunu inceleyeceğiz.

1-NIST nedir?

Açılımı; National Institute of Standards and Technology. Adından da anlaşıldığı gibi bir standart kurumudur. Türkiye’de benzer (ne kadar benzer iş yapıyorlar, tartışılır) olarak TSE gösterilebilir. Bununla birlikte, 1901 yılında kurulmuş, Amerika’nın en eski fizik laboratuvarlarından da biridir. Genel olarak endüstriyel rekabetçiliğin olumsuzluğunu gidermek için ölçüm standartlarıyla ilgilenmektedirler. Nano düzeyde araçlardan insan yapımı olan en büyük ve karmaşık araçlara kadar ölçüm standartlarını desteklemektedirler.

2-FIPS (Federal Information Processing Standard) nedir?

FIPS; Türkçesi Federal Bilgi İşleme Standart’ı olan Amerika Birleşik Devletleri tarafından askeri olmayan devlet kurumları ve devletle iş yapan diğer kurumlar tarafından bilgisayar sistemlerinde kullanılması için geliştirilmiş bir standartlar bütünüdür. FIPS’in amacı tüm federal hükûmetler ve kurumların güvenlik ve iletişimde kullanacakları ortak bir standartın sağlanmasıdır.

3-Açık-Anahtar Algoritması (Public-key Algorithm) nedir?

Açık-anahtar algoritması daha çok asimetrik kriptografi olarak bilinen ve iki farklı anahtar olan açık ve gizli anahtarlardan oluştan bir algoritmadır. Anahtarlar farklı olmalarına rağmen matematiksel olarak birbirleriyle bağlantılıdırlar. Açık anahtar bir mesajın içeriğini şifrelemede veya dijital imzaları doğrulamada kullanılırken gizli anahtar ise şifreli mesajı açar veya dijital anahtarlar oluşturur. Günümüzde sık rastladığımız TSL, GPG, Diffie-Hellman, RSA ve PGP açık-anahtar algoritmasına örnek olarak gösterilebilirler.

Bu terimleri kavradıktan sonra ikinci olarak sık kullanılan algoritmaların neler olduğu, bunların kimler tarafından ne zaman oluşturuldukları ve üzerinde kimlerin veya hangi kurumların etkilerinin olduğuna bakalım.

AES – The Advanced Encryption Standart

Bilindiği üzere AES (Rijndael), simetrik şifre bloğu olup Joan Daemen ve Vincent Rijmen tarafından tasarlanmıştır. DES (Data Encryption Standart)‘in 56 bitlik küçük bir şifre bloğu olması ve giderek brute force saldırılarına karşı savunmasız kalması yeni bir standartın gerekli olduğunu gösteriyordu. AES ilk 1998 yılında duyrulup yayımlanmış, ardından 2001 yılıda (Rijndael) NIST tarafından Advanced Encryption Standart olarak seçilmiştir. Bu seçim süreci birçok farklı tasarımın elenmesinin ardından gerçekleşmiştir. NSA yarışmaya katılan tasarımların hepsini detaylı bir şekilde inceleyip NIST’e son seçimin en güvenli tasarım olması konusunda teknik destek verse de NIST NSA’den bağımsız olarak kendi kararını vermiş ve seçimini de AES’ten yana yapmıştır. Bu yüzden NSA’in AES’e ne bir katkısı ne de üzerinde bir etkisi mevcuttur denilebilir.

RSA – The Rivest, Shamil, Adleman Public Key Algorithm

RSA algoritması 1977 yılında MIT‘de kriptografi hocaları olan Ron Rivest, Adi Shamir ve Leonard Adleman tarafından tasarlanmıştır. Açık ve gizli anahtar şeklinde ikiye ayrılmatadır. Daha önceside, 1973 yılında bir matematikçi ve İngiliz istihbarat servisi GCHQ çalışanı olan Clifford Cocks, benzer bir algoritma tasarlamış ve belgelerinin yüksek derecede gizlilikleri yüzünden 1998 yılında keşfedilmiştir. Clifford Cocks uygulanması için dönemin pahalı bilgisayarlarına ihtiyacın olduğu, çoğunluk meraktan tasarladığı ve uygulanmadığını belirtmiştir. RSA hem akademik çevreler hem de NSA tarafından detaylı bir şekilde analiz edilmiştir. Bununla birlikte, NSA’in RSA’nın tasarlanmasında veya geliştirilmesinde herhangi bir katkısı yoktur.

Diffie/Hellman/Elliptic-Curve Diffie-Hellman/The Diffie-Hellman Key Exchange Algorithm

Diffie-Hellman algoritması 1976 yılında Stanford Üniversitesi’nde kriptografi hocaları olan Withfield Diffie ve Martin Hellman tarafından tasarlanmıştır. GCHQ çalışanları olan Malcolm Williamson, Clifford Cocks ve James Ellis tarafından birkaç yıl önce bulunmuş fakat yayımlanmamıştır. Diffie-Hellman’ın eliptik eğri sürümü ise bağımsız olarak 1985 yılında Amerikalı kriptologlar Victor Miller ve Neal Koblitz tarafından bulunmuştur. 2002 yılında Hellman, açık-anahtar kriptografisinin bulunmasında büyük katkısı olan Ralph Merkle‘nin de tanınması için algoritma adını Diffie-Hellman-Merkle olarak değiştirmiştir. NSA, potansiyel olarak zayıf olan eliptik eğri parametrelerinin NIST standartları içerisinde yer almamasını sağlamıştır.

DSA/ECDSA – The Digital Signature Algorithm/Elliptic Curve DSA

DSA algoritması dijital imzalar için bir FIPS standartıdır. 1991 yılında NIST tarafından dijital imza standarlarında (DSS) kullanılması için teklifte bulunulmuş ve 1993 yılında kullanılmaya başlanmıştır. Bununla birlikte, DSA 1991 yılında eski bir NSA çalışanı olan David Kravitz tarafından tasarlanmıştır. Ayrıca NSA, Eliptik Eğri DSA ya da ECDSA olarak bilinen diğer bir sürümünü de tasarlamıştır. DSA, akademik çevreler tarafından analiz edilmiştir.

SHA-1/The Secure Hash Algorithm 1

Ron Rivest tarafından tasarlanan MD5 algoritmasının uzun bir benzeri ve SHA-0 algoritmasının düzeltilmiş hali olan SHA-1, NSA tarafından tasarlanmıştır. SHA-0 ise 1993 yılında bir standart haline gelen NSA tasarımıdır. Fakat, 1994 yılında NSA kriptologları SHA-o tasarımında güvenliği azaltan bir sorunla karşılaştıklarında, bu açığı hızlıca kapatmak için bir NIST standartı olan SHA-1’le yer değiştirmişlerdir. Ayrıca, SHA-1 akademik çevreler tarafından analiz edilmiştir. Öte yandan, uzun yıllardır hem NIST hem de NSA SHA-2’nin kullanılmasını tavsiye etmektedir.

SHA-2/The Secure Hash Algorithm 2

NSA, dört farklı uzunluktan oluşan (224, 256, 384 ve 512 bit) hash algoritmarları içeren SHA-2‘yi tasarlamış ve NIST tarafından yayımlanmıştır. SHA-2 daha uzun hashlere sahip olduğu için SHA-1’e göre daha iyi bir güvenlik sağlamaktadır. Ayrıca, SHA-1’in tasarımdan kaynaklanan bazı algoritma açıklarına karşı daha iyi bir savunma oluşturur. Bu algoritmanın bir FIPS standart olması ise 2002 yılında gerçekleşmiştir. SHA-2 de akademik çevreler tarafından analiz edilmiştir.

Görüldüğü üzere, bizlerin kriptografide kullandığı bazı algoritmalar tasarlandıktan sonra yayımlanmış ve bilim adamları, matematikçiler, mühendisler vd. tarafından analiz edilmiştir. Ayrıca, bu algoritmalar için belirli standartlar oluşturulmuş ve güvenilirliği için onay verilmiştir. Öte yandan, günümüzde sık kullanılan bu algoritmalar üzerinde NSA ve GCHQ gibi istihbarat kurumlarının etkisi net olarak görülmekte,  bu algoritmalara benzer algoritmalar oluşturdukları ve yayımlamadıkları da bilinmektedir. Bilim etiği, planlı ve sistemli olarak toplanan verilerin analiz edilmesi, yorumlanması, değerlendirilmesi ve başkalarının da geliştirmesini içerse de gizliliğin istihbarat kurumlarının tekeline bırakılmaması gerektiğinin önemi bir kez daha gözler önüne sermektedir. Çünkü, iletişimin gizliliğini sağlamak amacıyla kullanılan birçok kriptografi algoritmasında istihbarat kurumlarının etkisi veya katkısından ziyade bireylerin daha açık ve daha özgür olarak tasarlanmış, analiz edilmiş ve geliştirilmiş algoritmalara ihtiyacı vardır. Bu, hem iletişimin gizliliğine olan güveni artıracak hem de asıl amacı gizliliği ortadan kaldırmak olan NSA ve GCHQ gibi kurumların küresel gözetim ve izlemesinden daha iyi bir şekilde korunmayı sağlayacaktır.

Tagged , , , , , , , , , , , , , , , , , , , , , , , , , ,

PGP Kullanın

Bir uygulamayı nasıl kullanabileceğinize dair rehberler hazırlanırken, hazırlayan kişi -kaçınsa da- kendisi nasıl kullanıyorsa öyle anlatır. Bu bir hata değildir, bunda yanlış bir şey yoktur. Az bildiği anlamına da gelmez. Aynı şekilde alışkanlıklarının dışına çıkması onu anlatacağı şeyde hata yapmaya da götürebilir.

Böyle bir giriş yaptıktan sonra PGP üzerine hazırlanan bu rehberin, yazan kişinin kullanım çerçevesinde ilerleyeceği için “eksik” olduğu düşünülen noktalar aslında bilerek boş bırakılmıştır. Adım adım ilerleyecek olursak:

  1. PGP, e-posta ve dosyaların güvenliği için bir kriptolama ve doğrulama (matematiksel kısmı için aramaya inanın) aracıdır. Sizlere gönderdiğiniz dosyanın ya da e-postanın şifrelenmesini ve başkaları tarafından okunmamasını (ya da sadece gönderdiğiniz kişi tarafından okunabilmesini), gönderen kişinin kimliğini doğrulamayı ve gönderilen dosya ya da e-postanın yapısının bozulmadan size ulaşmasını (ya da bozulup bozulmadığını anlamanızı) sağlar.
  2. Kullandığınız e-posta sağlayıcı ne kadar güvenli olursa olsun e-posta mahremiyeti artık ayaklar altına alındığı için gönderdiğiniz e-postaları bu yöntemle göndermeniz güvenliğinizi kat kat arttıracak, e-posta içeriğiniz üçüncü şahıslar tarafından okunamayacaktır.
  3. PGP anahtarları oluşturmak için açık kaynak veya ticari yazılımlar mevcuttur. GNU/Linux kullanan biri olarak sadece GPG; GnuPrivacyGuard ve Terminal üzerinden gideceğim. O yüzden açık bir terminaliniz olursa hemen başlayabilirsiniz. Çünkü her şeyi onun üzerinde yapacağız. “#” komut, “>” ise terminal çıktısıdır.

Dağıtımınızın ne olduğunu bilmediğim ve bilemeyeceğim için paket yöneticinizden gnupg‘nin kurulu olup olmadığına bir bakın. Eğer kurulu değilse kurun. Her şeyin artık hazır olduğunu varsayarak;

# gpg --gen-key
> 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)

Burada sizlere ne tür bir kriptolama yöntemi kullandığınız soruluyor. Varsayılan olan 1’i seçip (1 ve enter) yolumuza devam ediyoruz.

> RSA keys may be between 1024 and 4096 bits long.
> What keysize do you want? (2048)

Anahtarınız ne kadar güçlü olacak burada belirleyeceğiz. En büyük olanı iyidir diyoruz. 4096 yazın ve devam edin.

> Please specify how long the key should be valid.
> 0 = key does not expire
> = 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)

Burada anahtarınızın ömrünü biçeceğiz. Bir nevi son kullanım tarihi. Sınırsız olmasını pek tavsiye etmiyorum. 3-5 gün sonra dolması da bana mantıklı gelen bir şey değil (eğer paylaşmayacaksanız). İdeal olarak 1-2 sene seçilebilir. 1y ya da 2y yazarak devam edebilirsiniz.

> GnuPG needs to construct a user ID to identify your key.
> Real name:
> Email address:
> Comment:
> Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit?

Adınız veyahut takma adınız, kullanacağız e-posta adresiniz, anahtarla ilgili -varsa- yorumunuz (bu daha çok neden kullandığınız, ne işi yaradığı ile ilgili olabilir), son olarak O yazarak devam ediyoruz. Karşınıza şifre belirlemeniz için bir pencere açılacak. Buraya büyük, küçük harf, rakam ve işaretler kullanarak en az 10 karakterlik bir şifre yazıyorsunuz. İleride unutmayacağınız fakat güçlü bir şifre yazmanız sizin yararınıza olacaktır.

Anahtarın oluşturulabilmesi için rastgele bytes’a ihtiyaç olacak. Bu yüzden film açın, tarayıcınızda sitelere girin, metin editörüne bir şeyler yazın. Anahtarın oluşması biraz zaman alacaktır. Oluştuğunda ise:

> gpg: key ******** marked as ultimately trusted
> public and secret key created and signed

Şeklinde bir çıktı alacaksınız. ******** (rakam ve harflerden oluşan 8 hane) sizin anahtarınızın ID’si olmaktadır. Bu ID ayrıca 40 hanelik fingerprint’in son 8 hanesidir.

Sıra geldi oluşturduğumuz anahtarımızı nasıl kullanabilir, paylaşabiliriz, yedekleyebilir ve silebiliriz kısmına. Diyelim ki elinizde önemli bir dosya var ve kimsenin açık kurcalamasını istemiyorsunuz:

# gpg -e ******** dosya.txt

Dosyanızın kriptolanmış hali olan dosya..txt.gpg‘nin oluştuğunu göreceksiniz. Açmak isterseniz:

# gpg -d dosya.txt.gpg
# gpg --output dosya.txt --decrypt dosya.txt.gpg

Anahtarınızı paylaşmanızın iki yolu var. Biri anahtarınızı dışa aktarıp (ASCII-armored) göndermek, bir diğeri de anahtar sunucularına yollamak. ASCII-armored için:

# gpg --output anahtarım.asc --export -a ********

Böyle e-postanız üzerinden anahtarım.asc‘yi arkadaşlarınıza gönderebilirsiniz. Herhangi bir sunucuya göndermek için:

# gpg --send-key ********

Böylece arkadaşlarınız paylaştığınız anahtarınızı kullanarak sizlere kriptolanmış e-posta veya dosya gönderebilecekler. Şimdi size gönderilen bir anahtarı nasıl aktarabileceğinize bakalım:

# gpg --import arkadaşımınamahtarı.asc

Arkadaşınız eğer anahtarını sunuculardan birine göndermiş ve siz sadece ID’sini biliyorsanız:

# gpg --recv-key ********

Size gönderilen bir anahtarı doğrulamak isterseniz muhakkak fingerprint’ini karşılaştırın.

# gpg --fingerprint ********

Aynı şekilde anahtarınızı imzalamanız da anahtarı kullanan kişilere anahtarın sahibi olduğunuzu söyler.

# gpg --sign-key ********

Çok önemli bir adım olarak anahtarınızı nasıl yedeklersiniz? Öncelikle anahtar(larınızı) listelemek için:

# gpg --list-keys

Açık anahtarınız; pub 4096R/ ve gizli anahtarınız; sub 4096R/ ‘den sonraki 8 karakterlik kısımdır. Açık anahtarınızı yedeklemek için;

# gpg -ao açıkanaharım.key --export ********

Gizli anahtarınızı yedeklemek için;

# gpg -ao gizlianahtarım.key --export-secret-keys ********

Silinirse geri yüklemek için;

# gpg --import açıkanahtarım.key
# gpg --import gizlianahtarım.key

Bu yedekleri usb diskinizde saklayabilir, cd’ye yazdırabilirsiniz. Önemli olan bunları kaybetmemek. Bununla birlikte, anahtarı iptal etmek (revoke) bilmemiz gereken başka bir şeydir. Bir anahtar neden iptal edilire gelirsek (bu bilginiz olsun kısmı):

  1. Şifrenizi unutmuşsunuzdur ve hatırlama ihtimaliniz yoktur.
  2. Anahtarınızı kaybetmişsinizdir ve geri yükleyemiyorsunuzdur.
  3. Birileri tarafından kullandığınız şifre bulunmuştur.

Her türlü kötü durumları bu konuda kafanızda canlandırabilirsiniz. Ama temel olarak bu üç neden kafanızın bir yerinde bulunsun. İptal edilmiş bir anahtar ile karşılaştığınızda hatırlarsınız.

Revoke anahtarı oluşturmak için:

# gpg --gen-revoke ********

Anahtarı aktarmak için:

# gpg --import revoke.asc

Eğer anahtarı bir sunucuya göndermişseniz revoke edilmiş anahtarı tekrar göndermeniz o anahtarın iptal edildiğini gösterecektir.

Son olarak, oluşturduğunuz anahtarı ve sahip olduğunuz anahtarları silmek isterseniz:

# gpg --delete-secret-key ********
# gpg --delete-key 'arkadaşım@epostası'

O kadar uğraştık, bir e-posta göndereceğim ama nasıl diyorsanız, diyelim ki göndereceğiniz kişinin anahtarı sizde mevcut ve bir metin editörü ile (ben vim kullanıyorum bana bakmayın) e-postada anlatmak istediklerinizi yazdınız;

# gpg -e -u 'BenimanahtarIDim' -r 'ArkadaşımınanahtarIDsi' eposta.txt

Eklentiye eposta.txt.gpg‘yi koyun ve gönderin. Arkadaşınız yukarıda bahsettiğimiz şekilde e-posta.pgp.txt’yi açacak ve e-postayı okuyacaktır. Ben biraz eski kafalı olduğum için bu şekilde yapıyorum. Kullandığınız e-posta istemcisi (Thunderbird, Claws vs) ya da web tabanlı e-posta istemciniz bunu otomatik yapıyor olabilir. Onu sizin keşfetmeniz gerekecek.

Tekrar tekrar söylemeye gerek yok ama ben gene söyleyeyim. Kullandığınız e-posta servisi ne kadar güvenilir olduğunu iddaa ederse etsin, siz PGP kullanın!

Tagged , , , , , , , , , , ,