Score:11

การสร้างเลขชี้กำลังส่วนตัวของ RSA ตาม FIPS 186-4 ใน openssl v1

ธง us

ฉันเดาว่านี่เป็นปัญหาทางคณิตศาสตร์มากกว่าในบริบทของการเข้ารหัส ดังนั้นฉันขออภัยล่วงหน้าหากไม่ใช่สถานที่ที่เหมาะสมที่จะถามโดยทั่วไปฉันต้องตรวจสอบว่าการใช้งานการสร้างคู่คีย์ RSA เป็นไปตาม FIPS 186-4 หรือไม่ โดยเฉพาะอย่างยิ่ง ภาคผนวก B-3-1 FIPS 186-4 จำเป็นที่ $d$ (เลขชี้กำลังส่วนตัว) ถูกสร้างขึ้นดังนี้:

$d = (e^{-1})\bmod(\text{LCM}(p-1, \space q-1))$

ไลบรารีที่เป็นปัญหา (openssl v1.0.1) คำนวณ $d$ เช่นนั้น:

$d = (e^{-1})\bmod((p-1)(q-1))$

ฉันไม่สามารถพิสูจน์หรือหักล้างได้ว่าสองคนนี้สร้างชุดคำตอบเดียวกันหรือไม่ $d$.
สภาพการสร้างของ $p$ และ $คิว$ คือว่า $(p-1)$ และ $(q-1)$ ทั้งคู่ค่อนข้างสำคัญ $e$ (เลขยกกำลังสาธารณะ) ดังนั้นสูตรทั้งสองจึงมีคำตอบ
นอกจากนี้ตั้งแต่ $p$ และ $คิว$ เป็นทั้งนายก $(p-1)$ และ $(q-1)$ จะเป็นเลขคู่และจาก $a \times b=\text{GDC}(a, \space b) \times \text{LCM}(a, \space b)$ เรารู้ว่า $\text{GCD}(p-1, \space q-1) \geq 2$ ดังนั้น $\text{LCM}(p-1, \space q-1) \neq (p-1)(q-1)$.

คำถามของฉันคือพวกเขาเหมือนกันหรือแตกต่างกัน?

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

ป.ล.: ฉันเข้าใจสำหรับ openssl v1 มีโมดูล FIPS และ opensl v3.0 จะพยายามสมัครขอใบรับรอง FIPS 140-2 ขออภัย ฉันติดอยู่กับเวอร์ชันที่ฉันกล่าวถึงและฉันไม่สามารถเปลี่ยนแปลงได้ (มันไม่ได้ขึ้นอยู่กับฉัน)

Maarten Bodewes avatar
in flag
ฉันคิดว่าคุณอธิบายตัวเองได้ค่อนข้างยาวและคำตอบของ fgrieu คือการยืนยัน + ข้อมูลเพิ่มเติมบางอย่างเกี่ยวกับ FIPSโปรดทราบว่า ~50% ที่เกิดขึ้นจริงนั้นยากมากที่จะจำกัดให้แคบลง เนื่องจากขึ้นอยู่กับ $(p-1)(q-1)$ และอาจรวมถึงการกระจายของจำนวนเฉพาะด้วย อย่างไรก็ตาม หากคุณต้องการให้การคำนวณเป็นไปตาม FIPS นั่นหมายความว่าคุณสามารถลองใช้การสุ่มตัวอย่างการปฏิเสธในการสร้างคู่คีย์ RSA (สร้าง ตรวจสอบว่าตรงตามข้อกำหนด FIPS เพิ่มเติมหรือไม่ และรีสตาร์ทหากไม่เป็นเช่นนั้น) คีย์ส่วนตัวใน OpenSSL (พร้อมโปรแกรมซอฟต์แวร์ภายใน) สร้างขึ้นด้วยพารามิเตอร์ CRT
dave_thompson_085 avatar
cn flag
Nit: OpenSSL 'v1' ไม่ใช่สิ่งเดียว โมดูล OpenSSL FIPS ปัจจุบัน 2.0.x ควรทำงานร่วมกับ OpenSSL 1.0.1 และ 1.0.2 แต่ไม่ใช่ 1.0.0 1.1.0 1.1.1 OpenSSL 3.0.x ได้รับการออกแบบมาให้ตรวจสอบได้ แต่ไม่อยู่ภายใต้ FIPS 140-2 เนื่องจากไม่สามารถใช้งานได้อีกต่อไป เลยต้องไปเป็น 140-3 แทน ที่สำคัญกว่านั้น SecurityPolicy ปัจจุบัน (2.0.16) แสดงการปฏิบัติตาม RSA เป็น 186-2 ไม่ใช่ -4 และ _keygen_ เป็น X9.31 ต่อ -2 เท่านั้น (แต่ _sign_ และ _verify_ เป็นทั้ง X9.31 ต่อ -2 และ PKCS1v2 ต่อ -3 /4) และอ้างอิงใบรับรอง CAVP ที่แสดงรายการ "RSA KeyGen FIPS186-2" พร้อมขีดทับเพื่อระบุว่า 'ไม่ได้รับการอนุมัติอีกต่อไป'
Farzad Sadeghi avatar
us flag
ในทางกลับกันใช่ บางที v1 ในชื่อคำถามอาจทำให้เข้าใจผิดเล็กน้อย คุณถูก. สำหรับการตรวจสอบความถูกต้องของ FIPS นั้น opensl 3 จะใช้การตรวจสอบความถูกต้องของ FIPS 140-2 ซึ่งจะใช้ได้จนถึงเดือนกันยายน 2021 โดยจะไม่ใช้ FIPS 140-3 ฉันได้ดูที่ความคิดรหัส พวกเขากำลังจะปฏิบัติตาม FIPS 186-4 อย่างไรก็ตาม
Score:10
ธง ng

