Điểm:1

Có những công cụ nào để thiết kế ngược một LFSR bên cạnh BMA?

lá cờ cn

Tôi có một mã thời gian nhất định mà dường như tôi không thể tìm ra. Chúng tôi đã giải mã thành công các mã khác cho cùng mục đích bằng thuật toán Berlekamp-Massey, nhưng mã này dường như có độ phức tạp tuyến tính là 110, điều này không thực tế theo bất kỳ cách nào. Nó cũng không thể được xây dựng lại với đa thức bất khả quy 110 bit mà BMA tìm thấy. Chỉ một vài bit đầu tiên như mong đợi và sau đó các bit dường như bị lật, nghĩa là chúng là đối ứng của các bit mong đợi.

Tôi là người mới bắt đầu sử dụng mật mã học và không biết phải tiếp tục như thế nào vào thời điểm này. Có các thuật toán khác để phân tích LFSR (hoặc các chuỗi giả ngẫu nhiên tương tự) không? Hoặc có ai có manh mối trong những điều kiện nào mà BMA phát hiện ra một đa thức cực kỳ dài như vậy không?

kodlu avatar
lá cờ sa
nếu nó có độ phức tạp tuyến tính là 110, thì chỉ 220 bit (nếu không có lỗi) là đủ thông qua BMA. Tôi cho rằng đó là một chuỗi nhị phân, bạn đã không nêu rõ điều này.
neolith avatar
lá cờ cn
Vâng, nó là một dãy nhị phân hay GF(2) như các nhà toán học nói. Chà, thực ra chúng ta không biết, nhưng tôi đã phân tích dãy số theo giả định đó, bởi vì các dãy số khác mà chúng tôi đã giải mã thành công cũng là nhị phân.
Điểm:2
lá cờ us

Không rõ chính xác "mã thời gian nhất định" là gì, nhưng tôi sẽ hiểu nó có nghĩa là một chuỗi có độ dài hữu hạn $s_0, s_1, \ldots, s_{N-1}$ của $N$ chút ít. Bản thân chuỗi có thể được tạo ra hoặc không bởi một LFSR -- chúng tôi không biết -- nhưng chúng tôi muốn tìm một LFSR (Fibonacci) tạo ra chuỗi.

Hãy thiết lập sân khấu một chút. Một Fibonacci LFSR có độ dài $n$ là một mảng của $n$ bit có giá trị ban đầu $$(s_0, \quad s_1,\quad \ldots, \quad s_{n-2}, \quad s_{n-1})$$ và các giá trị liên tiếp $$(s_0, \quad s_1, \quad \ldots, \quad s_{n-2}, \quad s_{n-1})\ \downarrow\ (s_1, \quad s_2, \quad \ldots, \quad s_{n-1}, \quad s_n)\ \downarrow\ (s_2, \quad s_3, \quad \ldots, \quad s_n, \quad \quad s_{n+1})\ \downarrow\ \cdots \quad \cdots$$ trong đó nội dung mảng dịch chuyển sang trái ở mỗi bước (chu kỳ đồng hồ) để các bit rơi xuống ngoài cùng bên trái (LFSR đầu ra) là chuỗi đã cho, trong khi các bit được hiển thị dưới dạng vào LFSR bên phảiđang được tính toán như một kết hợp tuyến tính (còn gọi là tổng độc quyền-HOẶC) của một số của LFSR nội dung ở bước trước. Đặc biệt, đối với $i \geq 0$, các chuyển đổi trạng thái có thể được thể hiện như $$\biggr(s_i, \quad s_{i+1}, \ldots, \quad s_{i+n-2}, \quad s_{i+n-1}\biggr)\ \downarrow\ \biggr(s_{i+1}, \quad s_{i+2}, \ldots, \quad s_{i+n-1}, \quad {\Large{\oplus}}_{j=0}^ {n-1}c_{n-j} s_{i+j}\biggr),$$ ở đâu $c_i$có giá trị $0$ hoặc $1$, sao cho tuyến tính sự phối hợp $c_ns_i\oplus c_{n-1}s_{i+1} \oplus \cdots \oplus c_1s_{i+n-1}$ của trước Nội dung LFSR đang được cho ăn trở lại vào đầu bên phải của LFSR như $s_{n+i}$ thực sự là tổng Exclusive-OR của một vài bit đã chọn của nội dung trước đó (những nội dung tương ứng $c_i$ có giá trị $1$). Do đó, thanh ghi dịch chuyển phản hồi tuyến tính tên được khởi tạo thành LFSR.

