Данс дээр суурилсан блокчэйн дэх нэрээ нууцлах тухай

Бид криптовалют дахь нэрээ нууцлах сэдвийг удаан хугацааны турш сонирхож ирсэн бөгөөд энэ чиглэлийн технологийн хөгжлийг дагаж мөрдөхийг хичээдэг. Манай нийтлэлүүдэд бид үйл ажиллагааны зарчмуудыг нарийвчлан авч үзсэн нууц гүйлгээ Монеро, мөн түүнчлэн явуулсан харьцуулсан тойм Энэ салбарт байгаа технологи. Гэсэн хэдий ч өнөөдөр бүх нэргүй криптовалютууд нь Bitcoin-ийн санал болгосон өгөгдлийн загвар дээр суурилдаг - зарцуулагдаагүй гүйлгээний гарц (цаашид UTXO). Ethereum зэрэг дансанд суурилсан блокчэйнүүдийн хувьд нэрээ нууцлах, нууцлалыг хэрэгжүүлэх одоо байгаа шийдлүүд (жишээ нь, Мобиус буюу Ацтек) ухаалаг гэрээнд UTXO загварыг хуулбарлахыг оролдсон.

2019 оны XNUMX-р сард Стэнфордын их сургууль болон Visa Research-ийн хэсэг судлаачид гаргасан урьдчилан хэвлэх "Зетер: Ухаалаг гэрээний ертөнцөд хувийн нууцлал руу чиглэнэ." Зохиогчид дансанд суурилсан блокчэйн дэх нэрээ нууцлах аргыг анхлан санал болгож, нууц (үлдэгдэл болон шилжүүлгийн дүнг нуух) болон нэргүй (хүлээн авагч, илгээгчийг нуух) гүйлгээ гэсэн ухаалаг гэрээний хоёр хувилбарыг танилцуулсан. Санал болгож буй технологи нь бидэнд сонирхолтой санагдаж, түүний дизайныг хуваалцахаас гадна дансанд суурилсан блокчейн дэх нэрээ нууцлах асуудал яагаад маш хэцүү гэж үздэг, зохиогчид үүнийг бүрэн шийдэж чадсан эсэх талаар ярихыг хүсч байна.

Эдгээр өгөгдлийн загваруудын бүтцийн тухай

UTXO загварт гүйлгээ нь "оролт" ба "гаралт" хэсгээс бүрдэнэ. "Гаралт" -ын шууд аналог бол таны хэтэвч дэх үнэт цаас юм: "гаралт" бүр тодорхой хэмжээний мөнгөн тэмдэгттэй байдаг. Та хэн нэгэнд мөнгө төлөхдөө (гүйлгээ хийх) нэг буюу хэд хэдэн "гарц"-ыг зарцуулдаг бөгөөд энэ тохиолдолд тэдгээр нь гүйлгээний "оролт" болж, блокчейн үүнийг зарцуулсан гэж тэмдэглэдэг. Энэ тохиолдолд таны төлбөрийг хүлээн авагч (эсвэл та өөрөө өөрчлөх шаардлагатай бол) шинээр үүсгэсэн "гарцыг" хүлээн авна. Үүнийг схемийн дагуу дараах байдлаар илэрхийлж болно.

Данс дээр суурилсан блокчэйн дэх нэрээ нууцлах тухай

Дансанд суурилсан блокчэйн нь таны банкны данстай төстэй бүтэцтэй. Тэд зөвхөн таны дансанд байгаа дүн болон шилжүүлгийн дүнг л харуулдаг. Та данснаасаа тодорхой хэмжээний мөнгө шилжүүлэхэд ямар ч "гаралт" шатаахгүй, сүлжээ нь ямар зоос зарцуулсан, аль нь зарцуулаагүй гэдгийг санах шаардлагагүй болно. Хамгийн энгийн тохиолдолд гүйлгээний баталгаажуулалт нь илгээгчийн гарын үсэг болон түүний үлдэгдлийн дүнг шалгах явдал юм.

Данс дээр суурилсан блокчэйн дэх нэрээ нууцлах тухай

Технологийн шинжилгээ

Дараа нь бид Zether гүйлгээний дүн, хүлээн авагч, илгээгчийг хэрхэн нуудаг талаар ярих болно. Бид түүний үйл ажиллагааны зарчмуудыг тайлбарлахдаа нууц болон нэргүй хувилбаруудын ялгааг тэмдэглэх болно. Бүртгэлд суурилсан блокчэйн дэх нууцлалыг хангах нь илүү хялбар байдаг тул нэрээ нууцлах замаар тавьсан зарим хязгаарлалт нь технологийн нууц хувилбарт хамаарахгүй.

Үлдэгдэл болон шилжүүлгийн дүнг нуух

