โครงการแบ่งปันความลับของ Shamir

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

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

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

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

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

วิธีการแบ่งปันความลับ

Adi Shamir คิดแผนการจัดการคีย์ประเภทนี้ในปี 1979 เมื่อเขาตีพิมพ์ผลงานของเขา “วิธีแบ่งปันความลับ”. บทความนี้อธิบายสั้น ๆ เกี่ยวกับสิ่งที่เรียกว่า โครงการแบ่งปันความลับของ Shamir รูปแบบเกณฑ์สำหรับการแบ่งค่าความลับ (เช่น คีย์การเข้ารหัส) ออกเป็นอย่างมีประสิทธิภาพ โครงการแบ่งปันความลับของ Shamir ชิ้นส่วน จากนั้นเมื่อใดและเมื่อใดอย่างน้อยที่สุด โครงการแบ่งปันความลับของ Shamir ของ โครงการแบ่งปันความลับของ Shamir ประกอบชิ้นส่วนแล้วคุณสามารถคืนความลับได้อย่างง่ายดาย โครงการแบ่งปันความลับของ Shamir.

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

การประมาณค่าพหุนาม

โครงการเกณฑ์ Shamir โครงการแบ่งปันความลับของ Shamir สร้างขึ้นตามแนวคิด การประมาณค่าพหุนาม. หากคุณไม่คุ้นเคยกับแนวคิดนี้ จริงๆ แล้วมันก็ค่อนข้างง่าย ที่จริงแล้ว หากคุณเคยวาดจุดบนกราฟแล้วเชื่อมต่อมันด้วยเส้นหรือเส้นโค้ง แสดงว่าคุณใช้มันไปแล้ว!

โครงการแบ่งปันความลับของ Shamir
ผ่านจุดสองจุดคุณสามารถวาดพหุนามระดับ 2 ได้ไม่จำกัดจำนวน หากต้องการเลือกจุดเดียวจากจุดเหล่านั้นคุณต้องมีจุดที่สาม ภาพประกอบ: วิกิพีเดีย

พิจารณาพหุนามที่มีดีกรี XNUMX โครงการแบ่งปันความลับของ Shamir. หากคุณต้องการพล็อตฟังก์ชันนี้บนกราฟ คุณต้องการกี่จุด? เรารู้ว่านี่คือฟังก์ชันเชิงเส้นที่สร้างเส้นตรง และมันต้องมีจุดอย่างน้อย XNUMX จุด ต่อไป ให้พิจารณาฟังก์ชันพหุนามที่มีดีกรี XNUMX โครงการแบ่งปันความลับของ Shamir. นี่คือฟังก์ชันกำลังสอง ดังนั้นต้องมีจุดอย่างน้อย XNUMX จุดในการพล็อตกราฟ แล้วพหุนามที่มีดีกรี XNUMX ล่ะ? อย่างน้อยสี่คะแนน และอื่น ๆ และอื่น ๆ.

สิ่งเจ๋งจริงๆ เกี่ยวกับคุณสมบัตินี้คือ เมื่อพิจารณาจากดีกรีของฟังก์ชันพหุนาม และอย่างน้อย โครงการแบ่งปันความลับของ Shamir จุด เราสามารถหาจุดเพิ่มเติมสำหรับฟังก์ชันพหุนามนี้ได้ เราเรียกการคาดการณ์ประเด็นเพิ่มเติมเหล่านี้ การประมาณค่าพหุนาม.

กำลังสร้างความลับ

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

พหุนามของเราจะมีรูปแบบ โครงการแบ่งปันความลับของ Shamirที่ไหน โครงการแบ่งปันความลับของ Shamir и โครงการแบ่งปันความลับของ Shamir — จำนวนเต็มบวกที่เลือกแบบสุ่ม เราแค่สร้างพหุนามด้วยดีกรี โครงการแบ่งปันความลับของ Shamirโดยที่ค่าสัมประสิทธิ์อิสระ โครงการแบ่งปันความลับของ Shamir - นี่คือความลับของเรา โครงการแบ่งปันความลับของ Shamirและสำหรับแต่ละรายการที่ตามมา โครงการแบ่งปันความลับของ Shamir เทอม จะมีการสุ่มเลือกสัมประสิทธิ์บวก ถ้าเรากลับมาที่ตัวอย่างเดิมแล้วสมมุติว่า โครงการแบ่งปันความลับของ Shamirแล้วเราจะได้ฟังก์ชัน โครงการแบ่งปันความลับของ Shamir.

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

