Score:0

จำเป็นต้องเก็บข้อมูลใดบ้างสำหรับคีย์ส่วนตัว RSA สำหรับการถอดรหัส

ธง mx

ฉันใช้ อาร์เอส โมดูลใน Python ฉันใช้บรรทัดต่อไปนี้เพื่อสร้างรหัสสาธารณะและส่วนตัว:

(public_key, private_key) = rsa.newkeys(2048)

จากนั้นฉันเข้ารหัสข้อความโดยใช้:

encrypted_msg = rsa.encrypt (the_msg, public_key)

ตอนนี้สมมติว่าฉันต้องการให้รหัสส่วนตัวกับใครบางคนพร้อมกับข้อความที่เข้ารหัส ข้อมูลใดบ้างที่จะรวมอยู่ในคีย์ส่วนตัวที่ฉันมอบให้กับบุคคลอื่น ถ้าฉันดูที่ คีย์ส่วนตัว โครงสร้างในรหัส Python ฉันเห็นว่าเป็นเช่นนั้น คีย์ส่วนตัว มีฟิลด์ดังต่อไปนี้:

ผ้าปิดตา, blinffac_inverse, ค่าสัมประสิทธิ์, , อี, ประสบการณ์1, ประสบการณ์2, มิวเท็กซ์, , หน้า, ถาม.

ฉันจำเป็นต้องบันทึกและส่งข้อมูลทั้งหมดเหล่านี้ไปยังบุคคลอื่นเพื่อให้เขา/เธอสามารถถอดรหัสข้อความได้หรือไม่ ตัวแปรเหล่านี้คืออะไร?

