Tornado Cash V2'nin tasarım ilkesini ayrıntılı olarak açıklayın

> Geliştirici ameen.eth, "Mahremiyetin suça eşit olmadığı" konusunda başka bir yön sağlamak için "Mahremiyet Kanıtı" kavramını Tornado Cash ile birleştiriyor.

Yazan: Albert Lin

Önsöz

TornadoCash, kripto para birimi dünyasında iyi bilinen bir anonim işlem hizmetidir. TornadoCash, fonların kaynağını gizlemek için ZKP (Sıfır Bilgi Kanıtı) teknolojisini kullanır. ABD hükümeti, böyle bir mekanizmanın yasa dışı mali akış faaliyetlerini kolaylaştırdığını savundu ve sonunda Ağustos 2022'de ABD Hazine Bakanlığı tarafından onaylandı ve raflardan kaldırmak zorunda kaldı. Gizliliğin korunması ve kara para aklama çoğu durumda her zaman el ele gidiyor gibi görünmektedir. Mahremiyet peşinde koşarken, suçlular genellikle bu gizlilik özelliklerini yasa dışı fonları aklamak için kullanır. Kara para aklamayı etkili bir şekilde engellerken insanların mahremiyete sahip olmasına izin veren bir yol bulunabilir mi? TornadoCash'in ilk geliştiricilerinden ameen.eth tarafından hazırlanan Privacy-Pools bir yön verebilir. (Delisting kısmından sadece front-end web sitesi ve GitHub Deposu etkilenir, blockchain üzerinde olduğu için sözleşme kısmı etkilenmez. Son olarak GitHub, Electronic Frontier Foundation'ın çabalarıyla Depoyu restore etti. Detaylar için lütfen buraya bakın)

Giriş TornadoCash ilkesi

Gizlilik Havuzlarını tanıtmadan önce, TornadoCash ile ilgili tasarım ilkelerini anlamanız gerekir. Ayrıntılı bir giriş için lütfen bir önceki makalem olan "Breaking Down TornadoCash: A Beginner's Guide to Açıklamanın İşlevselliğini Arkadaşlara" bakın. İşte TornadoCash'in tasarım ilkelerinin kısa bir incelemesi.

TornadoCash, erişimi kontrol etmek için makbuzları (taahhütleri) kullanır. Makbuz, sır (gizli değer) ve nullifier (çıkış kodu) hashlenerek oluşturulur ve her bir fiş yalnızca bir kez geri alınabilir. Mevduat bilgilerini kaydetmek için Merkle Ağacı'nı (karma ağaç) kullanın, makbuzu yaprak düğüm olarak kullanın ve Merkle Kökü'nü (karma ağaç kökü) hesaplayın. Verilerin Merkle Ağacının yapraklarından biri olup olmadığını kanıtlamak için kullanıcının yalnızca yapraktan köke verileri sağlaması ve dolaylı olarak daha önce TornadoCash'e para yatırıldığını kanıtlaması gerekir. Para yatırma kaynağını gizlemek için Sıfır Bilgi Kanıtını kullanın ve Çift Para Çekme saldırısını önlemek için nullifier kullanın.

TornadoCash makbuzunun iki anlamı vardır

  • Gönderenin daha önce para yatırdığına dair kanıt
  • Her alıcının yalnızca bir kez para talebinde bulunabileceğinden emin olun

「Masumiyet Kanıtı」

TornadoCash'in tasarım prensibine göre, alınan fonların sadece bir önceki mevduattan gelmesi gerektiği bilinebilir, ancak hangi mevduattan geldiği bilinmez. Yasadışı kara para aklama faaliyetleri için TornadoCash kullanan suçluların temel amacı budur ve ayrıca ABD hükümetinin TornadoCash'i düzenlemesinin nedeni de budur. Alınan fonların ret listesindeki mevduatlardan olmadığını kanıtlamak için başka bir Kanıt (ZKP) önerebilirsek, ödemenin suçlulardan olmadığını kanıtlayabilir mi, bu "Masumiyet Kanıtı" (" masumiyet") temel kavram.

"Masumiyet Kanıtı" kavramı iki yöne ayrılabilir

  • Alınan fonların izin verilenler listesine (izin verilenler listesi) yatırılan fonların toplanmasından olduğuna dair kanıt
  • Çekilmekte olan fonların reddedilenler listesindeki (reddedilenler listesi) yatırılan fonlar grubundan gelmediğine dair kanıt

Bu yöntemlerin her ikisi de, çekilen fonların ret listesindeki mevduatlardan olmadığını kanıtlayabilir. Aşağıdaki şekildeki yaklaşım, alınan fonların ret listesindeki depozitodan (kırmızı) gelmediğini kanıtlamak için ret listesini kullanmaktır.

kaynak:

Gizlilik Havuzları tasarım ilkesi

Privacy-Pools, TornadoCash'e "Masumiyet Kanıtı" kavramını ekler. TorandoCash makbuzunun orijinal anlamına ek olarak, Privacy-Pools ödeme makbuzunun üçüncü bir anlamı vardır: "alınan fonların izin verilenler listesindeki mevduatlardan geldiğini kanıtlamak".

Privacy-Pools makbuzu şu anlama gelir:

  • Gönderenin daha önce para yatırdığına dair kanıt
  • Her alıcının yalnızca bir kez para talebinde bulunabileceğinden emin olun
  • Çekilecek fonların izin verilenler listesindeki mevduatlardan geldiğine dair kanıt

Burada Privacy-Pools'un bu sistemde "Masumiyet Kanıtı"nı nasıl kullandığını açıklamak için Allow Merkle Tree'yi kullanıyoruz (Allow Merkle Tree, izin listesini kullanma konseptidir). Her şeyden önce, Allow Merkle Tree'nin çeşitli özellikleri vardır.

  • Adından da anlaşılacağı gibi Merkle Ağacı'nın bir Merkle Ağacı olmasına izin ver
  • Ağaç yüksekliği ve düğüm sayısı, Gizlilik Havuzlarının Mevduat Merkle Ağacı ile aynıdır. *İzin Ver Merkle Ağacının tüm yaprakları, Yatırılan Merkle Ağacı yaprağı (biriktirilen) konumuna karşılık gelir.

İzin Ver Merkle Ağacı yaprak verileri aşağıdaki iki kategoriye ayrılabilir:

  • izin verildi: Bu lokasyonda para yatırmaya izin verildiğini gösterir. (Henüz yatırılmamış pozisyonlara da varsayılan olarak izin verilir)
  • bloke: Bu konumdaki para yatırma işleminin reddedildiğini gösterir.

Aşağıdaki şekilde gösterildiği gibi, 0 ve 1 endeks pozisyonlarının her ikisi de Mevduat Merkle Ağacında yasal fonlardır ve Allow Merkle Ağacı yaprağının karşılık gelen pozisyonlarına da izin verilir.

Bugün bir suçlunun kara para aklama faaliyetleri yürütmek istediğini varsayarsak, saldırıdan sonra elde ettiği yasa dışı fonları Privacy-Pools'a yatırır ve yatırma yeri Mevduat Merkle Ağacı endeksi: 2'dir. Bunun yasa dışı fonlar olduğunu biliyoruz, bu nedenle ilgili Merkle Ağacına İzin Ver endeksi: 2 konumunda bloke olacak şekilde güncelliyoruz.

İzin Listesi Toplama Durumu

Bugün, ABD hükümetinin izin verilenler listesine para yatıran bir kullanıcının para çekmek istediğini varsayarsak, "yatırılan paranın Dposit Merkle Ağacı'nda olduğuna dair kanıt" ve "ABD izin verilenler listesindekinin İzin Verildiğine dair kanıt" sunması gerekir. ABD izin verilenler listesine karşılık gelen kanıt, Allow Merkle Root'u (kullanıcı tarafından sağlanan, koddaki subetRoot) ve yolda iletilecek olan düğüm değerini içerir. Privacy-Pools, ZKP aşamasını doğruladığında, izin verildiği şekilde yaprak değerini (gerçek kodda keccak256(izin verilir)) ve bir Merkle Kökü oluşturmak için geçmek için verilen düğüm değerini kullanır. Bu Merkle Root'un, kullanıcı tarafından sağlanan Allow Merkle Root ile aynı olduğunu doğrulayın. Aynı temsilcinin doğrulamasından geçilirse, para çekme fonunun ABD hükümetinin izin listesinde bulunan bir mevduattan olduğu anlamına gelir.

Red Listesi Toplama Durumu

Bugün ABD hükümetinin izin verilenler listesinde olmayan bir kullanıcı para çekmek istiyor ve ilgili para yatırma yeri ABD hükümetinin izin verilenler listesinde bloke olarak işaretleniyor. Bu, kullanıcının para çekmek için ABD hükümetinin izin listesinden Allow Merkle Root'u kullanamamasına neden olur, çünkü karşılık gelen kanıt oluşturulamaz ve doğrulama başarısız olur (çünkü Privacy-Pools, leaf to do için allow değerini kullanır) hesaplamalar ve ABD hükümetinin izin listesi, Konum engellendi olarak işaretlenir, bu nedenle aynı Merkle Kökü hesaplanamaz).

Böyle bir tasarım, kullanıcıyı başka bir Merkle Root'un para çekmesine izin vermesini sağlamaya zorlar (diğer Allow Merkle Root ağaçlarının, aynı Merkle Root'un doğrulamayı geçmesine izin vermesini hesaplamak için para yatırma yerini izin verilen olarak işaretlemesi gerekir). Bu diğer İzin Ver Merkle Ağacı, diğer hükümetler veya kurumlar tarafından tutulabilir ve hatta bu kullanıcının kendisi tarafından oluşturulabilir. Bugün, ABD hükümeti, izleme amacına ulaşmak için kullanıcının fonlarının ABD hükümetinin yasalarına ve düzenlemelerine uygun olup olmadığını belirlemek için para çekerken kullanılan Allow Merkle Root'u kullanabilir. Kullanıcı kendi oluşturduğu Allow Merkle Ağacı'nı kullanıyorsa veya güvenilir değilse, temel olarak para çekme fonunun sorunlu bir para yatırma işleminden gelmesi muhtemeldir (her güvenilir üçüncü taraf Allow Merkle Ağacı, para yatırma konumunu bloke edilmiş olarak işaretler).

