Blok Zincirlerin Ayıpları: Gizlilik Kusurları

KyaTzu
ODTÜ Blockchain Topluluğu
11 min readMay 10, 2022

Gündelik hayatınızda maaşınız veya ailenizden aldığınız para sorulduğunda nasıl hissedersiniz? Veya ev sahibinizin gelirinizi görebildiğini düşünün. Kulağa çok hoş gelmiyor. Peki madem her şey bu kadar açık, suçlular neden Bitcoin’i ödeme yöntemi olarak tercih ediyor? Gizliliği nasıl sağlayabiliriz, bize ne katkısı ve zararı olur? Bu yazıda konuşacağımız konular basitçe bunlar olacak.

Görsel Bağlantısı

Blok zincirlerin şu anki kullanıcı sayısı bile azımsanamayacak derecede, fakat bir anlığına tüm Dünya’nın bunu benimsediğini ve kullandığını hayal edelim. Kim, hangi bilgileri gizli tutmak ister? “Gizli Tutmak” ifadesini kullanmamızın sebebi “Anonimlik” ile farklı olması. Gizlilik, kim olduğumuzun bilinip yaptığımız işlemin bilinmemesi iken; Anonimliği, kim olduğumuzun bilinmeyip, yaptığımız işin bilinmesi olarak düşünebiliriz. Tekrar sorumuza dönelim. Tüketiciler için örnek vermek gerekirse aldıkları maaşlar, kiralar, kişisel harcamalar; firmalar için malzemelerin masrafları, çalışanların maaşları, ve neye ne kadar bütçe ayırdıkları; suçlular için hackledikleri fonları almak, uyuşturucu ticareti, vergi kaçırma gibi eylemler; ve uygulamalarda frontrunning’i engellemek, emir defterini gizli tutmak, kapalı teklif usulü ihaleler için gerekli olabilir. Yani farklı gruplar, bunu farklı amaçlarla kullanabilir. Tıpkı fiziki ortamlarda paranın kullanım amaçlarının farklı olması gibi.

Bu gizliliğin sağlanmadığı durumlarda tüm birikimleriniz görülebilir, ev sahibiniz maaşınıza oranla zam yapmayı deneyebilir, cüzdan geçmişinizdeki herhangi bir bağış veya aksiyon sebebiyle hesabınız kısıtlanabilir.

Aşağıdaki karşılaştırmaya hep beraber göz atalım:

Zcash, Monero, Aleo, Secret Network ve Dash gizlilik odaklı zincirler. Bu zincirlerde gönderici, alıcı, gönderilen miktar gibi bilgileri sadece alıcı gerekli anahtarla görebilir. Dash ve Zcash’te opsiyon olarak bulunurken, Aleo, Secret Network ve Monero’da varsayılan ayar gizliliktir. Bankalar alıcı ve göndericinin kendi aralarında her şeyi görebildiği ve merkezi sunucularla yetkili kişilerin bunları denetleyebildiği mekanizmalar olarak orta seviyede gizliliğe sahip. Bitcoin, Ethereum, Avalanche, Solana gibi açık blok zincirler ise en düşük seviye olarak sınıflandırılabilir. Ethereum üzerinden aldığımız bir işlemi inceleyelim:

https://etherscan.io/tx/0xcbd67610bf6bdc251ce4d60f138de8b4c759acd42d156ea486990314dff91de5

“Bir çok veriye ulaştık fakat isim görmedik, bunun neresi gizli değil?” diye düşünüyorsanız, bu verilerin iz sürmeye çok elverişli olduğuna dikkat çekmek isterim. Günümüzdeki banka çekimlerinin herhangi birinde, regülasyonlar gereği borsalar (veya diğer uygulamalar) kimlik onayı ister. Cüzdanımızla borsaya para gönderdiğimizde, artık borsa tarafından hem kimliğimiz, hem de para gönderdiğimiz cüzdanımız bilinmektedir. Bu da son işlemler boyunca takip edilebilmemize neden olur. Dışardan bir göz olarak herhangi bir işlemde cüzdanları takip ederek de farklı bilgiler edinebilirsiniz. Eğer cüzdan adresinizi önceden sosyal mecralarda veya çeşitli formları doldururken paylaştıysanız, olası bir hack durumunda formda verdiğiniz bilgiler ve cüzdan adresiniz kolayca birbirine bağlanabilir. Başka bir deyişle, çevreniz birikimlerinizi öğrenirken; şantaj amaçlayan grupların ve baskıcı devletlerin de işi kolaylaşır.

