Hesap tabanlı blockchainlerde anonimlik hakkında

Kripto para birimlerinde anonimlik konusuyla uzun zamandır ilgileniyoruz ve bu alandaki teknolojilerin gelişimini takip etmeye çalışıyoruz. Makalelerimizde çalışma prensiplerini ayrıntılı olarak tartıştık. gizli işlemler Monero'da ve aynı zamanda gerçekleştirilen karşılaştırmalı inceleme Bu alanda mevcut teknolojiler. Ancak günümüzde tüm anonim kripto para birimleri, Bitcoin - Harcanmamış İşlem Çıkışı (bundan sonra UTXO olarak anılacaktır) tarafından önerilen veri modeli üzerine inşa edilmiştir. Ethereum gibi hesap tabanlı blok zincirleri için, anonimlik ve gizliliğin uygulanmasına yönelik mevcut çözümler (örneğin, Mobius veya Aztek) UTXO modelini akıllı sözleşmelerde kopyalamaya çalıştı.

Şubat 2019'da Stanford Üniversitesi ve Visa Research'ten bir grup araştırmacı yayınlandı ön baskı "Zether: Akıllı sözleşmeler dünyasında gizliliğe doğru." Yazarlar, hesap tabanlı blok zincirlerde anonimliği sağlamaya yönelik bir yaklaşım öneren ilk kişilerdi ve akıllı sözleşmenin iki versiyonunu sundular: gizli (bakiyeleri ve transfer tutarlarını gizlemek) ve anonim (alıcıyı ve göndereni gizlemek) işlemler için. Önerilen teknolojiyi ilginç buluyoruz ve tasarımını paylaşmak istiyoruz, ayrıca hesap tabanlı blok zincirlerdeki anonimlik sorununun neden çok zor kabul edildiğini ve yazarların bunu tam olarak çözüp çözemediklerini konuşmak istiyoruz.

Bu veri modellerinin yapısı hakkında

UTXO modelinde bir işlem “girdiler” ve “çıkışlardan” oluşur. "Çıktıların" doğrudan bir benzeri, cüzdanınızdaki faturalardır: her "çıktının" bir değeri vardır. Birine ödeme yaptığınızda (bir işlem oluşturduğunuzda), bir veya daha fazla "çıktı" harcarsınız, bu durumda bunlar işlemin "girdileri" haline gelir ve blockchain bunları harcanmış olarak işaretler. Bu durumda, ödemenizin alıcısı (veya değişiklik yapmanız gerekiyorsa siz kendiniz) yeni oluşturulan "çıktıları" alır. Bu şematik olarak şu şekilde temsil edilebilir:

Hesap tabanlı blockchainlerde anonimlik hakkında

Hesap tabanlı blok zincirleri banka hesabınıza çok benzer şekilde yapılandırılmıştır. Yalnızca hesabınızdaki tutar ve transfer tutarıyla ilgilenirler. Hesabınızdan bir miktar transfer ettiğinizde herhangi bir “çıktı” yakmazsınız, ağın hangi coinlerin harcandığını ve hangilerinin harcanmadığını hatırlamasına gerek kalmaz. En basit durumda, işlem doğrulama, gönderenin imzasını ve bakiyesindeki tutarı kontrol etmekten ibarettir:

Hesap tabanlı blockchainlerde anonimlik hakkında

Teknoloji analizi

Daha sonra Zether'in işlem tutarını, alıcıyı ve göndereni nasıl gizlediğinden bahsedeceğiz. Çalışma prensiplerini anlatırken, gizli ve anonim versiyonlar arasındaki farklara da değineceğiz. Hesap tabanlı blockchainlerde gizliliği sağlamak çok daha kolay olduğundan, anonimleştirmenin getirdiği bazı kısıtlamalar teknolojinin gizli versiyonu için geçerli olmayacaktır.

Bakiyeleri ve transfer tutarlarını gizleme

Zether'deki bakiyeleri ve transfer tutarlarını şifrelemek için bir şifreleme şeması kullanılır El Cemal. Aşağıdaki gibi çalışır. Alice Bob'u göndermek istediğinde b Adrese göre paralar (genel anahtarı) Y, rastgele bir sayı seçiyor r ve tutarı şifreler:

Hesap tabanlı blockchainlerde anonimlik hakkında
nerede C - şifrelenmiş miktar, D - bu miktarın şifresini çözmek için gerekli yardımcı değer, G - Eliptik eğri üzerinde sabit bir nokta, gizli anahtarla çarpıldığında genel anahtar elde edilir.

Bob bu değerleri aldığında bunları aynı şekilde şifrelenmiş bakiyesine ekler, bu nedenle bu plan uygundur.

Benzer şekilde Alice aynı değerleri bakiyesinden çıkarır, ancak Y genel anahtarınızı kullanır.

Alıcıyı ve göndereni gizleme