Sıkça Sorulan Sorular

**S: Allowroot'u çeken kişi tarafından sağlanıyorsa, yaprağın izin verilenler listesinde bir depozito olduğunu kanıtlamak için sahte bir Allow Merkle Root oluşturmak mümkün müdür? Bu, paranın yine de alınabileceği anlamına mı gelir? **

C: Yanıt evet, parayı geri almak gerçekten mümkün. Yazar özellikle, böyle bir mekanizmanın suçluların parayı almasını yasaklamak için olmadığını, ancak alabilseler bile fonların ret listesindeki fonlar olduğunun bilineceğini özellikle belirtti. Geri çekilen kişi, ikna edici olmayan bir Merkle Root'a İzin Ver verdiğinde, temel olarak reddedilme listesinden çekilme olarak kabul edilebilir. Yazar, buna izin verilmesinin nedeninin bu hizmetin merkezi olmayan yapısını korumak olduğunu tahmin ediyor. Çünkü her Allow Merkle Ağacı, her bir yaprağın durumunu güncellemek için belirli bir yetki yönetimine ihtiyaç duyar. Belirli bir izin ağacı kökü zorunluysa, bu, ademi merkeziyetçilik ruhuna uygun olmayan, fonların çekilmesini kontrol etmek için birisinin belirli bir yetkisi olduğu anlamına gelir.

