Özel Anahtar Değeri (Private Key)

Özel anahtar değerleri 2008 yılında Bitcoin ilk tanıtıldığından beri Bitcoin’in bütünleyici bileşenidir. Cüzdan yazılımları genellikle kullanıcıların özel anahtar değerlerinin ne olduğunu ve nasıl çalıştığını bilmelerine gerek kalmadan onları bu karmaşık yapıdan soyutlamaktadır. Cüzdan yazılımları kullanıcıları özel anahtar değerlerinden soyutlasa da kullanıcılar bazen bu anahtar değerleri ile karşılaşmaktadır, ve bu karşılaşma sıklıkla istenmeyen sonuçlar sebebiyle
bitcoin-ozel-anahtar-degeri.jpg
Bitcoin özel anahtar değerleri Bitcoin’in en önemli bileşenlerinden biridir.

Özel anahtar değerlerinin basitçe anlaşılması kullanıcıları bitcoin kaybından ve diğer aksiliklerden korur. Ayrıca Bitcoin’in nasıl çalıştığına dair önemli ipuçları da verir. Bu yazımda en önemli özel anahtar değeri kavramlarından ve Bitcoin’i daha efektif nasıl kullanabileceğinizden basedeceğim.
Bitcoin: Güvenli Bir Mesajlaşma Sistemi

Bitcoin en çok bir ödeme sistemi olarak bilinse de aslında bu teknolojinin altında internet üzerinde çalışan güvenli bir mesajlaşma sistemi yatmaktadır. E-posta, yazı veya web sayfası gönderip almak yerine Bitcoğn ağı işlem (tx, transaction) dediğimiz değer aktarım mesajları gönderip almaktadır. Özel anahtar değerleri ise bu mesajların doğrulanmasında, gönderici-alıcıların tanımlanmasında ve ağın güvenliğinin sağlanmasında büyük rol oynar.

Bu sorunların özel anahtar değerleri ile nasıl çözüldüğünü bir örnekle anlatalım. Ayşe Mehmet’e 10 Bitcoin ödemek istiyor. Alacaklı olarak Mehmet’i seçiyor ve aktarılacak tutarı 10 BTC olarak belirliyor. Daha sonra Ayşe bu işlemi Bitcoin ağındaki bütün kullanıcılara yayıyor (broadcast ediyor).
ayse-mehmet-10-btc-islemi.png
Ayşe’nin Mehmet’e 10 BTC gönderdiği işlem. Görüldüğü gibi ne Ayşe ne de Mehmet kendilerinin kimliklerini tanımlayabiliyor. Ayrıca bu işlemin sahte olmadığına veya üzerinde oynama yapılamayacağının garantisi yok.

Böyle bir sistemin kullanılmasında Ayşe 2 temel problemle karşılaşır. İlk olarak bu işlem içerisinde hem kendisinin hem de Mehmet’in kimliğini tanımlayabilmeli. Ayşe; devlet kaydı veya e-posta sağlayıcı gibi merkezi bir otorite kullanamaz çünkü bu çözüm Bitcoin’in merkezi olmama özelliği ile çelişir. İkinci olarak Ayşe başkalarının bu işlemi değiştirmesinin veya başkalarının onun adına böyle bir işlem yapabilmesinin önüne geçecek bir yol bulmalı.

Bitcoin, bu problemleri “açık anahtarlı şifreleme” isimli bir sistemle çözmektedir. Bu sistem mesajların doğruluğunu saptamak için 2 farklı bilgi parçası kullanmaktadır. Bir “açık anahtar değeri” göndericiyi veya alıcıyı tanımlar ve diğer kişilere dağıtılabilir. Bir diğeri “özel anahtar değeri” ise açık anahtar değeri ile birlikte değiştirilemez mesaj imzaları oluşturmak için kullanılır. Özel anahtar değeri kimse ile paylaşılmamalıdır. Özel ve açık anahtar değerleri matematiksel olarak birbirine bağlıdır.
ayse-mehmet-2-btc-gonderiyor.gif
Ayşe Mehmet’e 10 BTC gönderdiği işlemi özel anahtar değeri ile imzalıyor.
1- Özel Anahtar Değeri sadece bir sayıdır

Bitcoin ağındaki herhangi bir özel anahtar değeri aslında sadece 1 ile 1077 arasında bir sayıdır. Bu durum iyi bir seçimmiş gibi görünmüyor olsa da aslında pratik kullanımda sınırsız gibidir.