UTXO'da "çıktıların" karıştırılması, kripto para birimlerinin ilk günlerine kadar uzanır ve gönderenin gizlenmesine yardımcı olur. Bunu yapmak için, gönderenin kendisi bir transfer yaparken blok zincirindeki rastgele "çıktıları" toplar ve bunları kendisininkiyle karıştırır. Daha sonra, "çıktıları" halka imzayla imzalıyor; bu, doğrulayıcıyı, gönderenin paralarının söz konusu "çıktılar" arasında bulunduğuna ikna etmesine olanak tanıyan bir kriptografik mekanizma. Karışık madeni paraların kendisi elbette harcanmıyor.

Ancak alıcıyı gizlemek için sahte çıktılar oluşturamayacağız. Bu nedenle UTXO'da her "çıkışın" kendine özgü bir adresi vardır ve kriptografik olarak bu paraların alıcısının adresine bağlıdır. Şu anda, benzersiz çıkış adresi ile alıcı adresi arasındaki ilişkiyi, gizli anahtarlarını bilmeden tanımlamanın bir yolu yoktur.

Hesap bazlı modelde tek seferlik adres kullanamıyoruz (aksi takdirde zaten bir “çıkış” modeli olacaktır). Bu nedenle alıcı ve göndericinin blockchaindeki diğer hesaplarla karıştırılması gerekir. Bu durumda, gerçek bakiyeleri değiştirmeden, karma hesaplardan şifrelenmiş 0 jeton çekilir (veya alıcı karma ise 0 eklenir).

Hem gönderenin hem de alıcının her zaman kalıcı bir adresi olduğundan, aynı adreslere aktarım yaparken aynı grupları karıştırmak için kullanmak gerekli hale gelir. Buna bir örnekle bakmak daha kolaydır.

Diyelim ki Alice, Bob'un hayır kurumuna katkıda bulunmaya karar verdi, ancak transferin dışarıdan bir gözlemciye gizli kalmasını tercih etti. Daha sonra gönderen alanında kendini gizlemek için Adam ve Adele'nin hesaplarına da giriyor. Bob'u gizlemek için alıcı alanına Ben ve Bill'in hesaplarını ekleyin. Bir sonraki katkıyı yapan Alice, yanına Alex ve Amanda'yı, Bob'un yanına ise Bruce ve Benjen'i yazmaya karar verdi. Bu durumda, blockchain analiz edilirken, bu iki işlemde, bu işlemlerin anonimliğini kaldıran yalnızca bir kesişen katılımcı çifti vardır - Alice ve Bob.

Hesap tabanlı blockchainlerde anonimlik hakkında

İşlem yarışları

Daha önce de belirttiğimiz gibi hesap bazlı sistemlerde bakiyenizi gizlemek için kullanıcı bakiyesini ve transfer tutarını şifreler. Aynı zamanda hesabındaki bakiyenin ekside olmadığını da kanıtlaması gerekir. Sorun, bir işlem oluştururken kullanıcının mevcut hesap durumuna ilişkin bir kanıt oluşturmasıdır. Bob, Alice'e bir işlem gönderirse ve işlem Alice'in gönderdiği işlemden önce kabul edilirse ne olur? Bu durumda, bakiye kanıtı Bob'un işlemi kabul edilmeden önce oluşturulduğu için Alice'in işlemi geçersiz sayılacaktır.

Hesap tabanlı blockchainlerde anonimlik hakkında

Böyle bir durumda verilecek ilk karar, işlem gerçekleşene kadar hesabın dondurulmasıdır. Ancak bu yaklaşım uygun değildir, çünkü böyle bir sorunu dağıtılmış bir sistemde çözmenin karmaşıklığına ek olarak, anonim bir şemada kimin hesabının engelleneceği net olmayacaktır.

Bu sorunu çözmek için teknoloji, gelen ve giden işlemleri ayırıyor: Harcamaların bilanço üzerinde anında etkisi varken, tahsilatların etkisi gecikiyor. Bunu yapmak için, sabit büyüklükte bir blok grubu olan "çağ" kavramı tanıtıldı. Geçerli "çağı", blok yüksekliğinin grup boyutuna bölünmesiyle belirlenir. Bir işlemi gerçekleştirirken ağ, gönderenin bakiyesini anında günceller ve alıcının parasını bir depolama tankında saklar. Biriken fonlar alacaklının kullanımına yalnızca yeni bir "dönem" başladığında sunulur.

Sonuç olarak kullanıcı, paranın ne sıklıkta alındığına bakılmaksızın (tabii ki bakiyesinin izin verdiği ölçüde) işlem gönderebilir. Dönem boyutu, blokların ağda ne kadar hızlı yayıldığına ve bir işlemin bir bloğa ne kadar hızlı girdiğine göre belirlenir.

Bu çözüm gizli aktarımlar için işe yarar ancak daha sonra göreceğimiz gibi anonim işlemlerde ciddi sorunlar yaratır.

Tekrar saldırılarına karşı koruma

