Score:2

ลายเซ็น Lamport Diffie เพียงครั้งเดียว

ธง no

ฉันกำลังจะผ่าน ลายเซ็น Lamport Diffie เพียงครั้งเดียว. ฉันเข้าใจยาก

  1. ข้อความยาว (มากกว่า 100 บิต) สามารถแมปเป็นข้อความสั้น (100 บิต) ได้อย่างไรโดยฟังก์ชันทางเดียวและเฉพาะข้อความสั้นที่ลงนาม ใครช่วยอธิบายด้วยตัวอย่างหน่อยได้ไหมครับ(อ้างอิงหน้าที่ 13 ในเอกสารแนบ)

  2. "ข้อความสามารถเข้ารหัสด้วยคีย์สุ่มที่สร้างขึ้นใหม่โดยผู้ลงนามก่อนที่จะลงนาม และคีย์สุ่มต่อท้ายข้อความ ดังนั้นข้อความที่ลงนามจะเป็นแบบสุ่ม (สมมติว่าการเข้ารหัสด้วยคีย์สุ่มจะสุ่มข้อความได้อย่างมีประสิทธิภาพ ข้อเท็จจริงที่ยอมรับโดยทั่วไปสำหรับการเข้ารหัสสมัยใหม่ ฟังก์ชัน [11]) ขั้นตอนเหล่านี้จะเป็นไปตามเงื่อนไขของพร็อพเพอร์ตี้ 2 ดังนั้น เราจึงสามารถสันนิษฐานได้ว่าข้อความทั้งหมดมีความยาวคงที่ เช่น 100 บิต" ใครช่วยอธิบายเรื่องนี้ให้ฉันฟังหน่อยได้ไหม (อ้างอิงหน้าที่ 13 - 14 ในเอกสารแนบ)

  3. "วิธีการตามที่อธิบายไว้จนถึงตอนนี้ต้องทนทุกข์ทรมานจากข้อบกพร่องที่ B สามารถเปลี่ยน m โดยเปลี่ยนบิตที่เป็น 1 เป็น D's B เพียงแค่ปฏิเสธว่าเขาไม่เคยได้รับ xj ' (ทั้ง ๆ ที่เขาได้รับ) อย่างไรก็ตาม D's ไม่สามารถเปลี่ยนเป็น 1. Lamport และ Diffie เอาชนะปัญหานี้ได้ด้วยการเซ็นข้อความใหม่ m' ซึ่งยาวเป็นสองเท่าของ m และคำนวณโดยการเชื่อม m กับส่วนเติมเต็มบิตของ m นั่นคือ แต่ละบิต m ในข้อความดั้งเดิมของ J คือ แทนด้วยสองบิต mj และส่วนเติมเต็มของ m ในข้อความใหม่ m'เห็นได้ชัดว่า J บิตหนึ่งหรือบิตอื่นต้องเป็น O หากต้องการแก้ไขข้อความ B จะต้องเปลี่ยน 0 เป็น 1 ซึ่งเป็นสิ่งที่เขาทำไม่ได้" ใครช่วยอธิบายวิธีแก้ปัญหานี้ (โปรดดูหน้าหมายเลข 14)

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

Score:3
ธง my

ฉันกำลังจะผ่านลายเซ็น Lamport Diffie One-time

เป็นหมายเหตุด้านข้าง งานนี้เป็นความพยายามในช่วงแรกที่ถึงจุดสูงสุดในสิ่งที่เรียกว่า "วิธีลายเซ็นตามสถานะแฮช"; การออกแบบที่ทันสมัย ​​ได้แก่ เอ็กซ์เอ็มเอส และ ลสและใกล้เคียงกับสิ่งที่อยู่ในเอกสารของ Merkle อย่างน่าประหลาดใจ คุณอาจพบว่าลิงก์ Wiki เข้าถึงได้ง่ายขึ้น...

ไม่ว่าในกรณีใด เพื่อตอบคำถามของคุณ:

  1. ข้อความยาว (มากกว่า 100 บิต) สามารถแมปเป็นข้อความสั้น (100 บิต) ได้อย่างไรโดยฟังก์ชันทางเดียวและเฉพาะข้อความสั้นที่ลงนาม

