Монеро дахь нууц гүйлгээ, эсвэл үл мэдэгдэх зүйлийг үл мэдэгдэх газар руу хэрхэн шилжүүлэх

Бид Monero блокчэйний тухай цувралаа үргэлжлүүлж байгаа бөгөөд өнөөдрийн нийтлэл нь нууц гүйлгээ болон шинэ бөгж гарын үсгийг танилцуулдаг RingCT (Ring Confidential Transactions) протоколд анхаарлаа хандуулах болно. Харамсалтай нь интернетэд энэ нь хэрхэн ажилладаг талаар бага мэдээлэл байдаг тул бид энэ орон зайг нөхөхийг хичээсэн.

Монеро дахь нууц гүйлгээ, эсвэл үл мэдэгдэх зүйлийг үл мэдэгдэх газар руу хэрхэн шилжүүлэх

Энэ протоколыг ашиглан сүлжээ нь шилжүүлгийн дүнг хэрхэн нуудаг, яагаад сонгодог криптонотын бөгж гарын үсгийг орхисон, энэ технологи цаашид хэрхэн хөгжих талаар ярилцах болно.

Энэхүү протокол нь Монеро дахь хамгийн нарийн төвөгтэй технологиудын нэг тул уншигчдад блокчейн дизайны талаархи үндсэн мэдлэг, зууван муруй криптографийн талаар багагүй мэдлэг хэрэгтэй болно (энэ мэдлэгийг сайжруулахын тулд та манай нийтлэлийн эхний бүлгийг уншиж болно. тухай өмнөх нийтлэл олон гарын үсэг).

RingCT протокол

Криптонот валют руу довтолж болзошгүй халдлагын нэг бол илгээсэн гүйлгээний хэмжээ, цаг хугацааны талаарх мэдлэг дээр суурилсан блокчейн шинжилгээ юм. Энэ нь зөвшөөрдөг халдагчийн сонирхсон гарц хайх талбарыг мэдэгдэхүйц нарийсгах. Ийм шинжилгээнээс хамгаалахын тулд Monero сүлжээн дэх шилжүүлгийн хэмжээг бүрэн нуудаг нэргүй гүйлгээний протоколыг хэрэгжүүлсэн.

Хэмжээ нуух санаа нь шинэ зүйл биш гэдгийг тэмдэглэх нь зүйтэй. Bitcoin Core-ийн хөгжүүлэгч Грег Максвелл энэ тухай хамгийн түрүүнд тайлбарласан хүмүүсийн нэг юм нийтлэл Нууц гүйлгээ. RingCT-ийн одоогийн хэрэгжилт нь бөгжний гарын үсгийг (тэдгээргүй ч бай) ашиглах боломжтой өөрчилсөн бөгөөд ингээд л нэрээ авсан - Ring Confidential Transactions.

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

2017 оны 6-р сард Monero сүлжээний хатуу сэрээ гарч, нууц гүйлгээг нэмэлтээр ашиглах боломжтой болсон. Мөн тэр жилийн XNUMX-р сард хатуу сэрээ XNUMX-р хувилбараар ийм гүйлгээ нь сүлжээнд зөвшөөрөгдсөн цорын ганц зүйл болсон.

RingCT нь хэд хэдэн механизмыг нэгэн зэрэг ашигладаг: олон давхаргат холбогдсон аяндаа үл мэдэгдэх бүлгийн гарын үсэг (Олон давхаргат холбогдсон аяндаа үл мэдэгдэх бүлгийн гарын үсэг, цаашид MLSAG гэх), амлалтын схем (Педерсен амлалтууд) болон хүрээний нотлох баримтууд (энэ нэр томъёог орос хэл рүү орчуулаагүй). .

RingCT протокол нь энгийн ба бүрэн гэсэн хоёр төрлийн нэргүй гүйлгээг нэвтрүүлдэг. Түрийвч нь гүйлгээ нь нэгээс илүү оролтыг ашиглах үед эхнийх нь, хоёр дахь нь эсрэг нөхцөлд үүсдэг. Эдгээр нь гүйлгээний дүнг баталгаажуулах, MLSAG гарын үсэг бүхий өгөгдлөөр ялгаатай байдаг (бид энэ талаар доор дэлгэрэнгүй ярих болно). Түүнээс гадна бүрэн төрлийн гүйлгээг ямар ч тооны оролтоор үүсгэж болох бөгөөд үндсэн ялгаа байхгүй. Номонд "Тэгээс Монеро" Үүнтэй холбоотойгоор бүрэн гүйлгээг нэг оролтоор хязгаарлах шийдвэрийг яаравчлан гаргасан бөгөөд цаашид өөрчлөгдөж магадгүй гэж байна.

