สมมติว่าคุณต้องการให้ "n" เป็น 2048 บิต (RSA 2048) จากนั้น "p" และ "q" จะเป็น 1024 บิต
คอมพิวเตอร์สร้างตัวเลขสุ่ม 1024 บิต (เกือบจะทันที) และทดสอบหาความเป็นอันดับหนึ่ง มีหลายประเภท การทดสอบเบื้องต้นส่วนใหญ่เป็นสถิติ พวกเขาเร็วมาก (ฉันรู้ว่านี่ไม่ใช่การวัดปริมาณ แต่ฉันทำงานบนไมโครคอนโทรลเลอร์แบบฝังที่ทำงานที่ 100MHz โดยไม่มีแคช ดังนั้นฉันจึงไม่มีความคิดเกี่ยวกับความเร็วบนเดสก์ท็อป)
ดังนั้นการสร้างจำนวนบิต 1024 จำนวนมาก ในที่สุดคุณก็จะได้หมายเลขที่ผ่านการทดสอบเบื้องต้นซ้ำหลายครั้ง (จะไม่ลงรายละเอียดตรงนี้เกี่ยวกับสถิติและอะไรคือ "ดีพอ" ก็พอหาได้ทั้งหมด) ทำเช่นเดียวกันเพื่อรับ "q" ของคุณ คูณมัน คุณจะได้โมดูลัส "n" "n" บวก "e" ของคุณ (อาจเป็น 65537) เป็นรหัสสาธารณะของคุณ
อย่างที่คุณจินตนาการได้ ความหนาแน่นเฉพาะจะลดลงเมื่อจำนวนมากขึ้น มีวิธีการ ประเมินความหนาแน่นเฉพาะ ขึ้นอยู่กับขนาดของจำนวนเฉพาะที่คุณพยายามสร้าง 40% ของตัวเลขที่ต่ำกว่า 10 เป็นจำนวนเฉพาะ แต่มีความหนาแน่นเพียง 25% สำหรับตัวเลขที่ต่ำกว่า 100 และแม้แต่น้อยสำหรับตัวเลข 1024 บิต ถ้าจำไม่ผิด โดยเฉลี่ยคุณจะต้องลองใช้รอบการทดสอบการสร้าง/ลำดับความสำคัญ ~360 ครั้งเพื่อค้นหาหมายเลข 1024 บิตที่ทดสอบเป็นจำนวนเฉพาะ ไม่ใช่หลักพันหรือหลักล้าน และสำหรับตัวเลข 512 บิตนั้นอาจต่ำกว่า 100 ครั้ง
เนื่องจากจำนวนช่องว่าง 2^1024 คือ ใหญ่มากไม่น่าเป็นไปได้อย่างยิ่งที่ค่า p & q ของคุณจะตรงกับของคนอื่น ในความเป็นจริง แต่ละสตริง 1024 บิตเหล่านั้นอาจไม่เคยมีอยู่ในคอมพิวเตอร์เครื่องใดในประวัติศาสตร์ของโลก
ฉันหวังว่านั่นจะทำให้คุณพอเข้าใจว่ามันทำงานอย่างไร มันง่ายมาก ฉันได้ละเว้นรายละเอียดบางอย่าง การอภิปรายเกี่ยวกับจำนวนเฉพาะที่ชัดเจน ฯลฯ เนื่องจากได้รับรายละเอียดที่อยู่นอกขอบเขตของคำถามของคุณ