Shamir’s Secret Sharing: แบ่งรหัสเพื่อไปต่อ

--

cr: https://noctuaathena.tumblr.com/post/103457684857

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

ซึ่งโดยปกติแล้ว รหัสผ่านเพียงตัวเดียว ไม่ว่าใครจะได้มันไป ก็สามารถเปิดดูข้อมูลได้โดยไม่มีเงื่อนไขใดๆ

ดังนั้นในมาตรการรักษาความลับขั้นสุดยอด จึงมักจะมอบให้กับคนเพียงคนเดียว ที่จะรับหน้าที่รักษารหัส ไม่ให้แพร่งพรายออกไปได้

อย่างไรก็ตามวิธีนี้ก็ยังมีข้อเสียที่สำคัญคือ คนๆนั้นห้ามป่วยห้ามตาย ห้ามแปรพักตร์​ไม่งั้นขอที่สำคัญก็จะหายไป

จึงทำให้ต้องมีการคิดเพื่อจะแก้ปัญหากันต่อไปเรื่อยๆ

ในปี 1979 Adi Shamir ชาวอิสราเอล ( ชื่ออาจจะไม่ค่อยคุ้นหูกันนักเพราะมาคนเดียว ปกติชื่อเขาจะมาแพ็ก 3 พร้อมกับ Ron Rivest and Len Adleman กับวิธีเข้ารหัสที่น่าจะใช้กันมากที่สุดท่าหนึ่งในโลกที่ชื่อว่า RSA) ได้นำเสนอวิธีการเก็บรักษารหัสผ่านที่สำคัญตัวนี้ โดยการแยกออกเป็นส่วนๆ (shares)โดยใช้หลักการทางคณิตศาสตร์ แล้วเวลาใช้งานก็นำส่วนที่แบ่งแยกออกไปนั้น กลับมาใช้งานร่วมกันเพื่อเรียกรหัสผ่านขึ้นมาใช้

ฟังดูตอนแรกลักษณะเหมือนรวบรวมดราก้อนบอลให้ครบ 7 ลูกแล้วเรียกเทพเจ้ามังกรมาให้รหัส แต่มันมีดีกว่านั้นครับ คือ

เราไม่จำเป็นต้องใช้ทุกส่วนก็ได้

ซึ่งวิธีการนี้เราสามารถกำหนดได้ว่า จะใช้ส่วน(share) ทั้งหมดขั้นต่ำกี่ส่วน (threshold) เพื่อที่จะทำการซัมม่อนรหัสกลับมาใช้งานนั่นเอง

ตัวอย่างนี้มาจาก https://github.com/posener/sharedsecret โดยจะแสดงตัวอย่างว่า ถ้าเราสร้าง shares 5 ตัว มาจาก รหัสหนึ่งตัว โดยที่กำหนดว่า ใช้ shares เพียง 3 ตัวในการเรียกรหัสกลับมาใช้งาน เวลาที่เราเรียกใช้ เราสามารถใช้ shares ตัวไหนก็ได้ 3 ใน 5 ตัวนั้นเพื่อที่จะเรียกรหัสกลับมานั่นเอง

secret := big.NewInt(120398491412912873)

// Create 5 shares that 3 or more of them can recover the secret.
shares := Distribute(secret, 5, 3)

// We can recover from only 3 (or more) shares:
recovered := Recover(shares[1], shares[3], shares[0])

fmt.Println(recovered)

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

ความดีอีกอย่างคือ เมื่อชุดของ shares นี้แยกกับรหัสผ่าน ถ้าใครมันกระด้างกระเดื่อง เราก็แบ่ง shares ใหม่ ตัดเนื้อร้ายออกเป็นอันสิ้นพิธี แต่ก็ระวังถ้ามันร้ายหมด ก็หมดปัญหาอันนี้ต้องโทษตัวเอง _ _!

ท่านี้มักจะถูกใช้อยู่ในระบบที่เกี่ยวข้องกับการเก็บรักษาข้อมูลความปลอดภัย เช่น ระบบเก็บของ Vault หรือเบื้องหลังการเก็บข้อมูลหน้าของ Keyless เป็นต้น

--

--

Teerayut Hiruntaraporn
Teerayut Hiruntaraporn

No responses yet