MLSAG гарын үсэг

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

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

Нууц гүйлгээнд сонгодог гүйлгээг ашиглахаа больсон криптонот бөгж гарын үсэг, тэдгээрийг MLSAG-ээр сольсон - ижил төстэй нэг давхаргат бөгж гарын үсгийн олон оролтод тохирсон хувилбар, LSAG.

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

2 бодит гаралтыг зарцуулж, холихдоо блокчейнээс m - 1 санамсаргүй гаралтыг ашигладаг гүйлгээний жишээн дээр бөгжний гарын үсэг хэрхэн үүсдэгийг харцгаая. Бидний зарцуулж буй үр дүнгийн нийтийн түлхүүрүүдийг тэмдэглэе
Монеро дахь нууц гүйлгээ, эсвэл үл мэдэгдэх зүйлийг үл мэдэгдэх газар руу хэрхэн шилжүүлэх, мөн тэдгээрийн үндсэн зургууд: Монеро дахь нууц гүйлгээ, эсвэл үл мэдэгдэх зүйлийг үл мэдэгдэх газар руу хэрхэн шилжүүлэх Тиймээс бид хэмжээтэй матрицыг олж авдаг 2 х м. Эхлээд бид хос гаралт бүрийн хувьд сорилт гэж нэрлэгддэг бэрхшээлийг тооцоолох хэрэгтэй.
Монеро дахь нууц гүйлгээ, эсвэл үл мэдэгдэх зүйлийг үл мэдэгдэх газар руу хэрхэн шилжүүлэх
Бид тооцооллыг гаралтын үр дүнгээс эхлүүлж, тэдгээрийн нийтийн түлхүүрийг ашиглан зарцуулдаг.Монеро дахь нууц гүйлгээ, эсвэл үл мэдэгдэх зүйлийг үл мэдэгдэх газар руу хэрхэн шилжүүлэхболон санамсаргүй тооМонеро дахь нууц гүйлгээ, эсвэл үл мэдэгдэх зүйлийг үл мэдэгдэх газар руу хэрхэн шилжүүлэхҮүний үр дүнд бид дараах утгыг авна.
Монеро дахь нууц гүйлгээ, эсвэл үл мэдэгдэх зүйлийг үл мэдэгдэх газар руу хэрхэн шилжүүлэх, бид сорилтыг тооцоолоход ашигладаг
Монеро дахь нууц гүйлгээ, эсвэл үл мэдэгдэх зүйлийг үл мэдэгдэх газар руу хэрхэн шилжүүлэхдараагийн хос гаралт (бид хаана юу орлуулж байгааг ойлгоход хялбар болгохын тулд бид эдгээр утгыг өөр өөр өнгөөр ​​тодруулсан). Дараах бүх утгыг эхний зурагт өгөгдсөн томъёог ашиглан тойрог хэлбэрээр тооцоолно. Тооцоолох хамгийн сүүлийн зүйл бол бодит үр дүнгийн хос сорилт юм.

Бидний харж байгаагаар бодит гаралт агуулсан баганаас бусад бүх баганууд санамсаргүй байдлаар үүсгэгдсэн тоонуудыг ашигладагМонеро дахь нууц гүйлгээ, эсвэл үл мэдэгдэх зүйлийг үл мэдэгдэх газар руу хэрхэн шилжүүлэх. нь π- багана бидэнд бас хэрэгтэй болно. ӨөрчильеМонеро дахь нууц гүйлгээ, эсвэл үл мэдэгдэх зүйлийг үл мэдэгдэх газар руу хэрхэн шилжүүлэхs-д:Монеро дахь нууц гүйлгээ, эсвэл үл мэдэгдэх зүйлийг үл мэдэгдэх газар руу хэрхэн шилжүүлэх
Гарын үсэг нь өөрөө эдгээр бүх утгуудын багц юм:

