Điểm:11

Tạo số mũ riêng RSA theo FIPS 186-4 trong openssl v1

lá cờ us

Tôi đoán đây là một vấn đề toán học nhiều hơn trong bối cảnh mật mã nên tôi xin lỗi trước nếu đó không phải là nơi thích hợp để hỏi.Về cơ bản, tôi phải kiểm tra xem việc triển khai tạo cặp khóa RSA nhất định có tuân thủ Trin 186-4 hay không. Cụ thể hơn, Phụ lục B-3-1. FIPS 186-4 yêu cầu điều đó $d$ (số mũ riêng) được tạo như sau:

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

Thư viện được đề cập (openssl v1.0.1) tính toán $d$ như vậy:

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

Tôi không thể chứng minh hay bác bỏ liệu hai điều này có tạo ra cùng một bộ câu trả lời cho $d$.
Điều kiện để tạo ra $p$$q$ đó là $(p-1)$$(q-1)$ cả hai đều tương đối nguyên tố để $e$ (số mũ công khai) nên cả hai công thức đều có đáp số.
Cũng kể từ đó $p$$q$ đều là số nguyên tố, $(p-1)$$(q-1)$ cả hai sẽ là số chẵn và từ $a \times b=\text{GDC}(a, \space b) \times \text{LCM}(a, \space b)$ Chúng ta biết rằng $\text{GCD}(p-1, \space q-1) \geq 2$ Vì thế $\text{LCM}(p-1, \space q-1) \neq (p-1)(q-1)$.

Câu hỏi của tôi là chúng giống nhau hay khác nhau?

Tôi cũng sẽ đánh giá cao nếu bạn có thể chỉ cho tôi đi đúng hướng về mặt toán học để tôi có thể tự mình giải quyết vấn đề này.

P.S.: Tôi hiểu đối với openssl v1, có một mô-đun FIPS và openssl v3.0 cũng sẽ cố gắng đăng ký chứng chỉ FIPS 140-2. Tôi không may bị mắc kẹt với phiên bản mà tôi đã đề cập và tôi không thể thay đổi phiên bản đó (điều đó không phụ thuộc vào tôi).

Maarten Bodewes avatar
lá cờ in
Tôi nghĩ rằng bạn đã có một chặng đường khá dài để giải thích cho chính mình và câu trả lời của fgrieu về cơ bản là xác nhận + một số thông tin bổ sung về Trin.Lưu ý rằng ~50% thực tế rất khó thu hẹp vì nó phụ thuộc vào $(p-1)(q-1)$ và thậm chí có thể là sự phân bố của các số nguyên tố. Tuy nhiên, nếu bạn chỉ cần phép tính tuân thủ FIPS, điều đó có nghĩa là bạn có thể thử và sử dụng lấy mẫu từ chối khi tạo cặp khóa RSA (tạo, kiểm tra xem các yêu cầu FIPS bổ sung có được đáp ứng hay không và khởi động lại nếu không đáp ứng). Các khóa riêng trong OpenSSL (với công cụ phần mềm nội bộ) được tạo bằng thông số CRT
dave_thompson_085 avatar
lá cờ cn
Nit: OpenSSL 'v1' không phải là một thứ duy nhất; OpenSSL FIPS-module 2.0.x hiện tại sẽ hoạt động với OpenSSL 1.0.1 và 1.0.2 nhưng không hoạt động với 1.0.0 1.1.0 1.1.1. OpenSSL 3.0.x được thiết kế để hợp lệ, nhưng không theo FIPS 140-2 vì điều đó không còn nữa; nó phải đi cho 140-3 thay thế. Quan trọng hơn, SecurityPolicy (2.0.16) hiện tại liệt kê việc tuân thủ RSA là 186-2 chứ không phải -4 và _keygen_ chỉ là X9,31 trên -2 (nhưng _sign_ và _verify_ là cả X9,31 trên -2 và PKCS1v2 trên -3 /4) và tham chiếu các chứng chỉ CAVP liệt kê "RSA KeyGen FIPS186-2" với gạch ngang cho biết 'không còn được phê duyệt'.
Farzad Sadeghi avatar
lá cờ us
Trong sự tôn trọng, vâng. có thể v1 trong tiêu đề câu hỏi có thể gây hiểu lầm một chút. bạn đúng. Đối với quy trình xác thực FIPS, openssl 3 sẽ sử dụng quy trình xác thực FIPS 140-2 vì tính năng này khả dụng cho đến tháng 9 năm 2021. chúng sẽ không sử dụng FIPS 140-3. Tôi đã xem qua suy nghĩ về mã. Tuy nhiên, họ sẽ tuân thủ FIPS 186-4.
Điểm:10
lá cờ ng