Herhangi bir hack olayında bilgilerinizin çalınıp çalınmadığını kontrol etmek için bu siteyi kullanabilirsiniz: https://haveibeenpwned.com/

Birkaç örnekle gizliliğin ve merkziyetsizliğin önemini pekiştirelim. Her gün kullandığımız internet aslında o kadar da merkeziyetsiz değil. Bunu Amerika’nın 2007 yılında, “Amerika’yı koruma” yasaları adı altında çıkan “PRISM” Global Gözetleme Programı çerçevesinde toplanan milyonlarca veriden anlayabiliriz. Programa dahil olarak kullanıcı verilerini paylaşan şirketlerden bazıları Microsoft, Yahoo, Google, Facebook, Youtube, Skype, Apple… Çin’de ise belirli bölgelerde (Çin’in batısındaki Uygurlar) yaşayan insanlara, iddiaya göre zorla Jingwang Weishi (Temiz İnternet Gardiyanı) adlı uygulama yükletilerek, uygulama tarafından “tehlikeli” bulunan içeriklerin silinmesi isteniyor.

2013 yılında Bitcoin üzerindeki aktiviteyi ve anonimliği bozma (deanonymizing) amaçlı yapılan bir araştırma sonucunda şu mapping’e ulaşılıyor:

Noktalar iletişime geçen cüzdanları temsil ederken, renkli yuvarlaklar ise hacmi temsil ediyor. Yuvarlakların üzerindeki isimler harita çıkarıldıktan sonra, çeşitli varsayımlar sonucu ekleniyor. Satoshi dice Bitcoin’in erken dönemlerindeki bir kumar sitesi. Sistem çok sayıda cüzdanın bir çekilişe katılması, ve kazanan adresin hepsini almasına dayanıyor. Bu yüzden fazla sayıda fakat küçük işlemler, bu adresin Satoshi Dice’a ait oldğunu kanıtlıyor. Bazı borsa cüzdanları ise zaten biliniyor. Bu sayede genel bir veri havuzundan yararlanılarak hem cüzdanlar, hem de uygulamalar etiketlenebiliyor.

Gizliliğin, verilerimizin önemini anladığımıza göre, bunu nasıl sağlarız kısmına geçelim. Önce daha temele inerek, ağ katmanında gizliliği konuşalım. Blok zincirler peer-to-peer (P2P) yani eşler arası ağlardır. P2P ağlar ise mevcut olan başka bir ağ üzerine kurulan “overlay network”lerdir. Yani bizim bu aşamaları anlamamız için altta yatan katman da nasıl bir yol izlendiğini ve verileri nasıl aldığınızı incelememiz gerekiyor. Örneğin, bu yazıyı okumanız için bağlandığınız serverdan veri paketleri almanız gerekli. Bu veri paketleri bilgisayarınıza kadar gelirken hangi aşamalardan geçiyor?

Gelin TCP/IP’yi (Transmission Control Protocol/ Internet Protocol) incelemeye başlayalım.

TCP/IP’ye aşağıdaki görselde router, server, fiziksel kablolar gibi donanımlar arasında verilerin sizin bilgisayarınızı bulabilmesi için izlemesi gereken yol olarak bakabiliriz.

Görsel bağlantısı
  • Fiziksel katmanın üstündeki ilk katman Network Access Layer, veya ilk resimde görülen “Link or Network Interface”. Bu katman, verinin serverdan çıktıktan sonra hangi yoldan geçerek size varacağına karar vermekle görevli.
  • Resimde kırmızı ile gösterilen Router’lar arasındaki iletişimi temsil eden bu aşama Hop-to-hop olarak da biliniyor.
  • Diğer katman ise end-to-endInternet Layer”, yani alıcı ve verici arasındaki kısım.

