Điểm:3

Thuật toán tốt hơn cho Phép lũy thừa mô-đun trên secp256k1/r1

lá cờ us

Tôi biết Lũy thừa mô-đun ($r = b^e \bmod m$) rất quan trọng đối với RSA và tôi có thể tìm thấy một số thuật toán mà nếu e được biểu thị ở dạng nhị phân (đối với exp: )--theo cách như vậy đối với e dài n bit, người ta có thể mong đợi phép toán mô-đun nhân lên ~1,5n vòng.

Tôi đang làm việc để tạo phương pháp khôi phục khóa công khai cho ECC như secp256k1/r1. Có một triển khai rất hiệu quả trong thư viện secp256k1, nhưng điều đó đã được mã hóa bằng mã ASM--khó hiểu. Nhưng ít nhất tôi biết bước đầu tiên--bạn cần khôi phục $ry$ từ $rx$ (tức là r của chữ ký). Nó rất dễ dàng để có được $ry^2$ từ $rx$, nhưng lần tiếp theo tôi sẽ cần thực hiện mô-đun căn bậc hai--có thể được chuyển đổi thành mô-đun lũy thừa trên trường, nghĩa là $e= (p+1)/4.$

OK, vì vậy bây giờ các câu hỏi là:

  1. Có thuật toán nào tốt hơn ngoài Phép lũy thừa mô-đun thông thường để tính ($r = b^e \bmod m$)?
  2. Hoặc cách khác, có bất kỳ thuật toán cắt ngắn nào dành riêng cho secp256k1 mà tôi không cần chạy Hàm lũy thừa mô-đun mà vẫn có thể khôi phục $ry$ từ $rx$?
Điểm:2
lá cờ ng

Không có sự thay thế nào cho phép nhân mô-đun trong các hệ thống mật mã của câu hỏi. Một số ngôn ngữ như Python giúp dễ dàng cho mục đích giáo dục, chỉ có.

Trong RSA và DSA, và ở mức độ thấp hơn là tiền điện tử ECC trên secp256k1 hoặc secp256r1, người ta cần tính toán $b^e\bmod m$ Cho lớn $e$. Các thuật toán nhanh nhất (ví dụ: lũy thừa cửa sổ trượt) thực hiện về $\log_2 e$ bình phương mô-đun và như thế $\approx0.2\,\log_2 e$ phép nhân mô-đun. Tuy nhiên, có những thuật toán khác chỉ tốn kém hơn một chút (ví dụ: thang Montgomery) có thể tốt hơn từ quan điểm bảo mật đối với các kênh bên.

Mỗi phép nhân modulo hoặc bình phương modulo $m$, đối với phép cộng hoặc nhân điểm ở trên hoặc (trong ECC) với một đại lượng vô hướng, có chi phí tính toán tăng nhiều nhất giống như $(\log m)^2$ khi sử dụng các thuật toán đã học ở trường tiểu học thích ứng với các từ máy tính thay vì các chữ số. Điều đó có thể được hạ xuống $(\log m)^{\approx1,6}$ với Karatsuba hoặc $(\log m)^{\approx1,5}$ với Toom-3, nhưng trong ECC mô đun $m$ không đủ lớn để trả nhiều tiền ($m$ là 'chỉ' vài trăm bit trong ECC, thay vì vài nghìn trong RSA/DSA).

Khi phát triển chữ ký hoặc mã hóa bằng cách sử dụng secp256k1 hoặc secp256r1 từ đầu cho mục đích giáo dục, thường có các giai đoạn:

  • Nhận một cái gì đó hoạt động, bằng cách xây dựng phép cộng và nhân đôi điểm trong tọa độ Descartes trên đỉnh của phép nhân mô-đun, sau đó là phép nhân điểm, sau đó là chữ ký hoặc/và mã hóa.
  • Làm cho nó hoạt động nhanh hơn nhiều bằng cách sử dụng biểu diễn điểm tốt hơn, ví dụ: tọa độ xạ ảnh (cho phép trì hoãn phép nghịch đảo mô-đun tốn kém cho đến khi kết thúc phép nhân điểm)
  • Làm cho nó hoạt động an toàn, điều này rất khó và thường đòi hỏi phải viết lại rất nhiều thứ từ đầu.
  • Tối ưu hóa hiệu suất.Những điều này có thể được thử ở bất kỳ giai đoạn nào, nhưng hãy suy nghĩ về câu nói "tối ưu hóa sớm là gốc rễ của mọi tội lỗi".

Một số tài liệu tham khảo trực tuyến về phép nhân và lũy thừa mô-đun (không phải ECC):

Đă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.