Sui ออกแบบเทคโนโลยีพื้นฐานโดยคำนึงถึงความยืดหยุ่นในการเข้ารหัส ระบบรองรับอัลกอริทึมการเข้ารหัสหลายตัวและการเข้ารหัสแบบดั้งเดิม (cryptographic primitives) และสามารถสลับไปมาได้อย่างรวดเร็ว นักพัฒนาไม่เพียงแต่สามารถเลือกการเข้ารหัสที่ดีที่สุด (การเข้ารหัสคีย์สาธารณะ) สำหรับระบบของตนเท่านั้น แต่ยังสามารถใช้อัลกอริทึมล่าสุด (อัลกอริทึมที่มีอยู่)
Sui กำหนดรูปแบบดั้งเดิมของการเข้ารหัส เช่น คีย์สาธารณะ ลายเซ็น ลายเซ็นรวม และฟังก์ชันแฮช ภายใต้นามแฝงชนิดรวมหรือ enum wrapper ที่ใช้ร่วมกันในที่เก็บ การเปลี่ยนแปลงพื้นฐานเหล่านี้จะส่งผลต่อส่วนประกอบทั้งหมดของแอปพลิเคชัน นักพัฒนาสามารถอัปเดตรหัสผ่านของแอปพลิเคชันได้อย่างรวดเร็วและมั่นใจในการรักษาความปลอดภัยที่เป็นหนึ่งเดียว
ปัจจุบัน Sui สนับสนุนรูปแบบลายเซ็นการทำธุรกรรมของผู้ใช้ต่อไปนี้ผ่านจุดสิ้นสุดของการดำเนินการธุรกรรม:
1.Pure Ed 25519
2.Secp 256 k 1 ECDSA
การใช้อินเทอร์เฟซของคู่คีย์บัญชีผู้ใช้
ด้านล่างนี้คือตัวอย่างการแสดงคู่คีย์ใน Sui การขยายไปยังรูปแบบลายเซ็นใหม่นั้นเป็นเรื่องง่าย:
1. เพิ่มลงใน enum (คลาส enum)
2. ใช้คุณสมบัติ KeyPair ที่กำหนดไว้ในไลบรารี fastcrypto

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

เมื่อผู้ใช้ส่งธุรกรรมที่ลงนาม การดำเนินการธุรกรรมจะระบุพารามิเตอร์ต่อไปนี้:
BSC (Binary Canonical Serialization) ทำให้ธุรกรรมเป็นอนุกรมเป็นฐาน 64
แฟล็กรูปแบบลายเซ็น (การระบุรูปแบบลายเซ็น) ซึ่งสามารถส่งผ่านเป็น "ed 25519" หรือ "secp 256 k 1"
รูปแบบฐาน 64 ของคีย์สาธารณะ
ฐาน 64 ของลายเซ็นที่สอดคล้องกับโครงร่าง
รหัสต่อไปนี้ดำเนินการธุรกรรมที่ลงนาม และ curl ส่งคืนใบรับรองและผลลัพธ์ของธุรกรรมหากสำเร็จ

โค้ดต่อไปนี้แสดงวิธีที่โหนดเต็มของ Sui รวบรวมฟิลด์คำขอ API ลงในแฟล็กลายเซ็นที่ต่อเนื่องกัน || ลายเซ็น || คีย์ Pubkey และทำการตรวจสอบยืนยันก่อนดำเนินการ