Hop to hop kısmında veriler doğru yolu bulmak için MAC, end to end kısmında ise IP adresinizi kullanıyor. Bu durumda IP adresimizi kapı numarası gibi düşünebiliriz.

  • Üçüncü katman, turuncu ile gösterilen veri paketlerinin iletişiminden ve yönetiminden sorumlu olan “Transport” katmanı.
  • En üstte ise http / smtp / ssh / ftp’nin de bulunduğu Uygulama Katmanı var.

Günümüzde P2P ağların çoğu TCP/IP’nin Uygulama Katmanının üzerinde geliştirilir.

TCP/IP’de istemci, sağlayıcıdan kaynak isterken kendi IP adresini saklıyor. Bu sayede sağlayıcı, istemcinin ne yaptığını biliyor (kaynak istemek) fakat kimin yaptığını (IP adresi) bilmiyor.

Blok zincirlerde ise katmanları ikiye ayırdığımızda üst kısımdaki katman blok zincirin bizim kullandığımız kısmıdır. Akıllı kontratlarla iletişime geçmek, farklı protokolleri kullanmak vb. Bu katmanı ise nodelar gerçekler. Fakat başlıca blok zincirlerde bu aşamada gizliliği sağlayacak bir servis kullanılmaz ve diğer nodelar hem gelen mesajda ne yapmak istediğini hem de mesajı hangi node’un yayınladığına ulaşabilir.

Görsel Bağlantısı

Son kulllanıcı ve node arasında herhangi bir aracı bulunmadığı durumda, kötü amaçlı node kullanıcı IP’sine de ulaşabilir. Node adresleri ve IP adreslerinin birbiriyle eşlenmesi durumunda, node sahipleri sansürlenmeye veya farklı şekildeki saldırılara açık hale gelir. Peki hem kullanıcıların hem de node sahiplerinin gizliliğini tehdit eden bu durumun bir çözümü yok mu?

Ya son kullanıcı, ve node’lar arasında bir aracı kullansaydık? VPN, Proxy gibi servisler bunun bir çözümü olsa da, güvenilir bir aracı gerektirirler. Peki ya aracı sayısını arttırırsak? Tek aracı olduğunda tüm bilgimizi tek bir aracı server ile paylaşırız. Aracı sayısını arttırıp, verileri şifrelersek daha güvenli bir sistem elde edebilir miyiz?

TOR (The Onion Router)

TOR, sizden aldığı veriyi, bağlı olduğunuz node sayısı kadar şifreliyor. Aşağıdaki örnekte veri 4 kez şifrelenecek.

Görsel bağlantısı

Veri Node1'e geldiğinde bir katmanı deşifre ediliyor ve kalan mesaj node 2'ye gönderiliyor. Veri Node 4'e geldiğinde, sahip olunan bilgi sadece mesajın Node 3'ten iletildiği ve mesajın içeriği.

Görsel bağlantısı

Bu sayede aracılara güvenme gerekliliği bulunmayan, güvenli ve gizliliği geliştiren bir sistem sağlıyor.

Bitcoin zinciri üzerindeki ödemeler için bir başka yapı olan SPV Client ise full node kurulumuna ihtiyaç duymadan full node’a bağlanarak kendi işleminizi daha güvenli şekilde onaylayabilmenizi sağlar. Onaylama işlemini, Merkle Ağacı’na benzer bir yapı ile yapar.

Herkesin bu kadar bilgiye sahip olması gerekmesi size çok mümkün gözükmediyse, haklısınız. Kitlesel benimsemeye uygun bir teknolojiden genel beklenti bilgisayar dersi almayı gerektirmesi değildir. Bu sebeple, herkesin kolayca kullanabileceği farklı çözümler de var.

Bitcoin cüzdanı olan Wasabi Wallet, veya gizlilik odaklı blok zincirler Zcash, Monero, Dash, Secret Network, Aleo bunlara örnek verilebilir. Bitcoin blok zinciri üzerinde giziliği ele alarak başlayalım.

