Score:1

การปลอมแปลงลายเซ็นดิจิทัล

ธง hu

ความเข้าใจของฉันเกี่ยวกับลายเซ็นดิจิทัลมีดังนี้: อลิซแฮชข้อความด้วยฟังก์ชันแฮชการเข้ารหัสแบบทางเดียว ผลลัพธ์ที่เรียกว่าการย่อยข้อความ จากนั้นเธอเข้ารหัสไดเจสต์ด้วยคีย์ส่วนตัว จากนั้นจึงส่งข้อความต้นฉบับที่ไม่ได้แฮช/ไม่ได้เข้ารหัสพร้อมกับเวอร์ชันแฮชที่เข้ารหัส (เช่น ลายเซ็นดิจิทัล) ไปให้บ็อบ Bob ใช้ฟังก์ชันแฮชเดียวกันกับข้อความและใช้คีย์สาธารณะของ Alice เพื่อถอดรหัสลายเซ็นดิจิทัล หากแฮชตรงกัน Bob ก็มั่นใจได้ว่าเขากำลังสื่อสารกับอลิซ

แฮ็กเกอร์จะปลอมแปลงลายเซ็นของอลิซได้หรือไม่หากเขามีรหัสสาธารณะของเธอ เขาไม่สามารถเลือกลายเซ็นดิจิทัลที่เมื่อมันถูกถอดรหัสด้วยกุญแจสาธารณะของอลิซ มันจะส่งคืนแฮชเดียวกันกับข้อความปลอมของเขา เนื่องจากเขาควบคุมทั้งข้อความและลายเซ็น

แสดงเป็นสัญลักษณ์: ให้ลายเซ็นดิจิทัลเป็น s, ข้อความเป็น m, พับลิกคีย์ของอลิซเป็น pk, ฟังก์ชันการยืนยันถูกตรวจสอบ และฟังก์ชันแฮชเป็นแฮช

แฮ็กเกอร์เลือก m และ s เช่น hash(m) == ตรวจสอบ(s, pk)