Монеро дахь нууц гүйлгээ, эсвэл үл мэдэгдэх зүйлийг үл мэдэгдэх газар руу хэрхэн шилжүүлэх

Энэ өгөгдлийг дараа нь гүйлгээнд бичнэ.

Бидний харж байгаагаар MLSAG нь зөвхөн нэг сорилтыг агуулдаг c0, энэ нь гарын үсгийн хэмжээг хэмнэх боломжийг олгодог (энэ нь аль хэдийн маш их зай шаарддаг). Дараа нь өгөгдлийг ашиглан ямар ч байцаагчМонеро дахь нууц гүйлгээ, эсвэл үл мэдэгдэх зүйлийг үл мэдэгдэх газар руу хэрхэн шилжүүлэх, c1,..., cm утгуудыг сэргээж, шалганаМонеро дахь нууц гүйлгээ, эсвэл үл мэдэгдэх зүйлийг үл мэдэгдэх газар руу хэрхэн шилжүүлэх. Ингээд манай бөгж хаагдаж, гарын үсгийг баталгаажууллаа.

Бүрэн төрлийн RingCT гүйлгээний хувьд холимог гаралт бүхий матрицад нэг мөр нэмж байгаа боловч бид энэ талаар доор ярих болно.

Педерсений амлалт

Үүргийн схемүүд (commitments гэсэн англи хэллэгийг илүү их ашигладаг) нэг тал нь тодорхой нууцыг (тоо) мэддэг гэдгээ нотлохын тулд ашигладаг. Жишээлбэл, та шоо дээр тодорхой тооны эргэлдэж, амлалтаа бодож, баталгаажуулах талдаа дамжуулна. Тиймээс, нууц дугаарыг задруулах мөчид шалгагч нь амлалтаа бие даан тооцоолж, ингэснээр та түүнийг хуураагүй гэдэгт итгэлтэй байна.

Монерогийн амлалтууд нь шилжүүлгийн хэмжээг нуух, хамгийн түгээмэл сонголт болох Педерсен амлалтуудыг ашиглахад ашиглагддаг. Дашрамд хэлэхэд, сонирхолтой баримт бол эхлээд хөгжүүлэгчид тодорхой бус байдлыг бий болгохын тулд ердийн холих замаар дүнг нуух, өөрөөр хэлбэл дур зоргоороо үр дүнг нэмэхийг санал болгосон боловч дараа нь тэд амлалт руу шилжсэн (энэ нь тэд хэмнэсэн баримт биш юм. гүйлгээний хэмжээ, бид доор харах болно).
Ерөнхийдөө амлалт дараах байдалтай байна.
Монеро дахь нууц гүйлгээ, эсвэл үл мэдэгдэх зүйлийг үл мэдэгдэх газар руу хэрхэн шилжүүлэхХаана C - амлалт гэдэг өөрөө утга учир, a - далд дүн, H нь зууван муруй дээрх тогтмол цэг (нэмэлт генератор), ба x - ямар нэгэн дурын маск, санамсаргүй байдлаар үүссэн нуугдах хүчин зүйл. Гуравдагч этгээд амлалтын үнэ цэнийг зүгээр л тааж чадахгүй байхын тулд маск энд хэрэгтэй.

Шинэ гаралт үүсэх үед түрийвч нь түүний амлалтыг тооцдог бөгөөд зарцуулсан тохиолдолд гүйлгээний төрлөөс хамааран үүсгэх явцад тооцсон утгыг авах эсвэл дахин тооцоолно.

RingCT энгийн

Энгийн RingCT гүйлгээний хувьд гүйлгээ нь орцын хэмжээтэй тэнцэх хэмжээний гарцыг бий болгохын тулд (агаараас мөнгө гаргаж аваагүй) эхний болон хоёр дахь амлалтын нийлбэр байх шаардлагатай. ижил байх, өөрөөр хэлбэл:
Монеро дахь нууц гүйлгээ, эсвэл үл мэдэгдэх зүйлийг үл мэдэгдэх газар руу хэрхэн шилжүүлэх
Амлалт өгөх комиссууд үүнийг арай өөрөөр авч үздэг - маскгүйгээр:
Монеро дахь нууц гүйлгээ, эсвэл үл мэдэгдэх зүйлийг үл мэдэгдэх газар руу хэрхэн шилжүүлэххаана a - комиссын хэмжээ, энэ нь олон нийтэд нээлттэй байна.

