Bitcoin Matematiği

Ahmet Seyhan
5 min readJul 31, 2020

Dijital İmza

Yazılı imzaların yerini dijital imzalar almaya başladı. Bu alandaki gelişmeler sadece hayatımızı kolaylaştırmıyor aynı zamanda güvenliğimizi de ciddi oranda arttırıyor.

Bir dijital imzanın sadece sahibi tarafından oluşturulubilmesi ve başkaları tarafından kopya edilememesi yeterli değildir. Bunun yanında o imzanın özgünlüğü diğer herkes tarafından kolayca ve hızlıca teyit edilebilir olmalıdır.

Eliptik Eğri Nedir?

Eliptik eğriler, aşağıdaki formatta bir denklemle tanımlanan cebirsel eğrilerdir.

Eliptik eğri denklem formu

Eliptik eğrinin şifrelemede kullanılmasını sağlayan iki çok önemli özelliği bulunmaktadır. Bunlardan biri yatay simetridir. Eğri üzerindeki herhangi bir nokta x ekseni üzerinde yansıtılabilir. Diğeri ise dikey olmayan herhangi bir çizginin en fazla üç yerde eğri ile kesişmesidir.

Aşağıda bazı eliptik eğri örneklerini inceleyebilirsiniz.

Eliptik Eğri örnekleri

Eliptik Eğriler Üzerinde İki Farklı Noktayı Toplama

Eliptik eğri üzerindeki noktaların toplanması bu yöntem ile gerçekleştirilen şifrelemelerin en önemli bölümlerinden birini oluşturmaktadır. Bu amaç için geliştirilen eliptik eğri nokta toplama işlemi temelde oldukça basittir. Toplanmak istenen iki nokta üzerindeki doğrunun eliptik eğri üzerinde kesiştiği üçüncü noktanın x ekseni üzerindeki simetriği bu iki noktanın toplamını verir. Bunu bir örnek ile açıklayalım:

P+Q=R

Eliptik eğri üzerinde P ve Q noktalarını toplamak için bu noktalar üzerinden geçen doğruyu çiziyoruz. Bu doğrunun eliptik eğri üzerinde kestiği üçüncü noktanın x ekseni üzerindeli simetriği bu iki noktanın toplamını verir. Yukarıdaki resimde gödüğünüz üzere P ve Q noktalarını toplamak için bu noktaların üzerinden geçen doğru çizilmiştir. Doğrunun eliptik eğriyi kestiği üçüncü noktanın -R olarak işaretlendiğini görebilirsiniz. Zira bu nokta R’yi değil R’nin x ekseni üzerinde simetriği olan -R’yi göstermektedir.

Bu durumda:

y2=x3+ax+b formunda bir Eliptik Eğri üzerinde (E)

(Xp,Yp)+(Xq,Yq)=(Xr,Yr) işlemini gerçekleştirmek için:

  • Bu denklemler noktaların sonsuzda olmadığı durumlar için geçerlidir.

Eliptik Eğriler Üzerinde Bir Noktayı Kendisi İle Toplama

Eliptik eğriler üzerinde şifreleme işlemlerini daha verimli kullanabilmek için iki farklı noktayı toplamak yerine önceden seçilen tek bir noktayı yine kendisi ile toplama işlemini kullanırız.

Elliptik eğri üzerindeki bir P noktasını yine kendisi ile toplayarak 2P noktasına ulaşırız. Bu işlem P noktasına teğet geçen bir doğru çizilerek gerçekleştirilebilir. Bu noktanın elliptik eğriyi kestiği ikinci noktanın x ekseni üzerindeki simetriği bize 2P noktasını verir. İşlemi farklı bir görsel üzerinde inceleyelim:

P+P=2P

Bu durumda ise:

Bu şekilde n sayısı kadar P ekleyerek nP noktası hesaplanabilir.

3P=P+P+P veya 3P=2P+P için:

3P=P+2P

Eliptik Eğri Dijital İmza Algoritması (ECDSA) ve SECP256K1

Eliptik Eğri Dijital İmza Algoritması (ECDSA), eliptik eğri şifrelemesinden (ECC) türetilen anahtarları kullanan bir Dijital İmza Algoritmasıdır (DSA).

Bitcoin tarafından kullanılan eliptik eğri secp256k1 olarak adlandırılır ve denklemi y2 = x3 + 7 şeklindedir. Temel olarak secp256k1, y2=x3+ax+b formülünde a=0 , b=7 durumudur.

secp256k1, Bitcoin öncesinde neredeyse hiç kullanılmamıştır. Fakat Bitcoin sonrası popülarite kazanmıştır.