Шифрлэлтийн схемийг Zether-д үлдэгдлийг шифрлэх, дүнг шилжүүлэхэд ашигладаг Эль Гамаль. Энэ нь дараах байдлаар ажилладаг. Алис Бобыг явуулахыг хүссэн үед b хаягаар зоос (түүний нийтийн түлхүүр) Y, тэр санамсаргүй тоог сонгоно r мөн дүнг шифрлэдэг:

Данс дээр суурилсан блокчэйн дэх нэрээ нууцлах тухай
хаана C - шифрлэгдсэн хэмжээ, D - энэ дүнг тайлахад шаардлагатай туслах утга; G - зууван муруй дээрх тогтмол цэгийг нууц түлхүүрээр үржүүлэхэд нийтийн түлхүүрийг олж авна.

Боб эдгээр утгыг хүлээн авахдаа тэдгээрийг шифрлэгдсэн үлдэгдэлдээ ижил аргаар нэмдэг тул энэ схем тохиромжтой байдаг.

Үүний нэгэн адил, Алис өөрийн балансаас ижил утгыг хасдаг Y таны нийтийн түлхүүрийг ашигладаг.

Хүлээн авагч болон илгээгчийг нуух

UTXO дахь "гаралтыг" холих нь криптовалютын эхэн үеэс эхэлсэн бөгөөд илгээгчийг нуухад тусалдаг. Үүнийг хийхийн тулд илгээгч өөрөө шилжүүлэг хийхдээ блокчэйнд санамсаргүй "гаралт" цуглуулж, тэдгээрийг өөрийнхтэй хольдог. Дараа нь тэр "гарцууд" дээр бөгж гарын үсгээр гарын үсэг зурдаг - криптографийн механизм нь шалгагчийг "гаралтын" дунд илгээгчийн зоос байгаа гэдэгт итгүүлэх боломжийг олгодог. Холимог зоос нь өөрөө мэдээж зарцуулагдахгүй.

Гэсэн хэдий ч бид хүлээн авагчийг нуухын тулд хуурамч гаралт үүсгэх боломжгүй болно. Тиймээс UTXO-д "гаралт" бүр өөрийн гэсэн өвөрмөц хаягтай бөгөөд эдгээр зоосыг хүлээн авагчийн хаягтай криптографын хувьд холбогддог. Одоогийн байдлаар нууц түлхүүрийг нь мэдэхгүй байж өвөрмөц гаралтын хаяг болон хүлээн авагчийн хаяг хоорондын хамаарлыг тодорхойлох арга байхгүй.

Бүртгэлд суурилсан загварт бид нэг удаагийн хаягийг ашиглах боломжгүй (эсвэл энэ нь аль хэдийн "гарах" загвар байх болно). Тиймээс хүлээн авагч болон илгээгчийг блокчэйн дэх бусад данстай холих шаардлагатай. Энэ тохиолдолд жинхэнэ үлдэгдлийг нь өөрчлөхгүйгээр холимог данснаас шифрлэгдсэн 0 зоосыг хасна (эсвэл хүлээн авагч холилдсон бол 0-г нэмнэ).

Илгээгч болон хүлээн авагч хоёулаа байнгын хаягтай байдаг тул ижил хаяг руу шилжихдээ ижил бүлгүүдийг холих шаардлагатай болдог. Үүнийг жишээгээр харахад илүү хялбар байдаг.

Алис Бобын буяны үйлсэд хувь нэмрээ оруулахаар шийдсэн гэж бодъё, гэхдээ шилжүүлгийг гадны ажиглагчид нэрээ нууцлахыг илүүд үздэг. Дараа нь илгээгчийн талбарт өөрийгөө далдлахын тулд тэрээр Адам, Адель хоёрын данс руу ордог. Мөн Бобыг нуухын тулд хүлээн авагч талбарт Бен, Билл нарын дансыг нэмнэ үү. Дараагийн хувь нэмрийг Алис өөрийнхөө хажууд Алекс, Аманда, Бобын хажууд Брюс, Бенжен хоёрыг бичихээр шийджээ. Энэ тохиолдолд блокчейн дээр дүн шинжилгээ хийхдээ эдгээр хоёр гүйлгээнд зөвхөн нэг огтлолцсон хос оролцогч байдаг - Алис, Боб нар эдгээр гүйлгээг нэрээ нууцалдаг.

Данс дээр суурилсан блокчэйн дэх нэрээ нууцлах тухай

Гүйлгээний уралдаанууд