การวิเคราะห์สาเหตุที่ Sui สนับสนุนรูปแบบลายเซ็นที่แตกต่างกัน
ECDSA ที่ใช้เส้นโค้งวงรี secp 256 k 1 ถูกนำมาใช้อย่างแพร่หลายโดย Bitcoin, Ethereum และสกุลเงินดิจิทัลอื่น ๆ ผู้ใช้อาจชอบรูปแบบลายเซ็นนี้เนื่องจากต้องการใช้ประโยชน์จากกระเป๋าเงินที่มีอยู่และเครื่องมือการจัดการคีย์เอสโครว์ เช่น ลายเซ็นขีดจำกัด (แปลว่า "ลายเซ็นขีดจำกัดของระบบเข้ารหัสขีดจำกัด" ในการเข้ารหัสภายในประเทศ) และลายเซ็นหลายลายเซ็น นอกจากนี้ ยังเข้ากันได้ดีกว่ากับโครงสร้างพื้นฐานระบบคลาวด์และโมดูลความปลอดภัยของฮาร์ดแวร์ (โมดูลทั่วไป เช่น cipher machine uk hardware wallet เป็นต้น) และรองรับการกู้คืนคีย์สาธารณะจากข้อความและเพย์โหลดลายเซ็น
ในขณะเดียวกัน Ed 25519 เป็นรูปแบบลายเซ็นที่ทันสมัยกว่าซึ่งมีลายเซ็นที่รวดเร็วเชิงกำหนดและคณิตศาสตร์ที่ง่ายขึ้น แม้ว่า Typescript SDK จะรองรับทั้งสองรูปแบบลายเซ็น แต่ Sui ยังคงเลือก Ed 25519 เป็นอัลกอริทึมกระเป๋าสตางค์ของ Sui ที่แนะนำ
เนื่องจาก Sui รองรับ Signature Scheme ที่แตกต่างกัน จึงต้องใช้ความพยายามเพียงเล็กน้อยในการเพิ่ม Scheme เช่น ECDSA ในภายหลังโดยใช้เส้นโค้ง secp 256 r 1 (หรือที่เรียกว่า NIST-P 256 ) ซึ่งปัจจุบันเป็นกุญแจสำคัญในการเข้ารหัสมือถือแบบเนทีฟและในอนาคต มันคือ เส้นโค้งที่ต้องรองรับ และยังเป็นฟังก์ชันที่ชุมชนร้องขอโดยทั่วไป
การรองรับรูปแบบลายเซ็นที่ยืดหยุ่นนี้ยังช่วยให้ระบบ Sui สามารถทำการเปรียบเทียบกับรูปแบบลายเซ็นว่างที่ไม่ปลอดภัยได้ สำหรับระบบที่ดำเนินการอย่างรวดเร็วอย่าง Sui การออกแบบแบบคู่ขนานของการลงนามและการตรวจสอบยังเกิดขึ้นที่ระดับธุรกรรม ไม่ใช่แค่ที่ระดับบล็อกเท่านั้น และความยืดหยุ่นในการเข้ารหัสช่วยให้ Sui สามารถตรวจสอบโอเวอร์เฮดที่การดำเนินการเข้ารหัสนำมาสู่ระบบได้ ผลลัพธ์เกณฑ์มาตรฐานเหล่านี้ช่วยให้ Sui สามารถระบุปัญหาคอขวดและแนวทางสำหรับการเพิ่มประสิทธิภาพได้
คู่คีย์การอนุญาต
Authority on Sui (ชุดตรวจสอบความถูกต้อง) มีคู่คีย์ที่แตกต่างกันสามคู่:
คู่คีย์โปรโตคอล คู่คีย์โปรโตคอล
คู่คีย์บัญชี คู่คีย์บัญชี
คู่คีย์เครือข่าย คู่คีย์เครือข่าย
คู่คีย์โปรโตคอล คู่คีย์โปรโตคอล
คู่คีย์โปรโตคอลให้ลายเซ็นที่ได้รับอนุญาต หากธุรกรรมที่ลงนามโดยผู้ใช้ได้รับการยืนยัน Sui จะดำเนินการธุรกรรมเมื่อเปอร์เซ็นต์ของหน่วยงานที่ให้ลายเซ็นสำหรับการทำธุรกรรมของผู้ใช้เกินเกณฑ์ที่กำหนดสองในสาม รูปแบบ BLS 12381 ได้รับเลือกให้ตรวจสอบลายเซ็นรวมอย่างรวดเร็วสำหรับจำนวนสิทธิ์ที่กำหนด โดยเฉพาะอย่างยิ่งมีการตัดสินใจที่จะใช้โหมด minSig BLS ซึ่งแต่ละคีย์สาธารณะจะมีขนาด 96 ไบต์และลายเซ็นคือ 48 ไบต์ สิ่งหลังมีความสำคัญเนื่องจากโดยปกติแล้วตัวตรวจสอบความถูกต้องจะลงทะเบียนคีย์ของตนหนึ่งครั้งที่จุดเริ่มต้นของแต่ละยุค จากนั้นจึงลงนามธุรกรรมอย่างต่อเนื่อง ดังนั้น Sui จึงปรับขนาดลายเซ็นขั้นต่ำให้เหมาะสมที่สุด
สังเกต! ด้วยการใช้รูปแบบ BLS ลายเซ็นอิสระสามารถรวมเข้าด้วยกัน ส่งผลให้เพย์โหลดที่ลงนาม BLS เดียว ซุยยังรวมลายเซ็นเข้ากับบิตแมป (บิตแมป) เพื่อแสดงถึงตัวตรวจสอบลายเซ็น สิ่งนี้ช่วยลดขนาดลายเซ็นของหน่วยงานได้อย่างมีประสิทธิภาพจากขนาด (2f + 1) × BLS_sig เหลือเพียงหนึ่ง BLS_sig payload ซึ่งจะมีข้อได้เปรียบด้านโอเวอร์เฮดของเครือข่ายในการบีบอัดใบรับรองธุรกรรมโดยไม่ขึ้นกับขนาดชุดเครื่องมือตรวจสอบความถูกต้อง
นามแฝงประเภทวัสดุหลักรวมศูนย์ไว้ในตำแหน่งเดียวที่ใช้ทั่วทั้งที่เก็บ อันที่จริง โดยการเปลี่ยนนามแฝงเท่านั้น (การเปลี่ยนพารามิเตอร์นามแฝงในรหัสลายเซ็นรวมเมื่อทำการซีเรียลไลซ์และส่งผ่านพารามิเตอร์) คีย์โปรโตคอลของ Sui ถูกเปลี่ยนจาก Ed 25519 เป็น BLS 12381

