Điểm:2

Câu hỏi về hệ số ECDSA trong tấn công mạng

lá cờ in
jin

Cập nhật: Cuối cùng tôi đã thực hiện cuộc tấn công mạng của mình. Vì lý do thực sự khá phức tạp nên tôi quyết định viết một câu trả lời bên dưới để mô tả cách thức hoạt động của nó để bất kỳ ai có câu hỏi tương tự có thể lấy cảm hứng từ công việc của tôi. Câu hỏi không được sửa đổi.

Gần đây tôi đang nghiên cứu tấn công mạng. Tôi đã cố gắng sử dụng dữ liệu từ TPM-THẤT BẠI để giúp tôi hiểu cuộc tấn công này và cố gắng thực hiện một cuộc tấn công bằng cách sử dụng "phương pháp sách giáo khoa" (có một số tối ưu hóa trong các kịch bản tấn công TPM-FAIL). Tôi đã có một số câu hỏi đọc các tài liệu mà tôi không thể tự mình tìm ra. Xin hãy giúp tôi nếu bạn có bất kỳ ý tưởng.

  1. Công thức chữ ký DSA cuối cùng có thể được chuyển thành sau phương trình:

    $k_i-s_i^{-1}r_id-s_i^{-1}H(m)\equiv 0 \pmod{n}$

    trong đó k là khóa tạm thời, (r,s,) là cặp chữ ký, d là khóa riêng, H(m) là bản tóm tắt thông báo như thường lệ... bạn biết cách diễn tập.
    Sau đó nó có thể chuyển sang dạng mạng tinh thể. Một cái gì đó như sau phương trình:

    $k_i+A_id+B_i\equiv 0\pmod n$, ở đâu $A_i=-s_i^{-1}r_i$$B_i=-s_i^{-1}H(m)$

    Điều tôi không hiểu là, tại sao nó phải là tiêu cực? thực sự đã cố sửa đổi tập lệnh tấn công được cung cấp trong TPM-FAIL tập dữ liệu và thấy rằng việc loại bỏ -1 trong A_i và B_i sẽ thực hiện cuộc tấn công thất bại. Nhưng chúng ta có thể viết lại phương trình đầu tiên là:

    $s_i^{-1}r_id+s_i^{-1}H(m)\equiv k_i\pmod{n}$

    Khái niệm tấn công mạng vẫn nên được giữ vững: Nếu mạng vectơ nhỏ, thuật toán giảm cơ sở sẽ tạo ra câu trả lời. Tôi có gì sai?

  2. Điều thứ hai là tôi đã thử sử dụng phương pháp chưa được tối ưu hóa, mạng SVP được xây dựng như bên dưới:

$\begin{bmatrix}n&&&&&\&n&&&&\&&\ddots&&&\&&&n&&\A_1&A_2&\dots&A_t&K/n&\ B_1&B_2&\dots&B_t&&K\end{bmatrix}$

Nhưng chúng ta có thể thấy rõ rằng K/n sẽ là một phân số không thể sử dụng phương thức BKZ() hoặc LLL() trong sagemath. Điều tôi hiểu là chúng ta có thể nhân mọi thứ trong ma trận này với n để mọi thứ trong ma trận này đều là số nguyên. Sau khi áp dụng BKZ(), chúng tôi chia mọi thứ cho n để khôi phục kết quả ban đầu: khóa riêng phải ở cột cuối cùng thứ hai của hàng đầu tiên. Tuy nhiên, tôi không thể khôi phục khóa riêng. Ngay cả khi tôi đã sử dụng 100 chữ ký với rò rỉ 8 bit. Cách tiếp cận của tôi có đúng không?

Trước tiên xin cảm ơn sự giúp đỡ của bạn!