Өмнө дурьдсанчлан дансанд суурилсан системд үлдэгдлээ нуухын тулд хэрэглэгч өөрийн үлдэгдэл болон шилжүүлгийн дүнг шифрлэдэг. Үүний зэрэгцээ тэрээр өөрийн дансны үлдэгдэл сөрөг бус хэвээр байгааг нотлох ёстой. Асуудал нь гүйлгээ хийхдээ хэрэглэгч өөрийн одоогийн дансны статустай холбоотой нотлох баримтыг бүрдүүлж байгаа явдал юм. Хэрэв Боб Алис руу гүйлгээ илгээж, Алисын илгээсэн гүйлгээнээс өмнө хүлээн авбал яах вэ? Дараа нь Бобын гүйлгээг хүлээн зөвшөөрөхөөс өмнө үлдэгдлийн нотолгоог барьсан тул Алисын гүйлгээг хүчингүйд тооцно.

Данс дээр суурилсан блокчэйн дэх нэрээ нууцлах тухай

Ийм нөхцөлд гарах хамгийн эхний шийдвэр бол гүйлгээ хийх хүртэл дансыг царцаах явдал юм. Гэхдээ энэ арга нь тохиромжгүй, учир нь тархсан системд ийм асуудлыг шийдэх нарийн төвөгтэй байдлаас гадна нэргүй схемд хэний дансыг хаах нь тодорхойгүй болно.

Энэ асуудлыг шийдэхийн тулд технологи нь орж ирж буй болон гарах гүйлгээг ялгадаг: зарцуулалт нь балансад шууд нөлөөлдөг бол орлого нь хожимдсон нөлөө үзүүлдэг. Үүнийг хийхийн тулд "эрин үе" гэсэн ойлголтыг нэвтрүүлсэн - тогтмол хэмжээтэй блокуудын бүлэг. Одоогийн "эрин үе" нь блокийн өндрийг бүлгийн хэмжээгээр хуваах замаар тодорхойлогддог. Гүйлгээг боловсруулахдаа сүлжээ нь илгээгчийн үлдэгдлийг нэн даруй шинэчилж, хүлээн авагчийн мөнгийг хадгалах саванд хадгалдаг. Хуримтлагдсан хөрөнгийг зөвхөн шинэ "эрин үе" эхлэхэд л төлбөр авагчид олгоно.

Үүний үр дүнд, хэрэглэгч мөнгө хүлээн авах давтамжаас үл хамааран гүйлгээг илгээх боломжтой (мэдээж түүний үлдэгдэл зөвшөөрөгдөх хэмжээгээр). Блокууд сүлжээгээр хэр хурдан тархаж, гүйлгээ нь блок руу хэр хурдан орж байгаа зэргээс шалтгаалан эриний хэмжээ тодорхойлогддог.

Энэхүү шийдэл нь нууц шилжүүлгийн хувьд сайн ажилладаг боловч нэргүй гүйлгээний хувьд бид дараа нь харах болно, энэ нь ноцтой асуудал үүсгэдэг.

Дахин тоглох халдлагаас хамгаалах

Дансанд суурилсан блокчэйн дээр гүйлгээ бүрд илгээгчийн хувийн түлхүүрээр гарын үсэг зурдаг бөгөөд энэ нь гүйлгээг өөрчлөөгүй бөгөөд энэ түлхүүрийн эзэмшигч үүсгэсэн гэдгийг баталгаажуулагчийг итгүүлдэг. Гэхдээ дамжуулах сувгийг сонсож байсан халдагч энэ мессежийг таслан зогсоож, яг адилхан хоёр дахь мессежийг илгээвэл яах вэ? Баталгаажуулагч нь гүйлгээний гарын үсгийг шалгаж, түүний зохиогч гэдэгт итгэлтэй байх бөгөөд сүлжээ нь илгээгчийн үлдэгдлээс ижил дүнг дахин хасна.

Энэ дайралтыг давтан довтолгоо гэж нэрлэдэг. UTXO загварт ийм халдлага нь хамааралгүй, учир нь халдагчид зарцуулсан гаралтыг ашиглахыг оролдох бөгөөд энэ нь өөрөө хүчин төгөлдөр бус бөгөөд сүлжээнээс татгалздаг.

Үүнээс урьдчилан сэргийлэхийн тулд санамсаргүй өгөгдөл бүхий талбарыг гүйлгээнд суулгасан бөгөөд үүнийг энгийн буюу энгийн "давс" гэж нэрлэдэг. Давстай гүйлгээг дахин илгээхдээ баталгаажуулагч нь nonce-г өмнө нь ашиглаж байсан эсэхийг шалгаж, хэрэв ашиглаагүй бол гүйлгээг хүчинтэй гэж үзнэ. Хэрэглэгчийн түүхийг бүхэлд нь блокчэйнд хадгалахгүйн тулд ихэвчлэн эхний гүйлгээнд үүнийг тэгтэй тэнцүүлж, дараа нь нэгээр нэмэгдүүлдэг. Сүлжээ нь зөвхөн шинэ гүйлгээний nonce нь өмнөхөөсөө ялгаатай эсэхийг шалгах боломжтой.