เพื่อจัดการกับการโจมตีคีย์ที่เป็นอันตรายบนลายเซ็นรวม BLS 12381 จะใช้ Proof of Key Knowledge (KOSK) ระหว่างการลงทะเบียนผู้มีอำนาจ หลักฐานการเป็นเจ้าของจะถูกส่งและตรวจสอบเมื่อหน่วยงานร้องขอให้เพิ่มชุดเครื่องมือตรวจสอบความถูกต้อง ตรวจสอบรหัสโปรโตคอล kosk || รหัสสาธารณะของโปรโตคอล || ที่อยู่ sui ซึ่งแตกต่างจากมาตรฐานส่วนใหญ่ แผนการพิสูจน์ความรู้ของ Sui ยังมุ่งมั่นที่จะระบุที่อยู่ ซึ่งให้การป้องกันเพิ่มเติมจากการใช้คีย์ BLS ของโปรแกรมตรวจสอบความถูกต้องซ้ำจากโปรแกรมตรวจสอบที่เป็นอันตรายรายอื่น ซึ่งไม่เหมือนกับมาตรฐานส่วนใหญ่
ลายเซ็นรวมมีประโยชน์ในสองสถานการณ์:
เมื่อโปรแกรมควบคุมองค์ประชุมสร้าง CertifiedTransaction จาก SignedTransactions ที่ส่งกลับจากหลายหน่วยงาน
เมื่อหน่วยงานสร้าง SignedCheckpointSummary หน่วยงานแต่ละแห่งจะลงนามในเนื้อหาของจุดตรวจสอบ
คู่คีย์บัญชี คู่คีย์บัญชี
บัญชีที่ใช้โดยหน่วยงานกำกับดูแลเพื่อรับเงินรางวัลการเดิมพันนั้นได้รับการรักษาความปลอดภัยโดยคู่คีย์บัญชี โดยใช้ Ed 25519 เป็นรูปแบบลายเซ็น
คู่คีย์เครือข่าย คู่คีย์เครือข่าย
คีย์ส่วนตัวใช้เพื่อดำเนินการ TLS handshake QUIC ที่จำเป็นสำหรับ Narwhal หลักและอินเทอร์เฟซเครือข่ายของผู้ปฏิบัติงาน รหัสสาธารณะใช้เพื่อตรวจสอบ ID โหนดและใช้ Ed 25519 เป็นรูปแบบลายเซ็น
ความยืดหยุ่นในการแฮชและการเข้ารหัส
ปัจจุบัน ฟังก์ชันแฮชเริ่มต้นของ Sui คือ sha 3256 และเกณฑ์มาตรฐานกำลังเรียกใช้เพื่อเปรียบเทียบกับ sha 256 และตระกูล blake 2/blake 3 เพื่อรองรับความยืดหยุ่นในการเข้ารหัส Base 64 และ Hex กำหนดคุณสมบัติการเข้ารหัสใน fastcrypto เป็นตัวห่อหุ้มรอบฐาน 64 ct::Base 64 และ hex และการทำให้เป็นอนุกรมและการตรวจสอบความถูกต้องที่กำหนดเอง โดยเฉพาะอย่างยิ่ง กล่องฐาน 64 ct ถูกเลือกแทนกล่องฐาน 64 Rust ที่เป็นที่นิยมมากที่สุด เนื่องจาก a) เป็นเวลาคงที่ และ b) ปฏิเสธการเข้ารหัสที่เสียหายอย่างชัดเจน เพื่อป้องกันการโจมตีที่อ่อนได้เมื่อถอดรหัส สมาชิกในทีมวิจัยของ Sui ได้รายงานปัญหาความสามารถในการขยายขนาดที่น่าประหลาดใจในไลบรารีตัวถอดรหัสฐาน 64 ส่วนใหญ่ โดยได้รับรางวัล Best Poster Award จากงาน AsiaCCS 2022 ซึ่งเป็นหนึ่งในการประชุมชั้นนำในด้านการเข้ารหัสและความปลอดภัย
ข้อมูลโค้ดต่อไปนี้แสดงวิธีการใช้โครงสร้าง wrapper ใน fastcrypto:

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


