0Pricing
Cryptology Academy · บทเรียน

RSA-PSS สำหรับลายมือชื่อดิจิทัล

เรียนรู้การเข้ารหัสแบบ PSS ค่าเกลือ และเหตุผลที่ใช้แทน PKCS#1 v1.5 ในการลงนาม

RSA-PSS สำหรับลายมือชื่อดิจิทัล เป็นบทเรียน Cryptology Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Cryptology Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Cryptology Academy มีบทเรียนทั้งหมด 4 บทเรียน

ยินดีต้อนรับ

RSA-PSS (รูปแบบลายเซ็นเชิงความน่าจะเป็น) เป็นสิ่งทดแทนลายเซ็น PKCS#1 v1.5 ที่ปลอดภัย โดยใช้การเข้ารหัสแบบสุ่มเพื่อสร้างลายเซ็นที่มีความปลอดภัยพิสูจน์ได้

จุดอ่อนของลายเซ็น PKCS#1 v1.5

ลายเซ็น PKCS#1 v1.5 ใช้การเข้ารหัส DigestInfo แบบกำหนดแน่นอน การโจมตีปลอมแปลงที่รู้จักกันแล้วอาศัยการใช้งานการตรวจสอบที่ไม่เข้มงวด ไบลเคนบาเคอร์ (2006) แสดงให้เห็นการปลอมแปลงลายเซ็นต่อผู้ตรวจสอบบางประเภท

เป้าหมายการออกแบบของ PSS

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

ขั้นตอนการเข้ารหัส PSS

1. mHash = Hash(M) 2. salt = random(sLen bytes) 3. M' = 0x00×8 || mHash || salt 4. H = Hash(M') 5. DB = PS || 0x01 || salt 6. dbMask = MGF1(H, emLen - hLen - 1) 7. maskedDB = DB XOR dbMask 8. EM = maskedDB || H || 0xbc

ตัวเลือกความยาวค่าเกลือ

ตัวเลือกของ PKCS#1 v2.2: - MAX_LENGTH: ค่าเกลือยาวเท่ากับแฮช (แนะนำ มีความปลอดภัยสูงสุด) - DIGEST_LENGTH: ค่าเกลือมีความยาวเท่ากับแฮช (มาตรฐาน) - 0: PSS แบบกำหนดแน่นอน (สูญเสียคุณสมบัติเชิงความน่าจะเป็น ไม่แนะนำ) ไพธอน: padding.PSS.MAX_LENGTH

การตรวจสอบ PSS

กู้คืน EM = sig^e mod n แยก maskedDB และ H ออกมา คำนวณ M' จาก mHash (จากข้อความ) และค่าเกลือที่กู้คืนมา ตรวจสอบว่า H == Hash(M') ค่าเกลือไม่จำเป็นต้องตรงกัน ขอเพียง H ผ่านการตรวจสอบก็พอ

การเปรียบเทียบความปลอดภัยของ PSS กับ v1.5

PSS: ปลอดภัยที่พิสูจน์ได้ การลดรูปอย่างรัดกุม ลายเซ็นเชิงความน่าจะเป็น และใช้การคำนวณมากกว่าเล็กน้อย v1.5: ปลอดภัยตามหลักฐานเชิงประสบการณ์ กำหนดแน่นอน ทำงานเร็วกว่า และมีช่องโหว่ต่อการโจมตีออราเคิลรูปแบบ โค้ดใหม่ทั้งหมดควรใช้ PSS

PSS ใน TLS 1.3

TLS 1.3 กำหนดให้ใช้ RSA-PSS สำหรับลายเซ็น RSA ทั้งหมด PKCS#1 v1.5 ถูกห้ามใช้ในส่วนขยาย TLS 1.3 ใหม่ อัลกอริทึมลายเซ็น ได้แก่ rsa_pss_rsae_sha256, rsa_pss_rsae_sha384, rsa_pss_rsae_sha512

PSS ในไพธอน

from cryptography.hazmat.primitives.asymmetric import padding from cryptography.hazmat.primitives import hashes # Sign sig = private_key.sign( message, padding.PSS(mgf=padding.MGF1(hashes.SHA256()), salt_length=padding.PSS.MAX_LENGTH), hashes.SHA256() )

OID ของ RSASSA-PSS

RSA-PSS มีชนิดกุญแจ OID ของตนเอง: id-RSASSA-PSS (1.2.840.113549.1.1.10) กุญแจที่สร้างขึ้นโดยเฉพาะสำหรับ PSS จะใช้ OID นี้และต้องใช้การลงลายเซ็นแบบ PSS (ใช้กับ v1.5 ไม่ได้) นี่เป็นแนวทางปฏิบัติที่ดีที่สุดสำหรับการนำไปใช้งานใหม่

แฮชที่ถูกตัดทอนและคำแนะนำเรื่องค่าเกลือ

ความปลอดภัยของ PSS = min(|modulus|/2, |hash|) - 1 บิต เมื่อ salt_length = hash_length สำหรับ RSA-2048 ที่ใช้ SHA-256 จะมีความปลอดภัย 128 บิต ควรจับคู่ระดับความปลอดภัยให้เหมาะสม: RSA-3072 + SHA-384 สำหรับความปลอดภัย 192 บิต

ตรวจสอบอย่างรวดเร็ว

อะไรทำให้ลายเซ็น RSA-PSS มีลักษณะเชิงความน่าจะเป็นเมื่อเทียบกับ PKCS#1 v1.5

สรุปทบทวน

RSA-PSS เป็นวิธีที่ปลอดภัยสำหรับการลงลายเซ็นด้วย RSA ต่อไปเราจะทำความเข้าใจการเข้ารหัสเส้นโค้งวงรี ทั้งเรขาคณิตและพีชคณิตของเส้นโค้ง

คำถามที่พบบ่อย

บทเรียน “RSA-PSS สำหรับลายมือชื่อดิจิทัล” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “RSA-PSS สำหรับลายมือชื่อดิจิทัล” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Cryptology Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Cryptology Academy มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “RSA-PSS สำหรับลายมือชื่อดิจิทัล”

เรียนรู้การเข้ารหัสแบบ PSS ค่าเกลือ และเหตุผลที่ใช้แทน PKCS#1 v1.5 ในการลงนาม คุณปฏิบัติ Cryptology Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Cryptology Academy หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน Cryptology Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน

บทเรียน “RSA-PSS สำหรับลายมือชื่อดิจิทัล” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน Cryptology Academy นี้ได้ไหม

ได้ บทเรียน Cryptology Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. RSA ตามตำราและเหตุใดจึงไม่ปลอดภัย
  2. การเติมข้อมูล PKCS#1 v1.5 และ Bleichenbacher
  3. OAEP: การเติมข้อมูลสำหรับการเข้ารหัสแบบอสมมาตรที่เหมาะสมที่สุด
  4. RSA-PSS สำหรับลายมือชื่อดิจิทัล
← กลับไปที่ Cryptology Academy