ECDSA Nedir (Elliptic Curve Digital Signature Algorithm) ? : eliptik eğri dijital imza algoritması, bitcoin protokolündeki işlemleri imzalamak için kullanılan hafif şifreleme algoritmasıdır.
Özellikle günümüz bankacılık ve elektronik biletleme sistemlerinde kullanılan oldukça güçlü bir şifreleme yöntemidir. imza üretme algoritmasının eğri noktaları hesaplanırken kullanılan k parametresinin sözde-rastgele seçilmesi gerekir.Bu şekilde gizli anahtarın çözülmesi günümuz ve yakın gelecek teknolojisiyle imkansızdır. 2010 yılında kendilerine failoverflow diyen bir grup, ecdsa kullanilan PlayStation3 oyun konsolunun gizli anahtarını ele geçirdiklerini duyurdular. nedeni ise k parametresinin statik olarak tanimlanmis olmasiydi. Oysaki ECDSA şifreleme sistemine ait bir değişkenin parametreleri static değil dinamik tanımlanmak zorundadır.
Konumuza Dönecek olursak,ecdsa ile ilgili bilmemiz gereken birkaç kavram olduğunu söyleyebiliriz.Bunlar;
ECDSA (Elliptic Curve Digital Signature Algorithm) şifreleme sistemi üzerinde 150 yıllık bir çalışma mevcuttur. ECDSA şifreleme sisteminin her bir eğrisi bir "Donut" denklemi içermektedir. Bu arada Donut denklemi adını bir çörekten alsada altında yatan olgu karışık matematik terimlerini barındırır.
Private Key : Yalnızca onu oluşturan kişiye özel bir gizli numara içerir. Özel bir anahtar olmasının yanısıra, rastgele oluşturulmuş sayı da diyebiliriz. Bitcoin sisteminde, özel muhasebeye sahip olan ve kamu muhasebesindeki fonlara karşılık gelen bir kişi, fonları harcayabilir. Bitcoin'de, private key işaretsiz 256 bit tam sayıdır (32 bayt).
Public Key : Özel bir anahtara karşılık gelen, ancak gizli tutulmasına gerek olmayan bir sayı. Bir ortak anahtar, özel bir anahtardan hesaplanabilir, ancak tam tersi değil. Private Key'in açıklanması gerekmeden bir imzanın orijinal olup olmadığını (başka bir deyişle, uygun anahtarla üretilen imzanın) belirlemek için bir ortak anahtar kullanılabilir. Bitcoin'de, ortak anahtarlar sıkıştırılmış veya sıkıştırılmamıştır. Sıkıştırılmış ortak anahtarlar, 0x02 veya 0x03 önekini ve x adlı 256 bitlik bir tam sayıdan oluşan 33 bayttır. Eski sıkıştırılmamış tuşlar sabit önek (0x04), ardından x ve y (2 x 32 bayt) olarak adlandırılan iki 256 bit tam sayıdan oluşan 65 bayttır. Sıkıştırılmış anahtarın öneki, y değerinin x değerinden türetilmesine izin verir.
Signature : Signature, İmzalama işleminin gerçekleştiğini kanıtlayan bir numaradır. Signature, imzalanacak bir nesnenin ve private key'in, karmaşasından matematiksel olarak oluşturulur. İmzanın kendisi r ve s olarak bilinen iki sayıdır. Public Key ile, Private Key bilmeye gerek duymadan, orijinal olarak karma ve özel anahtardan üretildiğini belirlemek için imza üzerinde bir matematik algoritması kullanılabilir. İmzalar ya 73, 72 ya da 71 bayt uzunluğundadır, olasılıklar yaklaşık% 25,% 50 ve% 25'dir, bununla birlikte daha küçük boyutlar katlanarak azalan olasılıkla mümkündür.
Restsharp Kütüphanesinin yararlarından birkaçı, sizleri kod karmaşasından kurtarmasıdır. Anlaşılabilir kod dizimleriyle ve "multiple method" özelliği sayesinde kullanıcı dostudur. Web apilerinize kolayca ve zahmetsizce (GET-POST-PUT-PATCH-) komutlarını gönderebilmeniz için idealdir.
Genel Hatlarıyla ECDSA yapısıyla ilgili bilmemiz gerekenler bunlardı. Şimdi, bu durumların .NET platformuna uyarlanışına bir göz atalım. Öncelikli olarak kullanacağımız ve önerebileceğim ilk kütüphane RestSharp kütüphanesidir. Nacizane tavsiyem, kütüphaneyi kullanmadan önce kütüphane dökümanlarını okumanız ve bu doğrultuda algoritma geliştirmenizdir. kütüphane hakkında dökümanlar için Bu Adresten Ulaşabilirsiniz.
Flurl Kütüphanesinin özellikleri RestSharp Kütüphanesiyle benzerlik göstermektedir. Fakat, flurl Kütüphanesini kullanırken tecrübe edindiğim bilgiye dayanarak,Kütüphanede bazı metotlar çalışmamaktadır. (Şimdilik) Bu metotlardan biri "PUT" metodudur. Ayrıca, Flurl Kütüphanesini kullanırken "async" kullanmayı unutmayınız.
Şimdi 2. kütüphanemiz olan Flurl Kütüphanesine gelelim. Bu kütüphane tıpkı RestSharp Kütüphanesi gibi Web Apilerimizi ve Web Servislerimizi yönlendirmemize olanak sağlar. Söz dizimi olarak sade yapısı ve kullanışlığıyla dikkat çekmektedir. Flurl Kütüphanesini kullanırken tanımlanan metotlar "async" olarak tanımlanır. Sebebi ise Flurl Kütüphanesinin işleyişi asenkron şekilde çalışmasındadır. Flurl Kütüphanesi Hakkında Dökümanlar için Bu Adresten Ulaşabilirsiniz.
Kütüphane kısmını hallettikten sonra, verilerimizi bu kütüphaneyi destekleyen JSON formatında çekeceğiz. JSON nedir ve ne işe yarar derseniz Bu Adrese göz atmanızı tavsiye ederim.
Kısacası JSON (Javascript Object Notation) sistemi XML vari bir sistemdir. XML ile arasındaki birkaç farktan biriside kullanıcı dostu olmasıdır. Yani, sözdizimlerinin anlaşılabilir ve düzenli olmasıdır. JSON verilerimizi WebApilerimiz vasıtasıyla programımıza import edebilmemiz için harici kütüphanemiz olan Newtonsoft.Json Kütüphanesini de ekleyebilirsiniz. Tabiki bu işlem isteğe bağlıdır. Çünkü, Visual Studio idesinde Manage Nuget Package bölümündeki Flurl kütüphanesi, kendi package'larına Newtonsoft.JSON kütüphanesi hazır bir şekilde dahlil etmektedir.
ECDSA ile ilgili örnek kodlar ve proje dosyaları için Github sayfamı ziyaret edebilirsiniz
Şimdi, yapmamız gereken JSON verilerimizi parse etmek. Verilerimizi parse edip, programın ve kullanıcının isteğine göre şekillendirmek mümkündür. JSON Dökümanları için Göz Atabilirsiniz
Genel Hatlarıyla ECDSA kriptografisinin .NET platformuna entegrasyonu bu şekildeydi. Gelecek Yazılarımda Görüşmek üzere.
☺