Với mô tả ở trên, một câu trả lời cho câu hỏi về LFSR là tầm thường theo một nghĩa nào đó: một $N$ giai đoạn LFSR với hệ số phản hồi $(c_N,c_{N-1}, \cdots, c_1) = (1,0,0,\cdots, 0)$ và tải ban đầu $\big(s_0, s_1, \ldots, s_{N-1}\big)$ sẽ tạo ra sự lặp lại vô tận $$s_0, s_1, \ldots, s_{N-1},s_0, s_1, \ldots, s_{N-1}, s_0, s_1, \ldots, s_{N-1}, \cdots$$ của mã thời gian nhất định $s_0, s_1, \ldots, s_{N-1}$ cho sự vĩnh hằng. Ngoài ra, không tí nào sự lựa chọn khác của $(c_N,c_{N-1}, \cdots, c_1)$ sẽ lấp đầy thanh ghi ca bằng thứ khác, nhưng thứ đầu tiên $N$ bit ra vẫn sẽ được $s_0, s_1, \ldots, s_{N-1}$ và những gì tiếp theo sau đó sẽ khác. Đây rõ ràng không phải là điều chúng tôi muốn, và vì vậy chúng tôi tìm kiếm một tiêu chí tốt hơn: tìm ngắn nhất LFSR (và tải ban đầu của nó) sẽ tạo ra $s_0, s_1, \ldots, s_{N-1}$, và đó chính xác là những gì thuật toán Berlekamp-Massey tìm thấy.

