Score:0

การใช้งานที่ปลอดภัยของ RSA Blind Signatures

ธง in

บันทึก: ฉันไม่ใช่ผู้เข้ารหัส

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

ขั้นตอนการออกลายเซ็น

  1. รับรหัสสาธารณะ เลขยกกำลัง $e$โมดูลัส $n$
  2. สร้างตัวเลขสุ่ม $r$ ที่น้อยกว่าและค่อนข้างเฉพาะกับโมดูลัส $n$
  3. คำนวณแฮชของโทเค็นส่วนตัว $m$
  4. คำนวณข้อความที่ปิดตา $ M = h(m).(r^emod$ $n) $
  5. ส่งข้อความที่ปิดตาไปยังเซิร์ฟเวอร์ที่จะส่งคืนลายเซ็นที่ปิดตา $S = M^d ม็อด $ $n$, ที่ไหน $d$ เป็นเลขชี้กำลังส่วนตัว
  6. คำนวณลายเซ็นที่ไม่ปิดบัง $s = S.r^{-1}$

ถ้าฉันถูกต้อง สิ่งนี้จะจบลงด้วยโทเค็นส่วนตัว $m$ และลายเซ็นที่ถูกต้อง $s$

คำถามที่ 1: วิธีคูณ $h(ม)$ และ $r^อีโมด$ $n$ ? จะไม่เป็นผลมากกว่า $n$ ?
คำถามที่ 2: ฉันสามารถใช้อัลกอริทึมแฮชใด ๆ ก็ได้ $m$ เช่น SHA-256 ?
คำถามที่ 3: เซิร์ฟเวอร์จะไม่แฮชหรือแพดข้อความที่ปกปิดไว้ก่อนที่จะเซ็นชื่อ ถูกต้องและปลอดภัยหรือไม่ ?

ขั้นตอนการตรวจสอบลายเซ็น

  1. ลูกค้าส่งโทเค็นส่วนตัว $m$ และลายเซ็น $s$
  2. เซิร์ฟเวอร์จะตรวจสอบลายเซ็น $s^e = ชั่วโมง(ม)$ $mod$ $n$

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

fgrieu avatar
ng flag
สมการของ $M$ คือ $M = h(m).(r^emod$ $n) $ ในคำถาม ด้วยการพิมพ์ที่ดี ฉันคิดว่าสิ่งนี้ให้ $M=h(m)\cdot(r^e\bmod n)$ แต่ถูกต้องหรือไม่? ไม่ใช่ $M=h(m)\cdot r^e\bmod n$ ใช่ไหม สามารถคำนวณเป็น $M=(h(m)\cdot (r^e\bmod n))\bmod n$ นอกจากนี้ ฉันค่อนข้างแน่ใจว่ามันหมายถึง $s = S\cdot r^{-1}\bmod n$ โดยที่ $s = S.r^{-1}$ และตัวพิมพ์ที่ถูกต้องคือ $S=M^d \bmod n$
Score:2
ธง my

หมายเหตุ: ฉันไม่ใช่นักเข้ารหัส

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

ขออภัย เมื่อฉันได้ยินคำถามเช่นนี้ ดูเหมือนว่า:

ฉันไม่ใช่ศัลยแพทย์ แต่ฉันต้องการทำการผ่าตัดหัวใจ ฉันได้ทำการค้นคว้ามากมายมาสองสามวันแล้ว และฉันต้องการให้แน่ใจว่าฉันเข้าใจพื้นฐานก่อนที่จะเริ่มต้น...

ตกลงฉันไม่ นั่น แย่ แต่ฟังดูค่อนข้างคล้ายกัน (และถ้าเป็น 'การใช้งานในขั้นตอนการผลิต' จริงๆ มันอาจจะไม่ไกลนัก อย่างน้อยที่สุด ถ้าคุณผ่าตัดหัวใจผิด คุณจะรู้ทันที มันไม่ได้ผล...

ต่อไปนี้เป็นคำตอบบางส่วน:

คำถามที่ 1: วิธีการคูณ $h(ม)$ และ $r^e \bmod n$ ? จะไม่เป็นผลมากกว่า $n$ ?

ที่จริง คุณคูณมันด้วยโมดูโล $n$.

คำถามที่ 2: ฉันสามารถใช้อัลกอริทึมแฮชใดๆ กับ m เช่น SHA-256 ได้หรือไม่ คำถามที่ 4: วิธีการใช้รูปแบบการเติมเพื่อป้องกันการปลอมลายเซ็นเนื่องจากคุณสมบัติโฮโมมอร์ฟิคของ RSA ?

ฉันนำสองคำถามนี้มารวมกันเพราะมีคำตอบเดียวกัน อะไร $h$ จำเป็นต้องไม่ใช่ SHA-256 แบบตรง แต่เป็นแบบที่คุณทำการแฮช (เช่น SHA-256) แทน จากนั้นเพิ่มผลลัพธ์โดยใช้ PKCS 1.5 SSA หรือ PSS (ขึ้นอยู่กับสิ่งที่ผู้ตรวจสอบคาดหวัง)

คำถามที่ 3: เซิร์ฟเวอร์จะไม่แฮชหรือแพดข้อความที่ปกปิดไว้ก่อนที่จะเซ็นชื่อ ถูกต้องและปลอดภัยหรือไม่

ในกรณีนี้ ถูกต้องและปลอดภัย หากเซิร์ฟเวอร์ไม่แฮชหรือแพดข้อความ มันจะทำให้สิ่งต่างๆ ยุ่งเหยิง จำไว้ว่าคุณทำการแฮช/แพดดิ้งในขั้นตอนที่ 4

ในทางกลับกัน (เพื่อกลับไปที่ความคิดเห็นดั้งเดิมของฉัน) หากคุณต้องการถามคำถามเหล่านี้ คุณอาจไม่พร้อมที่จะดำเนินการด้วยตนเอง...

Mohamed Waleed avatar
in flag
ขอบคุณสำหรับคำตอบของคุณ ฉันไม่ต้องการนำไปใช้เอง เนื่องจากฉันไม่ใช่นักเข้ารหัส แต่ฉันไม่พบการนำไปใช้งานใด ๆ ที่จะใช้งานได้อย่างปลอดภัย ก็เลยถามรายละเอียดการ Implement แล้วจะเขียน Code เพื่อดำเนินการครับฉันต้องการตรวจสอบสิ่งสุดท้าย: ในการตรวจสอบว่ามีการเติมลายเซ็นอย่างถูกต้องหรือไม่ ฉันจะพยายามเติมข้อความต้นฉบับและตรวจสอบว่าผลลัพธ์เท่ากันหรือไม่ (เช่น การตรวจสอบแฮชของข้อความ) เช่น pad(m) = s นั่นถูกต้องใช่ไหม ?

โพสต์คำตอบ

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