ฉันต้องเซ็นชื่อข้อความโดยใช้คีย์ส่วนตัวและยืนยันข้อความด้วยคีย์สาธารณะ ในขณะที่ต้องแน่ใจว่าข้อความไม่ได้ถูกแก้ไข
ฉันรู้ว่า SHA-256 นั้นมีแนวโน้มที่จะถูกโจมตีโดยขยายความยาว
ฉันรู้ด้วยว่าสิ่งต่าง ๆ เช่น HMAC ได้รับการออกแบบมาโดยเฉพาะเพื่อหลีกเลี่ยงการโจมตีดังกล่าว
แต่ถ้าฉันเซ็นข้อความด้วย RSA และ SHA-256 ล่ะ พวกเขาปลอดภัยหรือไม่?
ฉันจำเป็นต้องลงนามใน RSA/SHA3 เพื่อรับความคุ้มครองหรือไม่ หรืออาจตัดเวอร์ชันของ SHA2 (คือ SHA-384 และ SHA-512/256) ซึ่งถูกกล่าวหาว่า ไม่ ไวต่อการโจมตีแบบขยายความยาว?
HMAC จะเป็นแนวทางที่ดีกว่าสำหรับปัญหานี้หรือไม่
ฉันกำลังพิจารณาใช้ RSA ซึ่งน่าจะมีชื่อเสียงที่สุดในบรรดาการเข้ารหัสแบบอสมมาตร อย่าลังเลที่จะชี้ให้ฉันเห็นอย่างอื่นหากมีตัวเลือกที่ดีกว่า ฉันต้องการบางสิ่งที่รองรับโดย OpenSSL และโมดูลการเข้ารหัสลับ Node.js (ซึ่งเท่าที่ฉันทราบก็ขึ้นอยู่กับ OpenSSL ด้วย)
ปล. ฉันค่อนข้างใหม่สำหรับชุมชน crypto ดังนั้นฉันหวังว่าคำพูดของฉันจะสมเหตุสมผล
--ภาคผนวก--
นี่คือข้อกังวลของฉันเกี่ยวกับ RSA-SHA256
สมมติว่าข้อความคือ $M$ และแฮชของมันคือ $SHA256(M)$.
ผู้โจมตีสามารถใช้มันเพื่อคำนวณ $M||X$ และ $SHA256(M||X)$แม้จะไม่รู้คีย์ส่วนตัวก็ตามในกรณีนี้ผู้รับของ $M||X$ และลายเซ็น $SHA256(M||X)$ จะเชื่อว่าข้อความนั้นถูกต้องเนื่องจากข้อความและลายเซ็นนั้นตรงกัน
อย่างน้อยนั่นคือสิ่งที่เกิดขึ้นหาก RSA_sign ใช้แฮชดิบ หาก RSA ส่งแฮชผ่านเทคนิคที่คล้ายกับ HMAC หรืออัลกอริธึมใดๆ ที่ป้องกันผู้โจมตีจากการปลอมแปลงลายเซ็น ฉันเดาว่าเราปลอดภัย