Tài liệu Kỹ thuật lập trình - Chương 5: Những thuật toán Logarith rời rạc
lượt xem 10
download
Logarit rời rạc là bài toán khó (chưa biết một thuật toán hiệu quả nào), trong khi bài toán ngược luỹ thừa rời rạc lại không khó (có thể sử dụng thuật toán bình phương và nhân). Tình trạng này giống như tình hình giữa bài toán thừa số nguyên và phép nhân các số nguyên. Chúng đều có thể dùng để xây dựng cấu trúc cho một hệ mật mã. Cùng tham khảo để biết thêm về những thuật toán Logarith rời rạc.
Bình luận(0) Đăng nhập để gửi bình luận!
Nội dung Text: Tài liệu Kỹ thuật lập trình - Chương 5: Những thuật toán Logarith rời rạc
- Chương 5 NHỮNG THUẬT TOÁN LOGARITH RỜI RẠC 5.1 Mở đầu. Phương pháp đơn định Cho G là nhóm nhân Abel, a, b ∈ G . Bài toán tìm kiếm nghiệm của phương trình ax = b gọi là bài toán logarith rời rạc trong nhóm G. Nghiệm x của phương trình gọi là logarith rời rạc cơ số a của b, ký hiệu là log a b , nếu như cơ số a cố định và nếu như nghiệm của phương trình tồn tại; log a b ∈ Z G , nếu như | G |< ∞ . Bài toán logarithm rời rạc có vai trò rất lớn trong ứng dụng của mật mã. Đ ặc biệt quan trọng trong trường hợp G = F (q )* , với q = p l , p là số nguyên tố, l ∈ N , tức là trong trường Galois, cũng như trong trường hợp G là một nhóm điểm của đường cong Elliptic trong trường hữu hạn. Chúng ta xem phương trình a x ≡ b(mod p) (5.1) * trong nhóm Z p , với p là số nguyên tố. Chúng ta giả sử rằng bậc của a (mod p ) bằng p-1. Khi đó phương trình giải được, và nghiệm x là một phần tử của Z p −1 . Trong phần này chúng ta miêu tả phương pháp đơn định để xác định nghiệm của (5.1). Nếu với sự giúp đỡ của phương pháp chọn thì có thể giải phương trình (5.1) cần O( p ) lệnh số học. Nghiệm log a b của phương trình (5.1) có thể tìm theo công thức sau log a b ≡ ∑ (1 − a j ) −1 b j (mod p − 1) , thế nhưng độ phức tạp nếu tính theo công thức này thi sẽ tồi hơn cách lựa chọn. Thuật toán tiếp theo giải phương trình (5.1) có độ phức tạp là O( p1 / 2 log p ) lệnh số học. Thuật toán tương hợp. Bước 1. Gán H := [ p1 / 2 ] + 1 . Bước 2. Tìm c ≡ a H (mod p ) .
- Bước 3. Lập bảng giá trị c u (mod p ),1 ≤ u ≤ H , sắp xếp nó. Bước 4. Lập bảng giá trị b.a v (mod p ),0 ≤ v ≤ H , sắp xếp nó. Bước 5. Tìm sự trùng nhau phần tử từ bảng thứ nhất va bảng thứ hai. Để làm điều này c u ≡ b.a v (mod p ) , từ đây a Hu − v ≡ b(mod p) . Bước 6. Đưa ra giá trị x ≡ Hu − v(mod p − 1). Kết thúc thuật toán. Chúng ta chứng minh sự đúng đắn của thuật toán. Bất kỳ số nguyên x, 0 ≤ x ≤ p − 2 , có thể biểu diễn dưới dạng x ≡ Hu − v(mod p − 1) , ở đây 1 ≤ u ≤ H ,0 ≤ v ≤ H , rõ ràng rằng tập số H,H-1,H-2,…,H-H, 2H, 2H-1,…, H 2 , H 2 − 1 ,…, H 2 − H chứa trong mình tập số 0,1,…,p-2, bởi vì H 2 > p . Từ đây dẫn đến sự đúng đắn của thuật toán. Đánh giá độ phức tạp của thuật toán cũng rõ ràng đúng, bởi vì tập từ N phần tử có thể sắp xếp cần O( N log N ) lệnh số học. 5.2 Thuật toán Pohlig-Xellman Bây giờ giả sử chúng ta biết được sự phân tích thành nhân tử của p-1 ra thừa số s p − 1 = ∏ qiα i i =1 s Lúc này phương trình (5.1) có thể giải cần O ∑ α i (log p + qi ) lệnh số học với sự i =1 giúp đỡ của thuật toán sau. Thuật toán Pohlig-Xellman Bản chất của thuật toán nằm ở chổ, tìm số lượng đủ lớn phương trình x theo α modulo qi với tất cả i, sau đó tìm nghiệm của phương trình ban đầu bằng định lý phần i dư trung hoa. Để tìm x theo một trong các modulo như thế, chúng ta phải giải đ ồng dư thức p −1 p −1 q iα i q iα i (a ) ≡ (a x )(mod p ) Phương trình này giải được với độ phức tạp thời gian là đa thức trong trường hợp nếu như qi không quá lớn (có nghĩa là không vượt qúa (log p)c , c là một hằng số nào đó). Bước 1.Đối với từng số nguyên tố q, q | p − 1 , ta lập bảng giá trị
- rq , j ≡ a j ( p −1) / q (mod p ) , j = 0,..., q − 1 . Bước 2. Đối với từng số nguyên tố q, qα || p − 1 , chúng ta tìm log a b(mod qα ) . Đặt x ≡ log a b(mod qα ) ≡ x0 + x1q + ... + xα −1qα −1 (mod qα ) , với 0 ≤ xi ≤ q − 1 . Lúc này từ (5.1) dẫn đến rằng b ( p −1) / q ≡ a x0 ( p −1) / q (mod p ) . Với sự giúp đỡ của bảng trong bước 1 chúng ta tìm ra x0 .Lúc này rõ ràng ta có 2 (ba − x0 )( p −1) / q ≡ a x1 ( p −1) / q (mod p ) . Theo bảng trong bước 1 ta tìm ra giá trị của x1 và tiếp tục như thế. Giá trị của xi được tìm thấy từ phương trình i −1 i +1 (ba − x0 − x1q −...− xi −1q )( p −1) / q ≡ a xi ( p −1) / q (mod p ) . α Bước 3. Khi tìm log a b(mod qi ), i = 1,..., s , chúng ta tìm log a b(mod p − 1) theo định lý i phần dư trung hoa. Kết thúc thuật toán Chúng ta chứng minh đánh giá độ phức tạp của thuật toán. Tập phần tử s a ( p −1) / qi (mod p) cần ∑ O(log p) lệnh số học. Sau đó tập r i =1 qi , j đối với tất cả qi, j được tính s toán cần ∑ O(q ) lệnh số học. Để tìm giá trị i =1 i xi trong bước 3 cần nâng bậc(có nghĩa tìm i −1 a xi−1q ), tìm phần tử nghịch đảo,nhân, nâng bậc và tiến hành theo bảng. Tất cả kết hợp lại là độ phức tạp của thuật toán được nêu ở trên. Chú ý. Thuật toán Polug-Xellman có độ phức tạp là đa thức O((log p )c ) trong trường 1 hợp khi tất cả các ước nguyên tố qi của p không vượt quá (log p) c , ở đây c1 ,c2 hằng số 2 dương. 5.3 Phương pháp ρ - Pollaid đối với logarithm rời rạc Chúng ta đã tìm hiểu phương pháp ρ - Pollaird đối với nhân tử hóa số nguyên. Bây giờ chúng ta tìm hiểu về bài toán logarithm rời rạc theo modulo là số nguyên tố p. Chúng ta muốn giải phương trình a x ≡ b(mod p) . Để làm việc này chúng ta xem 3 dãy số { ui } , { vi } , { zi } , i = 0,1,2,...,
- Được xác định như sau: u0 = v0 = 0 , z0 = 1 , ui +1 ≡ ui + 1(mod p − 1) , nếu như 0 < zi < p / 3 ; ui +1 ≡ 2ui (mod p − 1) , nếu như p / 3 < zi < 2 / 3 p ; ui +1 ≡ ui (mod p − 1) , nếu như 2 / 3 p < zi < p ; vi +1 ≡ vi (mod p − 1) , nếu như 0 < zi < p / 3 ; vi +1 ≡ 2vi (mod p − 1) , nếu như p / 3 < zi < 2 / 3 p ; vi +1 ≡ vi + 1(mod p − 1) , nếu như 2 / 3 p < zi < p ; zi +1 ≡ bu i +1 a vi +1 (mod p − 1) . Tiếp theo chúng ta xem tập hợp ( zi , ui , vi , z2i , u2i , v2i ) , i = 1,2,3,..., chúng ta tìm vị trí i, sao cho zi = z2i . Từ đẳng thức cuối cùng ta rút ra b u 2 i − u i ≡ a vi − v 2 i (mod p ) . Nếu như gcd(u2i − ui , p − 1) = 1 , thì khi l ∈ Z , l (u2i − ui ) ≡ 1(mod p − 1) chúng ta thu được b ≡ a l ( vi − v 2 i ) (mod p) , từ đây giá trị x cần tìm bằng log a b ≡ l (vi − v2i )(mod p − 1) 5.4 Logarith rời rạc trong trường nguyên tố Trong phần này chúng ta xem thuật toán giải phương trình a x ≡ b(mod p) , (5.2) 1 ở đây p là số nguyên tố. Thuật toán này có độ phức tạp là L p ; c với một số giá trị của 2 hằng số c. Chúng ta cho rằng a (mod p ) có bậc là p-1. Thuật toán Adleman Tầng 1. Hình thành cơ sở nhân tử, bao gồm tất cả các số nguyên tố q, q ≤ B = econst log p log log p Tầng 2. Bằng cách chọn lựa chúng ta tìm số tự nhiên ri sao cho a ri ≡ ∏ q iq (mod p ) , q là số nguyên tố α q≤ B Từ đây dẫn đến ri ≡ ∑ α iq log a q(mod p − 1) . (5.3), q là số nguyên tố q≤B
- Tầng 3. Chọn số lượng đủ lớn biểu thức (5.3), giải hệ phương trình tuyến tính thu được ứng với các ẩn log a q -logarith rời rạc của phần tử của cơ sở nhân tử. Tầng 4. Bằng cách lựa chọn chúng ta tìm ra một giá trị của r, sao cho ar ⋅ b ≡ ∏ q βq ⋅ p1... pk (mod p ) , q≤B ở đây p1 ,..., pk - là các số nguyên tố với độ lớn “trung bình”, có nghĩa B < pi < B1 , với B1 = econst log p log log p Tầng 5. Bằng cách tính toán tương tự như tầng 2 và 3 của thuật toán, tìm ra logarithm rời rạc log a pi đối với các số nguyên tố p1 ,..., pk ở tầng 4. Tầng 6. Xác định giá trị cần tìm log a b : k log a b ≡ −r + ∑ β q log a q + ∑ log a pi (mod p − 1) . q≤ B i =1 Kết thúc thuật toán. Thuật toán COS Tầng 1. Đặt [ ] H := P1 / 2 + 1, J := H 2 − p > 0, L = e log p log log p ,0 < ε < 1 Hình thành tập hợp {q | q < L } ∪ { H + c | 0 < c < L } , 1/ 2 1 / 2 +ε q là số nguyên tố. 1 / 2 +ε Tầng 2. Bằng cách sàng chúng ta tìm cặp c1 ,c2 sao cho 0 < ci < L , i=1,2 ∏q α q ( c1 , c 2 ) ( H + c1 )( H + c2 ) ≡ (mod p ) 1/ 2 q≤L Trong trường hợp này, bởi vì J = O( p1 / 2 ) nên ( H + c1 )( H + c2 ) ≡ J + (c1 + c2 ) H + c1c2 (mod p ) Logarith theo cơ số a chúng ta thu được biểu thức sau log a ( H + c1 ) + log a ( H + c2 ) ≡ ∑α q (c1 , c2 ) log a q (mod p − 1) q ≤ L1 / 2 a có thể tính theo công thức ∏q βq a≡ (mod p ) q ≤ L1 / 2 Từ đây
- 1≡ ∑β q log a q (mod p − 1) q ≤ L1 / 2 Tầng 3. Trên tầng 2 chúng ta tìm được số lượng đủ lớn phương trình, chúng ta giải hệ phương trình tuyến tính thu được và tìm ra log a ( H + c), log a q . Tầng 4. Để tìm x, chúng ta đưa ra giới hạn mới L2 . Bằng cách chọn ngẫu nhiên,chúng ta tìm một giá trị w, thỏa mãn biểu thức ∏q ∏u gq a wb ≡ hu (mod p ) 1/ 2 q
- Vấn đề còn lại là tìm ui thế nào để thỏa mãn phương trình (5.4). Chúng ta có th ể đ ặt u0 = 1 . Nếu như một số ui tìm được, thì từ (5.4) dẫn đến (ba −u i )lq k −i −1 thỏa mãn phương trình x'q = 1(mod p ) . Lúc này có thể tìm t sao cho k −i −1 (ba −u i )lq ≡ c t (mod p ) . Chúng ta đặt ui +1 = ui + tq . Lúc này i k − i −1 k −1 (ba −u i +1 )lq ≡ c t a −tlq ≡ 1(mod p ) Như vậy điều này có nghĩa thỏa mãn (5.4) k − i −1 Nhờ vậy mà chúng ta tìm uk bằng cách thực hiện theo sơ đồ: u0 =1 , ri ≡ (ba −u i )lq (mod p) , ti = log c ri , ui +1 = ui + ti q i . Chúng ta xem ví dụ sau Tìm số n sao cho 2 x ≡ 74(mod163) Ở đây a=2,b=74,p=163, p − 1 = 2.34 p −1 Đặt q=3. Khi đó k=4 và l=2. Ngoài ra c ≡ 2 3 = 254 ≡ 104(mod163) ,chúng ta có thể biểu diễn thuật toán qua bảng sau i 0 1 2 3 ri 1 58 1 104 ti 0 2 0 1 ui +1 1 7 7 34 Từ đây x ≡ 34(mod 81) (5.5) p −1 Bây giờ chọn q=2. Lúc này k=1,l=81 và c ≡ 2 2 ≡ −1(mod163) . Tương tự ta lập bảng i 0 ri -1 ti 1 ui +1 2 Từ đây chúng ta có x ≡ 2(mod 2) (5.6)
- Từ (5.5) và (5.6) suy ra x ≡ 34(mod162) 5.5 Logarith rời rạc trong trường Galois Cố định số nguyên tố p, số tự nhiên n>1, đặt q = p n . Giả sử a là phần tử sinh của nhóm cyclic F (q )* . Chúng ta muốn giải phương trình a x = b trong trường F(q). Để làm điều này chúng ta sử dụng các thuật toán với một cơ sở nhân tử. Chúng ta xem thuật toán index-calculus sau Ý tưởng của thuật toán này là , từ đẳng thức m n ∏ xi = ∏ y j i =1 j =1 Với các phần tử xi , y j nằm trong trường hữu hạn Z p , thì m n ∑ log i =1 a xi ≡ ∑ log a y j (mod p − 1) (5.7) j =1 Khi nhận được số lượng đủ lớn biểu thức (5.7)( điều kiện là ít nhất là phải có một phần tử g, mà log a g đã biết), thì chúng ta có thể giải hệ phương trình tuyến tính với ẩn là log a xi và log a y j trong vành Z p −1 với điều kiện là số lượng ẩn trong hệ không quá lớn. Phương pháp đơn giản để tạo ra biểu thức (5.7) – chọn phần tử bất kỳ g ∈ Z p , tính u = a g (mod p ) và bằng cách lựa chọn chúng ta thử tìm số thỏa mãn điều kiện sau u = ∏ pi Từ ý tưởng trên ta có thuật toán cụ thể sau: Thuật toán index-calculus Tầng 1. (Tính toán ban đầu). Trường F(q) đồng cấu với F ( p )[ y ] / f ( y ) , với f ( y ) ∈ F ( p )[ y ] là đa thức bất khả quy bậc n. Cho nên bất kỳ thành phần của trường F(q) được biểu diễn dưới dạng đa thức bậc không vượt quá n-1. Và nhân các đa thức như vậy sẽ rút gọn theo modulo f(y), điều này chúng ta đã tìm hiểu ở chương trường số. Phần tử a1 = a ( q −1) /( p −1) có bậc là p-1 và tạo thành F ( p )* . Với sự hổ trợ của nó chúng ta lập bảng logarithm “hằng số”- có nghĩa là phần tử của trường nguyên tố F ( p ) ⊆ F (q) . Chúng ta tính a10 = 1, a1 , a12 ,..., a1p − 2 . Tầng 2. (Lựa chọn cơ sở nhân tử). Cơ sở nhân tử B ⊆ F (q ) thành lập từ tất cả các đa thức bất khả quy g bật không lớn hơn t, ở đây t là một số tham số, t
- Tầng 3. (Tìm biểu thức). Lựa chọn ngẫu nhiên m, 1 ≤ m ≤ q − 2 , chúng ta tìm các giá trị sao cho thỏa mãn biểu thức a m ≡ c0 ∏ g α g (m) (mod f ( y )) , g ∈B Với c0 ∈ F ( p ) , từ đây chúng ta tìm được biểu thức m ≡ log a c0 + ∑ α a (m) log a g (mod q − 1) , g ∈B ở đây log a c0 chúng ta đã biết, còn log a g chúng ta chưa biết độ lớn. Tầng 4. (tìm thuật toán cho các phần tử của cơ sở nhân tử). Khi tìm ở tầng 3 với số lượng đủ lớn các biểu thức (lớn hơn |B|), chúng ta giải hệ phương trình tuyến tính trong vành Z q −1 và tìm ra log a g với g ∈ B Tầng 5. (Tìm logarith riêng). Chúng ta tìm một giá trị của m sao cho b ⋅ a m ≡ c1 ∏ g g (mod f ( x)) , β g ∈B ở đây c1 ∈ F ( p ) . Từ đây chúng ta tìm ra giá trị cần tìm log a b ≡ −m + log a c1 + ∑ β q log a g (mod q − 1) g ∈B Kết thúc thuật toán.
CÓ THỂ BẠN MUỐN DOWNLOAD
-
Giáo trình: Bài Tập Kỹ Thuật Lập Trình
152 p | 6027 | 3208
-
Kỹ thuật lập trình
114 p | 797 | 323
-
Giáo trình kỹ thuật lập trình C part 1
22 p | 445 | 156
-
Giáo trình kỹ thuật lập trình C part 2
22 p | 357 | 112
-
Giáo trình kỹ thuật lập trình C part 3
22 p | 325 | 101
-
Giáo trình kỹ thuật lập trình C part 4
22 p | 286 | 96
-
Giáo trình kỹ thuật lập trình C part 7
22 p | 260 | 85
-
Giáo trình kỹ thuật lập trình C part 5
22 p | 263 | 84
-
Giáo trình kỹ thuật lập trình C part 8
22 p | 266 | 78
-
Giáo trình kỹ thuật lập trình C part 6
22 p | 251 | 78
-
Giáo trình kỹ thuật lập trình C part 9
22 p | 234 | 66
-
Tài liệu Kỹ thuật lập trình đệ quy
0 p | 235 | 49
-
Đề thi học kỳ I môn Kỹ thuật lập trình cơ bản
14 p | 497 | 47
-
Giáo trình kỹ thuật lập trình C part 10
19 p | 193 | 44
-
Kỹ thuật lập trình C/C++-Chương: Cơ bản về C++
23 p | 208 | 33
-
Kỹ thuật lập trình C/C++-Chương: Hàm
21 p | 176 | 23
-
Đề thi học kỳ 1 môn Kỹ thuật lập trình cơ bản
14 p | 199 | 18
-
Kỹ thuật lập trình C/C++-Chương: Định nghĩa chồng hàm
21 p | 140 | 14
Chịu trách nhiệm nội dung:
Nguyễn Công Hà - Giám đốc Công ty TNHH TÀI LIỆU TRỰC TUYẾN VI NA
LIÊN HỆ
Địa chỉ: P402, 54A Nơ Trang Long, Phường 14, Q.Bình Thạnh, TP.HCM
Hotline: 093 303 0098
Email: support@tailieu.vn