ไม่ให้เสียงง่ายเกินไป:

  • เรารับเซ็นข้อความยาวๆ

  • เราใช้สิ่งนั้นเป็นอินพุตสำหรับ 'ฟังก์ชันทางเดียว' (คำศัพท์สมัยใหม่: ฟังก์ชันแฮช) ซึ่งสร้างเอาต์พุตขนาดคงที่ (ในตัวอย่างนี้ 100 บิต)

  • เราใช้เอาต์พุต 100 บิตนั้น และใช้อัลกอริทึมลายเซ็นกับมัน

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

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

จริงๆ แล้ว ในทางปฏิบัติ เรากังวลเกี่ยวกับการโจมตีแบบชนกัน ซึ่งผู้โจมตีสามารถควบคุมข้อความที่ถูกต้องที่กำลังเซ็นอยู่ได้ (แต่เขายังต้องสร้างการปลอมแปลง นั่นคือ ลายเซ็นที่ถูกต้องสำหรับข้อความที่ไม่ได้เซ็น) Merkle คำนึงถึงสิ่งนั้น แต่ขอให้ทำสิ่งต่าง ๆ ให้ง่ายสำหรับตอนนี้

  1. "ข้อความสามารถเข้ารหัสได้ด้วยรหัสสุ่มที่สร้างขึ้นใหม่ ... " ใครช่วยอธิบายเรื่องนี้ให้ฉันฟังหน่อยได้ไหม

ส่วนนี้อาจข้ามไปได้ - นี่คือส่วนหนึ่งของเอกสารที่ crypto สมัยใหม่ไม่ปฏิบัติตาม

Merkle พยายามกำหนด 'ฟังก์ชันการเข้ารหัสที่ผ่านการรับรอง' และใช้สมมติฐานเฉพาะในการทำเช่นนั้น รวมถึงอินพุตแบบสุ่ม ข้อความที่เซ็นชื่อไม่ได้สุ่ม ดังนั้นเขาจึงใส่ฟังก์ชันการเข้ารหัส (ด้วยคีย์สุ่ม) เพื่อให้ตรงกับสมมติฐานของเขา

ใน crypto สมัยใหม่ เราไม่ทำเช่นนี้ - โดยทั่วไปเราใช้ฟังก์ชันแฮชที่มีอยู่ทั่วไป (เช่น SHA-2 หรือ SHAKE) และใช้สิ่งนั้น - สิ่งเหล่านี้ได้รับการออกแบบ (และเข้ารหัส) เพื่อให้ตรงกับสมมติฐานต่างๆ สำหรับการเข้ารหัสลับ ฟังก์ชันแฮช ดังนั้นเราจึง (ในฐานะผู้ออกแบบลายเซ็น) ไม่ต้องกังวลเรื่องนั้น

เพื่อให้ยุติธรรมกับ Merkle นี่อาจเป็นครั้งแรกที่มีคนพยายามค้นหาว่า 'ฟังก์ชันแฮชที่ทนต่อการชนกัน' จะมีหน้าตาเป็นอย่างไร และเขาก็พยายามพอสมควร มันไม่ใช่แนวทางที่นักเข้ารหัสลับใช้ในภายหลัง

  1. "วิธีการตามที่อธิบายไว้จนถึงตอนนี้ต้องทนทุกข์ทรมานจากข้อบกพร่องที่ B สามารถเปลี่ยน m โดยเปลี่ยนบิตที่เป็น 1 เป็น 0..." ใครช่วยอธิบายวิธีแก้ปัญหานี้ที

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

ในรูปแบบ Lamport ในการเซ็นชื่อบิตเดียว เราสร้างค่าสุ่มสองค่า $x$ และ $x'$และเผยแพร่ค่าเป็นคีย์สาธารณะ $F(x)$ และ $F(x')$. ในการเซ็นชื่อเป็น 0 เราผลิต $x$; เพื่อลงนาม 1 เราผลิต $x'$; ผู้ที่มีลายเซ็น 1 ไม่สามารถสร้างลายเซ็น 0 ได้ (เพราะพวกเขาต้องสร้าง $x$และพวกเขาไม่รู้)