การกู้คืนความลับ

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

โครงการแบ่งปันความลับของ Shamir

โครงการแบ่งปันความลับของ Shamir

ที่ โครงการแบ่งปันความลับของ Shamir เราสามารถแก้มันได้แบบนี้และคืนค่าฟังก์ชันพหุนามดั้งเดิมของเรา:

โครงการแบ่งปันความลับของ Shamir

เพราะเรารู้ว่า โครงการแบ่งปันความลับของ Shamir, การกู้คืน โครงการแบ่งปันความลับของ Shamir ทำได้ง่ายๆ:

โครงการแบ่งปันความลับของ Shamir

การใช้เลขคณิตจำนวนเต็มที่ไม่ปลอดภัย

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

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

โครงการแบ่งปันความลับของ Shamir

ผู้โจมตีสามารถค้นหาได้ โครงการแบ่งปันความลับของ Shamir, การนับ โครงการแบ่งปันความลับของ Shamir:

โครงการแบ่งปันความลับของ Shamir

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

ผู้โจมตีสามารถคำนวณค่าที่เป็นไปได้ โครงการแบ่งปันความลับของ Shamirแทนที่ โครงการแบ่งปันความลับของ Shamir в โครงการแบ่งปันความลับของ Shamir:

โครงการแบ่งปันความลับของ Shamir

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

การแก้ปัญหาด้วยเลขคณิตจำนวนเต็มที่ไม่ปลอดภัย

เพื่อกำจัดช่องโหว่นี้ Shamir แนะนำให้ใช้เลขคณิตแบบโมดูลาร์แทนที่ โครงการแบ่งปันความลับของ Shamir บน โครงการแบ่งปันความลับของ Shamirที่ไหน โครงการแบ่งปันความลับของ Shamir и โครงการแบ่งปันความลับของ Shamir - เซตของจำนวนเฉพาะทั้งหมด

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

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

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

โครงการแบ่งปันความลับของ Shamir

ตอนนี้ผู้โจมตีของเราพบอีกครั้ง โครงการแบ่งปันความลับของ Shamir, กำลังคำนวณ โครงการแบ่งปันความลับของ Shamir:

โครงการแบ่งปันความลับของ Shamir

จากนั้นเขาก็ลองอีกครั้ง โครงการแบ่งปันความลับของ Shamirแทนที่ โครงการแบ่งปันความลับของ Shamir в โครงการแบ่งปันความลับของ Shamir:

โครงการแบ่งปันความลับของ Shamir

คราวนี้เขามีปัญหาร้ายแรง สูตรไม่มีค่า โครงการแบ่งปันความลับของ Shamir, โครงการแบ่งปันความลับของ Shamir и โครงการแบ่งปันความลับของ Shamir. เนื่องจากตัวแปรเหล่านี้มีจำนวนไม่สิ้นสุด เขาจึงไม่สามารถรับข้อมูลเพิ่มเติมใดๆ ได้

ข้อควรพิจารณาด้านความปลอดภัย

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

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

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

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

การสาธิต

На หน้านี้ มีการสาธิตแบบโต้ตอบเกี่ยวกับแผนการแบ่งปันความลับของ Shamir การสาธิตตามห้องสมุด ssss-jsซึ่งตัวเองเป็นพอร์ต JavaScript ของโปรแกรมยอดนิยม ssss. โปรดทราบว่าการคำนวณค่าจำนวนมาก โครงการแบ่งปันความลับของ Shamir, โครงการแบ่งปันความลับของ Shamir и โครงการแบ่งปันความลับของ Shamir อาจใช้เวลาสักครู่

ที่มา: will.com

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