ma flag
ใน Raw RSA คีย์สาธารณะคือ (n, e) และคีย์ส่วนตัวคือ (n, d) ตัวแปรอื่นๆ ทั้งหมดไม่จำเป็นสำหรับคณิตศาสตร์ แต่การใช้งานซอฟต์แวร์บางอย่างอาจทำให้ใช้ตัวแปรอื่นๆ อย่างหนักเพื่อความเร็ว คุณสมบัติพิเศษ และเหตุผลอื่นๆ
user9278661 avatar
mx flag
@Nayuki ขอบคุณสำหรับการตอบกลับ ตัวแปร `n` เหมือนกันสำหรับคีย์สาธารณะและคีย์ส่วนตัวหรือไม่ หากเป็นเช่นนั้น เพียงต้องการส่ง `d` เป็นคีย์ส่วนตัว นอกจากนี้ ตัวแปรอื่น ๆ ที่ฉันกล่าวถึงในคำถามคืออะไร มีการอ้างอิงที่อธิบายถึงตัวแปรเหล่านั้นหรือไม่?
ma flag
(n = p * q) จะใช้ร่วมกันสำหรับทั้งคีย์สาธารณะและคีย์ส่วนตัว ฉันบอกอีกครั้งว่าตัวแปรอื่นๆ เป็นแบบเฉพาะของการนำไปปฏิบัติ และคุณต้องอ่านเอง
SAI Peregrinus avatar
si flag
"ตอนนี้สมมติว่าฉันต้องการให้รหัสส่วนตัวกับใครบางคนพร้อมกับข้อความที่เข้ารหัส" ทำไมถึงไม่เคยแบ่งปันรหัสส่วนตัว นั่นเป็นการเอาชนะประเด็นของการใช้ RSA ให้อีกฝ่ายสร้างคู่คีย์และให้รหัสสาธารณะแก่คุณ หรือให้ดีกว่านั้น ให้ใช้ [age](https://age-encryption.org) เพื่อรับประโยชน์ด้านความปลอดภัยที่สำคัญบางประการเหนือการเข้ารหัสข้อความด้วย RSA (การทำเช่นนั้นเกือบทุกครั้งจะเป็นความคิดที่ดี)
Score:1
ธง in

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

ฉันค้นหาการใช้งานนี้และพบความหมายต่อไปนี้:

  • คือ โมดูลัส, หมายเลขโมดูโลที่ดำเนินการคีย์เสร็จแล้ว
  • อี คือ เลขยกกำลังสาธารณะพลังที่ข้อความถูกนำไปเข้ารหัส (หรือตรวจสอบความถูกต้องของลายเซ็น)
  • คือ เลขชี้กำลังส่วนตัว. เลขยกกำลัง (โมดูโล่ ) เป็นการดำเนินการผกผันกับการนำตัวเลขมายกกำลัง อี. นี่เป็นเพราะใน RSA สำหรับใดๆ $m$ ในช่วง $(m^e)^d \equiv (m^d)^e \equiv m \pmod n$.
  • หน้า คือ ปัจจัยที่ใหญ่กว่าของ .
  • ถาม คือ ตัวประกอบที่เล็กกว่าของ . ความจริงที่ว่ามันเล็กลงมีความสำคัญต่อความหมายของ ค่าสัมประสิทธิ์.
  • ประสบการณ์1 เป็น $d \mod (p-1)$.
  • ประสบการณ์2 เป็น $d \mod (q-1)$.
  • ค่าสัมประสิทธิ์ เป็น $q^{-1} \mod p$. มันเป็น ค่าสัมประสิทธิ์ สำหรับเทคนิคการเพิ่มความเร็ว CRT
  • ผ้าปิดตา เป็นตัวเลขสุ่มที่เลือกระหว่างการถอดรหัสหรือการเซ็นชื่อ ใช้ระหว่างการดำเนินการเหล่านี้เพื่อซ่อนค่าของหมายเลขส่วนตัวจากการโจมตีด้วยเวลาและพลังงาน: ไปจนถึงการโจมตีด้วยเวลา "ตาบอด"
  • blindfac_inverse เป็นสิ่งที่ตรงกันข้ามกับ ผ้าปิดตา โมดูโล ใช้สำหรับกระบวนการทำให้ไม่เห็น
  • มิวเท็กซ์ เป็นเรื่องภายในของการนำไปใช้ ไม่ใช่ตัวเลข ดูเหมือนว่าจะใช้เพื่อความปลอดภัยของเธรดในการใช้งาน

รหัสสาธารณะประกอบด้วยตัวเลข และ อี.

คีย์ส่วนตัวประกอบด้วยตัวเลข และ ; อี มักจะรวมไว้เพื่อความสะดวก คุณสามารถดำเนินการทั้งหมดด้วยเพียง และรหัสสาธารณะ แต่อาจไม่มีประสิทธิภาพที่เหมาะสมที่สุด

หน้า, ถาม, ประสบการณ์1, ประสบการณ์2, และ ค่าสัมประสิทธิ์ เพิ่มเติม ส่วนตัว ตัวเลขที่เมื่อมีให้จะเพิ่มความเร็วในการถอดรหัส RSA และการดำเนินการเซ็นชื่อ คุณต้องการเก็บตัวเลขเหล่านี้ไว้หากทำได้ แต่ก็ไม่เป็นเช่นนั้น จำเป็น. สำหรับข้อมูลเพิ่มเติมเกี่ยวกับสิ่งเหล่านี้: ทฤษฎีบทส่วนที่เหลือของจีนและ RSA

ผ้าปิดตา และ blindfac_inverse เป็นตัวเลขชั่วคราวที่สร้างขึ้นโดย ตาบอด() ฟังก์ชันในการใช้งาน Python RSA นั้น อย่าบันทึกตัวเลขเหล่านี้

user9278661 avatar
mx flag
ขอบคุณที่เป็นคำตอบที่ดี คุณช่วยกรุณาเพิ่มการอ้างอิงเพื่อความสมบูรณ์ได้ไหม คุณหาคำอธิบายสำหรับพารามิเตอร์เหล่านี้ได้จากที่ใด
Myria avatar
in flag
@user9278661 อืม ฉันเพิ่งรู้ว่าพวกเขาใช้อย่างไร และลิงก์ "CRT และ RSA" เป็นข้อมูลอ้างอิงสำหรับหมายเลขพิเศษ นี่คือเนื้อหา RSA ทั่วไปทั้งหมดและไม่เฉพาะเจาะจงสำหรับ python-rsa เพื่อให้เข้าใจชื่อตัวแปรเฉพาะ ฉันค้นหาซอร์สโค้ดของ python-rsa: https://github.com/sybrenstuvel/python-rsa/blob/main/rsa/key.py

โพสต์คำตอบ

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