เกี่ยวกับการไม่เปิดเผยตัวตนในบล็อกเชนตามบัญชี

เราสนใจหัวข้อการไม่เปิดเผยตัวตนในสกุลเงินดิจิทัลมาเป็นเวลานานและพยายามติดตามการพัฒนาเทคโนโลยีในด้านนี้ ในบทความของเราเราได้พูดคุยโดยละเอียดเกี่ยวกับหลักการทำงานแล้ว การทำธุรกรรมที่เป็นความลับ ใน Monero และยังดำเนินการอีกด้วย รีวิวเปรียบเทียบ เทคโนโลยีที่มีอยู่ในสาขานี้ อย่างไรก็ตาม สกุลเงินดิจิทัลที่ไม่เปิดเผยตัวตนทั้งหมดในปัจจุบันสร้างขึ้นจากแบบจำลองข้อมูลที่เสนอโดย Bitcoin - ผลลัพธ์ธุรกรรมที่ไม่ได้ใช้ (ต่อไปนี้จะเรียกว่า UTXO) สำหรับบล็อกเชนตามบัญชี เช่น Ethereum โซลูชันที่มีอยู่สำหรับการดำเนินการไม่เปิดเผยตัวตนและการรักษาความลับ (ตัวอย่างเช่น Mobius หรือ แอซเท็ก) พยายามจำลองโมเดล UTXO ในสัญญาอัจฉริยะ

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

เกี่ยวกับโครงสร้างของแบบจำลองข้อมูลเหล่านี้

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

เกี่ยวกับการไม่เปิดเผยตัวตนในบล็อกเชนตามบัญชี

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

เกี่ยวกับการไม่เปิดเผยตัวตนในบล็อกเชนตามบัญชี

การวิเคราะห์เทคโนโลยี

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

การซ่อนยอดคงเหลือและจำนวนเงินโอน

รูปแบบการเข้ารหัสใช้เพื่อเข้ารหัสยอดคงเหลือและโอนจำนวนเงินใน Zether เอล กามาล. มันทำงานดังนี้ เมื่ออลิซต้องการส่งบ๊อบ b เหรียญตามที่อยู่ (รหัสสาธารณะ) Yเธอเลือกตัวเลขสุ่ม r และเข้ารหัสจำนวนเงิน:

เกี่ยวกับการไม่เปิดเผยตัวตนในบล็อกเชนตามบัญชี
ที่ไหน C - จำนวนที่เข้ารหัส D - ค่าเสริมที่จำเป็นในการถอดรหัสจำนวนนี้ G - จุดคงที่บนเส้นโค้งรูปไข่ เมื่อคูณด้วยรหัสลับ จะได้รหัสสาธารณะ

เมื่อ Bob ได้รับค่าเหล่านี้ เขาก็เพียงเพิ่มค่าเหล่านี้ลงในยอดคงเหลือที่เข้ารหัสของเขาในลักษณะเดียวกัน ซึ่งเป็นเหตุผลว่าทำไมโครงการนี้จึงสะดวก

ในทำนองเดียวกัน อลิซจะลบค่าเดียวกันออกจากความสมดุลของเธอเท่านั้น Y ใช้กุญแจสาธารณะของคุณ

การซ่อนผู้รับและผู้ส่ง

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

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

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

เนื่องจากทั้งผู้ส่งและผู้รับมีที่อยู่ถาวรเสมอ จึงจำเป็นต้องใช้กลุ่มเดียวกันในการผสมเมื่อถ่ายโอนไปยังที่อยู่เดียวกัน ดูสิ่งนี้ได้ง่ายกว่าด้วยตัวอย่าง

สมมติว่าอลิซตัดสินใจบริจาคเงินให้กับองค์กรการกุศลของ Bob แต่ต้องการให้ผู้สังเกตการณ์ภายนอกไม่เปิดเผยการโอน จากนั้น เพื่อที่จะปลอมตัวอยู่ในช่องผู้ส่ง เธอจึงเข้าสู่เรื่องราวของอดัมและอเดลด้วย และหากต้องการซ่อน Bob ให้เพิ่มบัญชีของ Ben และ Bill ในช่องผู้รับ ในการสนับสนุนครั้งต่อไป อลิซตัดสินใจเขียนว่าอเล็กซ์และอแมนดาอยู่ข้างๆ เธอ และบรูซและเบนเจนอยู่ข้างๆ บ็อบ ในกรณีนี้ เมื่อวิเคราะห์บล็อคเชน ในธุรกรรมทั้งสองนี้ มีผู้เข้าร่วมเพียงคู่เดียวที่ตัดกัน - อลิซและบ็อบ ซึ่งยกเลิกการเปิดเผยตัวตนของธุรกรรมเหล่านี้

เกี่ยวกับการไม่เปิดเผยตัวตนในบล็อกเชนตามบัญชี

การแข่งขันการทำธุรกรรม

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

เกี่ยวกับการไม่เปิดเผยตัวตนในบล็อกเชนตามบัญชี

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

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

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

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

ป้องกันการโจมตีซ้ำ

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

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

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

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

ผู้เขียน Zether เสนอให้สร้าง nonce แบบเข้ารหัส ขึ้นอยู่กับ "ยุค" ตัวอย่างเช่น:

เกี่ยวกับการไม่เปิดเผยตัวตนในบล็อกเชนตามบัญชี
ที่นี่ x คือรหัสลับของผู้ส่ง และ เกโปช - ตัวสร้างเพิ่มเติมสำหรับยุค ซึ่งได้มาจากการแฮชสตริงในรูปแบบ 'Zether + ' ตอนนี้ดูเหมือนว่าปัญหาจะได้รับการแก้ไขแล้ว - เราไม่เปิดเผย nonce ของผู้ส่ง และไม่ยุ่งเกี่ยวกับ nonnce ของผู้เข้าร่วมที่ไม่เกี่ยวข้อง แต่แนวทางนี้ทำให้เกิดข้อจำกัดที่ร้ายแรง: หนึ่งบัญชีสามารถส่งธุรกรรมได้ไม่เกินหนึ่งธุรกรรมต่อ "ยุค" น่าเสียดายที่ปัญหานี้ยังคงไม่ได้รับการแก้ไข และในปัจจุบันทำให้ Zether เวอร์ชันที่ไม่เปิดเผยตัวตนตามความคิดของเรา แทบจะไม่เหมาะสำหรับการใช้งาน

ความซับซ้อนของการพิสูจน์ความรู้เป็นศูนย์

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

ในเวอร์ชันที่ไม่เปิดเผยตัวตนของบล็อกเชนตามบัญชี สำนวนในการพิสูจน์มีความซับซ้อนมากขึ้น ผู้ส่งพิสูจน์ว่า:

  1. จำนวนเงินที่ส่งเป็นค่าบวก
  2. ยอดคงเหลือยังคงเป็นลบ
  3. ผู้ส่งเข้ารหัสจำนวนเงินโอนอย่างถูกต้อง (รวมถึงศูนย์)
  4. ยอดคงเหลือในยอดคงเหลือเปลี่ยนแปลงเฉพาะผู้ส่งและผู้รับเท่านั้น
  5. ผู้ส่งเป็นเจ้าของคีย์ส่วนตัวในบัญชีของเขา และแท้จริงแล้วเขาอยู่ในรายชื่อผู้ส่ง (ในบรรดาผู้ที่เกี่ยวข้อง)
  6. Nonce ที่ใช้ในธุรกรรมมีส่วนประกอบอย่างถูกต้อง

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

ผลหรือไม่

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

ที่มา: will.com

เพิ่มความคิดเห็น