Энэ арга нь бид ижил хэмжээний мөнгө хэрэглэж байгаа гэдгээ нотлох боломжийг бидэнд ил болгохгүйгээр итгэмжлэгч талдаа олгодог.

Илүү ойлгомжтой болгохын тулд жишээг авч үзье. Гүйлгээ нь 10 ба 5 XMR гэсэн хоёр гаралтыг (оролт болно гэсэн үг) зарцуулж, 12 XMR: 3, 4, 5 XMR гэсэн гурван гаралтыг үүсгэдэг гэж үзье. Үүний зэрэгцээ тэрээр 3 XMR-ийн комисс төлдөг. Тиймээс зарцуулсан мөнгөний хэмжээг нэмээд бий болгосон хэмжээ, комисс нь 15 XMR-тэй тэнцүү байна. Амлалтуудыг тооцоолж, тэдгээрийн дүнгийн зөрүүг харцгаая (математикийг санаарай):

Монеро дахь нууц гүйлгээ, эсвэл үл мэдэгдэх зүйлийг үл мэдэгдэх газар руу хэрхэн шилжүүлэх
Эндээс бид тэгшитгэлийг нэгтгэхийн тулд оролт ба гаралтын маскуудын нийлбэр ижил байх шаардлагатайг харж байна. Үүнийг хийхийн тулд түрийвч санамсаргүй байдлаар үүсгэдэг x1, y1, y2 болон y3, болон үлдсэн x2 дараах байдлаар тооцоолно.
Монеро дахь нууц гүйлгээ, эсвэл үл мэдэгдэх зүйлийг үл мэдэгдэх газар руу хэрхэн шилжүүлэх
Эдгээр маскуудыг ашигласнаар бид зарцуулснаасаа илүү мөнгө үүсгэдэггүй гэдгээ ямар ч баталгаажуулагчдад нотолж, дүнгээ зарлахгүйгээр баталж чадна. Жинхэнэ, тийм үү?

RingCT дүүрсэн

Бүрэн RingCT гүйлгээнд шилжүүлгийн дүнг шалгах нь арай илүү төвөгтэй байдаг. Эдгээр гүйлгээнд түрийвч нь оролтын амлалтыг дахин тооцоолохгүй, харин тэдгээрийг үүсгэсэн үед тооцсоныг ашигладаг. Энэ тохиолдолд бид тэгтэй тэнцэх нийлбэрийн зөрүүг авахгүй, харин оронд нь:
Монеро дахь нууц гүйлгээ, эсвэл үл мэдэгдэх зүйлийг үл мэдэгдэх газар руу хэрхэн шилжүүлэх
энд z - оролт ба гаралтын маскуудын ялгаа. Хэрэв бид авч үзвэл zG нийтийн түлхүүр болгон (энэ нь бодит байдал дээр), дараа нь z хувийн түлхүүр юм. Тиймээс бид нийтийн болон холбогдох хувийн түлхүүрүүдийг мэддэг. Энэхүү өгөгдлийн дагуу бид үүнийг MLSAG-ийн бөгж гарын үсэгт хольж буй гаралтын нийтийн түлхүүрүүдийн хамт ашиглаж болно.
Монеро дахь нууц гүйлгээ, эсвэл үл мэдэгдэх зүйлийг үл мэдэгдэх газар руу хэрхэн шилжүүлэх
Тиймээс, хүчинтэй бөгж гарын үсэг нь бид аль нэг баганын бүх хувийн түлхүүрийг мэдэж байгаа эсэхийг баталгаажуулах бөгөөд гүйлгээ нь зарцуулснаасаа илүү мөнгө үүсгэхгүй тохиолдолд л сүүлийн эгнээнд байгаа хувийн түлхүүрийг мэдэж болно. Дашрамд хэлэхэд, "амлалтын дүнгийн зөрүү яагаад тэг болж чадахгүй байна вэ" гэсэн асуултын хариулт энд байна. zG = 0, дараа нь бид баганыг бодит гаралтаар өргөжүүлэх болно.