Thuật toán Berlekamp-Massey là một quá trình lặp đi lặp lại bao gồm việc tìm LFSR ngắn nhất tạo ra LFSR đầu tiên $t$ chút ít $s_0, s_1, \ldots s_{t-1}$ và kiểm tra xem LFSR tìm thấy $s_t$ một cách chính xác. Nếu vậy, $s_{t+1}$ được kiểm tra, trong khi nếu không, $c_i$được cập nhật để LFSR sửa đổi tạo ra $s_t$. Thông thường, nhưng không phải luôn luôn, độ dài của LFSR tăng lên. Quá trình lặp lại tiếp tục cho đến bit khả dụng cuối cùng $s_{N-1}$ đã được xử lý, do đó khi thuật toán Berlekamp-Massey kết thúc, LFSR được tổng hợp sẽ tạo ra toàn bộ chuỗi $s_0, s_1, \ldots, s_{N-1}$ ở đầu ra của nó. Nếu LFSR tổng hợp có $n\leq N$ các giai đoạn, sau đó tải ban đầu của nó là $\big(s_0, s_1, \ldots, s_{n-1}\big)$ (cái nào đầu tiên $n$ bit đầu ra) và LFSR tính toán chính xác $s_n, s_{n+1}, \cdots, s_{N-1}$ (tức là phần còn lại của dãy đã cho). Độ dài của LFSR được tổng hợp bởi thuật toán Berlekamp-Massey được đảm bảo là tối thiểu: không LFSR tạo ra $s_0, s_1, \ldots, s_{N-1}$ có thể có ngắn hơn chiều dài. Tuy nhiên,không tuyên bố rằng $n$ đảm bảo nhỏ hơn $N$; rất có thể các giải pháp tầm thường được mô tả ở trên là các giải pháp tối thiểu. Thật vậy, tôi lập luận rằng đây thực sự là trường hợp cho phần lớn trình tự; LFSR có chiều dài $N$. Lý thuyết phức tạp Kolmogorov nói rằng chương trình ngắn nhất để in ra hầu hết các chuỗi có độ dài $N$ có chiều dài $N+c$, hay nói một cách thông tục, đối với hầu hết các chuỗi, người ta có thể làm tốt hơn một chút so với việc chỉ lưu trữ chuỗi và in ra; các "$c$" chỉ là độ dài của lệnh "In chuỗi sau". Trong ngữ cảnh của các thanh ghi dịch chuyển, đối với hầu hết các chuỗi độ dài $N$, thanh ghi dịch chuyển ngắn nhất có đầu ra là một chuỗi độ dài nhất định $N$ chỉ là thanh ghi thay đổi độ dài $N$ được khởi tạo theo trình tự đã cho. Phản hồi là gì (nếu có bất kỳ phản hồi nào) không liên quan.

  • Nếu trình tự thực sự được tạo ra bởi một $n$-giai đoạn LFSR như mô tả ở trên, trong đó $n \leq \frac N2$, sau đó là Berlekamp-Massey thuật toán tìm tất cả $n$ hệ số $c_i$ sau đó kiểm tra $s_0, s_1, \ldots, s_{2n-1}$. Tất nhiên, tải ban đầu của LFSR tổng hợp chỉ là $\big(s_0, s_1, \ldots, s_{n-1}\big)$. Từ đây điểm trở đi, thuật toán Berlekamp-Massey có thể tiếp tục kiểm tra phần còn lại của dãy (nếu vậy mong muốn) nhưng không cần cập nhật $c_i$'S bởi vì mỗi lần kiểm tra biểu tượng tiếp theo chỉ báo cáo trở lại rằng mọi thứ đều ổn; LFSR hiện tại cũng tạo ra bit tiếp theo. Tuy nhiên, nói chung, nhà giải mã có không ý tưởng về việc liệu mã thời gian có được tạo bởi LFSR hay không; nó chỉ đơn thuần là một chuỗi các $N$ các bit không rõ nguồn gốc, và vì mục đích của nhà giải mã, tất cả các $N$ bit phải được kiểm tra để tìm ra LFSR ngắn nhất có thể tạo ra $s_0, s_1, \ldots, s_{N-1}$. Nếu các bit bổ sung $s_N, s_{N+1}, \ldots$ có sẵn, thì không có gì đảm bảo rằng LFSR được tìm thấy sau khi kiểm tra $N$ bit cũng sẽ tạo ra các bit bổ sung này. Trên thực tế, toàn bộ ý tưởng đằng sau thuật toán Berlekamp-Massey là nếu thử nghiệm "Liệu LFSR hiện tại cũng tạo ra $s_n$?" không thành công, thuật toán sẽ tổng hợp LFSR đã sửa đổi từ LFSR hiện tại để LFSR đã sửa đổi tạo ra $s_0, s_1, \ldots, s_{n-1},s_n$. Trong quá trình này, các chiều dài của LFSR có thể (hoặc có thể không) tăng lên.
  • Nếu trình tự thực sự được tạo ra bởi một $n$-giai đoạn LFSR như mô tả ở trên, trong đó $\frac N2 < n \leq N$, sau đó thuật toán Berlekamp-Massey tìm LFSR ngắn nhất tạo ra $s_0, s_1, \ldots, s_{N-1}$. Nó có thể, hoặc có thể không, tạo ra các giá trị giống nhau cho $s_N, s_{N+1}, \cdots, s_{2n-1}$ như LFSR thực tế làm.

Với suy nghĩ dài dòng ở trên, chúng ta hãy giải quyết các câu hỏi của OP. Trong tiêu đề, OP yêu cầu

Những công cụ nào có sẵn để thiết kế ngược một LFSR bên cạnh BMA?

Vâng, các thuật toán Euclide mở rộng đối với đa thức, ước chung lớn nhất có thể được sử dụng, nhưng theo một nghĩa nào đó, nó tương đương với thuật toán Berlekamp-Massey; nó có thể được xem như xử lý trình tự theo thứ tự ngược lại $s_{N-1}, s_{N-2}, \cdots, s_1, s_0$ so với thứ tự $s_0, s_1, \cdots, s_{N-2}, s_{N-1}$ được sử dụng bởi thuật toán Berlekamp-Massey.

Trong phần nội dung của câu hỏi, OP phàn nàn