fgrieu avatar
ng flag
"_Encrypt_ with private key" / "public key to _decrypt_" เป็นคำศัพท์ที่แย่: การเข้ารหัสมีจุดประสงค์เพื่อทำให้สิ่งที่เข้ารหัสไม่สามารถเข้าใจได้โดยผู้ที่ไม่มีความลับ และการทำให้การถอดรหัสเป็นไปได้กับบางสิ่งที่สาธารณะขัดแย้งกับสิ่งนั้น ในลายเซ็นหนึ่ง _signs_ พร้อมรหัสส่วนตัว _verify_ พร้อมรหัสสาธารณะ ความเข้าใจของคำถามเกี่ยวกับลายเซ็นไม่ถูกต้อง ในบรรดาระบบลายเซ็นที่ใช้กันอย่างแพร่หลาย หลายๆ ระบบ (EdDSA, ECDSA..) ทำงานแตกต่างกันมาก และไม่มีใครทำงานในลักษณะนี้เลย โปรด [แก้ไข](https://crypto.stackexchange.com/posts/99824/edit) คำถามเพื่อให้แหล่งที่มาของความเข้าใจ (ผิด) นั้น
fgrieu avatar
ng flag
ตอบคำถามของ[เหล่านี้](https://crypto.stackexchange.com/q/99740/555) [ที่คล้ายกัน](https://crypto.stackexchange.com/q/99307/555) [คำถาม](https: //crypto.stackexchange.com/q/3184/555) ช่วยด้วย?
user216096 avatar
hu flag
@fgrieu ความเข้าใจของฉันเกี่ยวกับลายเซ็นดิจิทัลนั้นมาจากหลายแหล่ง ต่อไปนี้คือตัวอย่างหนึ่ง: https://www.techtarget.com/searchsecurity/definition/digital-signature?amp=1 ในการสร้างลายเซ็นดิจิทัล ซอฟต์แวร์การเซ็นชื่อ เช่น โปรแกรมอีเมล ใช้เพื่อจัดเตรียมหนึ่ง- วิธีแฮชของข้อมูลอิเล็กทรอนิกส์ที่จะลงนาม แฮชคือสตริงตัวอักษรและตัวเลขที่มีความยาวคงที่ซึ่งสร้างโดยอัลกอริทึม คีย์ส่วนตัวของผู้สร้างลายเซ็นดิจิทัลจะถูกใช้เพื่อเข้ารหัสแฮช แฮชที่เข้ารหัส -- พร้อมกับข้อมูลอื่นๆ เช่น อัลกอริทึมการแฮช -- คือลายเซ็นดิจิทัล
fgrieu avatar
ng flag
แหล่งที่มาที่คุณลิงก์สรุปวิธีการหนึ่งในการสร้างลายเซ็นประเภทหนึ่ง แต่ไม่ตรงกับวิธีการใช้ลายเซ็น หรือมีให้ผ่าน API/ไลบรารีมาตรฐาน หรือรูปแบบลายเซ็นยอดนิยมกี่แบบ: EdDSA, ECDSA, RSA(SSA)-PSS . แหล่งข้อมูลนั้นใช้คำศัพท์ที่ไม่ถูกต้อง มันทำให้เข้าใจผิดว่าเราสามารถเปลี่ยนการเข้ารหัสคีย์สาธารณะให้เป็นลายเซ็นได้ มันยืนยันความเท็จที่เป็นอันตรายแม้ว่าเราจะแก้ไขคำศัพท์: "วิธีเดียวที่จะถอดรหัส/ตรวจสอบว่าข้อมูลนั้นอยู่ในรหัสสาธารณะของผู้ลงนาม" กลับกลายเป็นว่าผิดสำหรับระบบลายเซ็นที่แหล่งข่าวระบุ
user216096 avatar
hu flag
@fgrieu สมมติว่าฉันใช้คำศัพท์ ârightâ ในโพสต์ต้นฉบับของฉัน สถานการณ์ที่อธิบายยังคงเป็นไปได้หรือไม่?
Score:2
ธง ng

TLDR: การโจมตีถือว่าไม่ง่าย เป็นไปได้หรือไม่ขึ้นอยู่กับสมมติฐานที่ไม่ได้ระบุ


อันดับแรก เราจะใช้ถ้อยคำคำถามใหม่

เราถือว่าระบบการเข้ารหัสแบบอสมมาตร คล้ายกับตำราเรียน RSA ด้วย

  • การสร้างคีย์ของคู่คีย์สาธารณะ/ส่วนตัว $(\mathrm{pk},\mathrm{sk})$,
  • การเข้ารหัส $c:=E_\mathrm{pk}(p)$ ที่ไหน $p$ เป็นข้อความธรรมดา $ค$ เป็นไซเฟอร์เท็กซ์
  • ถอดรหัสที่ตรงกัน $p:=D_\mathrm{sk}(c)$ ที่เหมาะกับทุกคน $ค$ ได้รับเป็น $E_\mathrm{pk}(p)$
  • ที่ไหน $p$ และ $ค$ มาจากช่วงเวลาทั่วไป $[0,น)$, กับ $n$ ฝังอยู่ใน $\mathrm{pk}$ และ $\mathrm{sk}$.

เราถือว่าระบบการเข้ารหัสนี้มีความปลอดภัยภายใต้ การโจมตีข้อความธรรมดาที่รู้จัก.

เราถือว่าเป็นอุดมคติ ฟังก์ชันแฮช $\operatorname{แฮช}$ ด้วยเอาท์พุทใน $[0,h)$, กับ $h\le n$ สำหรับทุกอย่าง $(\mathrm{pk},\mathrm{sk})$ ระบบเข้ารหัสสร้างขึ้น

เราได้มา ลายเซ็นดิจิทัล โครงการที่ไหน

  • การสร้างคีย์นั้นเหมือนกับในการเข้ารหัส
  • ลายเซ็นของข้อความ $m$ เป็น $s=D_\mathrm{sk}(\operatorname{แฮช}(m))$
  • ขั้นตอนการตรวจสอบ $\mathrm{Vrfy}_\mathrm{pk}(m,s)$ เอาต์พุต ผ่าน ถ้า $\operatorname{Hash}(m)=E_\mathrm{pk}(s)$, หรือ ล้มเหลว มิฉะนั้น.

ฉันขอเน้นย้ำว่านี่ไม่ใช่วิธีปกติในการสร้างลายเซ็น: ไม่มีรูปแบบลายเซ็นที่ใช้ในวงกว้างค่อนข้างตรงกัน² และอีกมากมาย เช่น DSA, ECDSA, EdDSA นั้นแตกต่างกันมาก

คำถามถามว่าแฮ็กเกอร์สามารถเลือกได้หรือไม่ $m$ และ $s$ ดังนั้น $\mathrm{Vrfy}_\mathrm{pk}(m,s)$ เอาต์พุต ผ่านเป็นเช่นนั้น $\operatorname{Hash}(m)=E_\mathrm{pk}(s)$.


ข่าวดี: ระบบลายเซ็นยืนยันสำเร็จเมื่อไม่มีการเปลี่ยนแปลงข้อความและลายเซ็น อาร์กิวเมนต์: ตั้งแต่ชุดอินพุตและเอาต์พุตของการเข้ารหัส $E_\mathrm{pk}$ เหมือนกันและมีฟังก์ชันถอดรหัส $D_\mathrm{sk}$ ที่กลับด้าน $E_\mathrm{pk}$ สำหรับทุกอย่าง $p$, ทั้งสอง $E_\mathrm{pk}$ และ $D_\mathrm{sk}$ เป็นการเรียงสับเปลี่ยนของเซตนั้น โดยอันหนึ่งกลับกัน ดังนั้นสำหรับทุกคน $ค$ ในชุดนั้นก็ถือ $E_\mathrm{pk}(D_\mathrm{sk}(c))=c$. ใช้สิ่งนี้กับ $c=\operatorname{แฮช}(m)$ซึ่งเงื่อนไข $h\le n$ ทำให้เป็นไปได้สำหรับทุกคน $m$เราเข้าใจแล้ว $E_\mathrm{pk}(s)=E_\mathrm{pk}(D_\mathrm{sk}(\operatorname{Hash}(m)))=\operatorname{Hash}(m)$, ดังนั้น $\mathrm{Vrfy}_\mathrm{pk}(m,s)$ เอาต์พุต ผ่าน.

ข่าวดีเพิ่มเติม: มันไม่ง่ายเลยสำหรับศัตรูที่ถือ $\mathrm{pk}$ เลือก $m$ และ $s$ ดังนั้น $\operatorname{Hash}(m)=E_\mathrm{pk}(s)$. ดูเหมือนจะไม่มีอะไรตรงไปตรงมา:

  • เมื่อฝ่ายตรงข้ามเลือกโดยพลการก่อน $m$และคำนวณ $c=\operatorname{แฮช}(m)$, นั่น $ค$ เป็นเหมือนการสุ่ม ยกเว้นว่าจะอยู่ในเซ็ตย่อยที่ต่ำกว่า $[0,h)$ ของ $[0,น)$. เมื่อพวกเขาพยายามค้นหาต่อไป $s$ กับ $c=E_\mathrm{pk}(s)$โดยพื้นฐานแล้วพวกเขาประสบปัญหาในการถอดรหัสไซเฟอร์เท็กซ์โดยพลการ และนั่นเป็นเรื่องยาก (สามารถพิสูจน์ได้ว่าการถอดรหัสไซเฟอร์เท็กซ์โดยพลการต้องเป็นเรื่องยากภายใต้สมมติฐาน KPA ที่เราสร้างเกี่ยวกับการเข้ารหัส)
  • เมื่อฝ่ายตรงข้ามเลือกโดยพลการก่อน $s$ และคำนวณ $E_\mathrm{pk}(s)$พวกเขาได้รับค่าโดยพลการ $ค$ ใน $[0,น)$. ไม่มีประกันว่า $ค$ อยู่ในช่วง $[0,h)$ (และหากไม่ใช่ จะไม่สามารถเป็นแฮชของข้อความใดๆ ได้ $m$). แม้ว่าฝ่ายตรงข้ามจะสามารถหลีกเลี่ยงสิ่งกีดขวางนั้นได้โดยการเลือก $s$ ดังนั้น $ค$ อยู่ในช่วง $[0,h)$ (ตำราไหนที่ RSA อนุญาต เช่น โดยการทำ $s=0$ หรือ $s=1$) ฟังก์ชันแฮชในอุดมคติเป็นสิ่งที่คำนวณได้ยาก $m$ ที่แฮชตามค่าที่กำหนดโดยพลการ $ค$ ในช่วงเอาต์พุตของแฮช นั่นคือค่าความต้านทานพรีอิมเมจแรกของแฮช
  • เมื่อศัตรูจับได้ $(ม.,ส)$ คู่ที่ผ่านการตรวจสอบพวกเขาสามารถพยายามที่จะหา $m'$ นอกเหนือจากนี้ $m$ กับ $\operatorname{Hash}(m')=\operatorname{Hash}(m)$ซึ่งจะทำให้มั่นใจได้ว่า $(ม',ส)$ ผ่านการตรวจสอบ แต่ฟังก์ชันแฮชในอุดมคตินั้นยากที่จะคำนวณได้ นั่นคือค่าความต้านทานพรีอิมเมจอันดับสองของแฮช
  • ฝ่ายตรงข้ามอาจพยายามสร้างสองข้อความที่แตกต่างกัน $m$ และ $m'$ กับ $\operatorname{Hash}(m)=\operatorname{Hash}(m')$, รับลายเซ็น $s$ ของ $m$, และด้วยเหตุนี้จึงได้ปลอมแปลงขึ้นมาอีก $(ม',ส)$ ที่ผ่านการตรวจสอบ ซึ่งง่ายกว่าการโจมตีครั้งก่อนมาก (เช่น เป็นไปได้กับ SHA-1 เป็น $\operatorname{แฮช}$เมื่อไม่มีการโจมตีครั้งก่อนที่เป็นไปได้) แต่ยังคงมีฟังก์ชันแฮชในอุดมคติอยู่เช่นที่การคำนวณจะทำได้ยาก: นั่นคือความต้านทานการชนกันของแฮช

ข้อมูลข้างต้นไม่ถือเป็นหลักฐานยืนยันความปลอดภัยที่ถูกต้อง และแย่กว่านั้น: การสรุปว่าระบบลายเซ็นปลอดภัยถือเป็นความผิดอย่างเห็นได้ชัด โดยเฉพาะกับ $h=2^{256}$ (เช่น แฮชคือ SHA-256) และเมื่อระบบเข้ารหัสเป็น RSA แบบเรียน ระบบลายเซ็นนี้จะเสี่ยงต่อการปลอมแปลงได้ สมมติเป็นระบบที่มีคูปอง $m$ ของแบบฟอร์ม
อย คูปองมูลค่า $123,456.78 อ้างอิง 4C0D5F62CAF6AF32
ถือว่าผู้ลงนามตรวจสอบว่าข้อเสนอ $m$ เป็นคูปองที่มีรูปแบบที่ดี ซึ่งการอ้างอิงนั้นไม่ซ้ำใคร ได้รับการชำระเงินตามราคาที่ระบุ และอยู่ภายใต้เงื่อนไขเหล่านี้ $m$. เดอะ Desmedt และ Odlyzko โจมตี ให้ฝ่ายตรงข้ามเล่นเกมระบบนั้นโดยการซื้อลายเซ็นของคูปองมูลค่าต่ำและใช้ลายเซ็นเหล่านี้เพื่อค้นหาลายเซ็นของคูปองมูลค่าสูง

ข่าวดี: ด้วยสมมติฐานที่เพิ่มเข้ามา เป็นไปได้ พิสูจน์ ว่าระบบลายเซ็นนี้มีความปลอดภัย สมมติฐานที่ใช้ได้กับ RSA ก็คือ $h$ มีบิตเกือบเท่ากับ $n$. ระบบลายเซ็นนี้เรียกว่า แฮชโดเมนแบบเต็ม. การพิสูจน์นั้นยาก ถึงขนาดเมื่อ FDH ได้รับการพิจารณาเป็นครั้งแรกโดย Mihir Bellare และ Peter Rogaway: ความปลอดภัยที่แน่นอนของลายเซ็นดิจิทัล - วิธีลงชื่อเข้าใช้ด้วย RSA และ Rabin, ใน การดำเนินการของ Eurocrypt 1996พวกเขาไม่สามารถพิสูจน์ระดับความปลอดภัยที่น่าพอใจได้ (และได้คิดค้นระบบลายเซ็นที่ซับซ้อนมากขึ้น: RSA-PSS ซึ่งเป็นพื้นฐานของการใช้กันอย่างแพร่หลาย RSASSA-PSS). หลายปีต่อมา Jean-Sébastien Coron ได้รับระดับความปลอดภัยที่ดีขึ้น: บนความปลอดภัยที่แน่นอนของโดเมนแฮชแบบเต็ม, ใน การดำเนินการของ Crypto 2000 (แต่ลายเซ็น RSA ได้เสถียรแล้วและ FDH ไม่ได้ใช้กันอย่างแพร่หลาย)


¹ ความแตกต่างหลักกับการกำหนดคำถาม:

  • เราลงนามด้วยการถอดรหัส ไม่ใช่การเข้ารหัส เนื่องจากการเข้ารหัสด้วยคีย์ส่วนตัวและสามารถถอดรหัสด้วยคีย์สาธารณะขัดแย้งกับเป้าหมายของการเข้ารหัส นอกจากนี้ยังใช้ไม่ได้ในทางปฏิบัติ รวมถึงกับ RSA ที่นำมาใช้ แม้ว่าเราจะลบขั้นตอนการเติม: รูปแบบของคีย์สาธารณะคือ $(น,อี)$ มักจะมีการจำกัดขนาดสำหรับ $e$รูปแบบของคีย์ส่วนตัวคือ $(n,e,d,p,q,d_p,d_q,q_\text{inv})$และการพยายามผลักพับลิกคีย์ในที่ที่คาดว่าไพรเวตคีย์จะล้มเหลว
  • เราระบุชุดไซเฟอร์เท็กซ์จำกัดที่มีขนาดเดียวกับชุดข้อความธรรมดา ดังนั้นการเข้ารหัสตามกำหนด มิฉะนั้นการสร้างลายเซ็นหรือการตรวจสอบจะล้มเหลวในบางครั้งภายใต้การใช้งานปกติ
  • เราทำให้ข้อความเป็นอินพุตของขั้นตอนการตรวจสอบ เนื่องจากนั่นคือวิธีการกำหนดลายเซ็นในทางทฤษฎีและการใช้งานจริงสมัยใหม่

² RSASSA-PKCS1-v1_5 เป็นเพียงคนเดียวที่ฉันรู้ว่าเข้ามาใกล้อย่างไรก็ตามมัน $\operatorname{แฮช}$ ถูกสร้างขึ้นโดยการต่อคำนำหน้าที่ขึ้นอยู่กับขนาดบิตของ $n$ และ $H(ม)$, ที่ไหน $H$ เป็นแฮชมาตรฐานเช่น SHA-256 ดังนั้น $\operatorname{แฮช}$ ไม่ใช่ฟังก์ชันแฮชในอุดมคติ เนื่องจากคาดว่าจะปรากฏในลักษณะสุ่มบนโดเมนเอาต์พุต

Score:0
ธง in

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

ในการสร้างลายเซ็นระบบ RSA นั้นคล้ายกับการเข้ารหัสเนื่องจากการยกกำลังแบบโมดูลาร์ด้วยคีย์เดียว (โมดูลัสและเลขชี้กำลัง) นั้นตรงกันข้ามกับการดำเนินการแบบโมดูลาร์กับการยกกำลังด้วยคีย์อื่นอย่างไรก็ตาม ในทางปฏิบัติ โหมดการเติม RSA - การเติม OAEP กับ PSS หรือ PKCS#1 v15 สำหรับการเข้ารหัสหรือการสร้างลายเซ็น - แตกต่างกัน รูปแบบลายเซ็นอื่นๆ เช่น ECDSA ไม่มีความคล้ายคลึงกับรูปแบบการเข้ารหัส

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

แน่นอนว่านี่เป็นเหตุผล: Bob ไม่ควรสร้างลายเซ็นปลอมใดๆ นั่นคือจุดรวมของรูปแบบลายเซ็นที่ไม่สมมาตร

user216096 avatar
hu flag
ไม่ได้โกหก คำตอบส่วนใหญ่ของคุณอยู่ในหัวของฉัน คุณสามารถแนะนำเนื้อหาการอ่านใด ๆ เพื่อให้ฉันเข้าใจหัวข้อมากขึ้น เพื่อที่ฉันจะได้เข้าใจคำตอบของคุณได้ดีขึ้น
Maarten Bodewes avatar
in flag
การอ่านข้อมูลจำเพาะของ PKCS#1 อาจเป็นความคิดที่ดี คุณสามารถดูวิธีการสร้างลายเซ็น ซึ่งอธิบายได้ค่อนข้างดี

โพสต์คำตอบ

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