Ethereum Güvenlik Sorunları
Blockchain uygulamalarını yeni başlayanlara anlatırken en sık karşılaştığım sorulardan bir tanesi şüphesiz bunun güvenliği. Geçtiğimiz hafta bir kamu kurumunu ziyaret ettiğimde de oradaki yönetici bunu sormuştu bana. Peki bu sistem ne kadar güvenli?
Aslında bu soruya cevap vermek gerçekten çok zor. Güvenlik konusu geçtiğimiz yıldan bu yana yoğun bir şekilde radarımda. Sadece blockchain ya da cryptocurrency tarafında değil genel olarak siber güvenlik konusunda yoğun bir şekilde çalışıyorum. Daha önce de yayınlarda da bahsetmiştim, çalıştığım firmanın sistemine Rusya tabanlı bir saldırı ile başlayıp arkasından yoğun bir şekilde DDoS saldırıları alıyorduk. Bir çok fintech firmasının da aynı dertten muzdarip olduğunu öğrendik. Bunun üzerine İngiltere hükümetinin sağladığı siber polis desteği ve kendi çabalarımızla daha güvenli bir sistem kurmaya çabaladık ve firma içerisindeki tüm stratejimizi daha güvenli olmak için yeniden düzenledik. Buna bağlı olarak şifreleme yöntemlerimizi ve private key’lerimizi saklamak için yaratıcı çözümler ürettik. Ancak eğer birisi bu private key’lere ulaşırsa firmamızın güvenliğinin yeniden tehlikeye düşmesini engellemek için daha karmaşık güvenlik mekanizmalarını da devreye sokmamız gerekti. Demem o ki, %100 güvenli bir sistem kurmak gerçekten çok zor. Özellikle güvenliğin ne demek olduğunu bilmiyorsanız ve daha önceden hacklenmiş bir sistemde çalışmış birisi değilseniz ihtimalleri göz önünde bulundurmanız gerçekten çok ama çok zor. Bunun için tabiri caizse daha önce kazık yemiş kişilerle çalışmak en güzeli.
Tabi kı yukarıda yazdıklarım çalıştığım firma için geçerliydi, biz bir çok fintech firmasından sadece biriydik. Eğer Ethereum gibi tüm finansal işlemleri üzerinden çalıştıracak bir sistem tasarlıyorsanız güvenlik birinci önceliğiniz olmak zorunda. Üstelik bunun için alacağınız önlemler de bir kaç milyon pound’luk işlemlerin görüldüğü ‘küçük’ ölçekli bir firmanın alacağı önlemlerden birazcık daha kapsamlı olabilir! Bu yazıda da Ethereum’un aldığı güvenlik tedbirlerinden bir kaçından bahsedeceğim.
Proof of Stake ve Proof of Work arasındaki farklar
Ethereum ve Bitcoin gibi Proof of Work (PoW) ile çalışan ağların en büyük problemi en uzun zincire karar veren konsensus algoritmalarının zaafiyeti diyebiliriz. Bu konuya %51 saldırısı (51% attack) deniyor. Yani ağ üzerindeki madencilerin %51'inin işlem gücüne sahip olarak yapılan farazi bir saldırı yöntemi. Blok zinciri, adından da anlaşılacağı gibi, blokların birbirine zincirlenmesinden oluşuyor. Yani her blok kendisinden önceki bloğu biliyor. Her blok kendi içerisindeki işlemlerin tamamının hash’lerine göre özel bir hash alıyor ve bu hash ile tanımlanıyor. Dolayısıyla her blok önceki bloğu tanıyor dediğimde aslında bu bloğun hash’ini biliyor demek istiyorum. Böylece eğer geçmişe dönük bir işlemde herhangi bir değişiklik gerçekleşirse o zaman bloğun hash değeri değişiyor ve böylece zincirden çıkmış oluyor. Bu yöntem ile zincirin değiştirilmemesi sağlanmış oluyor. Ancak, teorik olarak, eğer birisi tüm ağın işlem gücünün %51'ine hakim olursa, o zaman sistemin geri kalanından daha fazla blok oluşturabilecektir. Ağın konsensus yöntemi her zaman en uzun zinciri kabul edeceği için ağın genelini bu şekilde yarattığı zincirle manipüle etmiş olacaktır. Tabi bunu gerçeklemek gerçekten çok pahalı ve sürdürülebilir olmadığı için kabul etmek gerekir ki, bunun gerçekleşmesi ihtimali çok düşük.
Diğer taraftan Ethereum Serenity sürümü ile birlikte PoW yerine Proof of Stake (PoS) kullanmaya başlıyor olacak. Bu durumda %51 saldırısı bir risk olmaktan çıkmış olacak. Çünkü PoS ile birlikte artık işlem gücü yerine madencilerin ellerinde bulunan ETH miktarı blokların validasyonunda önem kazanmış olmaya başlayacak. Aslında validasyon sırasında madenciler ellerindeki ETH kadar bir bloğa depozit ödeyecekler, eğer validasyon başarılı tamamlanırsa ve rastgele çalışan bir algoritma ilgili madenciye karar verirse o zaman ödedikleri depozito kadar para kazanacaklar ya da paralarını geri alacaklar. Eğer geçersiz kabul edilen bir bloğa depozit gönderirlerse bu durumda depozitolarını kaybedecekler. Yani bu durumda sistemi manipüle etmek için hatırı sayılır bir miktar yatırımı riske etmeleri gerekiyor olacak. Bunun detaylarını ilerleyen zamanlarda ayrı bir yazı ya da youtube kaydı olarak yayınlayacağım. Soru işaretleriniz olduğunu biliyorum, lütfen sabredin!
Yüksek hızlı Kuantum Bilgisayarları
Klasik şifreleme algoritmalarını düşündüğümüzde bir çoğunu brute force (kaba kuvvet) yöntemi ile çözmemiz mümkün. Bunu kombinasyonlu bir asmalı kilit olarak düşünürsek 0001, 0002, 0003, 0004 … şeklinde deneyerek şifreyi bulabilmek ve kilidi açabilmek mümkün. Ancak bu tabi ki zaman alacaktır. Gelişmiş şifreleme algoritmaları bu tarz kaba kuvvetle çalışan yöntemleri engellemek için daha karmaşık çalışıyorlar. Buna göre birisinin brute force yaparak bunu çözmesi elimizdeki teknoloji ile yüzyıllar sürebiliyor. Dolayısıyla bu tarz algoritmalarla şifrelenmiş verileri çözme zahmetine girilmiyor bile.
Ancak kuantum bilgisayarları artık hayatımızın bir gerçeği olmaya başlıyor. Her ne kadar herkesin elinde bir kuantum bilgisayarı olmasa da D-Wave Systems 16-qubit’lik ilk prototipini 2007 yılında sunduğundan bu yana o tarafta da epey ilerlemiş durumda ve büyük araştırma merkezleri ya da devletler tarafından edinilmesi mümkün. Zaten Ethereum gibi büyük bir ağ kurmayı hedefliyorsanız korkmanız gereken topluluk sadece Rus ya da Çinli hacker’lar değil. Devletlerin de siber saldırı birimlerinin olduğunu artık duyuyoruz. Bu arada unutmadan, D-Wave’in 2048-qubit’lik bir işlemciyi bu yılın başında piyasaya sürdüğünü ve NASA, Google, Virginia Tech ve Volkswagen Group gibi firmalara sattığını biliyor muydunuz?
Klasik bilgisayarlarımızda 1 bit en küçük iletişim ve depolama birimi olarak kullanılıyor. Hepimizin bildiği gibi 1 bit iki değerden birini alabiliyor 1 ya da 0. Ancak qubit için konu biraz daha farklı. Qubit, iki durumlu bir kuantum mekanik sistem. Yani dikey ve yatay polarizasyon olarak iki farklı değer alabiliyor. Dolayısıyla çok daha fazla veri taşımasının yanı sıra daha hızlı bilgisayarlara olanak tanıyor. Bir fizik bölümü mezunu olarak bu konunun detayına ne kadar inersem o kadar konudan sapacağım için burada duruyorum. Ama bilmemiz gereken şey özetle, Dünya’da bizim bilgisayarlarımızdan farklı bir şekilde çalışan ve programlanabilen çok hızlı bilgisayarlar var ve bu bilgisayarlar Google ve NASA gibi kurumların elinde bilimsel araştırmalarda (umarım öyledir) kullanılıyor. Yani o ürkütücü gelecek o kadar da uzakta değil. Buradaki tehlike tabi ki verilerin erişilmesinden çok imzalarının çözülüp değişikliklerin implemente edilmesinde.
Bu kadar büyük bir ağ kuruyorsanız dolayısıyla bu gerçeklerle de mücadele etmeniz gerekiyor. Vitalik, bunun için yaklaşık iki yıl önce EIP 101 — Currency and Crypto Abstraction önerisinde bulunmuş, ve yine Serenity sürümü ile implemente edilecek. Böylelikle imzalanacak ve şifrelenecek olan transaction’larda bir soyutlama sağlanarak başka yöntemlerin implementasyonuna olanak sağlanacak. Peki böyle bir tehtit ile nasıl baş edebiliriz?
Çözümlerden bir tanesi Quantum Proof algoritmalar kullanmak olabilir. Örneğin 1979 yılında Leslie Lamport tarafından icat edilen Lamport İmzası yöntemini ele alalım. Burayı anlatabildiğim kadar basite indirmeye çalışacağım.
- İki tane veri kümesi oluşturun. A ve B. Bu kümelerin içerisinde güvendiğiniz bir rastgelelik algoritması ile 256 byte’lık 256 tane rastgele sayı ile bu kümeleri doldurun. Bu iki kümeyi de gizli bir yerde saklayın, çünkü bunlar sizin private key yani gizli anahtarlarınız olacak.
- Her bir kümeyi SHA-256 ile hashleyin. Elinizde A’ ve B’ diye iki tane hash seti ve 512 tane hash oluşmuş olacak.
- İmzalamak istediğiniz veriyi de SHA-256 ile hash’leyin.
- Şimdi hash’ini aldığınız veriyi gezmeye başlayın. Eğer n. bit 0 ise A dan n. elemanını, eğer 1 ise B den n. elemanını ekrana yazın. Kullanılmayan tüm sayıları her iki setten de silin.
Böylece 4. adımda elinizde 256 bitlik bir imza ve bu imzayı kontrol edebileceğiniz 2. adımda oluşturduğunuz A’ ve B’ public key’leri bulunmuş oluyor. Her şey rastgele üretilen sayıların hash’leriyle çalıştığı için ve üretilen setler çok büyük oldukları için böyle bir imzayı çözmek gerçekten çok güç.
Denial of Service Saldırıları
Bugün ele alacağım konulardan sonuncusu da DoS saldırıları. Bu belki de en başa bela olanlar arasında diyebilirim. Çalıştığım firmada bu saldırı ile çok sık karşılaşıyoruz, haftada en az iki defa başımıza geliyor ve çok ilginç ve yaratıcı çözümler aramak zorunda kalıyoruz.
Bu saldırı sırasında amaç sistemin cevap vermesini engelleyecek kadar çok işlem yapılmasını sağlamak ve bu sırada sistemi savunmasız ya da işlem dışı bırakmak. Ethereum’un tasarımı sırasında belki de ilk ele alınan konulardan bir tanesi de bu saldırı yöntemiydi. Çünkü böyle bir saldırıyı yapmak gerçekten çok kolay ve özellikle merkezi olmayan böyle sistemler açısından çok riskli, çünkü kalenin tek bir kapısı yok! Ancak Ethereum’da bir işlem yapmak istiyorsanız bunun için bir Gas yani bir ücret ödemeniz gerekiyor. Böylece saldırı yapmak için ciddi bir masrafı da göz önünde bulundurmak zorundasınız.
Hiç bir yazılım kurşun geçirmez değildir, eğer bir arayüzü varsa muhtemelen kırılabilir. Ancak bunu zorlaştırmak yazılımcıların elinde. Ethereum bu konuda epey güzel bir iş çıkartıyor ve yakında yayınlanacak Metropolis ve ardından çıkacak olan Serenity sürümleriyle birlikte çok daha güvenli olacak.
Şahsen ben Serenity’nin de yayınlanmasıyla devletlerin ya da özel kurumların bilinçli ve sistemli bir strateji ile bu platformda kendi uygulamalarını geliştirmesini mantıklı buluyorum.