FIPS® 186-4's $d_1=e^{-1}\bmod m_1$ กับ $m_1=\ชื่อผู้ประกอบการ{lcm}(p-1,q-1)$และ OpenSSL $d_2=e^{-1}\bmod m_2$ กับ $m_2=(p-1)(q-1)$ต่างกันด้วยความน่าจะเป็น $>1/2$ สำหรับการสุ่มเลือกของ $p$ และ $คิว$ และแก้ไขอย่างใดอย่างหนึ่ง $e$ เพิ่มข้อ จำกัด ต่อไป $p$ และ $คิว$ (ตามธรรมดา).หรือ $e$ เลือกค่อนข้างสุ่มหลังจาก $p$ และ $คิว$.

เหตุผล: มันถือ $m_2=g\,m_1$ สำหรับจำนวนเต็ม $g=\gcd(p-1,q-1)$. ที่ $g$ เป็นจำนวนเต็มอย่างน้อย $2$ (และโดยมากมักจะเป็นจำนวนเต็มคู่ที่มากกว่า) มันเป็นไปตาม $d_2\bmod m_1=d_1$. มันได้รับการยืนยันอย่างดีว่า $d_2$ มีการกระจายอย่างสม่ำเสมอตามช่วงเวลา $[0,m_2)$ ภายใต้ข้อจำกัดของการเป็น coprime ด้วย $m_2$. ดังนั้นการลดโมดูลาร์จาก $d_2$ ถึง $d_1$ ทำให้เกิดการเปลี่ยนแปลงด้วยความน่าจะเป็นข้างๆ $1-1/กรัม$ซึ่งเป็นอย่างน้อยเสมอ $1/2$. เป็นเรื่องง่ายที่จะสร้างตัวอย่างที่เกิดขึ้น ขอบเขต $1/2$ สำหรับความน่าจะเป็นนั้น $d_1\ne d_2$ สามารถปรับปรุงได้ (เพิ่ม, เกินเล็กน้อย $2/3$ จริง) โดยพิจารณาการกระจายของ $g$.