fgrieu avatar
lá cờ ng
Khi bạn viết "tại sao nó phải âm?", bạn đang hỏi tại sao
lá cờ cn
Có thể nào việc lật các dấu hiệu của A và B khiến cuộc tấn công thất bại, vì việc tối ưu hóa định tâm giả định các dấu hiệu tiêu cực và làm cho cuộc tấn công trở nên tồi tệ hơn đối với lựa chọn dấu hiệu của bạn? Nhân tiện, bạn có thể tìm thấy một hướng dẫn hay để tìm hiểu các cuộc tấn công mạng [tại đây](https://ia.cr/2020/1506).
lá cờ in
jin
@j.p. Có thể nhưng thoạt nhìn tôi không thấy bất kỳ sự khác biệt nào. Tôi sẽ cố gắng tự mình tính toán và cập nhật câu hỏi.
lá cờ cn
@jin: Bạn có thể vui lòng đăng cập nhật của mình dưới dạng câu trả lời và chấp nhận nó để câu hỏi của bạn được hệ thống đánh dấu là "đã giải quyết" không? Cảm ơn trước!
Maarten Bodewes avatar
lá cờ in
Chờ đợi câu trả lời của bạn với dự đoán, jin!
Điểm:2
lá cờ in
jin
  1. Câu trả lời ngắn gọn là: Không có gì sai với ý tưởng này. Lý do chính khiến tôi không tấn công thành công sau khi thay đổi dấu hiệu là do có một sự tối ưu hóa trong bài báo TPM-FAIL. Nó loại bỏ chữ ký đầu tiên bằng một số chuyển đổi. Điều này có thể làm giảm kích thước của mạng xuống 1, giúp tăng tốc độ tính toán lên một chút. Kết quả của sự biến đổi là cho $B_i$ có hai thuật ngữ thay vì một. Tôi chỉ thay đổi dấu hiệu cho một thuật ngữ nên cuộc tấn công không thành công.

    Nhân tiện, tôi muốn chỉ ra thêm rằng trong một số bài báo, phương trình này được chuyển đổi thành CVP (bài toán vectơ gần nhất), có dạng $|\alpha \mathbf{t}-\mathbf{u}|_q < K$. Do đó trong trường hợp này $A_i=\mathbf{t}=s_i^{-1}r_i$$B_i=\mathbf{u}=-s_i^{-1}H(m)$

    Thứ hai, có một lo ngại rằng dấu hiệu có thể ảnh hưởng đến thời gian gần đây. Tôi thực sự không thấy nó được áp dụng như thế nào trong phương pháp TPM-FAIL. Cuối cùng, tôi đã sử dụng một cấu trúc mạng khác nên tôi dừng nghiên cứu của mình ở đó.

  2. Mạng cuối cùng tôi chọn hơi khác một chút so với mạng này. Nó dựa trên phương trình này:

    $ |ds_i^{-1}r_i - (-s_i^{-1}H(m))|_n = k_i < n/2^l$

    Chúng ta có thể xây dựng mạng tinh thể sau khi loại bỏ thao tác mod:

    $ d|s_i^{-1}r_i|_n - |(-s_i^{-1}H(m))|_n + C_i n=k_i < n/2^l$

    Để tấn công mạng hoạt động, chúng ta chỉ cần $|k|$ nhỏ và như $k$ luôn luôn tích cực, chúng ta có thể áp dụng gần đây:

    $ d|s_i^{-1}r_i|_n - |(-s_i^{-1}H(m))|_n + C_i n - n/2^{l+1} =k_i - n/2^{ l+1}$ ở đâu $ -n/2^{l+1} < k_i - n/2^{l+1} < n/2^{l+1}$

    Để đảm bảo rằng mọi phần tử trong mạng đều là số nguyên để chúng ta có thể áp dụng LLL hoặc BKZ, điều thông thường chúng ta sẽ làm là nhân cả hai vế với $2^{l+1}$

    $ d[2^{l+1}\times |s_i^{-1}r_i|_n] - [2^{l+1}\times |(-s_i^{-1}H(m))|_n + n] + C_i\times 2^{l+1}n =k_i - n/2^{l+1}$

    Dấu ngoặc vuông đầu tiên sẽ là $A_i$ và thứ hai sẽ là $B_i$. Lưu ý rằng thuật ngữ gần đây được hợp nhất thành $B_i$ vậy có sự đổi dấu.

    Có một số điều cần phải được chỉ ra:

    • Chúng ta cần phải cẩn thận rằng phép nhân của $2^{l+1}$$|s_i^{-1}r_i|_n$ là một phép nhân bình thường, không phải mô đun. Trong sagemath nếu bạn viết

      a = Mod(s_inv * r, n)  
      c = a * b
      

      Dòng thứ hai cũng sẽ trở thành phép nhân mô-đun. Để làm cho nó bình thường, chúng ta cần phải viết

      a = Mod(s_inv * r, n)  
      c = a.lift() * b
      
    • Câu trả lời đúng không nhất thiết phải xuất hiện ở hàng đầu tiên. Tùy thuộc vào số lượng và thuật toán, câu trả lời có thể xuất hiện ở hàng thứ hai hoặc hàng cuối cùng thứ hai. Do đó, cách tốt nhất là kiểm tra cột tương ứng trong mỗi hàng để xem có câu trả lời đúng hay không.

    • Do kết quả của việc làm mới, kết quả có thể không khả quan. Đôi khi nó có thể được $n-d \pmod n$. Vì vậy, đối với mỗi hàng, chúng ta cần kiểm tra cả hai Mod(câu trả lời , n)n- Mod(đáp án ,n)

      cho hàng trong phạm vi (lattice.nrows()):
          # số cột phụ thuộc vào cách bạn xây dựng mạng, trong một SVP bình thường với kỹ thuật nhúng kanaan, cột tương ứng là cột cuối cùng thứ hai
          giải pháp = Mod(lưới[hàng, -2], modulo).lift() 
          nếu check_answer(giải pháp):
              giải pháp trở lại
          nếu check_answer(mô-đun - giải pháp):
              trả về modulo - giải pháp
      

    Nếu tất cả những điều này được xử lý chính xác, bạn sẽ có một cuộc tấn công thành công.

Điểm:0
lá cờ ng

Về câu nghi vấn nắm tay của yhe:

tại sao nó phải là tiêu cực?

đọc theo nghĩa đen và với "nó" liên quan đến số lượng $A_i$$B_i$.

Bộ phương trình thứ hai thực sự là (hoặc có thể đổi thành) $k_i+{A_i}\,d+B_i\equiv0\pmod n$ ở đâu $A_i=-s_i^{-1}\,r_i\bmod n$$B_i=-s_i^{-1}\,H(m)\bmod n$. Các $\bmod n$ được ngụ ý. Vì vậy, trong này $A_i$$B_i$ là không âm.

Đó là theo định nghĩa của $\bmod$ nhà điều hành:

  • $x\bmod n$$z$ trong phạm vi $[0,n)$ với $x\equiv z\pmod n$.
  • $x^{-1}\bmod n$$z$ trong phạm vi $[0,n)$ với $x\,z\equiv1\pmod n$
  • $-x^{-1}\,y\bmod n$$z$ trong phạm vi $[0,n)$ với $x\,z\equiv-y\pmod n$

nhớ lại rằng $x\equiv z\pmod n$ được định nghĩa có nghĩa là $x-z$ là bội số của $n$.


Chúng ta có thể viết lại phương trình đầu tiên là $s_i^{-1}\,r_i+s_i^{-1}\,H(m)\equiv k_i\pmod n$. Khái niệm về tấn công mạng vẫn nên giữ nguyên: Nếu vectơ mạng nhỏ, thuật toán giảm cơ sở sẽ tạo ra câu trả lời. Tôi có gì sai?

Tôi mơ hồ phỏng đoán vấn đề là mã giảm mạng được sử dụng muốn có đầu vào ở dạng ma trận. Chúng ta có thể khớp điều này bằng cách viết lại phương trình dưới dạng $s_i^{-1}\,r_i+s_i^{-1}\,H(m)+k'_i\equiv 0\pmod n$ với $k'_i=n-k_i$. Nhưng hãy nhớ lại rằng cuộc tấn công xoay quanh tính khả thi của việc lựa chọn, bằng một cuộc tấn công theo thời điểm, $i$ như vậy mà $k_i$ nhỏ. Phương pháp lựa chọn tương tự sẽ không mang lại lợi nhuận nhỏ $k'_i$; và tôi không chắc thậm chí có thể có một phương pháp phù hợp.

lá cờ in
jin
Cảm ơn bạn vì câu trả lời. Tôi nghĩ có lẽ tôi đã hiểu sai luật hoạt động của mod? Ta không thể chuyển trực tiếp tập phương trình thứ 1 sang tập phương trình thứ 3 như một phương trình thông thường. Đó có phải là sai lầm tôi đã làm?
fgrieu avatar
lá cờ ng
@jin: khi bạn hỏi "tại sao nó phải âm?" bạn đang hỏi tại sao $A_i$ và $B_i$ phải âm, đó là điều mà câu trả lời của tôi cố gắng giải quyết; hoặc tại sao dấu trừ?
lá cờ in
jin
Tôi nghĩ rằng tôi đã không làm cho câu hỏi này đủ rõ ràng. Tôi thực sự xin lỗi về điều đó. Câu hỏi thực tế của tôi là phương trình đầu tiên cũng có thể được chuyển đổi thành phương trình thứ ba, mà chúng ta không phải nhân -1 khi xây dựng mạng tinh thể. Tôi nên sửa đổi câu hỏi của mình

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