**S: İşlemin reddedilen fonlardan olup olmadığına kim karar verecek? **

C: Gördüğüm kısımdan özel olarak bahsedilmedi ve anladığım kadarıyla bu kısım her bir düzenleyici kurum tarafından yapılmalıdır. Bugün ABD hükümetinin Privacy-Pools'un kirli parasını kontrol etmek istediğini varsayarsak, her işlemin Allow Merkle Root'unu kontrol ederek kirli para olup olmadığını kontrol edebilir. Ne tür Merkle Root'a İzin Ver'e izin verildiğine gelince, bu, her düzenleyici kurumun kendi adına karar vermesidir.

Gizlilik Havuzları kodu

Ana kod ve yazarın kendi yorumları, kod aracılığıyla herkesin ana mantığı anlamasına yardımcı olmak umuduyla buraya eklenmiştir.

// devreler/çekilme_from_subset.circom

şablon WithdrawFromSubset(seviyeler, beklenenDeğer) {

// halk

sinyal giriş kökü;

sinyal girişi altkümesiKök;

sinyal girişi sıfırlayıcı;

sinyal girişi varlığıMeta verisi; // abi.encode(belirteç, miktar).snarkHash();

sinyal girişi geri çekmeMeta verisi; // abi.encode(alıcı, geri ödeme, aktarıcı, ücret).snarkHash();

// özel

sinyal girişi sırrı;

sinyal giriş yolu; // Verilerin sol yaprağı mı yoksa sağ yaprağı mı temsil ettiğini belirtin.

sinyal girişi mainProof [levels] ; // Depozito kökü için gerekli verileri oluşturun.

sinyal girişi altkümesiProof [levels] ; // izin vermek için gerekli verileri yapılandırın.

// Sıfırlayıcıyı ve taahhüdü hesapla.

bileşen hasher = CommitmentNullifierHasher();

hasher.secret <== gizli;

hash.path <== yol;

hasher.assetMetadata <== assetMetadata;

nullifier === hasher.nullifier;

// beklenenDeğer: keccak256("izin verilen") % p

bileşen doubleTree = DoubleMerkleProof(düzeyler, beklenenDeğer);

doubleTree.leaf <== hasher.commitment;

// Sol yaprak mı yoksa sağ yaprak mı olduğunu belirtmek için yolu bitlere dönüştürün.

// Depozit ağacının ve izin ağacının aynı yolu paylaştığı gözlemlenebilir.

doubleTree.path <== yol;

için ( i = 0; i < seviyeler; i++) {

doubleTree.mainProof [i] <== anaKanıt [i] ;

doubleTree.subsetProof [i] <== altkümeKanıt [i] ;

}

kök === doubleTree.root; // Yatırma kökünü doğrulayın.

subsetRoot === doubleTree.subsetRoot; // İzin verilen kökü doğrulayın.

sinyal çekmeMetadataSquare;

geri çekmeMetadataSquare <== çekilmeMetadata * çekilmeMetadata;

}

