Thuật toán BKZ (Block Korkin-Zolotarev) là một thuật toán để giải bài toán SVP (Shortest Vector Problem) trong hệ cơ sở đại số tuyến tính. Thuật toán BKZ được xem là một trong những thuật toán hiệu quả nhất hiện nay để giải quyết bài toán SVP trên các lưới cơ sở đại số tuyến tính lớn.
Thuật toán BKZ được phát triển dựa trên ý tưởng của thuật toán LLL (Lenstra-Lenstra-Lovász). Tuy nhiên, thuật toán BKZ sử dụng phép biến đổi Gram-Schmidt để giảm thiểu độ dài của các vector trong ma trận cơ sở, cải thiện đáng kể hiệu suất của thuật toán so với LLL.
Thuật toán BKZ là một thuật toán tầng lớp, tức là nó thực hiện các phép biến đổi tối ưu độ dài trên từng khối (block) của ma trận cơ sở, mỗi khối có số cột tăng dần. Thuật toán BKZ thường cho kết quả tốt hơn khi được áp dụng trên các ma trận cơ sở có số chiều lớn và tỉ lệ dài-rộng thấp.
Thuật toán BKZ có độ phức tạp tính toán cao, tuy nhiên nó được sử dụng rộng rãi trong các ứng dụng bảo mật và mã hóa vì tính hiệu quả của nó trong việc tìm kiếm vector ngắn nhất trong các lưới cơ sở đại số tuyến tính.
Hướng dẫn Thuật toán BKZ (Block Korkin-Zolotarev)
Thuật toán BKZ (Block Korkin-Zolotarev) là một thuật toán để giải bài toán SVP (Shortest Vector Problem) trong hệ cơ sở đại số tuyến tính. Sau đây là một hướng dẫn cơ bản về thuật toán BKZ:
- Chuẩn bị dữ liệu:
- Cho trước ma trận cơ sở A của một hệ cơ sở đại số tuyến tính L = {a_1, a_2, …, a_n}.
- Đặt tham số k, t là số khối (block) và giá trị tối thiểu của độ dài vector ngắn nhất cần tìm kiếm, tương ứng.
- Khởi tạo:
- Sắp xếp các vector trong ma trận cơ sở A theo thứ tự tăng dần độ dài của chúng.
- Chọn một khối đầu tiên gồm k vector đầu tiên của ma trận cơ sở A và đặt j=k.
- Vòng lặp chính:
- Thực hiện thuật toán LLL (Lenstra-Lenstra-Lovász) trên khối j của ma trận cơ sở A để thu được một ma trận cơ sở L* với các vector được rút gọn.
- Tìm kiếm vector ngắn nhất trong khối j của ma trận cơ sở L* bằng cách sử dụng thuật toán Babai để tìm kiếm vector gần nhất trong lưới cơ sở đại số tuyến tính L*.
- Nếu độ dài vector tìm kiếm được nhỏ hơn hoặc bằng t, thuật toán kết thúc và trả về vector ngắn nhất đó.
- Nếu không, chọn một khối mới gồm k+1 vector tiếp theo và thực hiện lại thuật toán LLL trên khối mới này.
- Nếu không tìm được vector ngắn nhất thỏa mãn độ dài yêu cầu, ta giảm giá trị của t và thực hiện lại thuật toán từ bước 2.
Độ phức tạp tính toán của thuật toán BKZ phụ thuộc vào số chiều của ma trận cơ sở và giá trị của k và t. Thuật toán BKZ thường cho kết quả tốt hơn khi được áp dụng trên các ma trận cơ sở có số chiều lớn và tỉ lệ dài-rộng thấp.
Ví dụ về Thuật toán BKZ (Block Korkin-Zolotarev)
Giả sử chúng ta có một ma trận cơ sở A có kích thước 4×4 như sau:
2 1 0 1 1 2 1 0 1 1 2 1 0 1 1 2
Ta muốn tìm vector ngắn nhất trong hệ cơ sở này với độ dài tối thiểu là 2. Ta sử dụng thuật toán BKZ với tham số k=2.
Bước 1: Chuẩn bị dữ liệu. Ma trận cơ sở A có kích thước 4×4 và chúng ta muốn tìm vector ngắn nhất có độ dài tối thiểu là 2.
Bước 2: Khởi tạo. Sắp xếp các vector trong ma trận cơ sở A theo thứ tự tăng dần độ dài của chúng. Chọn một khối đầu tiên gồm k=2 vector đầu tiên của ma trận cơ sở A và đặt j=k=2.
2 1 0 1 1 2 1 0
Bước 3: Vòng lặp chính.
- Thực hiện thuật toán LLL trên khối j=2 của ma trận cơ sở A để thu được một ma trận cơ sở L* với các vector được rút gọn. Kết quả thu được là:
1 1 0 1 1 0 1 -1
- Sử dụng thuật toán Babai để tìm kiếm vector ngắn nhất trong khối j=2 của ma trận cơ sở L*. Vector ngắn nhất tìm được có dộ dài là 1.73 và không thỏa mãn yêu cầu về độ dài tối thiểu là 2.
- Chọn một khối mới gồm k+1=3 vector tiếp theo và thực hiện lại thuật toán LLL trên khối mới này. Kết quả thu được là:
1 -1 -1 1 0 1 -1 -1 1 1 1 -1
- Sử dụng thuật toán Babai để tìm kiếm vector ngắn nhất trong khối j=3 của ma trận cơ sở L*. Vector ngắn nhất tìm được có độ dài là 1.73 và không thỏa mãn yêu cầu về độ dài tối thiểu là 2.
- Chọn một khối mới gồm k+1=4 vector tiếp theo và thực hiện lại thuật toán LLL trên khối mới này. Kết quả thu được là:
1 1 -1 -1 -1 -1 1 -1
- Sử dụng thuật toán Babai để tìm kiếm vector ngắn nhất trong khối j=4 của ma trận cơ sở L*. Vector ngắn nhất tìm được có độ dài là 1.73 và không thỏa mãn yêu cầu về độ dài tối thiểu là 2.
- Chọn một khối mới gồm k+1=5 vector tiếp theo và thực hiện lại thuật toán LLL trên khối mới này. Kết quả thu được là:
1 0 -1 -1 -1 -1 0 -1 0 1 1 -1 0 0 0 1 0 0 1 0
- Sử dụng thuật toán Babai để tìm kiếm vector ngắn nhất trong khối j=5 của ma trận cơ sở L*. Vector ngắn nhất tìm được có độ dài là 2 và thỏa mãn yêu cầu về độ dài tối thiểu.
Bước 4: Kết quả. Vector ngắn nhất tìm được là:
0.5858 -0.2929 0.2929 0.7071
với độ dài là 2.0. Ta có thể kiểm tra rằng vector này là một tổ hợp tuyến tính của các vector trong ma trận cơ sở ban đầu A.