ทีนี้ มันใช้งานได้ แต่มันค่อนข้างแพง (คุณต้องมีคีย์สาธารณะที่มีเอาต์พุตแฮชสองเท่าของจำนวนบิตที่ฟังก์ชันแฮชของคุณสร้างขึ้น ตัวอย่างเช่น ถ้าฟังก์ชันแฮชของคุณให้เอาต์พุต 100 บิต คีย์สาธารณะนี้ประกอบด้วย ของ 200 แฮช) บทความนี้แสดงวิธีลดขนาดตามที่กล่าวไว้ในส่วนที่ 4 และ 5 ของบทความ (ซึ่งเป็นสิ่งที่ใช้ในทางปฏิบัติ)

redd avatar
no flag
ก่อนอื่น ขอบคุณมากสำหรับการตอบกลับและสำหรับความพยายามของคุณ ฉันผิดหวังที่ไม่สามารถเข้าใจเนื้อหาในกระดาษได้ และคำตอบของคุณทำให้วันของฉันดีขึ้นและทำให้ฉันมีความหวัง!
redd avatar
no flag
เพื่อตอบสนองต่อคำตอบแรกของคุณ ความเข้าใจของฉันเกี่ยวกับอัลกอริทึมลายเซ็นคือสำหรับทุก ๆ บิตในข้อความที่ส่งจะมีรหัสลับและรหัสสาธารณะที่เกี่ยวข้อง สิ่งที่ฉันหมายถึงทุกบิตคือ (โดยใช้ตัวอย่างที่กล่าวถึงในกระดาษที่แนบมา) คือสมมติว่าฉันจะขายหุ้นทีละบิตในข้อความจะบอกฝ่าย B ว่าจะขายหุ้นตัวใด ถ้าเราจับคู่ข้อความกับแฮช 100 บิตใหม่ (อ้างอิงจากตัวอย่างของคุณ) ฝ่าย B จะรู้ได้อย่างไรว่าหุ้นตัวไหนที่จะขาย? เนื่องจากข้อความต้นฉบับถูกแปลงเป็นแฮช 100 บิตใหม่นี้
redd avatar
no flag
คุณอ้างถึง "ฟังก์ชันแฮชที่ป้องกันการชนกัน" เมื่อคุณพูดว่าคุณกำลังพูดถึงฟังก์ชันแฮชที่ไม่สร้างเอาต์พุตเดียวกันสำหรับอินพุตที่แตกต่างกัน ในทางปฏิบัตินี้มีปัญหามากน้อยเพียงใด?
redd avatar
no flag
ในการอ้างอิงถึงคำตอบ 3 ในโพสต์ของคุณ สิ่งนี้ไม่มีช่องโหว่เมื่อสมมติว่าฝ่าย A ส่งข้อความที่ถูกต้องให้ฝ่าย B ลงนาม ฝ่าย B ไม่สามารถพูดได้ว่าเขาไม่ได้รับข้อความที่ลงนามแล้วหรือ พวกเขาแก้ไขปัญหานี้อย่างไร?
poncho avatar
my flag
@redd: จุดที่ 1: ลายเซ็นมีไว้เพื่อให้ผู้คนตรวจสอบข้อความ ไม่ได้มีไว้เพื่อส่งข้อความ สันนิษฐานว่า B ได้รับสำเนาของข้อความพร้อมกับลายเซ็น
poncho avatar
my flag
@redd: "ฟังก์ชันแฮชที่ทนต่อการชนกัน" ไม่ใช่ฟังก์ชันที่ไม่มีอินพุตสองตัวที่มีค่าแฮชเท่ากัน (เป็นการง่ายที่จะแสดงให้เห็นว่า สำหรับฟังก์ชันดังกล่าว เอาต์พุตจะมีขนาดใหญ่เท่ากับอินพุตเป็นอย่างน้อย) . แต่เป็นค่าที่ยากเกินไป (เราไม่รู้ว่าจะทำอย่างไรกับทรัพยากรที่เรามี) เพื่อค้นหาค่าที่แตกต่างกันสองค่าที่มีแฮชเหมือนกัน
poncho avatar
my flag
@redd: จุดที่ 3: จุดประสงค์ของลายเซ็นคือการอนุญาตให้ A ส่งข้อความตามที่เป็นอยู่ มันไม่ได้อยู่ที่นั่นเพื่อป้องกันไม่ให้ B อ้างว่าเขาไม่ได้รับ มีไว้เพื่อป้องกันไม่ให้ B อ้างว่า A ส่งข้อความอื่น (และบุคคลอื่นที่ไม่ใช่ A ส่งข้อความอื่นไปยัง B)

โพสต์คำตอบ

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