Санхүүгийн хүлээн авагч түүнд хэдэн төгрөг илгээснийг яаж мэдэх вэ? Энд бүх зүйл энгийн байдаг - гүйлгээг илгээгч болон хүлээн авагч нь Diffie-Hellman протоколыг ашиглан гүйлгээний түлхүүр болон хүлээн авагчийн харах түлхүүрийг ашиглан солилцох түлхүүрийг хуваалцаж, хуваалцсан нууцыг тооцоолно. Илгээгч нь гүйлгээний тусгай талбарт энэ хуваалцсан түлхүүрээр шифрлэгдсэн гаралтын дүнгийн талаархи мэдээллийг бичдэг.

Хүрээний баталгаа

Хэрэв та амлалтад сөрөг тоог ашиглавал юу болох вэ? Энэ нь нэмэлт зоос үүсгэхэд хүргэж болзошгүй юм! Энэ үр дүн нь хүлээн зөвшөөрөгдөхгүй тул бидний хэрэглэж буй хэмжээ нь сөрөг биш гэдгийг баталгаажуулах хэрэгтэй (мэдээж эдгээр дүнг задруулахгүйгээр, тэгэхгүй бол маш их ажил хийж, дэмий хоосон болно). Өөрөөр хэлбэл, нийлбэр нь интервалд байгааг нотлох ёстой [0, 2н - 1].

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

Бидний хэмжээ бага, 4 бит (практикт энэ нь 64 бит) багтсан гэж бодъё, бид 5 XMR-тэй тэнцэх гаралтыг бий болгодог. Бид ангилал тус бүрийн амлалт, нийт дүнгийн нийт амлалтыг тооцдог.Монеро дахь нууц гүйлгээ, эсвэл үл мэдэгдэх зүйлийг үл мэдэгдэх газар руу хэрхэн шилжүүлэх
Дараа нь амлалт бүрийг орлуулагчтай хольсон (Ci-2iH) 2015 онд Грег Максвеллийн санал болгосон Борромео бөгжний гарын үсэгтэй (өөр бөгжний гарын үсэг) хосоороо гарын үсэг зурсан (та энэ талаар дэлгэрэнгүй унших боломжтой) энд):
Монеро дахь нууц гүйлгээ, эсвэл үл мэдэгдэх зүйлийг үл мэдэгдэх газар руу хэрхэн шилжүүлэхХамтдаа үүнийг хүрээний баталгаа гэж нэрлэдэг бөгөөд амлалтууд нь тухайн муж дахь дүнг ашиглах боломжийг танд олгоно [0, 2н - 1].

Дараа нь юу юм бэ?

Одоогийн хэрэгжилтэд хүрээний баталгаа нь маш их зай эзэлдэг - гаралт тутамд 6176 байт. Энэ нь илүү том гүйлгээнд хүргэдэг бөгөөд ингэснээр илүү өндөр хураамж болдог. Монерогийн гүйлгээний хэмжээг багасгахын тулд хөгжүүлэгчид Borromeo гарын үсгийн оронд сум нэвтэрдэггүй төхөөрөмжийг нэвтрүүлж байна - энэ нь битийн үүрэг хариуцлагагүй хүрээг баталгаажуулах механизм юм. Зарим тооцоогоор, тэд хүрээний баталгааны хэмжээг 94% хүртэл бууруулах боломжтой. Дашрамд хэлэхэд, XNUMX-р сарын дундуур технологи нь өнгөрчээ аудит Kudelski Security-ээс авсан бөгөөд энэ нь технологид болон түүний хэрэгжилтэд ямар ч мэдэгдэхүйц дутагдал илрээгүй. Технологи нь туршилтын сүлжээнд аль хэдийн ашиглагдаж байгаа бөгөөд шинэ хатуу сэрээтэй бол үндсэн сүлжээнд шилжих боломжтой.

Асуулт асууж, криптовалют дахь технологийн тухай шинэ нийтлэлүүдийн сэдвийг санал болгож, мөн манай бүлэгт бүртгүүлээрэй Facebook-ийнманай үйл явдал, нийтлэлүүдтэй байнга холбоотой байх.

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

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