Hesap tabanlı blok zincirlerde her işlem, gönderenin özel anahtarı tarafından imzalanır ve bu, doğrulayıcıyı, işlemin değiştirilmediğine ve bu anahtarın sahibi tarafından oluşturulduğuna ikna eder. Peki ya iletim kanalını dinleyen bir saldırgan bu mesajı yakalayıp tamamen aynı ikinci mesajı gönderirse? Doğrulayıcı, işlemin imzasını doğrulayacak ve yazar olduğuna ikna olacak ve ağ, aynı tutarı gönderenin bakiyesinden tekrar yazacaktır.

Bu saldırıya tekrar saldırısı denir. UTXO modelinde, saldırgan kendi başına geçerli olmayan ve ağ tarafından reddedilen harcanmış çıktıları kullanmaya çalışacağından bu tür saldırılar konuyla ilgili değildir.

Bunun olmasını önlemek için, işleme, nonce veya basitçe "tuz" adı verilen, rastgele verileri içeren bir alan yerleştirilir. Bir işlemi salt ile yeniden gönderirken, doğrulayıcı nonce'ın daha önce kullanılıp kullanılmadığına bakar ve kullanılmadıysa işlemin geçerli olduğunu kabul eder. Kullanıcı nonce'larının tüm geçmişini blok zincirinde saklamamak için, genellikle ilk işlemde sıfıra eşitlenir ve ardından bir artırılır. Ağ yalnızca yeni işlemin başlangıç ​​değerinin öncekinden farklı olup olmadığını tek tek kontrol edebilir.

Anonim transfer planında, işlem tekrarlarının doğrulanması sorunu ortaya çıkar. Nonce'ı açıkça gönderenin adresine bağlayamayız, çünkü bu açıkça aktarımın anonimliğini ortadan kaldırır. Ayrıca, katılan tüm hesapların nonce'lerine de bir tane ekleyemiyoruz çünkü bu, işlenen diğer transferlerle çakışabilir.

Zether'in yazarları, "çağa" bağlı olarak nonce'yi kriptografik olarak oluşturmayı öneriyorlar. Örneğin:

Hesap tabanlı blockchainlerde anonimlik hakkında
öyle x gönderenin gizli anahtarıdır ve Gepoch — 'Zether +' biçiminde bir dizenin hashlenmesiyle elde edilen, çağ için ek bir üreteç. Artık sorun çözülmüş gibi görünüyor; gönderenin nonce'sini açığa çıkarmıyoruz ve olayla ilgisi olmayan katılımcıların nonce'lerine müdahale etmiyoruz. Ancak bu yaklaşım ciddi bir sınırlama getiriyor: Bir hesap "dönem" başına birden fazla işlem gönderemez. Ne yazık ki bu sorun çözülmeden kalıyor ve şu anda Zether'in anonim versiyonunun kullanıma pek uygun olmadığını düşünüyoruz.

Sıfır Bilgi Kanıtlarının Karmaşıklığı

UTXO'da göndericinin ağa negatif bir miktar harcamadığını kanıtlaması gerekir, aksi takdirde yoktan yeni paralar üretmek mümkün hale gelir (bunun neden mümkün olduğunu önceki yazılarımızdan birinde yazmıştık) makaleler). Ayrıca karıştırılan paralar arasında kendisine ait fonların bulunduğunu kanıtlamak için “girişleri” halka imzayla imzalayın.

Hesap tabanlı blok zincirinin anonim versiyonunda kanıt ifadeleri çok daha karmaşıktır. Gönderen şunu kanıtlıyor:

  1. Gönderilen tutar pozitiftir;
  2. Bakiye negatif değil;
  3. Gönderen, transfer tutarlarını (sıfır dahil) doğru şekilde şifreledi;
  4. Bakiyedeki bakiye yalnızca gönderen ve alıcı için değişir;
  5. Gönderen, hesabının özel anahtarının sahibidir ve aslında gönderenler listesindedir (dahil olanlar arasında);
  6. İşlemde kullanılan Nonce doğru şekilde oluşturulmuştur.

Böylesine karmaşık bir kanıt için yazarlar bir karışım kullanıyor Kurşun geçirmez (bu arada yazarlardan biri yaratılışında yer aldı) ve Sigma protokolüBunlara Sigma mermileri denir. Böyle bir beyanın resmi olarak kanıtlanması oldukça zor bir iştir ve teknolojiyi uygulamaya istekli kişilerin sayısını büyük ölçüde sınırlamaktadır.

Sonuç?

Bizce Zether'in hesap tabanlı blockchainlere gizlilik getiren kısmı şu anda kullanılabilir. Ancak şu anda teknolojinin anonim versiyonu, kullanımına ciddi kısıtlamalar getiriyor ve uygulanması karmaşıktır. Ancak yazarların bunu sadece birkaç ay önce yayınlaması göz ardı edilmemeli ve belki de başka biri bugün var olan sorunlara çözüm bulacaktır. Sonuçta bilim böyle yapılır.

Kaynak: habr.com

Yorum ekle