Eğer 1 saniyede 1 trilyon sayı sayabilseydik (veya bilgisayarlara saydırsak bile), bütün özel anahtar değerlerini saymak evrenin yaşının bir milyon katı bir süre alırdı. Daha da kötüsü bu anahtar değerlerini numaralandırmak Güneş’in 32 yılda dışarıya verdiği bütün enerjiden daha fazlasını tüketmek gerekirdi (detaylı ingilizce açıklama için tıklayınız). Bu geniş anahtar uzayı Bitcoin Ağı’nı güvence altına almakta ana rol oynamaktadır.

Özel anahtar değerleri 10 sayı tabanında ifade edildiğinde çok fazla basamak içerdiği için alternatif bir format olan “Cüzdan İçeri Aktarma Formatı” (Wallet Import Format, WIF) geliştirildi. Bu format 5 sayısı ile başlamakta ve bir dizi harf ve sayı içermektedir. Örneğin şu karakter dizisi cüzdan içeri aktarma formatında bir özel anahtar değerini temsil eder:
5KJvsngHeMpm884wtkJNzQGaCErckhHJBGFsvd3VyK5qMZXj3hS
2- İşlemler Özel Anahtar Değeri İle İmzalanmış Mesajlardır

Sahtekarlığı önlemek için Bitcoin her bir işlemin sayısal bir imza taşımasını gerektirir. Bu imza özel anahtar değeri gibi çok geniş bir aralıktan seçilmiş bir sayıdır. Cüzdan yazılımı işlemle birlikte doğru özel anahtar değerini matematiksel olarak işleyerek bir imza üretir.

Bu sistem çalışmaktadır çünkü işlem ve bu işlemin imzasına sahip herkes ilgili mesajın doğruluğunu onaylayabilir. Buna rağmen, bir işlemin imzasını taklit etmek pratikte imkansızdır. Spesifik bir işlemde geçerli imza üretebilmek için doğru özel anahtar değerinin kullanılması şarttır.
Ayşe Mehmet’e ilk aktarımda 10 BTC ve ikinci aktarımda 2 BTC olmak üzere 2 farklı BTC gönderme işlemi yapıyor. Aynı özel anahtar değeri her bir işlem için eşsiz ve tahmin edilemez imzalar üretir.
ayse-mehmet-islemi-imzaliyor.gif
Ayşe Mehmet’e ilk aktarımda 10 BTC ve ikinci aktarımda 2 BTC olmak üzere 2 farklı BTC gönderme işlemi yapıyor. Aynı özel anahtar değeri her bir işlem için eşsiz ve tahmin edilemez imzalar üretir.

Bir çek üzerine attığınız imzanın aksine; bir işlem imzası bu işlem çok küçük oranda bir değişiklik gösterse bile değişir. Her işlemde imzanın değişmesi; sadece bu özel anahtar değerinin sahibi tarafından doğru imza sağlanabileceğinden, öngörünemezliği sağlar.
3- Özel Anahtar Değerini Bilen Herkes Bitcoinlerinizi Çalabilir

Geçerli imza taşıyan her bir işlem Bitcoin Ağı tarafından kabul edilir. Aynı zamanda, bir özel anahtar değerine sahip herkes geçerli işlem yaratabilir. Bu iki unsuru bir araya getirdiğimizde sizin özel anahtar değerinizi bilen herhangi bir kişinin sizin bitcoinlerinizi çalabileceği anlamına gelir.

Hırsızların özel anahtar değerlerinizi çalmak için bir çok yolu vardır. Bu yollardan en önemli ikisi “saklama ortamı” ve “iletişim kanalları”dır. Bu sebepten ötürü özel anahtar değerlerinizi saklarken veya ağ üzerinden iletirken yüksek güvenlik önlemleri alınmalıdır.

Cüzdan yazılımları genellikle özel anahtar değerlerini “cüzdan dosyası”nda ve bu dosyayı da ana hard disk sürücünüzde saklar. Cüzdanlar genelde bu dosyaları standart bir isimle ve bilinen bir dosya konumunda saklar. Bu da özel anahtar değerlerinizi Bitcoin’e özel zararlı yazılımların hedefi haline getirir. (1 yıl öncesinde Forbes’un yayınladığı habere göre yaklaşık 150 farklı bitcoin’e özel geliştirilmiş zararlı yazılım tespit edilmiş. Bitcoin ana akım medya’da yaygınlaştıkça daha fazla saldırganın hedefi haline geldiğini çok rahatlıkla söyleyebiliriz. İlgili haber (ingilizce) için tıklayınız.)
Örneğin Bitcoin Çekirdeği cüzdan dosyasını blok zinciri’ni sakladığınız klasörde wallet.dat ismiyle saklar. Bu klasör yolu genellikle C:\Users\kullanıcı adı\AppData\Roaming\Bitcoin şeklindedir.