Wasabi Wallet

Wasabi Wallet Bitcoin üzerindeki farklı özellikleri gizliliği arttırmak için bir arada sunuyor.

  • Dust Attack Koruması
  • Dahili PayJoin (CoinJoin’in bir türü)
  • Özel Değişim Adresi (Custom Change Address)

Dust Attack Koruması: Dust Attack (Toz saldırısı), cüzdana çok küçük miktarlarda coin gönderilerek iz sürülmeye çalışılmasına denir. Gönderilen küçük miktardaki fonu (belki de fark etmeden) kullandığınızda, izi sürülen çokça kullanıcı arasına katılırsınız. Bundan kaçınmanın yolu ise bu fonları hareket ettirmemek. Wasabi üzerinden Dust Threshold ayarı yaparak, size gönderilen küçük miktardaki fonu “coin list” üzerinde görüntülememeyi seçebilirsiniz.

Özel Değişim Adresi: Bitcoin blok zinciri ödemelerde UTXO kullanır. Yani elinizdeki 5 BTC’nin 2’siyle kahve almak istediğinizde cüzdanınızdan 5 BTC çıkar, 2’si karşıya gider, 3’ü size geri döner. Bunu şema halinde şöyle gösterelim:

  • X: 5 BTC -> A:2 BTC X:3BTC

Bu durumda takip edilmek fazlasıyla kolaylaşır. Bunu takibi zorlaştırmak için, aldığınız para üstünü farklı bir adrese almayı tercih edebilirsiniz. Bu tercihi yaptığınızda Bitcoin cüzdanınız yeni bir adres açar, ve işlem şuna dönüşür:

  • X: 5 BTC -> A:2 BTC B:3BTC

B adresi sizin cüzdanınıza oluşturulan farklı bir adrestir ve sahipliği yine size aittir.

Blok zincir üzerindeki bazı örnekler:

Para üstü için aynı adresin tekrar kullanıldığı: https://www.blockchain.com/btc/tx/4291ec25ae510c379fd5c422ac4c6598102083e70ace934ca83827209b7defe8

Para üstü için farklı adres kullanılan:

https://www.blockchain.com/btc/tx/189ba66f9c345c09ec1710d60998061cc853be8e71489319f348390f6a249755

CoinJoin: Bitcoin üzerindeki gizliliği arttırmak için kullanıcıların beraber işlem yapabildiği merkeziyetsiz bir mixer. Ortak girdi sahipliğini (Common-input-ownership) kırarak, gizliliği arttırıyor. Alttaki işlemi incelediğimizde, işlemlerin bir değil, iki kişiye ait olduğunu göreceğiz.

Gizliliği azaltan kısım para üstlerini inceleyebildiğimiz durumlarda bunu iz sürmek için kullanabilecek olmamız. Burada, X ve Y kullanıcıları bir araya gelerek A ve B cüzdanlarına 1 BTC gönderdiğini görebiliyoruz. C’nin 4 BTC tutarında para üstü almasından da bu cüzdan sahibi X ile aynı kişi diyebiliriz. Y için de 2 BTC para üstü D cüzdanına gitmiş. Yani adresler farklı da olsa, sahip aynı kişiler.

PayJoin veya P2EP (Pay-to-end-point) ise CoinJoin’in geliştirilmiş versiyonu. Yine Wasabi Wallet üzerinden kullanılabilecek bir mixer. Peki burda ne oluyor?

Yine iki sahip var, fakat anonimliği geliştirmek için işlem artık şu şekilde:

2 BTC sahibine A, 5 BTC sahibine B diyelim.

B,A’ya 1 BTC’lik ödeme yapmak istiyor.

B cüzdanı 5 BTC’yi, A cüzdanı 2 BTC’yi işleme koyuyor. Çıktı olarak B cüzdanı 4 BTC’yi geri alıyor, A cüzdanı ise 1 BTC’yi alarak toplam 3 BTC’ye sahip oluyor.

