Score:0

SSH สร้างคีย์สำหรับอัลกอริทึม RSA อย่างไร

ธง nz

เท่าที่ฉันเข้าใจ หัวใจหลักของอัลกอริทึม RSA คือการมีจำนวนเฉพาะ 2 (ใหญ่) âpâ และ âqâ ดังนั้น ân=pqâ จากนั้น ânâ เป็นกุญแจสาธารณะ และ âpâ เป็นกุญแจส่วนตัว ความปลอดภัยมาจากข้อเท็จจริงที่ว่า ânâ ไม่ใช่เรื่องง่ายที่จะได้รับ âpâ และ âqâ ในขณะที่การตรวจสอบว่า âpâ แยกตัวประกอบนั้นเป็นเรื่องเล็กน้อย ânâ.

คำถามของฉันคือ SSH รับตัวเลขเหล่านี้ในเวลาน้อยกว่าหนึ่งวินาทีได้อย่างไร มี âไลบรารีของจำนวนเฉพาะâ หรือไม่ แน่ใจได้อย่างไรว่า âpâ และ âqâ ของคุณไม่ซ้ำใครสำหรับคุณ มี “จำนวนเฉพาะจำนวนมาก” มากมายที่เป็นไปตามข้อกำหนดของอัลกอริทึมโดยไม่มีการชนกันของ obvios หรือไม่

kelalaka avatar
in flag
https://github.com/openssl/openssl/blob/4cedf30e995f9789cf6bb103e248d33285a84067/crypto/bn/bn_prime.c
kelalaka avatar
in flag
สำหรับการปะทะกัน [Proff Lindell ให้คำตอบมาตรฐานที่นี่](https://crypto.stackexchange.com/a/76766/18298)
Score:3
ธง mu
Dan

สมมติว่าคุณต้องการให้ "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 บิตเหล่านั้นอาจไม่เคยมีอยู่ในคอมพิวเตอร์เครื่องใดในประวัติศาสตร์ของโลก

ฉันหวังว่านั่นจะทำให้คุณพอเข้าใจว่ามันทำงานอย่างไร มันง่ายมาก ฉันได้ละเว้นรายละเอียดบางอย่าง การอภิปรายเกี่ยวกับจำนวนเฉพาะที่ชัดเจน ฯลฯ เนื่องจากได้รับรายละเอียดที่อยู่นอกขอบเขตของคำถามของคุณ

kelalaka avatar
in flag
ประการแรก สิ่งนี้: [GCD กลับมาใช้ RSA ในปี 2019 - การสุ่มที่ดีเป็นทางออกเดียวหรือไม่](https://crypto.stackexchange.com/q/76757/18298) และประการที่สอง OP ถาม ssh คำตอบของคุณเป็นแบบทั่วไป , ไม่ได้ให้รายละเอียดใน ssh!
mu flag
Dan
จุดที่ดี แต่สำหรับข้อแรก ยังมีอีกมากที่จะพูดเกี่ยวกับการสร้างคีย์ และคุณสามารถลงหลุมกระต่ายได้ แต่ฉันพยายามตอบสิ่งที่ฉันเชื่อว่าเป็นสาระสำคัญของคำถามของ OP และฉันได้ดูโค้ด RSA keygen จำนวนมากในสแต็ก TLS จำนวนมาก พวกมันทั้งหมดคล้ายกันมาก ฉันไม่มีเหตุผลที่จะเชื่อว่าการนำ SSH ไปใช้จะทำให้แตกต่างออกไป คุณมีข้อมูลที่ตรงกันข้ามหรือไม่?
kelalaka avatar
in flag
ตัวอย่างเช่น วิธีปฏิบัติทั่วไปก่อนอื่นให้เลือก $e$ จากนั้นเลือกจำนวนเฉพาะ และถ้า $\gcd(\lambda(pq),e) \neq 1$ ก็จะเลือกจำนวนเฉพาะใหม่ q เก่าบางส่วน [1](https://crypto.stackexchange.com/a/27294/18298)
Pythonist avatar
nz flag
ขอบคุณ นี่คือระดับของรายละเอียดที่ฉันกำลังมองหา ฉันจะต้องค้นหาการทดสอบลำดับความสำคัญเหล่านี้—ฉันพบว่ามันสวนทางกับสัญชาตญาณอย่างยิ่ง การค้นหาจำนวนเฉพาะแบบสุ่มนั้นง่ายมาก ฉันเดาได้ว่าโอกาสที่จะพบจำนวนเฉพาะโดยการสร้างตัวเลขสุ่มขนาด 1024 นั้นแทบจะเป็นศูนย์ การลองแค่ประมาณ 360 ครั้งทำให้ฉันทึ่งนอกจากนี้ มันยังทำให้ฉันฉงนสนเท่ห์ว่าคุณสามารถทดสอบลำดับความสำคัญในราคาถูกได้ ในขณะที่การหาปัจจัยของตัวเลขในทางปฏิบัตินั้นหาค่าไม่ได้ สิ่งที่ต่อต้านได้ง่ายจริง ๆ เกิดขึ้นที่นี่!
kelalaka avatar
in flag
เนื่องจากพวกเขาใช้ OpenSSL https://github.com/openssl/openssl/blob/4cedf30e995f9789cf6bb103e248d33285a84067/crypto/bn/bn_prime.c
Swashbuckler avatar
mc flag
SSH ใด OpenSSH? สีโป๊ว? จสช? ปารามิโกะ? หรือใครอีกหลายสิบคน?

โพสต์คำตอบ

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