Bu tehtidi savuşturmak için cüzdan yazılımları kullanıcılarına cüzdan dosyasını şifrelemek için bir seçenek sunar. Cüzdan dosyanıza erişim sağlamış herhangi bir saldırgan özel anahtar değerlerinize erişmek için bu dosyanın şifresini kırmalıdır. Cüzdan dosyaları bu cüzdan yazılımlarına bir şifre eklenerek şifrelenebilir.
Electrum’un cüzdan dosyası şifreleme ekranı.
electrum-sifre-ekrani.png
Electrum’un cüzdan dosyası şifreleme ekranı.

Cüzdan yedeklemek iyi bir fikir olsa da, özel anahtar değerlerinizi sızdırma potansiyeline sahiptir. Örneğin, cüzdanınızı bulut depolama servisi olan Dropbox’a yedeklemek cazip gelebilir. Buna rağmen bu cüzdan yedeğini görme yetkisine sahip kişiler bitcoinlerinizi çalacak bir konumda olabilir. (Bu yedeği görebilecek kişilerin sayısı tahmin edebileceğinizden bile fazla).
Benzer sorun kendinize e-posta gönderirken de kağıt cüzdanlarınızı evde bir yerde bıraktığınızda da yaşanabilir. Cüzdanı şifrelemek riski azaltabilir ancak tamamen bertaraf etmez.
4- Bitcoin Adresleri Özel Anahtar Değerlerinden Üretilmiş Açık Anahtar Değerleridir

Bir Bitcoin açık anahtar değeri; bir özel anahtar değerine Eliptik Eğri Kriptografisi kullanılarak tanımlanmış bir dizi matematiksel işlem uygulanarak elde edilir. Özel anahtar değeri gibi açık anahtar değeri de çok uzun bir sayıdır.

Özel anahtar ve açık anahtar değerleri arasındaki ilişki matematiksel olarak tek yönlü kapıya benzer. Bu tek yönlü kapı sadece tek yönde açılır ve pratikte ters yönde açılması imkansızdır. Bu tek yönlülük Bitcoin’in güvenlik modelinin merkezinde yer alır.

Özel anahtar değerleri gibi açık anahtar değerleri de gösterimde ve klavye girişlerinde daha kullanışlı olabilmeleri için kısaltılabilir. Bir bitcoin adresi, açık anahtar değerine “çok adımlı dönüştürme işlemi(ingilizce bitcoin viki linki)” uygulanarak elde edilir. Bu adımlar sonucunda genellikle “1” sayısı ile başlayan karakter ve sayılardan oluşan bir string üretilir.

Dikkat; özel anahtar değeri, bu adrese bağlı açık anahtar değeri ve bitcoin adresi üretmek için herhangi bir ağ gereksinimi yoktur. Bitcoin ağındaki her bir bilgisayar özel ve açık anahtar değerleri arasındaki matematiksel ilişkiyi bilir. Bu da her bir katılımcıya Bitcoin ağından bağımsız özel anahtar değerleri üretmesini ve işlem imzalamasını sağlar. Dev özel anahtar uzayı düzgünce seçilen anahtarın eşsiz olmasını garanti altına alır.
5- Güvenlik: İyi Bir Özel Anahtar Değeri Seçiminize Bağlıdır

Bir bitcoin adresindeki fonu harcamak için gerekli olan tek şey bu adresin karşı düştüğü özel anahtar değeridir. Bu yüzden özel anahtar değerleri sır olarak saklanmalıdır. Buna rağmen bir özel anahtar değerinin “dikkatsiz seçilmesi” de hırsızlığa davetiye çıkarır.
Örneğin, hatırlanması kolay olan bir özel anahtar değeri kullanmak istiyoruz. Bu numara da 1 olsun. 1; hem hatırlanması kolay hem de geçerli bir bitcoin özel anahtar değeridir. Ama ne kadar güvenilir olabilir ki bu?
1 özel anahtar değeri şu adrese karşılık düşer:
1EHNa6Q4Jz2uvNExL497mE43ikXhwF6kZm
Eğer linke tıkladıysanız bu adresin son birkaç yılda 1000’den fazla işlem içerdiğini ve 4 BTC’den fazla işlem hacmine ulaşmış olduğunu görürsünüz. Eğer isterseniz bu adresteki kullanılmaya müsait bütün bitcoinleri kolayca harcayabilirsiniz, çünkü bu adresi üreten özel anahtar değerini biliyorsunuz.