Tabiki bu 2 eş ile yapılan değil, birden fazla eş ile gerçekleştirilen bir eylem. Bu sebeple örnek işlemler şu şekilde gözükecektir: https://blockstream.info/tx/e4a789d16a24a6643dfee06e018ad27648b896daae6a3577ae0f4eddcc4d9174

Zcash

Zcash, gizliliği opsiyon olarak sunan bir blok zincire sahip. Zcash adresleri ya gizli (z-adresleri) ya da şeffaf (t-adresleri). Bu iki farklı adres tipi arasında gerçekleşebilecek 4 adet transfer türü var.

“Private” bir transfer yapıldığında açık blok zincirde bir transferin yapıldığı, ve fee ödendiği görülebilir. Fakat adresler, transfer miktarı ve memo alanları şifrelendiği için blok zincir üzerinde görülemez. Bu şifreleme esnasında zero-knowledge-prooflardan yararlanılıyor.

Monero

Monero, gizliliği varsayılan olarak sunan bir blok zincir. Yaptığınız işlemler, siz özel olarak paylaşmak istemediğiniz sürece gizli tutuluyor.

Bu blok zincirde yapılan bir işlemde alıcı, gönderici ve gönderim miktarı farklı şekilde korunur.

Stealth Adresler, gönderenin alıcı adına her işlem için rastgele ve tek kullanımlık oluşturduğu adreslerdir. Bu sayede sadece alıcı ve gönderici alıcı adresi görebilirken, tek bir adresten geriye doğru izlenebilirlik önlenmiş olur. Stealth address aynı zamanda “one time public key” (tek kullanımlık açık anahtar) olarak da bilinir. Monero ağında bir adresin oluşturulması için 2 adet key gerekli. Spend key (Harcama anahtarı), fonları hareket ettirmek için gerekliyken, view key (Görüş anahtarı) ise gelen işlemleri görebilmek için gerekli. Bu iki anahtarın birleşimiyle Monero Adresiniz oluşturulur.

İşlem esnasında gönderici, alıcıdan public harcama anahtarı, ve public görüş anahtarını ister ve farklı datalarla birleştirerek tek kullanımlık açık anahtarı oluşturur. Oluşturulan anahtar blok zincir üzerinde herkes tarafından görüntülenebilir; fakat sadece alıcı private view key (Özel Görüş Anahtarı) ile işlem içeriğini blok zincirde bulup eriştiğinde; tek kullanımlık public anahtara denk gelen bir tek kullanımlık private anahtar hesaplayarak, çıktıdaki miktarı private harcama anahtarı ile işleme alır ve fonlara erişmiş olur.

Ring signatures ise farklı kullanıcılardan alınan yanıltıcı işlemleri ve asıl işlemi tek grupta birleştirerek bir imza oluşturur. Gerçek input içerisinde tek kullanımlık harcama anahtarını barındırır. Bu işleme dahil olmayan biri hangi işlemin gerçek olduğunu anlayamaz ve tüm işlemi output olarak görür. Bu sayede gönderen kişinin gizliliği korunmuş olur.

Ring Confidential Transactions (RCT) ise gönderilen miktarın şifrelenmesini sağlar. Monero da Bitcoin blok zinciri gibi UTXO kullanır. Bu ödeme tipinde girdi ve çıktı miktarının eşit olması gerekir. RCT, kullanıcının onaylayıcılara sadece yeterince kanıt göstererek işlemleri onaylamasına olanak tanır. Böylece gönderilen miktarın gizliliği sağlanmış olur.

Dash

Gizliliğin opsiyon olarak sunulduğu blok zincirlerden biri. Bir işlemin gizli olması için PrivateSend özelliğinin kullanılması gerekiyor. Bu özellik, gönderinizin karşı tarafa iletilmeden önce işleminizin Bitcoin blok zincirindeki CoinJoin ile aynı süreçten geçmesini sağlıyor. Gizliliği daha da arttırmak için “Masternodes” adı verilen, dash blok zinciri üzerindeki güvenilir nodelar fonlarınızı zincir üzerinde gönderilmekte olan diğer coinler ile karıştırıyor ve işleminizin izinin sürülmesini daha da zorlaştırıyor.