Diğer yaygın kullanılan eliptik eğriler rastgele bir yapıya sahiptir, ancak secp256k1 özellikle etkili bir hesaplamaya izin veren rastgele olmayan özel bir şekilde inşa edilmiştir. Sonuç olarak, uygulama yeterince optimize edilmişse diğer eğrilerden yaklaşık %30 daha hızlı olduğu görülmektedir. Ayrıca, popüler NIST eğrilerinden farklı olarak, secp256k1 sabitleri tahmin edilebilir bir şekilde seçilmiştir, bu da eğrinin yaratıcısının eğriye herhangi bir arka kapı yerleştirme olasılığını önemli ölçüde azaltmaktadır.

y2 = x3 + 7

Yukarıdaki görsel secp256k1 anlatımı için doğru bir yöntem olsada,eğrinin şifrelemede kullanımındaki karmaşık yapısından oldukça farklıdır. Hesaplama işlemlerine bazı sınırlamalar getirmek ve bazı aralıklar belirlemek zorundayız. Eğri üzerindeki sonsuz sayıdaki noktalar için herhangi bir değere izin vermek yerine, sabit bir aralıktaki tam sayılarla sınırlandırma getirerek şifreleme yapıyoruz. Bu sınırlandırma işlemindeki en yüksek sayıya Prime Number (p) denir. Bu sınırlandırma işlemi eliptik eğriyi şifreleme yapmak için mükemmel bir hale getirmektedir. Yani

E: y²=x³+ax+b

yerine

E: y²=x³+ax+b (mod p)

formülünü kullanıyoruz.

secp256k1 için Prime Number değeri:

p = 2²⁵⁶-2³²-2⁹-2⁸-2⁷-2⁶-2⁴-2¹

Bu şartları sağlayan tam sayılar için tüm noktaların belirtildiği bir görsel hazırlanamayacak kadar büyük olacaktır. Fakat daha küçük bir p değeri olan 2⁸+1 üzerinden hazırlanmış görseli inceleyim.

p=256+1

İlk bakışta bir eliptik eğri olmaktan uzak olan bu karmaşık noktalar yığınına dikkatli bakarsanız istenilen tüm özellikleri karşıladığını göreceksiniz. X eksenindeki simetri durumları, y2 = x3 + 7 formülünü karşılaması, çizilecek bir teğet doğrunun tek bir nokta dışında başka bir noktada kesişmemesi gibi.

Eliptik Eğri ile şifreleme işlemlerinin güvenliği, Q ve P’nin değerleri verildiğinde Q = nP’den n’in belirlenmesinin zorluğuna bağlıdır. Bunun nedeni, eliptik eğri üzerinde bölme işlemi yapılamaması ve iki noktayı toplama işleminin (bir noktayı yine kendisi ile toplama da dahil) verdiği sonucun toplanan iki noktanın konumu ile belirgin bir ilişkisi olmamasıdır.

Peki;

Public key = (Private key) x (Generator Point)

formülünde Generator Point, secp256k1 parametreleri içinde belirtilen (tıpkı Prime Number gibi) bir sabit sayı olmasına rağmen neden Public key üzerinden bir Private key hesaplayamıyoruz? Bunun sebebi ECDS üzerinde bölme işleminin yapılamamasıdır.

Gördüğünüz üzere Bitcoin cüzdanınızı asıl güvende tutan şey SHA-256 hash algoritması değil ECDSA şifreleme sistemidir.

SEC tarafından belirlenen secp256k1 parametreleri:

secp256k1 parametreleri

Private Key ve Public Key Oluşturma

Public key = (Private key) x (Generator Point)

Bitcoinlerin güvenliğini sağlayan tüm Private Key’ler aslında 1 ile 2²⁵⁶ arasında seçilmiş birer random sayılardır. Bu sayılar seçildikten sonra secp256k1 parametreleri dikkate alınarak ECDSA şifrelemesi ile şifrelenir ve Public key denilen bilgi elde edilir. Daha önce de belirttiğim gibi bu bilgi ile geri dönerek Private key bilgisini elde etmek mümkün değildir. Bu sayının deneme yanılma ile bulunup bulunamayacağını merak ediyorsanız “Brute Force ile Private Key bulmak mümkün mü?” yazıma bir göz atmalısınız.

secp256k1 parametresinde belirtilen Generator Point aslında bir başlangıç noktasıdır. Bu nokta tüm Bitcoin adreslerini oluştururken kullanılan bir sabittir. Her kullanıcı 1 ile 2²⁵⁶ arasında random olarak belirledikleri sayı (Private Key) kadar G noktasını kendisi ile toplayarak Public Key elde ederler.

Yazılarımı ve çalışmalarımı beğeniyorsanız lütfen desteklerinizi aşağıdaki adrese gönderin:

19dhAt7oWyuuWGwnzTJq4niJ1GZfGXqBWW

--

--