mã này dường như có độ phức tạp tuyến tính là 110, điều này không thực tế theo bất kỳ cách nào.Nó cũng không thể được xây dựng lại với đa thức bất khả quy 110 bit mà BMA tìm thấy. Chỉ một vài bit đầu tiên như mong đợi và sau đó các bit dường như bị lật.

Có khả năng vấn đề này là do sai sót trong quá trình thực hiện BMA. "Không thực tế theo bất kỳ cách nào" cho thấy rằng có lẽ không đủ bộ nhớ được phân bổ để lưu trữ các đa thức khác nhau được sử dụng nội bộ trong BMA hoặc bộ đệm bị tràn, v.v. Như @kodlu chỉ ra, nếu mã thời gian có độ dài $220$ bit, sau đó kiểm tra tất cả $220$ bit có thể dẫn đến LFSR có độ dài $110$. Mặt khác, như đã thảo luận ở trên, nếu mã thời gian có độ dài $110$ hoặc nhiều hơn (có thể $128$ chút ít $= 16$ byte?), BMA cũng có thể tổng hợp một LFSR có độ dài $110$. Cuối cùng, tôi không có lời giải thích nào ngoài lỗi lập trình viên đối với quan sát của OP rằng trong đầu ra LFSR được tổng hợp, "một vài bit đầu tiên" là chính xác nhưng phần còn lại bị lật.

có ai có manh mối trong những điều kiện mà BMA phát hiện một đa thức dài như vậy không?

Xem tài liệu phía trên đường đứt nét trong câu trả lời này.

neolith avatar
lá cờ cn
Trước hết, cảm ơn bạn cho câu trả lời mở rộng này. Tôi có một số câu hỏi. "Thông thường, nhưng không phải luôn luôn, độ dài của LFSR tăng lên.". Tôi đang xem một ví dụ chi tiết về BMA trong một bài báo. Tôi nhớ rằng đôi khi các bit được thêm vào thanh ghi lại bị loại bỏ. 110 bit cũng có thể giảm đi, với điều kiện là có đủ các bit không có lỗi của chuỗi được đưa vào BMA? Nếu không, trong trường hợp không có đủ bộ nhớ, điều này có nghĩa là độ phức tạp tuyến tính chỉ có thể tăng thêm, điều này vẫn không thực tế.
neolith avatar
lá cờ cn
Một prof của Uni của tôi đã có ý tưởng rằng của mình có thể là một máy phát điện thu nhỏ và đề xuất một cuộc tấn công trong một bài báo của Golic. Tôi không chắc liệu có nên đi xuống con đường này chưa. Tôi nghĩ trước tiên chúng ta sẽ kiểm tra lỗi của thuật toán. Đó là từ kỷ nguyên 32 bit và nó thực sự có thể đúng như vậy. Bước tiếp theo sẽ là triển khai thuật toán trong NumPy, nơi không thể xảy ra tất cả các lỗi bộ nhớ. Nếu tất cả những điều này không thành công, có thể BMA phát hiện sai một đa thức bất khả quy hoặc điều đó là không thể, với điều kiện là việc triển khai là chính xác?
Điểm:0
lá cờ ng

Tất cả các LFSR đều có thể được thiết kế ngược với đầu ra ví dụ chính xác, đủ dài và triển khai đúng Berlekamp-Massey.

Nhưng không phải tất cả các chuỗi giả ngẫu nhiên có mục đích tương tự như các chuỗi giả ngẫu nhiên được tạo bởi LFSR cũng được tạo bởi LFSR! Một ví dụ được thảo luận trong câu hỏi này.

Nếu một cái gì đó sử dụng mật mã tốt, ngay cả khi thuật toán được công khai, thì không có cách nào để tìm khóa và dự đoán trình tự từ các ví dụ.

neolith avatar
lá cờ cn
Vâng, đây là kết luận mà chúng tôi cũng đang đến. Nếu mã được mã hóa - điều này không thực tế từ quan điểm hiệu suất, nhưng nhà phát triển sẽ có một số lý do chính đáng - không có cách nào để tìm đa thức sinh hoặc LFSR nếu không có khối lượng công việc và kinh nghiệm khổng lồ. Trong trường hợp này tôi sẽ bỏ cuộc, nhưng tôi chưa sẵn sàng để làm điều đó.

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