โพรโทคอลการสร้างกุญแจแบบกระจาย
สำรวจโพรโทคอล DKG ที่ช่วยให้หลายฝ่ายสร้างกุญแจร่วมกัน โดยไม่มีฝ่ายใดฝ่ายหนึ่งรู้ความลับทั้งหมด
โพรโทคอลการสร้างกุญแจแบบกระจาย เป็นบทเรียน Cryptology Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Cryptology Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Cryptology Academy มีบทเรียนทั้งหมด 4 บทเรียน
เป้าหมายและแรงจูงใจของ DKG
การสร้างกุญแจแบบกระจาย (DKG) แก้ปัญหาผู้แจกจ่ายที่เชื่อถือได้ในวิทยาการเข้ารหัสแบบแบ่งเกณฑ์ หากไม่มี DKG ฝ่ายกลางจะต้องสร้างคู่กุญแจและแจกจ่ายส่วนแบ่ง โดยรู้กุญแจส่วนตัวทั้งหมดอยู่ชั่วขณะหนึ่ง DKG ทำให้ฝ่ายต่าง ๆ จำนวน n ฝ่ายสามารถสร้างคู่กุญแจสาธารณะ/ส่วนตัวร่วมกันผ่านโปรโตคอลที่ไม่มีฝ่ายใดฝ่ายหนึ่งเรียนรู้กุญแจส่วนตัวได้ แม้แต่ผู้ประสานงานโปรโตคอล
DKG ของ Pedersen (1991)
DKG ของ Pedersen เป็นโปรโตคอล DKG ที่ใช้งานได้จริงชุดแรก ซึ่งเผยแพร่ในปี 1991 แต่ละฝ่ายจาก n ฝ่ายจะสร้างความลับสุ่ม s_i และเรียกใช้โปรโตคอลการแบ่งปันความลับที่ตรวจสอบได้เพื่อแบ่งปันความลับนั้น แต่ละฝ่ายจะกระจายค่าผูกมัดของสัมประสิทธิ์พหุนามของตน หลังจากทุกฝ่ายแบ่งปันส่วนที่ตนมีส่วนร่วมแล้ว ความลับรวมจะเท่ากับผลรวมของค่า s_i ทั้งหมด และแต่ละฝ่ายจะถือส่วนแบ่งของผลรวมนี้
การแบ่งปันความลับที่ตรวจสอบได้ของ Feldman ในฐานะองค์ประกอบพื้นฐาน
การแบ่งปันความลับที่ตรวจสอบได้ของ Feldman (การแบ่งปันความลับที่ตรวจสอบได้โดย Feldman ปี 1987) เป็นองค์ประกอบพื้นฐานหลักของโปรโตคอล DKG ส่วนใหญ่ ผู้แจกจ่ายจะผูกมัดกับสัมประสิทธิ์พหุนามในรูปสมาชิกของกลุ่ม (C_j = g^{a_j} mod p) ฝ่ายที่ได้รับส่วนแบ่ง f(i) สามารถตรวจสอบกับค่าผูกมัดเหล่านี้ได้โดยตรวจสอบว่า g^{f(i)} เท่ากับผลคูณของ C_j^{i^j} หรือไม่ วิธีนี้ทำให้ฝ่ายต่าง ๆ ตรวจพบได้ว่าผู้แจกจ่ายส่งส่วนแบ่งที่ไม่ถูกต้องหรือไม่
DKG แบบ Joint-Feldman และข้อจำกัด
DKG แบบ Joint-Feldman เรียกใช้การแบ่งปันความลับที่ตรวจสอบได้ของ Feldman พร้อมกันสำหรับทั้ง n ฝ่าย โดยแต่ละฝ่ายทำหน้าที่เป็นผู้แจกจ่ายความลับของตนเอง จากนั้นฝ่ายต่าง ๆ จะยื่นข้อร้องเรียนเมื่อได้รับส่วนแบ่งที่ไม่ถูกต้อง กุญแจสุดท้ายคือผลรวมของความลับจากผู้แจกจ่ายที่ไม่มีผู้ร้องเรียน อย่างไรก็ตาม DKG แบบ Joint-Feldman ไม่ปลอดภัยต่อผู้โจมตีแบบปรับตัวได้ ซึ่งเจาะยึดฝ่ายต่าง ๆ ตามข้อความของโปรโตคอล จุดอ่อนนี้ได้รับการระบุโดย Gennaro, Jarecki, Krawczyk และ Rabin
DKG ที่ปลอดภัยของ GJKR
โปรโตคอล DKG ของ GJKR (Gennaro, Jarecki, Krawczyk, Rabin, 1999 และ 2007) แก้ไขจุดอ่อนของ Joint-Feldman โดยใช้การแบ่งปันความลับที่ตรวจสอบได้ของ Pedersen ซึ่งมีค่าผูกมัดที่ปกปิดข้อมูลในเชิงทฤษฎีสารสนเทศ แทนการแบ่งปันความลับที่ตรวจสอบได้ของ Feldman และเพิ่มรอบการร้องเรียนที่เปิดให้ฝ่ายต่าง ๆ โต้แย้งส่วนแบ่งที่ไม่ถูกต้อง DKG ที่ได้จึงปลอดภัยต่อผู้โจมตีแบบปรับตัวได้ และกลายเป็นแหล่งอ้างอิงทางทฤษฎีมาตรฐานสำหรับ DKG ที่ปลอดภัย
รอบการสื่อสารของ DKG
DKG ของ GJKR ต้องใช้สามรอบ ได้แก่ รอบการผูกมัด (แต่ละฝ่ายกระจายค่าผูกมัดของการแบ่งปันความลับที่ตรวจสอบได้) รอบการส่งส่วนแบ่ง (ฝ่ายต่าง ๆ ส่งส่วนแบ่งให้เพื่อนร่วมฝ่ายอื่นโดยตรง) และรอบการร้องเรียน (ฝ่ายต่าง ๆ กระจายข้อร้องเรียนเกี่ยวกับส่วนแบ่งที่ไม่ถูกต้อง) ฝ่ายที่ไม่สามารถแก้ไขข้อร้องเรียนได้จะถูกตัดสิทธิ์ รอบที่สี่จะรวมส่วนที่ฝ่ายที่ถูกต้องมีส่วนร่วมเข้ากับกุญแจสาธารณะสุดท้ายและส่วนแบ่งกุญแจส่วนตัวแบบกระจาย
DKG ในกุญแจผู้ตรวจสอบความถูกต้องของ Ethereum
การจัดการกุญแจผู้ตรวจสอบความถูกต้องของ Ethereum ใช้ DKG สำหรับเทคโนโลยีผู้ตรวจสอบความถูกต้องแบบกระจาย (DVT) EIP-4844 และระบบนิเวศ DVT (Obol Network, SSV Network) ใช้ลายเซ็น BLS แบบแบ่งเกณฑ์บน BLS12-381 เพื่อให้คณะผู้ตรวจสอบความถูกต้องสามารถลงนามบล็อกได้โดยไม่มีผู้ดำเนินการรายใดรู้กุญแจผู้ตรวจสอบความถูกต้องทั้งหมด วิธีนี้ช่วยเพิ่มความทนทานต่อข้อขัดข้องของผู้ตรวจสอบความถูกต้อง และลดความเสี่ยงที่จะถูกตัดเงินประกันจากการที่กุญแจถูกบุกรุก
บีคอนสุ่มแบบกระจาย DRAND
DRAND คือบีคอนสุ่มแบบกระจายที่สายโซ่บีคอนของ Ethereum ใช้สร้างตัวเลขสุ่มที่คาดเดาไม่ได้ DRAND เรียกใช้ DKG ระหว่างกลุ่มโหนดลีกแห่งเอนโทรปี (Cloudflare, EPFL, Protocol Labs เป็นต้น) เพื่อสร้างกุญแจ BLS แบบแบ่งเกณฑ์ ในแต่ละรอบ โหนดจำนวน t จาก n โหนดจะมีส่วนร่วมด้วยลายเซ็นบางส่วน ซึ่งรวมกันเป็นค่าสุ่มที่คาดเดาไม่ได้ ไม่มีโหนดใดโหนดหนึ่งสามารถชี้นำหรือคาดเดาผลลัพธ์ได้
DKG สำหรับ Schnorr เทียบกับ ECDSA
DKG ทำได้ง่ายกว่ามากสำหรับรูปแบบลายเซ็นแบบแบ่งเกณฑ์ของ Schnorr/EdDSA เมื่อเทียบกับ ECDSA ในรูปแบบลายเซ็นแบบแบ่งเกณฑ์ของ Schnorr กุญแจส่วนตัวแบบกระจายเป็นเพียงผลรวมของความลับของฝ่ายต่าง ๆ (x = x1 + x2 + ... + xn) และกุญแจสาธารณะคือผลรวมของส่วนแบ่งกุญแจสาธารณะ (X = X1 + X2 + ... + Xn) สำหรับ ECDSA ความไม่เป็นเชิงเส้นทำให้ DKG ต้องสร้างส่วนแบ่งเชิงการคูณ ซึ่งจำเป็นต้องใช้โปรโตคอลที่ซับซ้อนกว่า
โปรโตคอลปรับปรุงส่วนแบ่งกุญแจ
ส่วนแบ่งกุญแจแบบแบ่งเกณฑ์ที่มีอายุการใช้งานยาวนานอาจถูกบุกรุกทีละน้อย หากผู้โจมตีค่อย ๆ เจาะยึดฝ่ายต่าง ๆ เมื่อเวลาผ่านไป การแบ่งปันความลับเชิงรุก (โปรโตคอลปรับปรุงส่วนแบ่ง) จะสุ่มส่วนแบ่งใหม่เป็นระยะโดยไม่เปลี่ยนกุญแจพื้นฐาน หลังการปรับปรุง ส่วนแบ่งจากก่อนการปรับปรุงจะใช้การไม่ได้ ทำให้ช่วงเวลาที่เสี่ยงต่อการถูกโจมตีสั้นลง GJKR และโปรโตคอลรุ่นต่อมามีโปรโตคอลปรับปรุงส่วนแบ่งที่ใช้โครงสร้างเดียวกับ DKG เริ่มต้น
การนำ DKG ไปใช้งานจริง
มีการนำ DKG ไปใช้ในระบบใช้งานจริงหลายระบบ ไคลเอนต์ DVT ของ Ethereum อย่าง Obol Charon ใช้พิธีการ DKG ที่อาศัยการแบ่งปันความลับที่ตรวจสอบได้ของ Pedersen บน BLS12-381 Silent Shard ของ Silence Laboratories ใช้ DKG กับกระเป๋า MPC บนอุปกรณ์เคลื่อนที่ ไลบรารี dkg-go ใช้ GJKR สำหรับแอปพลิเคชัน Go ส่วน Threshold Network (เดิมชื่อ Keep Network) ใช้ DKG กับบริการ ECDSA แบบแบ่งเกณฑ์เพื่อรักษาความปลอดภัยให้ tBTC บน Bitcoin
แบบทดสอบ DKG ของ Pedersen
คุณสมบัติสำคัญใดที่ทำให้ DKG ของ Pedersen เหนือกว่าการตั้งค่าที่ใช้ผู้แจกจ่ายที่เชื่อถือได้เพียงรายเดียว
ทบทวนโปรโตคอล DKG
DKG กำจัดผู้แจกจ่ายที่เชื่อถือได้ด้วยการให้ทั้ง n ฝ่ายสร้างคู่กุญแจแบบแบ่งเกณฑ์ร่วมกัน โดยไม่มีฝ่ายใดรู้กุญแจส่วนตัว DKG ของ Pedersen ให้แต่ละฝ่ายเรียกใช้การแบ่งปันความลับที่ตรวจสอบได้กับส่วนที่ตนมีส่วนร่วม GJKR เพิ่มความปลอดภัยต่อผู้โจมตีแบบปรับตัวได้ด้วยรอบการร้องเรียน DKG เป็นพื้นฐานของ DVT ของ Ethereum (Obol, SSV) บีคอนสุ่ม DRAND และการตั้งค่ากระเป๋า MPC ที่ใช้งานจริง โปรโตคอลปรับปรุงส่วนแบ่งช่วยขยายความปลอดภัยด้วยการสุ่มส่วนแบ่งใหม่เป็นระยะ
คำถามที่พบบ่อย
บทเรียน “โพรโทคอลการสร้างกุญแจแบบกระจาย” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “โพรโทคอลการสร้างกุญแจแบบกระจาย” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Cryptology Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Cryptology Academy มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “โพรโทคอลการสร้างกุญแจแบบกระจาย”
สำรวจโพรโทคอล DKG ที่ช่วยให้หลายฝ่ายสร้างกุญแจร่วมกัน โดยไม่มีฝ่ายใดฝ่ายหนึ่งรู้ความลับทั้งหมด คุณปฏิบัติ Cryptology Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Cryptology Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน Cryptology Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน
บทเรียน “โพรโทคอลการสร้างกุญแจแบบกระจาย” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน Cryptology Academy นี้ได้ไหม
ได้ บทเรียน Cryptology Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- โครงร่างลายเซ็นแบบ Threshold: แนวคิดพื้นฐาน
- Threshold ECDSA: การลงลายมือชื่อแบบหลายฝ่าย
- โพรโทคอลการสร้างกุญแจแบบกระจาย
- โครงร่าง Threshold ในบล็อกเชนและ HSM