Нэргүй шилжүүлгийн схемд гүйлгээг баталгаажуулах асуудал гарч ирдэг. Бид илгээгчийн хаяг руу nonce-г шууд холбож чадахгүй, учир нь энэ нь шилжүүлгийг нэргүй болгох нь ойлгомжтой. Бусад шилжүүлэг хийж байгаатай зөрчилдөж болзошгүй тул бид бүх оролцогч дансны үлдэгдэл дээр нэгийг нэмэх боломжгүй.

Zether-ийн зохиогчид "эрин үе" -ээс хамааран криптографийн аргаар nonce үүсгэхийг санал болгож байна. Жишээлбэл:

Данс дээр суурилсан блокчэйн дэх нэрээ нууцлах тухай
энд x нь илгээгчийн нууц түлхүүр бөгөөд Гепоч — 'Zether +' хэлбэрийн мөрийг хэшлэх замаар олж авсан эрин үеийн нэмэлт генератор. Одоо асуудал шийдэгдсэн бололтой - бид илгээгчийн нууцыг илчлэхгүй бөгөөд оролцоогүй оролцогчдын ярианд саад болохгүй. Гэхдээ энэ арга нь ноцтой хязгаарлалт тавьдаг: нэг данс "эрин үе" бүрт нэгээс илүүгүй гүйлгээ илгээх боломжтой. Харамсалтай нь энэ асуудал шийдэгдээгүй байгаа бөгөөд одоогоор Zether-ийн нэргүй хувилбарыг ашиглахад бараг тохиромжгүй болгож байна.

Тэг мэдлэгийн нотолгооны нарийн төвөгтэй байдал

UTXO-д илгээгч нь сүлжээнд сөрөг дүн гаргаагүй гэдгээ нотлох ёстой, эс тэгвээс агаараас шинэ зоос үүсгэх боломжтой болно (яагаад энэ нь боломжтой вэ гэж бид өмнөх хувилбаруудын аль нэгэнд бичсэн. нийтлэл). Мөн холилдсон зоосуудын дунд түүнд хамаарах хөрөнгө байгааг нотлохын тулд "оролт" дээр гарын үсэг зурж баталгаажуулна.

Бүртгэлд суурилсан блокчэйний нэргүй хувилбарт нотлох илэрхийлэл нь илүү төвөгтэй байдаг. Илгээгч үүнийг нотолж байна:

  1. Илгээсэн дүн эерэг байна;
  2. Үлдэгдэл сөрөг биш хэвээр байна;
  3. Илгээгч шилжүүлгийн дүнг зөв шифрлэсэн (түүний дотор тэг);
  4. Үлдэгдэл дээрх үлдэгдэл зөвхөн илгээгч болон хүлээн авагчийн хувьд өөрчлөгддөг;
  5. Илгээгч нь өөрийн дансны хувийн түлхүүрийг эзэмшдэг бөгөөд тэр үнэндээ илгээгчдийн жагсаалтад байдаг (оролцсон хүмүүсийн дунд);
  6. Гүйлгээнд ашигласан Nonce зөв бичигдсэн байна.

Ийм нарийн төвөгтэй нотолгооны хувьд зохиогчид хольцыг ашигладаг Bulletproof (зохиогчдын нэг нь үүнийг бүтээхэд оролцсон) ба Сигма протокол, тэдгээрийг Sigma-bullets гэж нэрлэдэг. Ийм мэдэгдлийн албан ёсны нотолгоо нь нэлээд хэцүү ажил бөгөөд энэ нь технологийг хэрэгжүүлэх хүсэлтэй хүмүүсийн тоог ихээхэн хязгаарладаг.

Эцсийн эцэст юу вэ?

Бидний бодлоор Zether-ийн дансанд суурилсан блокчэйнд нууцлалыг авчирдаг хэсгийг яг одоо ашиглаж болно. Гэвч одоогийн байдлаар технологийн нэргүй хувилбар нь түүний хэрэглээнд ноцтой хязгаарлалт тавьж, хэрэгжүүлэхэд нарийн төвөгтэй байдлыг бий болгож байна. Гэсэн хэдий ч зохиогчид үүнийг хэдхэн сарын өмнө гаргасан бөгөөд магадгүй өөр хэн нэгэн өнөөдөр байгаа асуудлуудын шийдлийг олох болно гэдгийг үгүйсгэх аргагүй юм. Эцсийн эцэст шинжлэх ухааныг ингэж хийдэг.

Эх сурвалж: www.habr.com

сэтгэгдэл нэмэх