TLDR

  • "Masumiyet Kanıtı", ödemenin izin verilenler listesindeki depozitodan geldiğini kanıtlamak için başka bir Kanıt kullanmaktır. "Masumiyet Kanıtı" iki açıdan oluşturulabilir: izin verilenler listesi ve reddedilenler listesi.
  • Privacy-Pools, TornadoCash temelinde "Masumiyet Kanıtı" kavramını üstlenir. Orijinal makbuz üçüncü bir anlamı temsil eder: "Alınan fonların izin verilenler listesindeki mevduatlardan geldiğinin kanıtı."
  • Allow Merkle Tree'nin varlığı, para çekme işleminin izin verilenler listesinde olduğunu kanıtlayabilir. Allow Merkle Ağacının yaprak pozisyonu, Depozito Merkle Ağacının tortu yaprak pozisyonuna karşılık gelir. İzin ver Merkle Ağacı yaprak verilerine izin verilir ve engellenir.
  • Para Yatırma Merkle Root'u oluşturmak için gerekli bilgilere ek olarak, alıcının ayrıca para çekme işleminin izin verilenler listesinde olduğunu kanıtlamak için Allow Merkle Root ve build Allow Merkle Root bilgilerini sağlaması gerekir.
  • Allow Merkle Root alıcı tarafından sağlandığı için, suçluların yine de sahte Allow Merkle Root aracılığıyla yasa dışı fonları almanın bir yolu vardır. Sahte Allow Merkle Root, zincirde görünmeye devam edecek ve yasa dışı fonların akışını izlemek için başkaları tarafından ödeme konusunda şüpheli olarak değerlendirilecektir.

Geliştirici ameen.eth, "Mahremiyetin suça eşit olmadığı" konusunda başka bir yön sağlamak için "Masumiyet Kanıtı" kavramını TornadoCash ile birleştiriyor. Yazar, başka bir gerçeği kanıtlamak için başka bir ZKP kullanmayı ilginç buluyor, bu biraz ZKP'nin eklenmesine benziyor. Bu kullanım şekli, daha büyük ve daha karmaşık bir ZKP oluşturmaktan daha basit ve daha verimli olacaktır. Allow Merkle Tree seçimiyle ilgili olarak, gelecekte daha adil bir birim tarafından inşa edileceğini ve bunun başkaları için daha ikna edici olacağını hissediyorum.

Son olarak, makalenin gözden geçirilmesine yardımcı oldukları ve değerli görüşler verdikleri için Chih-Cheng Liang ve Ping Chen'e teşekkürler!

> Referans:

> Gizli Adres

> Tornado Cash örneği analizi

> ZKP ve akıllı sözleşmelerin geliştirilmesine giriş

> [ZKP Okuma Kulübü] TornadoCash

> Tornado Cash — Nasıl Çalışır | DeFi + Sıfır Bilgi Kanıtı

> TornadoCash teknik ayrıntılarının derinlemesine anlaşılması

> 0xhhh Yeni özellikleri ve ilkelerini tanıtan Konu

> tanıtım videosu

> Vitalik'in Tornadov2'nin nasıl geliştirileceğine dair konuşması

> gizlilik havuzları v0tweet

> TornadoCash üzerine inşa edilmiş Proof of Innocence ile tanışın

View Original
The content is for reference only, not a solicitation or offer. No investment, tax, or legal advice provided. See Disclaimer for more risks disclosure.
  • Reward
  • Comment
  • Share
Comment
0/400
No comments
  • Pin