โดยทั่วไปการเซ็นชื่อคีย์สาธารณะและส่วนตัวจะทำงานในลักษณะนี้
ไม่มันไม่ สามารถดู RSA ได้ด้วยวิธีนี้ (หากคุณอยู่ที่ระดับ 10,000 ฟุต) อย่างไรก็ตาม a) ไม่สนับสนุนการใช้คีย์เดียวกันในการเซ็นชื่อและถอดรหัส และ b) RSA เป็นอัลกอริทึมลายเซ็นเพียงตัวเดียวที่สามารถอธิบายด้วยวิธีนี้ได้
อย่างไรก็ตาม นั่นไม่ได้ตอบคำถามที่แท้จริงของคุณ:
การเซ็นชื่อฟังก์ชันแฮช
คุณอธิบายไม่ถูกต้อง ประการหนึ่ง ไม่มีอะไรผูกข้อความกับค่าคีย์ที่เปิดเผย นั่นคือ ใครบางคนสามารถแก้ไขข้อความระหว่างการทำงานได้ และค่าคีย์จะยังคงตรวจสอบอยู่
สิ่งที่ Lamport เข้าใจกันโดยทั่วไปคือ:
เราเลือก $k$ แฮชพรีอิมเมจ $c_1, c_2, ..., c_k$และแฮชแต่ละรายการ และเผยแพร่ผลลัพธ์ของแต่ละแฮช $H(c_1), H(c_2), ..., H(c_k)$ เป็นกุญแจสาธารณะ
เมื่อเราได้รับข้อความที่จะลงนาม เราจะแปลงข้อความเป็นชุดของค่าต่างๆ $b_1, b_2, ..., b_n$ (แต่ละค่าระหว่าง $1$ และ $k$) - การแปลงนี้ทำในลักษณะที่เป็นการยากที่จะค้นหาข้อความที่สองที่แปลงเป็นชุดบิตที่ประกอบด้วยค่าภายในเท่านั้น $b_1, b_2, ..., b_n$).
ลายเซ็นประกอบด้วยภาพที่เปิดเผยล่วงหน้า $c_{b_1}, ค_{b_2}, ..., ค_{b_n}$
ผู้ตรวจสอบสามารถรับข้อความและแปลงเป็นชุดค่าต่างๆ $b_1, b_2, ..., b_n$และตรวจสอบว่าแต่ละภาพล่วงหน้าในลายเซ็นแฮชเป็นค่าภายในรหัสสาธารณะ
ควรจะเห็นได้ง่ายว่าการปลอมลายเซ็นจะต้องมี a) การค้นหาข้อความที่แปลงเป็นค่าที่เปิดเผยทั้งหมดในลายเซ็นที่ดี (ซึ่งเราคิดว่าเป็นเรื่องยาก) หรือ b) การค้นหาภาพก่อนหน้าสำหรับค่าที่ไม่ใช่ เปิดเผย (ซึ่งเราก็คิดว่ามันยากเหมือนกัน)
ที่กล่าวว่าคำถามของคุณคือ:
ฉันเห็นว่าการเซ็นชื่อแบบแฮช/สมมาตรจำเป็นต้องมีการดูแลทำความสะอาดเพิ่มเติม
Lamport มีประโยชน์ก็ต่อเมื่อคุณต้องการเซ็นชื่อข้อความเดียวด้วยรหัสสาธารณะ เมื่อคุณดูที่ blockchain (โดยที่เราถือว่าผู้ตรวจสอบเห็นลายเซ็นทั้งหมด และเราสามารถรวมรหัสสาธารณะถัดไปในลายเซ็นได้ (และแน่นอนว่าข้อความที่ลงนามนั้นรวมถึงรหัสสาธารณะถัดไปด้วย) สิ่งนี้สามารถทำงานได้ - ตามที่คุณชี้ให้เห็น เราจะต้องจำรหัสสาธารณะถัดไป (ซึ่งจะเปลี่ยนไปสำหรับทุกลายเซ็น) แต่ก็สามารถทำได้
ในบริบทอื่น ๆ สิ่งนี้ใช้ไม่ได้ อย่างไรก็ตาม มีการปรับเปลี่ยนลายเซ็นตามแฮชจำนวนหนึ่งซึ่งไม่มีข้อจำกัดเหล่านี้:
ลายเซ็นตามสถานะแฮช (เช่น ลส และ เอ็กซ์เอ็มเอส); การทำงานเหล่านี้เหมือนกับ Lamport ยกเว้นว่าคีย์สาธารณะสามารถลงนามในข้อความต่างๆ จำนวนมากได้ (และเราสามารถทำให้ 'จำนวนมาก' นี้มีขนาดใหญ่กว่าจำนวนข้อความที่เราเคยเห็น) พวกเขามีข้อกำหนดให้ผู้ลงนามติดตามสถานะ (ซึ่งเปลี่ยนแปลงตามลายเซ็นทุกครั้ง)
ลายเซ็นตามแฮชไร้สัญชาติ (เช่น สฟิงซ์+); สิ่งนี้ทำให้ไม่จำเป็นต้องติดตามสถานะใด ๆ ในขณะที่เซ็นชื่อ และทำหน้าที่เหมือนกับอัลกอริทึมลายเซ็นอื่น ๆ
และถ้าคุณคิดว่าลายเซ็น RSA และแฮชเป็นตัวเลือกเดียวในตาราง ก็ไม่ใช่ นอกจากนี้ยังมีโครงร่างตามโครงตาข่ายต่างๆ โครงร่างหลายตัวแปร โครงร่างพื้นฐานที่ไม่มีการพิสูจน์ความรู้ (Picnic) - มีตัวเลือกมากมายให้เลือก