Şimdi bitcoin çalmaya kararlı bir hırsız olduğunuzu düşünün. İlk strateji “hatırlanması kolay” bütün özel anahtar değerlerini içeren bir liste hazırlamaktır. Ardından bu özel anahtar değerlerinin karşı düştüğü bütün adresleri üretip ağı dinlemeye alırsınız. Bu adreslere gelen herhangi bir işlem olduğunda (yani birisi bu adreslerden herhangi birine bitcoin gönderdiğinde) sadece sizin kontrolünüzde olan başka bir adrese bu bitcoinleri gönderebilirsiniz.

Bu düzenin kolaylığının aksine özel anahtar değerleri mükemmel bir rasgele sayı üreteci ile üretilen sayılardan elde edilir. Şüphesizki bu özel anahtar değerinin bulunması “kaba kuvvet” yöntemi ile ancak mümkündür. Daha önce de belirttiğim gibi kaba kuvvet yöntemi ile özel anahtar değerlerini elde etmeye çalışmak fiziksel olarak
imkansızdır.

Peki ya rasgele sayı üreticisi yeterince rasgele olmasaydı? Örneğin, ya bütün özel anahtar değerleri dar bir alanda sıkışıp kalmış olsaydı?
Rasgele özel anahtar değeri dağıtımı ile kümelenmişin karşılaştırılması. Kümelenmiş dağıtım saldırganların tercihidir.
ozel-anahtar-uzayi.png
Rasgele özel anahtar değeri dağıtımı ile kümelenmişin karşılaştırılması. Kümelenmiş dağıtım saldırganların tercihidir.

Böyle bir kusurun farkında olan saldırgan gerekli arama uzayını önemli ölçüde azaltabilir. Doğru koşullar altında hatalı rasgele sayı üreticiyle üretilmiş bütün adresleri takip etmek ve bitcoin çalmak çok kolay hale gelir.
Bu hatalı rasgele sayı üreticiye bir örnek olarak C Programlama Dili‘nin statik math.h kütüphanesindeki random() fonksiyonunu örnek verebiliriz. Bu rasgele fonksiyonunu kullanarak 3 tane özel anahtar değeri üreten kodumuz şöyle:

#include <stdio.h>
#include <math.h>    
int main(){
int i=random();
int j=random();
int k=random();
printf(“i = %d, j = %d, k = %d”,i,j,k);
return 0;}

Bu kodun çıktısı platformdan ve derleyiciden bağımsız olarak şu şekilde olacaktır;
i = 1804289383, j = 846930886, k = 1681692777
Platformdan bağımsız: Windows, Linux veya MacOS işletim sistemlerinde aynı sonucu üretir.
Derleyiciden bağımsız: C veya C++ derleyicileri kullanılsa da aynı sonucu üretir. Örnekler; C derleyici sonucu, Farklı platformdaki bir C derleyici sonucu, C++ derleyici sonucu.
Not: Bazı C++ derleyicileri bu kodu tanımayabilir, alternatifi ise şu linkte verilmiştir.
Not 2: C dilindeki bu rasgele fonksiyonu “pseudo random” (yani sahte-rasgele) olmakla birlikte örnek olması açısından bu şekilde geliştirilmiştir.

Bu örnekte görüldüğü üzere C Programlama dilinde tanımlı random() fonksiyonunu kullanarak özel anahtar değeri üretmek mantıklı değildir, çünkü saldırganlar da sizinle aynı değerleri kolaylıkla üretebilir.
5.a – Hafıza (Akıl) Cüzdanları (Brain Wallet)

Hafıza cüzdanları için özel anahtar seçimi en önemli konulardan biridir. Hafıza cüzdanı oluşturmak için bir yöntem daha sonra kolaylıkla hatırlayabileceğiniz bir cümle/şifre seçmektir. Örneğin Shakespeare’in ünlü sözü “to be or not to be” (olmak ya da olmamak) seçilebilir. Daha sonra bu cümle matematiksel bir fonksiyondan geçirilir. En önemli dönüştürme metodu cümlenin SHA-256 algoritması ile kriptografik özet değerini almaktır. Bu dönüşüm sonucunda şu adres oluşur:
1J3m4nneGFppRjx6qv92qyz7EsMVdLfr8R
Gördüğünüz gibi son zamanlarda bu adrese bitcoin gönderilmiş ve çok kısa süre içerisinde ise bu adresten başka bir adrese gönderilmiş.

Malesef her zaman bir hafıza cüzdanının ne kadar güvenli olup olmadığının bilinmesi pek mümkün değildir. Saldırganlar bu belirsizliği kullanıp deneyimsiz kullanıcıların bitcoinlerini çalabilir. Örneğin hırsızın biri çok bilinen bir çok cümleyi ve bu cümlelere karşılık düşen adresleri listeleyip takibe alabilir. Böyle bir veri tabanında trilyonlarca girdi olabilir ancak yine de bütün bu adreslerin sıradan bir bilgisayarla takibinin yapılması pek mümkün değildir.