FIPSÂ 186-4's $d_1=e^{-1}\bmod m_1$ với $m_1=\operatorname{lcm}(p-1,q-1)$và OpenSSL của $d_2=e^{-1}\bmod m_2$ với $m_2=(p-1)(q-1)$, khác với xác suất $>1/2$ cho sự lựa chọn ngẫu nhiên của $p$$q$ và cố định $e$ thêm các ràng buộc khác trên $p$$q$ (như phổ biến), hoặc $e$ được chọn một cách ngẫu nhiên sau $p$$q$.

Biện minh: nó giữ $m_2=g\,m_1$ cho số nguyên $g=\gcd(p-1,q-1)$. Điều đó $g$ là một số nguyên ít nhất $2$ (và đáng chú ý thường là một số nguyên chẵn lớn hơn). Nó theo sau $d_2\bmod m_1=d_1$. Nó được xác minh tốt rằng $d_2$ phân bố gần như đều trên khoảng $[0,m_2)$ trong giới hạn là đồng nguyên tố với $m_2$. Do đó, việc giảm mô-đun từ $d_2$ đến $d_1$ gây ra một sự thay đổi với xác suất bên cạnh $1-1/g$, luôn luôn là ít nhất $1/2$. Thật dễ dàng để làm một ví dụ nơi điều đó xảy ra. ràng buộc $1/2$ cho xác suất mà $d_1\ne d_2$ có thể được cải thiện (tăng lên, hơn một chút $2/3$ thực sự) bằng cách xem xét phân phối của $g$.

Sự khác biệt thường xuyên như vậy không tệ như người ta tưởng, bởi vì

  • Điều gì thực sự cần thiết cho $d$ hoạt động (khi nào và nếu được sử dụng làm số mũ riêng RSA, hoặc để tính toán hoặc kiểm tra $d_p$$d_q$ ) đó là $e\,d\equiv1\pmod{\operatorname{lcm}(p-1,q-1)}$ (giả định $p$$q$ là các số nguyên tố phân biệt). Cả hai $d_1$$d_2$ phù hợp với điều này, và phù hợp với PKCS#1 mà yêu cầu bổ sung $0<d<n$ (theo sau từ $d_1<m_1<m_2<n$$d_2<m_2<n$).
  • Trong thực tế $d$ hiếm khi được sử dụng, vì thao tác khóa riêng nhanh hơn với Định lý phần dư Chineese, thường chỉ sử dụng $(n,e,p,q,d_p,d_q,q_\text{inv})$ hoặc một tập hợp con của điều đó, trong trường hợp đó, các vấn đề duy nhất có thể xảy ra với $d_1$ hoặc $d_2$ là khi nó được kiểm tra lần đầu tiên và điều đó chắc chắn sẽ được phát hiện bằng cách nhập khóa và sử dụng một lần.
  • Bất kỳ khóa FIPSÂ 186-4 RSA nào cũng được chấp nhận bởi bất kỳ phiên bản OpenSSL nào. Tôi sẽ không đặt cược ngôi nhà theo hướng khác, nhưng rất hiếm khi nhập khóa từ OpenSSL vào thiết bị FIPSÂ 140. Điều đó thậm chí có thể bị cấm trong chế độ FIPS và thiết bị FIPS (ít nhất là ở chế độ không phải FIPS) sẽ được phép chấp nhận bất kỳ giá trị toán học nào $d$ bao gồm $d_2$, hoặc bỏ qua giá trị đã cho $d$.
poncho avatar
lá cờ my
Cũng lưu ý rằng, trong thực tế, giá trị thực của $d$ thường bị bỏ qua. Thay vào đó, chúng tôi thường sử dụng các tham số CRT ($p, q, dp, dq, qinv$) và các tham số đó hóa ra đều giống nhau cho dù bạn sử dụng $\phi(n)$ hay $\operatorname{ lcm}(p-1,q-1)$ định nghĩa của $d$...
dave_thompson_085 avatar
lá cờ cn
FWIW, FIPS186-4 (và -3) 5.1 nói rõ ràng rằng biểu diễn CRT là 'được phép'; nó không đề cập rõ ràng đến việc sử dụng nó, nhưng tham chiếu PKCS1v2.1 và tất nhiên PKCS1 trở lại v1.5 ít nhất có CRT ưu tiên cho cả lưu trữ và vận hành.
Điểm:2
lá cờ cn

