อธิบายธุรกรรม Mimblewimble
- ภาพรวมระดับสูง
- อธิบายธุรกรรมแล้ว
- การตรวจสอบธุรกรรมและการเผยแพร่
- หยุดการฉ้อโกง
- สรุปธุรกรรม
- อ้างอิง
- ร่วมให้ข้อมูล
ภาพรวมระดับสูง
Mimblewimble เป็นเทคโนโลยีสกุลเงินดิจิทัลที่มุ่งเน้นความเป็นส่วนตัว มันแตกต่างจาก Bitcoin ในบางประเด็นสำคัญ:
- ไม่มีที่อยู่ ไม่มีแนวคิดของที่อยู่ Mimblewimble
- เป็นส่วนตัวโดยสมบูรณ์ ทุกธุรกรรมเป็นความลับ
- บล็อกเชนขนาดกะทัดรัด Mimblewimble ใช้ชุดการรับประกันความปลอดภัยที่แตกต่างกันกับ Bitcoin ซึ่งนำไปสู่บล็อกเชนที่มีขนาดกะทัดรัดมากขึ้น
อธิบายธุรกรรมแล้ว
ธุรกรรมที่เป็นความลับ [1] ถูกคิดค้นโดย Dr. Adam Back และใช้งานในโครงการสกุลเงินดิจิทัลหลายโครงการ รวมถึง Monero และ Tari - โดย Mimblewimble
ผู้รับ Tari สร้างคีย์ส่วนตัวเพื่อรับเหรียญได้ทันที ดังนั้นพวกเขาจึงต้องมีส่วนร่วมในการก่อสร้างธุรกรรมทาริ
ไม่ได้หมายความว่าผู้รับจะต้องออนไลน์เสมอไป อย่างไรก็ตาม พวกเขาจำเป็นต้องสามารถสื่อสารได้ ไม่ว่าจะเป็นทางอีเมล การส่งข้อความโต้ตอบแบบทันที (IM) หรือนกพิราบของผู้ให้บริการ
ธุรกรรมพื้นฐาน
เราจะอธิบายว่า Alice สามารถส่ง Tari ไปหา Bob โดยใช้โปรโตคอลแบบสองฝ่ายสำหรับ Mimblewimble ได้อย่างไร ธุรกรรมหลายฝ่ายมีความคล้ายคลึงกัน แต่การไหลของข้อมูลจะแตกต่างกันเล็กน้อยและเกิดขึ้นผ่านรอบการสื่อสารเพิ่มเติม
สมมติว่าอลิซมี 300 µT และเธอต้องการส่ง 200 µT ไปให้ Bob
นี่คือธุรกรรมพื้นฐาน:
ปัจจัยการผลิต | Outputs | ||
---|---|---|---|
300 | 200 | 90 | 10 |
UTXO ของอลิซ | ถึงบ๊อบ | เปลี่ยนแปลง | ค่าธรรมเนียม |
หากเราเขียนสิ่งนี้เป็นสมการทางคณิตศาสตร์ โดยที่เอาต์พุตเป็นบวกและอินพุตเป็นลบ เราควรจะสร้างสมดุลให้สิ่งต่าง ๆ เพื่อไม่ให้มีการสร้างเหรียญขึ้นมาจากอากาศ:
$$ -300 + 200 + 90 + 10 = 0 $$
นี่เป็นข้อมูลพื้นฐานที่อยู่ในบล็อกเชน Bitcoin ใครๆ ก็สามารถตรวจสอบธุรกรรมของผู้อื่นได้ง่ายๆ โดยการตรวจสอบประวัติการทำธุรกรรมของบัญชีแยกประเภททั่วโลก นี่ไม่ดีสำหรับความเป็นส่วนตัว
นี่คือที่มาของการทำธุรกรรมที่เป็นความลับ เราสามารถเริ่มต้นด้วยการคูณทั้งสองข้างของสมการก่อนหน้าด้วยจุดกำเนิดบางจุด H บนเส้นโค้งวงรี (สำหรับข้อมูลเบื้องต้นเกี่ยวกับคณิตศาสตร์วงรี ให้ดูที่ งานนำเสนอนี้):
$$ 300.H = 200.H + 90.H + 10.H $$
ตั้งแต่ H เป็นค่าคงที่ คณิตศาสตร์ด้านบนยังคงอยู่ ดังนั้นเราจึงสามารถตรวจสอบได้ว่าอลิซไม่ได้ขโมยโดยการตรวจสอบสิ่งนั้น
$$(3.H) - (2.H) - (1.H) - (fH) \equiv 0.H = 0 $$
สังเกตว่าเรา ดูเฉพาะกุญแจสาธารณะเท่านั้น และด้วยเหตุนี้คุณค่าจึงถูกซ่อนไว้ เย็น!
ในระยะสั้น ใช่. ดังนั้นเราจึงยังไม่เสร็จ
“นี่เรียกว่าการโจมตีก่อนภาพ”
ปัจจัยที่ทำให้ไม่เห็น
เพื่อป้องกันไม่ให้การโจมตีก่อนอิมเมจไม่เปิดเผยค่าทั้งหมดในธุรกรรม Tari เราจำเป็นต้องเพิ่มการสุ่มให้กับแต่ละอินพุตและเอาท์พุต แนวคิดพื้นฐานคือการทำเช่นนี้โดยการเพิ่มคีย์สาธารณะตัวที่สองลงในแต่ละธุรกรรม
ดังนั้นหากเราเขียนอินพุตและเอาต์พุตใหม่ดังนี้:
$$ C_i = n_i.H + k_i.G $$
ที่ไหน G เป็นอีกหนึ่งเครื่องกำเนิดบนเส้นโค้งเดียวกันนี้โดยสมบูรณ์ ผ้าม่าน อินพุตและเอาต์พุตเพื่อไม่ให้มีการโจมตีก่อนอิมเมจ สูตรนี้เรียกว่าก ความมุ่งมั่นของเพเดอร์เซ่น [3].
หากใครสามารถเข้าใจสิ่งนี้ได้ kความปลอดภัยของธุรกรรมที่เป็นความลับทั้งหมดจะพังทลายลง เหลือไว้เป็นแบบฝึกหัดให้ผู้อ่านทราบว่าเหตุใด
สำหรับการแนะนำแนวคิดเหล่านี้แบบกึ่งสุภาพ บทความของ Adam Gibson เกี่ยวกับเรื่องนี้นั้นยอดเยี่ยมมาก [5].
อลิซเตรียมการทำธุรกรรม
ตอนนี้อลิซสามารถเริ่มสร้างธุรกรรมได้แล้ว
ชนิดภาพเขียน | สูตร | Name |
---|---|---|
อินพุต | $$ -300.H - k_1.G $$ | C1 |
เปลี่ยนเอาท์พุท | $$ 90.H + k_2.G $$ | C2 |
ค่าธรรมเนียม | $$ 10.H + 0.G $$ | f |
ยอดใช้จ่ายทั้งหมด | $$ 200.H + 0.G $$ | C* |
รวม | $$ 0.H + (k_2-k_1).G $$ | X |
\( k_i \)-values, \(k_1, k_2\) เป็นคีย์การใช้จ่ายสำหรับเอาต์พุตเหล่านั้น
ดังนั้นสำหรับธุรกรรมนี้ กระเป๋าเงินของ Alice ซึ่งติดตามผลลัพธ์ที่ยังไม่ได้ใช้ของ Tari ทั้งหมดของเธอ จะต้องให้ปัจจัยที่มองไม่เห็นและมูลค่า "300" เพื่อดำเนินการตามข้อผูกพันให้เสร็จสมบูรณ์ C1.
โปรดสังเกตว่าเมื่ออินพุตและเอาต์พุตทั้งหมดถูกรวมเข้าด้วยกัน (รวมถึงค่าธรรมเนียม) ค่าทั้งหมดจะถูกยกเลิกเป็นศูนย์ตามที่ควรจะเป็น โปรดสังเกตด้วยว่าเทอมเดียวที่เหลืออยู่จะคูณด้วยจุด G. ทั้งหมด H เงื่อนไขหายไป เราเรียกผลรวมนี้ว่า ส่วนเกินสาธารณะ สำหรับการทำธุรกรรมส่วนหนึ่งของอลิซ
เรากำหนด ส่วนเกิน ของธุรกรรมที่จะเป็น
$$ x_s = k_2 - k_1 $$
วิธีง่ายๆ สำหรับอลิซในการคำนวณส่วนที่เกินของเธอ (และวิธีที่ซอฟต์แวร์กระเป๋าเงิน Tari ทำ) คือการบวกปัจจัยที่ทำให้มองไม่เห็นเอาท์พุตของเธอ และลบด้วยผลรวมของปัจจัยที่มองไม่เห็นอินพุตของเธอ
สมมติว่า Alice พยายามสร้างรายได้ให้กับตัวเองและทำการเปลี่ยนแปลง 100 µT แทนที่จะเป็น 90 ในกรณีนี้ ผลรวมของเอาต์พุตและอินพุตจะไม่ถูกยกเลิก H และเราจะมี
$$X^* = 10.H + x_s.G$$
เรามาดูกันว่าโปรโตคอล Mimblewimble จะจับอลิซได้อย่างไรหากเธอพยายามดึงคนเล่นตลกแบบนี้
อลิซยังสุ่มเลือกอีกด้วย เอกอัครสมณทูต,
$$ r_a $$
และคำนวณ nonce สาธารณะที่สอดคล้องกัน
$$ R_a = r_a.G $$
อลิซจึงส่งข้อมูลต่อไปนี้ให้ Bob:
สนาม | ความคุ้มค่า |
---|---|
ปัจจัยการผลิต | C1 |
Outputs | C2 |
ค่าธรรมเนียม | 10 |
จำนวนเงินที่จ่ายให้กับบ๊อบ | 200 |
โน๊ตสาธารณะ | $$ R_a $$ |
ส่วนเกินสาธารณะ | X |
เมตาดาต้า | m |
ข้อมูลเมตาของข้อความคือข้อมูลพิเศษบางส่วนที่เกี่ยวข้องกับธุรกรรม (เช่น เมื่อสามารถใช้เอาต์พุตได้)
Bob เตรียมคำตอบของเขา
Bob ได้รับข้อมูลนี้แล้วจึงเริ่มดำเนินการในส่วนของเขาในการทำธุรกรรมให้เสร็จสิ้น
ขั้นแรก เขาสามารถตรวจสอบได้ว่าอลิซได้ส่งข้อมูลที่ถูกต้องโดยการตรวจสอบว่ามีส่วนเกินสาธารณะ Xถูกต้องโดยทำตามขั้นตอนเดียวกับที่อลิซใช้ในการคำนวณข้างต้น ขั้นตอนนี้ไม่จำเป็นอย่างเคร่งครัด เนื่องจากในตอนนี้เขาไม่มีข้อมูลเพียงพอที่จะตรวจจับการฉ้อโกงได้
จากนั้นเขาก็สร้างความมุ่งมั่นจาก amount
ฟิลด์ที่อลิซส่งให้เขา:
$$ C_b = 200.H + k_b.G $$
โดยที่ \(k_b\) คือคีย์การใช้จ่ายส่วนตัวของ Bob เขาคำนวณ
$$P_b = k_b.G$$
และสร้างข้อพิสูจน์ช่วงสำหรับความมุ่งมั่น
บ๊อบต้องลงนามว่าเขามีความสุขที่ทุกอย่างเสร็จสมบูรณ์ตามความพึงพอใจของเขา พระองค์ทรงสร้างบางส่วน ชนอร์ ซิกเนเจอร์ กับความท้าทาย
$$ e = H(R_a + R_b \Vert X + P_b \Vert f \Vert m) $$
และลงนามโดย
$$ s_b = r_b + ek_b $$
บ๊อบส่งกลับ.
สนาม | ความคุ้มค่า |
---|---|
เอาท์พุต (การพิสูจน์ความมุ่งมั่นและช่วง) | $$C_b$$ |
โน๊ตสาธารณะ | $$R_b$$ |
ลายเซ็น | $$s_b$$ |
กุญแจสาธารณะ | $$P_b$$ |
อลิซทำธุรกรรมให้เสร็จสิ้นและออกอากาศ
หลังจากได้รับการตอบกลับจากบ็อบ อลิซก็สามารถสรุปเรื่องต่างๆ ได้
ขั้นแรก ตอนนี้เธอสามารถใช้ nonce สาธารณะและคีย์สาธารณะของ Bob เพื่อคำนวณความท้าทายแบบเดียวกับที่ Bob ลงนามได้อย่างอิสระ:
$$ e = H(R_a + R_b \Vert X + P_b \Vert f \Vert m) $$
จากนั้นอลิซจึงสร้างลายเซ็นบางส่วนของเธอเอง
$$ s_a = r_a + e.x_s $$
และลายเซ็นรวมที่รวมกัน $$ s = s_a + s_b, R = R_a + R_b $$
ขณะนี้อลิซสามารถถ่ายทอดธุรกรรมนี้ไปยังเครือข่ายได้แล้ว ธุรกรรมสุดท้ายมีลักษณะดังนี้:
เคอร์เนลธุรกรรม | |
---|---|
ส่วนเกินสาธารณะ | $$ X + P_b $$ |
ลายเซ็น | $$ (s, R) $$ |
ค่าธรรมเนียม | 10 |
ข้อมูลเมตาของธุรกรรม | m |
เนื้อหาของธุรกรรม | |
---|---|
อินพุตที่มีการพิสูจน์ช่วง | $$[C_1]$$ |
เอาต์พุตพร้อมการพิสูจน์ช่วง | $$[C_2, C_B]$$ |
การตรวจสอบธุรกรรมและการเผยแพร่
เมื่อโหนดเต็มได้รับธุรกรรมของ Alice จะต้องตรวจสอบว่าโหนดนั้นอยู่ในระดับก่อนที่จะส่งไปให้เพื่อน โหนดต้องการตรวจสอบสิ่งต่อไปนี้:
-
อินพุตทั้งหมดมาจากชุด UTXO ปัจจุบัน
โหนดแบบเต็มทั้งหมดจะติดตามชุดของเอาต์พุตที่ยังไม่ได้ใช้ ดังนั้นโหนดจะตรวจสอบสิ่งนั้น C1 อยู่ในรายการนั้น
-
เอาต์พุตทั้งหมดมีการพิสูจน์ช่วงที่ถูกต้อง
การพิสูจน์ช่วงได้รับการตรวจสอบตามข้อผูกพันที่ตรงกัน
-
คุณค่าที่สมดุล
ในการตรวจสอบนี้ โหนดต้องการตรวจสอบให้แน่ใจว่าไม่มีการสร้างหรือทำลายเหรียญในธุรกรรม แต่จะทำเช่นนี้ได้อย่างไรหากค่าต่างๆ มองไม่เห็น?
โปรดจำไว้ว่าในการทำธุรกรรมที่ซื่อสัตย์ มูลค่าทั้งหมด (ซึ่งจะถูกคูณด้วย H) ยกเลิก และคุณจะเหลือผลรวมของคีย์สาธารณะของเอาต์พุต ลบด้วยคีย์สาธารณะของอินพุต สิ่งนี้ไม่ใช่เรื่องบังเอิญเกิดขึ้นเป็นค่าเดียวกับที่จัดเก็บไว้ในเคอร์เนลเป็นค่าส่วนเกินสาธารณะ
nonces สาธารณะสรุป R จะถูกเก็บไว้ในเคอร์เนลด้วยดังนั้นจึงช่วยให้โหนดสามารถตรวจสอบลายเซ็นโดยการตรวจสอบสิ่งต่อไปนี้ซึ่งความท้าทาย e คำนวณเช่นเดิม:
$$ sG \stackrel{?}{=} R + e(X + P_b) $$
-
ลายเซ็นในเคอร์เนลนั้นถูกต้อง
ดังนั้นโดยการตรวจสอบความถูกต้องของลายเซ็นเคอร์เนล เรายังพิสูจน์ตัวเองด้วยว่าการบัญชีธุรกรรมนั้นถูกต้อง
-
การตรวจสอบฉันทามติอื่น ๆ อีกมากมาย
เช่นค่าธรรมเนียมจะมากกว่าขั้นต่ำหรือไม่
หากการตรวจสอบทั้งหมดนี้ผ่าน โหนดจะส่งต่อธุรกรรมไปยังเพียร์ของตน และในที่สุดมันจะถูกขุดและเพิ่มลงในบล็อคเชน
หยุดการฉ้อโกง
ตอนนี้ สมมติว่าอลิซพยายามทำตัวลับๆล่อๆ และใช้ \( X^* \) เป็นส่วนที่เกินของเธอ อันที่เธอให้ตัวเองเปลี่ยน 100 µT แทนที่จะเป็น 90 µT ตอนนี้ค่าจะไม่สมดุล ผลรวมของเอาต์พุต อินพุต และค่าธรรมเนียมจะมีลักษณะดังนี้:
$$ 10.H + (x_s + k_b).G $$
ดังนั้นเมื่อโหนดเต็มตรวจสอบลายเซ็น:
$$ \begin{align} R + e(X^* + P_b) &\stackrel{?}{=} sG \\ R + e(10.H + x_s.G + P_b) &\stackrel{?}{ =} (r_a + r_b + e(x_s + k_b)).G \\ R + e(10.H + X + P_b) &\stackrel{?}{=} (r_a + r_b).G + e(x_s + k_b).G \\ \mathbf{10e.H} + R + e(X + P_b) &\stackrel{?}{=} R + e(X + P_b) \\ \end{align} $$
ลายเซ็นไม่ยืนยัน! โหนดไม่สามารถบอกได้อย่างชัดเจนว่ามีอะไรผิดปกติกับธุรกรรม แต่รู้ว่ามีบางอย่างเกิดขึ้น ดังนั้นโหนดจะยกเลิกธุรกรรมอย่างเงียบ ๆ และดำเนินชีวิตต่อไป
สรุปธุรกรรม
โดยสรุป: ธุรกรรม Tari/MimbleWimble มีดังต่อไปนี้:
- จาก Alice ชุดของอินพุตที่อ้างอิงและใช้ชุดของเอาต์พุตก่อนหน้า
- จากอลิซและบ็อบ ชุดผลงานใหม่ ได้แก่:
- ค่าและปัจจัยที่ทำให้ไม่เห็น (ซึ่งเป็นเพียงคีย์ส่วนตัวใหม่)
- การพิสูจน์ช่วงที่แสดงว่าค่าไม่เป็นลบ
- ค่าธรรมเนียมการทำธุรกรรมในรูปแบบข้อความที่ชัดเจน
- ส่วนเกินสาธารณะ ซึ่งเป็นผลรวมของปัจจัยที่มองไม่เห็นทั้งหมดที่ใช้ในธุรกรรม
- ข้อมูลเมตาของธุรกรรม
- ค่าปกปิดส่วนเกินที่ใช้เป็นคีย์ส่วนตัวเพื่อลงนามข้อความที่ยืนยันถึงข้อมูลเมตาของธุรกรรม และค่าส่วนเกินสาธารณะ
อ้างอิง
[1] "ธุรกรรมที่เป็นความลับของ Bitcoin คืออะไร" [ออนไลน์] มีจำหน่าย: https://www.mycryptopedia.com/what-are-confidential-transactions/ วันที่เข้าถึง: 2019-04-09
[2] "Nothing-Up-My_Sleeve Number" [ออนไลน์]
ที่มีอยู่:
https://en.wikipedia.org/w/index.php?title=Nothing-up-my-sleeve_number&oldid=889582749. วันที่เข้าถึง: 2019-04-09
[3] Wikipedia: "โครงการความมุ่งมั่น" [ออนไลน์] มีอยู่: https://en.wikipedia.org/wiki/Commitment_scheme. วันที่เข้าถึง: 2019-04-09
[4] "เคอร์เนลออฟเซ็ต ในบทนำสู่ MimbleWimble และ Grin" [ออนไลน์] มีอยู่: https://github.com/mimblewimble/grin/blob/master/doc/intro.md#kernel-offsets. วันที่เข้าถึง: 2019-04-09
[5] A. Gibson, "จากศูนย์ (ความรู้) สู่ BulletProofs" [ออนไลน์] มีอยู่: https://joinmarket.me/static/FromZK2BPs_v1.pdf. วันที่เข้าถึง: 2019-04-10