Secret Network

Yukarıda bahsettiğimiz blok zincirler Bitcoin blok zinciri benzeri, programlanamayan blok zincirlerdi. Secret Network ise programlanabilir ve gizliliği varsayılan olarak sunan bir blok zincir. Yani Ethereum üzerinde geliştirilen uygulamaları Secret Network üzerinde geliştirebilirsiniz ve platformlarla iletişime geçtiğinizde bilgileriniz açık bir şekilde yayınlanmaz. Cosmos üzerinde Rust ile kodlanmıştır; bu yüzden daha ölçeklenebilir olduğu iddia ediliyor. CosmWasm ile IBC kullanan birden fazla zincirde Secret Network kontratları çalıştırılabilir.

Ağ üzerindeki hesaplamaların gizli ve güvenli olarak gerçekleştirilebilmesi için nodeların TEE (Trusted Execution Environment) donanımına sahip olmaları gerekir. TEE’ler ana işletim sisteminden ayrı bir cihazın ana işletimcisi üzerinde yalıtılmış bir alanda bulunan ve içerisine yüklenen kodun ve verilerin gizlilik, bütünlük açısından korunmasını garanti eden donanımdır. Bu sayede ağda client tarafından oluşturulan bir girdi, şifrelenmiş şekilde işlenmeye devam edebilir. Gizli Sözleşmelerin sözleşme durumu her zaman şifrelidir ve yalnızca kontrat içindeki TEE tarafından bilinebilir. Şifrelenmiş çıktılar ise sadece gönderen ve kontratın kendisi tarafından bilinir.

  • Ağ, kullanıcıdan bir yürütme isteği aldığında (Cu ile şifrelenmiş argüman), TEE, şifreli metni deşifre ederek kontrat kaynak kodunu blok zincirden alınmış mevcut şifreli sözleşme durumu Cb’yi yükler.
  • Daha sonra TEE, TEE servis anahtarını kullanarak Cb’yi deşifre eder, kontrat mantığını uygular, uygulama sonucunu mb olarak çıktı verir.
  • Daha sonra mb, kullanıcının public anahtarıyla şifrelenerek Cb’ elde edilir. Cb’ blok zincire gönderilir.

Cosmos üzerindeki diğer platformlar kontratlarda şifrelenmiş veri kullanmıyor. Cosmos da gizlilik odaklı bir ağ olarak değil, ölçeklenebilir ve uyumlu bir ağ olarak biliniyor. Bu sebeple, Cosmos üzerindeki sorgulamalar, şifrelenmiş verinin durumunu sorgulayamaz. Çözüm olarak Secret Network kontratlara, çağıranın kimliğini doğrulamak için kullanılan bir görüntüleme anahtarı verir. Bu anahtarla herhangi bir adres için, doğrulama esnasında gerekli verinin deşifre edilmesine izin verilir.

Aleo

Aleo, gizliliğin varsayılan olarak geldiği, henüz testnet aşamasında olan, programlanabilir bir blok zincir. Üzerinde geliştirilen merkeziyetsiz uygulamalar, protokoller, kendi uygulama dili olan Leo ile yazılacak. Aleo’nun gizliliği Secret Network’ten farklı olarak Zero-knowledgea (Sıfır Bilgi) dayanıyor. Kanıt üretmek için sadece “yeterli” bilgi sağlanan bu kanıtlar, gizliliği korurken bir yandan daha verimli yapılar sunabiliyor.

Bu yazımızda kullanıcıların neden gizlilik isteyebileceğini, gizlilik kusurlarının muhtemel sonuçlarını, ağ katmanında ve zincir üzeri katmanda gizliliği sağlamanın farklı yollarını ve gizlilik odaklı blok zincirleri konuştuk.

Okuyarak zaman ayırdığınız için teşekkürler.

Twitter: KyaTzu & ODTÜ Blockchain Topluluğu

--

--