Theo hiểu biết của tôi, yêu cầu trong FIPS 186-4 được sử dụng để tính khóa riêng $d$ bội chung nhỏ nhất của $p-1$$q-1$ thay vì sản phẩm của họ có mục đích ngăn chặn các cuộc tấn công chống lại nhỏ $d$ Thích Cuộc tấn công của Wiener. Các chuyên gia tin rằng một người an toàn trước bất kỳ cải tiến nào của cuộc tấn công Wiener, nếu độ dài của $d$ ít nhất là một nửa chiều dài của mô đun $m$.

Như tất cả các biến thể (đã biết) của các cuộc tấn công chống lại khóa riêng nhỏ $d$ làm việc tùy thuộc vào kích thước của nhỏ nhất khả thi $d$ (cái được tính bằng bội số chung nhỏ nhất), NIST nhấn mạnh vào việc sử dụng bội số chung nhỏ nhất, để người ta có thể kiểm tra xem cái nhỏ nhất có thể $d$ là đủ lớn.

Vì NIST yêu cầu điều đó $p$$q$ có cùng kích thước, bạn có thể xác minh yêu cầu về độ dài cho $d$ thay vào đó, chỉ cần kiểm tra xem $d_p$, $d_p+p-1$, $d_q$$d_q+q-1$ khác nhau theo cặp. Nếu các cuộc tấn công kênh bên là một vấn đề đối với bạn, phép thử này có thể được bảo vệ dễ dàng hơn nhiều so với phép tính ước số chung lớn nhất của $p-1$$q-1$, trong những năm qua đã trở thành mục tiêu của một số cuộc tấn công được công bố. Cái mà $d$ bạn sử dụng trong tính toán của mình không quan trọng lắm, vì việc thêm bội số của $(p-1)(q-1)$ đến số mũ là biện pháp đối phó thường được sử dụng chống lại các cuộc tấn công kênh phụ.

fgrieu avatar
lá cờ ng
Thật vậy, thử nghiệm cho $d$ tối thiểu được thực hiện trong FIPS 186-4 sẽ thậm chí còn ít ý nghĩa hơn nếu $d$ không được chỉ định là $d$ dương tối thiểu, như nó vốn có.Nhưng thử nghiệm này dù sao cũng chẳng có ý nghĩa gì, vì (A) thử nghiệm này thất bại với xác suất không đáng kể khi sử dụng các phương pháp tạo tổng thể bắt buộc (tối đa $e$ + số nguyên tố ngẫu nhiên) và (B) có rất nhiều phương pháp để gian lận khóa RSA trình tạo theo cách không thể phát hiện được từ đầu ra. Trong số các thử nghiệm khó chứng minh khác trong FIPS 186-4 là $\lvert p-q\rvert$ tối thiểu; nhưng ít nhất cái sau này là một cách dư thừa để bắt một trình tạo bị kẹt.
lá cờ cn
$d$ nhỏ có thể là một cách vô tội để "gian lận" keygen để có hiệu suất tốt hơn (trong trường hợp một người sợ cuộc tấn công bellcore). Sử dụng sàng cho cả hai số nguyên tố để tiết kiệm thời gian (thu được $|p-q|$ nhỏ, không an toàn) dường như thực sự ít xảy ra hơn.
fgrieu avatar
lá cờ ng
FIPS 186-4 yêu cầu $n$ ít nhất là 1024 bit, với $p$ và $q$ bằng một nửa và $e$ tối đa là 256 bit. Với điều này, thật khó để tạo $p$ và $q$ với $d$ ít hơn một nửa $n$ (giới hạn bắt buộc); và tôi nghĩ là không thể với $p$ và $q$ ở bất kỳ đâu gần với ngẫu nhiên và độc lập, ngay cả khi $e$ được chọn sau đó. Điều đó sẽ làm cho $d$ tối thiểu chỉ phù hợp với $p$ hoặc/và $q$ được tạo thủ công; nhưng các số nguyên tố được chế tạo rất nguy hiểm theo nhiều cách khác nhau, bao gồm một số ít có thể xảy ra dưới dạng (hoặc thậm chí là) rủi ro ngẫu nhiên. Do đó, yêu cầu $d$ tối thiểu có lý do đáng ngờ.
lá cờ cn
Tôi nghĩ mọi người sẽ đồng ý rằng đối với $p$ và $q$ thực sự ngẫu nhiên, yêu cầu $e$ không quá lâu là đủ để tránh những điều tồi tệ xảy ra. Cách duy nhất tôi biết để bán khống $d$ (viết tắt là $e$) là áp đặt một ước số chung lớn cho $p-1$ và $q-1$ (điều này hiếm khi xảy ra do lựa chọn ngẫu nhiên), vì vậy tôi đoán rằng một số yêu cầu của NIST là "đáng ngờ" như cách sử dụng trước đây của "số nguyên tố an toàn" là....

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.