RSA อนุญาตให้ใช้ขนาดคีย์ใดก็ได้ เนื่องจากการคำนวณจะดำเนินการโดยใช้จำนวนเต็มขนาดใหญ่ที่ไม่ได้ลงนาม ขนาดโมดูลัสเป็นบิตระบุขนาดคีย์
อย่างไรก็ตาม การใช้งานหลายอย่างมีข้อจำกัด ไลบรารีจำนวนมากต้องการโมดูลัสที่เป็นทวีคูณของ 8 บิตเป็นอย่างน้อย แต่โมดูลที่อนุญาตให้เพิ่มทีละ 32 บิตหรือแม้แต่ขนาดคีย์เฉพาะนั้นไม่ใช่เรื่องแปลก หากใช้ขนาดคีย์เฉพาะ โดยทั่วไปขนาดคีย์เหล่านั้นจะเป็นกำลังสอง (ตามที่คุณกล่าวถึง) หรือเพิ่มกำลังสองที่ตามมาของสอง (เช่น 2048 + 1024 = 3072 บิต)
มันสมเหตุสมผลแล้วที่การใช้งานฮาร์ดแวร์จะมีขนาดคีย์สูงสุด การใช้งานมักจะต้องการขนาดคีย์ขั้นต่ำ - เป็นที่ถกเถียงกันว่าควรดำเนินการตรวจสอบประเภทนั้นที่ระดับการใช้งานอัลกอริทึมหรือไม่ โดยส่วนตัวแล้วฉันไม่ชอบมัน
โดยปกติมาตรฐานจะใช้ขนาดคีย์ประเภทนั้น แต่บางครั้งก็ใช้ตัวเลือกอื่นๆ เช่น 1792 บิต (1024 + 512 + 256 = 1792) หรือ 1920 บิต (1024 + 512 + 256 + 128) สำหรับการทำงานของสมาร์ทการ์ด โดยที่ข้อความเข้ารหัสหรือลายเซ็น 2048 บิตจะไม่พอดีกับหนึ่ง (ป้องกัน) Application Protocol Data Unit (APDU) อย่างที่คุณเห็น พวกเขาจะพยายามและคงค่าให้ใกล้เคียงกับเลขยกกำลังของสองให้มากที่สุดเท่าที่จะเป็นไปได้
โปรดทราบว่า PKCS#1 ถูกกำหนดให้เข้ารหัสทั้งโมดูลัสและเลขยกกำลัง แต่ยังรวมถึงข้อความเข้ารหัส / ลายเซ็นเป็นไบต์ (หรือออกเต็ต) ถึงกระนั้น โหมดการเติมที่กำหนดไว้ในนั้นควรใช้งานได้แม้ว่าโมดูลัสจะไม่ใช่ผลคูณของ 8
สิ่งหนึ่งที่ต้องจำไว้คือเลขชี้กำลังส่วนตัวนั้นเป็นค่าสุ่มระหว่าง 0 ถึงโมดูลัส ในทุกโอกาส ขนาดของโมดูลัสจะใกล้เคียงกับโมดูลัส แต่อาจมีขนาดเล็กกว่าหนึ่งไบต์หรือมากกว่าเมื่อเข้ารหัสถึงจำนวนไบต์ขั้นต่ำ