อธิบายธุรกรรม 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
3002009010
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 $$

สังเกตว่าเรา ดูเฉพาะกุญแจสาธารณะเท่านั้น และด้วยเหตุนี้คุณค่าจึงถูกซ่อนไว้ เย็น!

ในทางเทคนิค เฉพาะค่าจำนวนเต็มสเกลาร์เท่านั้นที่ใช้ได้สำหรับการคูณเส้นโค้งวงรี นี่คือสาเหตุที่เราใช้ µT ในธุรกรรมเพื่อให้จำนวนเงินเป็นจำนวนเต็มเสมอ
มีการจับแม้ว่า หาก _H_ เป็นค่าคงที่และทราบอยู่แล้ว (เป็น) จะไม่สามารถมีใครคำนวณ $nH​$ ล่วงหน้าสำหรับค่าที่เหมาะสมทั้งหมดของ _n_ และสแกน blockchain เพื่อหากุญแจสาธารณะเหล่านั้นได้หรือไม่[^ก]

ในระยะสั้น ใช่. ดังนั้นเราจึงยังไม่เสร็จ

1

“นี่เรียกว่าการโจมตีก่อนภาพ”

ปัจจัยที่ทำให้ไม่เห็น

เพื่อป้องกันไม่ให้การโจมตีก่อนอิมเมจไม่เปิดเผยค่าทั้งหมดในธุรกรรม Tari เราจำเป็นต้องเพิ่มการสุ่มให้กับแต่ละอินพุตและเอาท์พุต แนวคิดพื้นฐานคือการทำเช่นนี้โดยการเพิ่มคีย์สาธารณะตัวที่สองลงในแต่ละธุรกรรม

ดังนั้นหากเราเขียนอินพุตและเอาต์พุตใหม่ดังนี้:

$$ C_i = n_i.H + k_i.G $$

ที่ไหน G เป็นอีกหนึ่งเครื่องกำเนิดบนเส้นโค้งเดียวกันนี้โดยสมบูรณ์ ผ้าม่าน อินพุตและเอาต์พุตเพื่อไม่ให้มีการโจมตีก่อนอิมเมจ สูตรนี้เรียกว่าก ความมุ่งมั่นของเพเดอร์เซ่น [3].

ต้องเลือกตัวสร้างสองตัว _H_ และ _G_ ในลักษณะที่ไม่สามารถแปลงค่าจากตัวสร้างหนึ่งไปยังอีกตัวหนึ่ง [[2]] โดยเฉพาะอย่างยิ่ง ถ้า _G_ เป็นตัวสร้างฐาน ก็จะมี _k_ อยู่บ้าง โดยที่ $$ H = kG $$

หากใครสามารถเข้าใจสิ่งนี้ได้ 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\) เป็นคีย์การใช้จ่ายสำหรับเอาต์พุตเหล่านั้น

_ข้อมูลเพียงชิ้นเดียวที่คุณต้องใช้จ่ายในผลลัพธ์ของ Tari_ คือคีย์การใช้จ่าย (เรียกอีกอย่างว่าปัจจัยที่มองไม่เห็น) และมูลค่าที่เกี่ยวข้อง

ดังนั้นสำหรับธุรกรรมนี้ กระเป๋าเงินของ 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 จะจับอลิซได้อย่างไรหากเธอพยายามดึงคนเล่นตลกแบบนี้

จริงๆ แล้ว อลิซยังเตรียมการพิสูจน์ช่วงสำหรับแต่ละเอาต์พุต ซึ่งเป็นการพิสูจน์ว่าค่าของเอาต์พุตอยู่ระหว่างศูนย์ถึง 2^64 µT หากไม่มีการพิสูจน์ระยะไกล อลิซสามารถส่งจำนวนเงินที่เป็นลบให้กับผู้คน เสริมคุณค่าให้กับตัวเอง และไม่ทำลายบัญชีของทาริ
ใน Tari และ Grin ค่าที่เกินจริงจะแบ่งออกเป็นสองค่าเพื่อเพิ่มความเป็นส่วนตัว ทีมงาน Grin มีคำอธิบายที่ดีว่าทำไมค่า `ออฟเซ็ต` นี้จึงมีความจำเป็น [[4]] เราละขั้นตอนนี้ไว้เพื่อให้คำอธิบายเรียบง่าย(r)