ความคลาดเคลื่อนที่เกิดขึ้นบ่อยครั้งนั้นไม่ได้เลวร้ายอย่างที่คิดเพราะ

  • สิ่งที่จำเป็นจริงๆ $d$ ในการทำงาน (เมื่อใดและหากใช้เป็นเลขยกกำลังส่วนตัวของ RSA หรือเพื่อคำนวณหรือตรวจสอบ $d_p$ และ $d_q$ ) คือว่า $e\,d\equiv1\pmod{\operatorname{lcm}(p-1,q-1)}$ (สมมุติ $p$ และ $คิว$ เป็นจำนวนเฉพาะที่แตกต่างกัน) ทั้งคู่ $d_1$ และ $d_2$ ตรงกับสิ่งนี้และสอดคล้องกับ พีเคซีเอส#1 ซึ่งต้องใช้เพิ่มเติม $0<d<n$ (ที่ตามมาจาก $d_1<m_1<m_2<n$ และ $d_2<m_2<n$).
  • ในทางปฏิบัติ $d$ ไม่ค่อยมีใครใช้ เนื่องจากการทำงานของคีย์ส่วนตัวนั้นเร็วกว่าด้วยทฤษฎีบทส่วนที่เหลือของจีน ซึ่งโดยทั่วไปจะใช้เฉพาะ $(n,e,p,q,d_p,d_q,q_\text{inv})$ หรือส่วนย่อยของสิ่งนั้น ซึ่งในกรณีนี้ปัญหาที่เป็นไปได้เพียงอย่างเดียวคือ $d_1$ หรือ $d_2$ คือเมื่อมีการตรวจสอบครั้งแรก และนั่นจะถูกตรวจพบโดยการนำเข้าคีย์และการใช้เพียงครั้งเดียว
  • คีย์ FIPSÂ 186-4 RSA ใด ๆ ที่ยอมรับโดย OpenSSL เวอร์ชันใดก็ได้ ฉันจะไม่เดิมพันบ้านในทิศทางอื่น แต่จากนั้น ก็ยากที่จะนำเข้าคีย์จาก OpenSSL ไปยังอุปกรณ์ FIPSÂ 140 ที่อาจถูกห้ามในโหมด FIPS และอุปกรณ์ FIPS (อย่างน้อยในโหมดที่ไม่ใช่ FIPS) จะได้รับอนุญาตให้ยอมรับความถูกต้องทางคณิตศาสตร์ใดๆ $d$ รวมทั้ง $d_2$หรือเพิกเฉยต่อสิ่งที่กำหนด $d$.
poncho avatar
my flag
โปรดทราบว่าในทางปฏิบัติ ค่าที่แท้จริงของ $d$ มักจะถูกละเว้น แต่เรามักจะใช้พารามิเตอร์ CRT ($p, q, dp, dq, qinv$) แทน และพารามิเตอร์เหล่านั้นจะเหมือนกันทั้งหมดไม่ว่าคุณจะใช้ $\phi(n)$ หรือ $\operatorname{ lcm}(p-1,q-1)$ คำจำกัดความของ $d$...
dave_thompson_085 avatar
cn flag
FWIW, FIPS186-4 (และ -3) 5.1 กล่าวอย่างชัดเจนว่าการแสดง CRT คือ 'อนุญาต'; มันไม่ได้กล่าวถึงการใช้งานอย่างชัดเจน แต่อ้างอิง PKCS1v2.1 และแน่นอนว่า PKCS1 กลับไปเป็น v1.5 อย่างน้อยก็มี CRT ที่ต้องการสำหรับทั้งการจัดเก็บและการดำเนินการ
Score:2
ธง cn

ตามความเข้าใจของฉัน ข้อกำหนดใน FIPS 186-4 เพื่อใช้สำหรับการคำนวณคีย์ส่วนตัว $d$ ตัวคูณร่วมน้อยของ $p-1$ และ $q-1$ แทนที่สินค้าของตนจะมีวัตถุประสงค์เพื่อป้องกันการโจมตีจากรายย่อย $d$ ชอบ การโจมตีของวีเนอร์. ความเชื่อทั่วไปในหมู่ผู้เชี่ยวชาญคือว่าปลอดภัยจากการปรับปรุงการโจมตีของ Wiener หากความยาวของ $d$ อย่างน้อยครึ่งหนึ่งของความยาวของโมดูลัส $m$.

ในรูปแบบ (ที่รู้จัก) ของการโจมตีคีย์ส่วนตัวขนาดเล็กทั้งหมด $d$ งานขึ้นอยู่กับขนาดของ เล็กที่สุด เป็นไปได้ $d$ (การคำนวณโดยใช้ตัวคูณร่วมน้อย) NIST ยืนยันที่จะใช้ตัวคูณร่วมน้อย เพื่อให้สามารถตรวจสอบได้ว่าตัวคูณร่วมน้อยที่สุด $d$ ใหญ่พอ

ตามที่ NIST ต้องการนั้น $p$ และ $คิว$ มีขนาดใกล้เคียงกัน คุณสามารถตรวจสอบความยาวที่ต้องการได้ $d$ แทนโดยเพียงแค่ตรวจสอบว่า $d_p$, $d_p+p-1$, $d_q$ และ $d_q+q-1$ แตกต่างกันเป็นรายคู่ หากการโจมตีช่องทางด้านข้างเป็นปัญหาสำหรับคุณ การทดสอบนี้สามารถป้องกันได้ง่ายกว่าการคำนวณตัวหารร่วมมากของ $p-1$ และ $q-1$ซึ่งกลายเป็นเป้าหมายของการโจมตีที่เผยแพร่หลายครั้งในช่วงไม่กี่ปีที่ผ่านมา อย่างไหน $d$ คุณใช้ในการคำนวณของคุณไม่ควรสำคัญมากนัก เนื่องจากการเพิ่มทวีคูณของ $(p-1)(q-1)$ ที่ใช้กันทั่วไปในการตอบโต้การโจมตีช่องทางด้านข้าง