Bu konuyla ilgili daha detaylı bilgiyi yazarlarımızdan deepcoin’in Bitcointalk Türkçe forumunda açtığı şu konuda bulabilirsiniz.

Bu durumu internet sitelerinde kullanılan şifrelerle karşılaştırın. Eğer bir hizmete bir başkasının şifresiyle kayıt olursanız diğer kişinin hesabına erişemezsiniz. Çünkü kayıt olurken kullandığınız kullanıcı adı eşsiz olmalıdır. Bitcoin özel anahtar değerleri ise bu durumdan farklıdır. Bitcoin özel anahtar değerleri kullanıcı kimliklendirmesini (adres oluşturarak) ve mesaj doğrulanabilirliğini (sayısal imzalarla) üstlenir.

Güvenli özel anahtar değerleri yüksek ölçekli tahmin edilmezlik ile oluşturulur bu yüzden daha önceden veya sonradan tahmin edilmeleri pek mümkün değildir.
6- Özel Anahtar Değerleri (Bir Derece) Taşınabilirdir

Cüzdan yazılımları özel anahtar değerlerinin oluşturulma, kullanma ve saklanma sürecini kullanıcıdan gizler. Buna rağmen bazen bu özel anahtar değerleri ortaya çıkarılabilir. Böyle bir durumda özel anahtar değerlerini ve cüzdanınızla nasıl etkileşime geçtiğini anlamak önemlidir.

Kağıt cüzdanlar cüzdan yazılımları dışında özel anahtar değerlerini saklamak için bir başka yöntemdir. Kağıt cüzdanlar değişik formatlarda olsalar da özlerinde kağıda basılmış özel anahtar değerlerinden ibarettir.
Örnek bir kağıt cüzdan. Sağ tarafta özel anahtar değeri ve QR kodu, sol tarafta ise bu anahtar değerinin karşı düştüğü adres.

Örnek bir kağıt cüzdan. Sağ tarafta özel anahtar değeri ve QR kodu, sol tarafta ise bu anahtar değerinin karşı düştüğü adres.

Cüzdan Yazılımları dışında oluşturulmuş özel anahtar değerleri bir çok şekilde bu cüzdanlar tarafından desteklenir. Örneğin Electrum ve Armory’ye bu anahtar değerlerini çok kolay bir şekilde aktarabilirsiniz. Bitcoin Çekirdeğine aktarmak içinse konsol ile yüzleşmeniz gerekir.

Kağıt cüzdanlardaki bitcoinlerinizi kaybetmemeniz için bu cüzdanlardaki özel anahtar değerlerini aktardığınız cüzdanların güvenliği de önemlidir. Yukarıda bahsedilen yazılımsal problemlerden etkilenme ihtimaliniz vardır. Ayrıca, kağıt uzun süre dayanıklı bir materyal değildir, bu yüzden buna karşı da önlem almanız gerekir. Örneğin bazı kişiler kağıt cüzdanlarını PVC ile kaplamaktadır (kimlik kaplama gibi), bazıları ise metal bir kutu içerisinde saklarken bazıları havası alınmış vakumlu torbalarda saklar. Kağıt cüzdanların güvenli saklanması kullanan kişilere kalmıştır.
Sonuçlar

Bitcoin, açık anahtarlı şifreleme ile güvence altına alınmış açık bir mesajlaşma sistemi olarak düşünülebilir. Diğer sistemler kullanıcı adı ve şifrelerle sistemlerini korurlarken Bitcoin benzersiz özel anahtar değerleri ve bunlardan oluşturulan sayısal mesaj imzaları ile güvence altına alınır. Özel anahtar değerlerinin yaratılması, kullanılması ve saklanması en önemli konudur.

Sorularınız varsa çekinmeden yorum olarak bırakabilirsiniz.
Şimdilik söyleyeceklerim bu kadar;
Esen kalın.

Kaynakça:
Bu yazının büyük bölümü Bitzuma.com sitesinde Richard L. Apodaca tarafından 23 Nisan 2014 tarihinde yayınlanan “Bitcoin Kullanıcılarının Özel Anahtar Değerleri Hakkında Bilmesi Gereken 6 Şey” başlıklı makale baz alınarak hazırlanmıştır.
Öne çıkarılan görsel: BTC Keychain.

H2
H3
H4
3 columns
2 columns
1 column
4 Comments