อลิซยังสุ่มเลือกอีกด้วย เอกอัครสมณทูต,

$$ r_a $$

และคำนวณ nonce สาธารณะที่สอดคล้องกัน

$$ R_a = r_a.G $$

อลิซจึงส่งข้อมูลต่อไปนี้ให้ Bob:

สนามความคุ้มค่า
ปัจจัยการผลิตC1
OutputsC2
ค่าธรรมเนียม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 จะต้องตรวจสอบว่าโหนดนั้นอยู่ในระดับก่อนที่จะส่งไปให้เพื่อน โหนดต้องการตรวจสอบสิ่งต่อไปนี้:

  1. อินพุตทั้งหมดมาจากชุด UTXO ปัจจุบัน

    โหนดแบบเต็มทั้งหมดจะติดตามชุดของเอาต์พุตที่ยังไม่ได้ใช้ ดังนั้นโหนดจะตรวจสอบสิ่งนั้น C1 อยู่ในรายการนั้น

  2. เอาต์พุตทั้งหมดมีการพิสูจน์ช่วงที่ถูกต้อง

    การพิสูจน์ช่วงได้รับการตรวจสอบตามข้อผูกพันที่ตรงกัน

  3. คุณค่าที่สมดุล

    ในการตรวจสอบนี้ โหนดต้องการตรวจสอบให้แน่ใจว่าไม่มีการสร้างหรือทำลายเหรียญในธุรกรรม แต่จะทำเช่นนี้ได้อย่างไรหากค่าต่างๆ มองไม่เห็น?

    โปรดจำไว้ว่าในการทำธุรกรรมที่ซื่อสัตย์ มูลค่าทั้งหมด (ซึ่งจะถูกคูณด้วย H) ยกเลิก และคุณจะเหลือผลรวมของคีย์สาธารณะของเอาต์พุต ลบด้วยคีย์สาธารณะของอินพุต สิ่งนี้ไม่ใช่เรื่องบังเอิญเกิดขึ้นเป็นค่าเดียวกับที่จัดเก็บไว้ในเคอร์เนลเป็นค่าส่วนเกินสาธารณะ

    nonces สาธารณะสรุป R จะถูกเก็บไว้ในเคอร์เนลด้วยดังนั้นจึงช่วยให้โหนดสามารถตรวจสอบลายเซ็นโดยการตรวจสอบสิ่งต่อไปนี้ซึ่งความท้าทาย e คำนวณเช่นเดิม:

$$ sG \stackrel{?}{=} R + e(X + P_b) $$

  1. ลายเซ็นในเคอร์เนลนั้นถูกต้อง

    ดังนั้นโดยการตรวจสอบความถูกต้องของลายเซ็นเคอร์เนล เรายังพิสูจน์ตัวเองด้วยว่าการบัญชีธุรกรรมนั้นถูกต้อง

  2. การตรวจสอบฉันทามติอื่น ๆ อีกมากมาย

    เช่นค่าธรรมเนียมจะมากกว่าขั้นต่ำหรือไม่

หากการตรวจสอบทั้งหมดนี้ผ่าน โหนดจะส่งต่อธุรกรรมไปยังเพียร์ของตน และในที่สุดมันจะถูกขุดและเพิ่มลงในบล็อคเชน

หยุดการฉ้อโกง

ตอนนี้ สมมติว่าอลิซพยายามทำตัวลับๆล่อๆ และใช้ \( 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

ร่วมให้ข้อมูล