fgrieu avatar
ng flag
อันที่จริงแล้ว การทดสอบสำหรับ $d$ ขั้นต่ำที่ทำใน FIPS 186-4 นั้นสมเหตุสมผลน้อยกว่าหากไม่ได้ระบุ $d$ ให้เป็นค่าบวกขั้นต่ำที่เป็น $d$ อย่างที่มันเป็นแต่การทดสอบนี้ก็ไม่สมเหตุสมผลอยู่ดี เนื่องจาก (A) การทดสอบนี้ล้มเหลวโดยมีความน่าจะเป็นเล็กน้อยเมื่อใช้วิธีการสร้างโดยรวมที่ได้รับคำสั่ง (สูงสุด $e$ + ช่วงเวลาสุ่ม) และ (B) มีวิธีการมากมายในการรวมคีย์ RSA เครื่องกำเนิดไฟฟ้าในแบบที่ไม่สามารถตรวจจับได้จากเอาต์พุต ท่ามกลางการทดสอบอื่นๆ ที่ยากจะพิสูจน์ใน FIPS 186-4 คือ $\lvert p-q\rvert$ ขั้นต่ำ; แต่อย่างน้อยอันหลังนี้ก็เป็นวิธีที่ซ้ำซ้อนในการตรวจจับเครื่องกำเนิดไฟฟ้าที่ติดอยู่
cn flag
$d$ ขนาดเล็กอาจเป็นวิธีที่ไร้เดียงสาในการ "ผูกมัด" คีย์เจนเพื่อประสิทธิภาพที่ดีขึ้น (ในกรณีที่ใครกลัวการโจมตีแบบเบลล์คอร์) การใช้ตะแกรงสำหรับจำนวนเฉพาะทั้งสองเพื่อประหยัดเวลา (การได้ $|p-q|$ น้อยและไม่ปลอดภัย) ดูเหมือนจะมีโอกาสน้อยกว่าแน่นอน
fgrieu avatar
ng flag
FIPS 186-4 ต้องการ $n$ อย่างน้อย 1024 บิต โดยที่ $p$ และ $q$ ครึ่งหนึ่งนั้น และ $e$ สูงสุด 256 บิต ด้วยเหตุนี้ จึงเป็นเรื่องยากที่จะสร้าง $p$ และ $q$ ด้วย $d$ น้อยกว่าครึ่งหนึ่งของ $n$ (ขีดจำกัดที่กำหนด); และฉันคิดว่าเป็นไปไม่ได้ที่ $p$ และ $q$ ทุกที่ที่ใกล้เคียงกับการสุ่มและอิสระ แม้ว่าจะเลือก $e$ ในภายหลังก็ตาม นั่นจะทำให้ $d$ ขั้นต่ำมีความเกี่ยวข้องเฉพาะกับ $p$ หรือ/และ $q$ ที่สร้างขึ้นเท่านั้น แต่จำนวนเฉพาะที่ประดิษฐ์ขึ้นนั้นมีอันตรายในหลาย ๆ ทาง รวมถึงบางกรณีที่อาจผ่านไปได้ (หรืออาจเป็น) อุบัติเหตุโดยไม่ได้ตั้งใจ ดังนั้นข้อกำหนดขั้นต่ำ $d$ จึงมีเหตุผลที่น่าสงสัย
cn flag
ฉันคิดว่าทุกคนคงเห็นด้วยว่าการสุ่ม $p$ และ $q$ ที่ต้องการ $e$ ไม่นานเกินไปน่าจะเพียงพอสำหรับการหลีกเลี่ยงสิ่งเลวร้ายที่จะเกิดขึ้น วิธีเดียวที่ฉันรู้ว่าจะได้รับ $d$ แบบสั้น (สำหรับ $e$ แบบสั้น) คือการกำหนดตัวหารร่วมขนาดใหญ่สำหรับ $p-1$ และ $q-1$ (ซึ่งไม่ค่อยเกิดขึ้นจากการสุ่มเลือก) ดังนั้นฉันเดาว่า ข้อกำหนดบางอย่างของ NIST นั้น "น่าสงสัย" เหมือนกับการใช้ "จำนวนเฉพาะที่ปลอดภัย" ในอดีตคือ....

โพสต์คำตอบ

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