BÁO CÁO MÔN HỌC MẬT MÃ VÀ AN TOÀN DỮ LIỆU TÍNH LŨY THỪA VỚI SỐ MŨ LỚN THEO MODULO

15 1K 3
BÁO CÁO MÔN HỌC MẬT MÃ VÀ AN TOÀN DỮ LIỆU TÍNH LŨY THỪA VỚI SỐ MŨ LỚN THEO MODULO

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

BÁO CÁO MÔN HỌC MẬT MÃ VÀ AN TOÀN DỮ LIỆU TÍNH LŨY THỪA VỚI SỐ MŨ LỚN THEO MODULO. Yêu cầu của bài toán tính lũy thừa với số mũ lớn theo phép tính modulo là làm sao tính được phần dư của phép chia ad cho N một cách nhanh nhất, với a, d, N là các số tự nhiên lớn, có thể có hàng trăm chữ số.

Lời cảm ơn Trước tiên, em xin gửi lời cảm ơn sâu sắc nhất đến hai thầy Phạm Bảo Sơn, thầy Nguyễn Phương Thái đã không quản vất vả hướng dẫn em trong suốt thời gian làm khóa luận tốt nghiệp vừa qua.Em cũng chân thành cảm ơn mọi người ở phòng HMI lab đặc biệt là hai anh Nguyễn Quốc Đại và Nguyễn Quốc Đạt đã luôn chỉ bảo mỗi khi em có những vấn đề vướng mắc. Em xin bày tỏ lời cảm ơn sâu sắc đến các thầy cô giáo trong Trường Đại Học Công Nghệ đã tận tình dạy dỗ em suốt bốn năm học qua. Con xin cảm ơn bố, mẹ và gia đình đã luôn bên con, cho con động lực để làm việc tốt hơn. Cảm ơn tất cả bạn bè đã luôn sát cánh cùng tôi. Hà Nội, ngày 20 tháng 5 năm 2011 Ma Trọng Khôi ĐẠI HỌC CÔNG NGHỆ ĐẠI HỌC QUỐC GIA HÀ NỘI  TÍNH LŨY THỪA VỚI SỐ MŨ LỚN THEO MODULO BÁO CÁO MÔN HỌC MẬT MÃ VÀ AN TOÀN DỮ LIỆU Giảng viên : PGS.TS. Trịnh Nhật Tiến Học viên : Ma Trọng Khôi Hà Nội – 2014 Mục lục 2 Chương 1 Giới Thiệu Yêu cầu của bài toán tính lũy thừa với số mũ lớn theo phép tính modulo là làm sao tính được phần dư của phép chia a d cho N một cách nhanh nhất, với a, d, N là các số tự nhiên lớn, có thể có hàng trăm chữ số. a d ≡ ? (modulo N) (1) Trong Toán học và Mã hóa thong tin thì đây là một phép toán khá quan trọng vì nó được ứng dụng ở rất nhiều lĩnh vực. Lấy ví dụ như trong thuật toán mã hóa RSA [1], kiểm tra số nguyên tố [2]. Để giải bài toán này nếu ta thực hiện d-1 phép nhân để tính a d sau đấy chia cho N lấy phần dư thì có thể thấy là cách tính không khả thi vì với a, d, N có tới hàng trăm chữ số. Máy tính tuy có khả năng tính toán rất lơn nhưng việc thực hiện hàng trăm phép nhân số lớn đòi hỏi một bộ nhớ và thời gian tính toán rất lớn và không thực tế. Nội dung báo cáo sẽ giới thiệu các phương pháp để thực hiện phép tính một cách hiệu quả. Trong chương 2 sẽ lần lượt giới thiệu các phương pháp nhị phân [2], m-ary, cửa sổ trượt, chuỗi cộng và cây lũy thừa. Chương 3 sẽ giới thiệu một chương trình thực của báo cáo. Và cuối cùng các kết luận phân tích được sẽ là nội dung của chương 4. 3 Chương 2 Phương Pháp Giải Bài Toán Nội dung chương nhắc lại một số kiến thức cơ bản của đại số tuyến tính để phục vụ cho các nội dung của chương sau 1. Thuật toán nhị phân Gọi là phương pháp nhị phân vì ta sẽ quy đổi d về dạng nhị phân, khi đó d sẽ có dạng: Với β i , 0 ≤ i ≤ log 2 (d) có thể nhận các giá trị 0 và 1. Khi đó a d sẽ bằng: Ta thấy để tính a d thì chỉ cần quan tâm đến các trường hợp β i = 1, 0 ≤ i ≤ log 2 (d). Ví dụ: tính c = a 169 Ta có thể tính được kết quả theo bảng trên, c sẽ bằng a 1 * a 8 * a 32 * a 128 . Số phép nhân cần thực hiện là 7 (tính a 128 ) + 3 (các phép nhân a 1 , a 8 , a 32 , a 128 với nhau). Một câu hỏi đặt ra là tại sao lại chọn hệ cơ số 2 để biểu diễn d mà không chọn hệ cơ số khác lớn hơn, vì hệ cơ số càng lớn thì số phép nhân chẳng phải sẽ càng ít hơn? Câu trả lời là trong máy tính các số được biểu diễn ở dạng nhị phân, nên khi cần tính các giá trị β i ta chỉ cần thực hiện phép toán rất nhanh là dịch chuyển bit. Nếu chọn hệ số lớn hơn thì ta cần thực hiện các phép toán khác phức tạp và mất nhiều thời gian hơn, ví dụ phép modulo, để tìm β i 4 Dưới đây là chương trình viết bằng ngôn ngữ Pascal sử dụng phương pháp nhị phân [2] Độ phức tạp của thuật toán phụ thuộc vào d và bằng O(log 2 (d)). Số lượng phép nhân cần thực hiện bằng log 2 (d) + số phần tử của tập { β i = 1| 0 ≤ i ≤ log 2 (d)}. Như vậy cần tối thiểu là log 2 (d) và tối đa là 2 * log 2 (d). 2. Thuật toán m-ary Cũng tương tự phương pháp nhị phân, nhưng ta biểu diễn số d ở dạng cơ số khác: Phương pháp này sẽ hiệu quả và tối ưu khi ta chọn m = 2 k (k є N, k > 0) Ví dụ: với d = 250, và ta chọn k = 2, m = 4. Khi đó: d = 250 = 11 11 10 10 Giá trị k = 2 có ý nghĩa khi biểu diễn d ở dạng nhị phân thuật toán sẽ quét lần lượt 2 số trên mỗi vòng lặp (với phương pháp nhị phân là quét 1 số với mỗi vòng lặp). Đầu tiên thuật toán sẽ phải tính trước các phần dư của a 0 , a 1 ,…, a m-1 cho N. Như ví dụ trên ta cần tính a 0 , a 1 , a 2 , a 3 . 5 Sau đấy ta thực hiện vòng lặp quét qua chuỗi nhị phân của d từ trái qua phải (ta cũng có thể quét theo chiều ngược lại nhưng sẽ cần thêm một biến nhớ nữa khi viết chương trình), mỗi vòng lặp ta lấy ra hai bit của d. Với ví dụ này ta sẽ cần 4 vòng lặp và các phép tính cần thực hiện được mô tả như bảng sau Số phép nhân cần thực hiện là: 2 (tính a 2 , a 3 ) + 6 (bước a) + 3 (bước b). Ta có thể tối ưu hơn bằng cách thay sửa lại bước a ở mỗi vòng lặp, thay vì thực hiện hai phép nhân ta sẽ dùng phép toán dịch chuyển bit, dịch trái hai bit, như vậy số phép nhân cần thực hiện chỉ còn 2 + 3 phép nhân. Độ phức tạp của thuật toán là: 3. Phương pháp cửa sổ trượt Đây là phương pháp cải tiến cho thuật toán m-ary. Ta nhận thấy khi quét các bit của d các phép nhân cần tính sẽ chỉ phát sinh khi ta gặp các bit 1. Phương pháp cửa sổ trượt nhằm hạn chế số phép nhân dư thừa phải thực hiện khi quét mà chỉ gặp bit 0. Trước tiên ta định nghĩa cửa sổ trượt. Cửa sổ trượt là số bit ta sẽ xử lỷ trong mỗi vòng lặp khi quét qua các bit của d (trong thuật toán nhị phân cửa sổ trượt có độ rộng là 1, và trong ví dụ của thuật toán m-ary cửa sổ trượt có độ rộng là 2). Trong phương pháp này các cửa sổ sẽ có độ rộng tùy biến nhằm thực hiện phép tính một cách hiệu quả nhất. Phương pháp cửa sổ trượt lại tria làm hai phương pháp nhỏ khác tương ứng với cửa sổ trượt sử dụng đó là cửa sổ trượt có kích thước cố định và cửa sổ trượt có kích thước không cố định 6 3.1 Cửa sổ trượt có độ rộng cố định Với phương pháp này cửa sổ được chia làm hai loại là cửa sổ chỉ chứa các bit 0 và cửa sổ có ít nhât một bit 1, cửa sổ có chứa bit 1 sẽ có độ dài cố định là một số tự nhiên w tự nhiên cho trước. Các cửa sổ sẽ được xây dựng theo quy tắc sau. • Cửa sổ có các bit chỉ có giá trị 0 thì có chiều dài tùy ý • Cửa sổ nếu có ít nhất một bit là 1 thì phải có độ dài là w – là một số tự nhiên cho trước (w є N, w > 0) Ví du: với d = 3665 = 111 00 101 0 001. Ta có 5 cửa sổ, các bước tính toán của thuật toán như sau: 3.2 Cửa sổ trượt có kích thước không cố định Phương pháp này cũng có hai loại cửa sổ, loại 1 là cửa sổ chỉ có bit 0, và cửa sổ có chứa bit khác 0. Hai loại cửa sổ này sẽ được nhận biết theo quy tắc sau: Cho trước hai số tự nhiên w và q > 0 • Các cửa sổ chỉ chứa bit 0 phải có độ dài tối thiểu lớn hơn q • Các cửa sổ có chứa bit 1 phải có độ dài không vượt quá w Ví dụ: với w = 5 và q = 2, d = 11173. Các cửa sổ xác định được: 101 0 11101 00 101 Để đoán nhận được các cửa sổ ta có thể dụng Automat được thiết kế như sau: 7 4. Thuật toán cây lũy thừa Trước khi trình bày vào thuật toán ta sẽ tìm hiểu về chuỗi cộng trước, các tính chất của chuỗi cộng là cơ sở cho thuật toán cây lũy thừa 4.1 Chuỗi cộng Chuỗi cộng là một chuỗi số tự nhiên a 0 , a 1 ,…, a n . Chuỗi số này có hai tính chất: • a 0 = 1 • Với một số tự nhiên k ≤ n bất kỳ, ta luôn tìm được hai số tự nhiên i, j: 0 ≤ i,j ≤ n sao cho a k = a i + a j Ta có thể thấy với các phương pháp trước các phép nhân cần thực hiện có thể quy đổi về một chuỗi cộng tương ứng. Ví dụ: phương pháp nhị phân với d = 55. Để tính được a 55 ta sẽ cần tính a 1 , a 2 , a 3 , a 4 , a 7 , a 8 , a 16 , a 23 , a 32 , a 55 . Để tính được a2 ta phải tính a 1 * a 1 , hay a 23 = a 7 * a 16 . Ta có thể thấy các lũy thừa của chuỗi số này chính là một chuỗi cộng: 1, 2, 3, 4, 7, 8, 16, 23, 32, 55. Các phương pháp m-ary, cửa sổ trượt về cơ bản cũng là tìm một chuỗi cộng tương ứng với a n = d. Và người ta đã chứng minh được rằng bài toán tìm một chuỗi cộng ngắn nhất sao cho a n = d là một bài toán NP. 4.2 Cây lũy thừa Phương pháp cây lũy thừa [4] sẽ xây dựng chuỗi cộng trước bằng cách xây dựng một cây lũy thừa có tính chất của chuỗi cộng. Sau đó thứ tự các phép nhân sẽ được thực hiện giựa theo cây này. Cây lũy thừa được xây dựng theo quy tắc sau: • Giả sử đã xây dựng được cây có độ cao là k (ta luôn có thể dựng được cây có độ cao là 1 với nút gốc bằng 1) 8 • Ta sẽ xây dựng các nút có độ cao là k+1. Bằng cách ta xét các nút ở độ cao k, giả sử ta có nút e i có độ cao k. thực hiện phép cộng e i với các nút e j (j ≤ i) đang có trên cây. Nếu tổng của chúng chưa có trên cây thì ta tạo nút con mới của e i có giá trị bằng tổng. Còn nếu tổng của chúng đã có trong cây thì không làm gì cả. Ví dụ: ta xây dựng được một cây lũy thừa như sau: Sauk hi xây dựng được cây rồi, giả sử ta có d = 26, ta lần ngược từ nút 26 đến nút gốc sẽ thu được một chuỗi cộng: 1 2 3 5 10 13 26. Như vậy để tính a 25 , ta sẽ thực hiện các phép nhân sau: a 1 , a 2 = a 1 * a 1 , a 3 = a 2 * a 1 , a 5 = a 2 * a 3 , a 10 = a 5 * a 5 , a 13 = a 10 * a 3 , a 26 = a 13 * a 13 9 Chương 3 Thực Nghiệm Nội dung chương sẽ trình bày về chương trình tính lũy thừa với số mũ lớn theo modulo. Mã nguồn của chương trình được viết bằng Java sử dụng thuật toán nhị phân và đã được đóng gói vào file ExponentialModulo.jar. Để thực thi được chương trình này thì có các yêu cầu sau. Yêu cầu: • Máy tính đã phải được cài đặt JRE (http://www.oracle.com/technetwork/java/javase/downloads/jre7-downloads- 1880261.html). Input: • Chương trình sẽ đọc dữ liệu từ file input.txt, trong đó mỗi một phép tính a d mod N sẽ được biểu diễn trên 1 dòng. Chương trình cho phép bạn thực hiện nhiều phép tính cùng một lúc, bằng cách có thể biều diễn trên nhiều dòng các phép tính. Trong đó mỗi dòng sẽ là một bộ 3 sô a, d, N tương ứng và cách nhau bởi dấu cách. Ví dụ: nếu cần tính 2 3 mod 4 và 5 6 mod 7 thì file input sẽ có hai dòng như sau: 3 3 4 5 6 7 Output: • Kết quả sẽ được lưu ra file output.txt, trong đấy mỗi dòng sẽ là một số tương ứng với kết quả của file input. Với ví dụ input trên kết quả sẽ có hai dòng là: 3 1 10 [...]... chuyển nước và muối khoáng hòa tan II/ Vận chuyển chất hữu cơ 1 Thí nghiệm: (SGK) 2 Kết luận: - Chất hữu cơ được vận chuyển từ lá xuống thân, rễ nhờ mạch rây - Người ta lợi dụng việc này để nhân giống nhanh một số loài cây ăn quả Thân sẽ vận chuyển nước, muối khoáng từ bộ phận nào và đến bộ phận nào của cây? Vận chuyển chất hữu cơ sẽ đi từ bộ phận nào đến bộ phận nào của cây? Bài tập  (?) Một số học sinh... chuyển nước và muối khoáng hòa tan II/ Vận chuyển chất hữu cơ 1 Thí nghiệm 2: Dùng dao sắc bóc một khoanh vỏ trên cành cây Hiện tượng gì sẽ xảy ra sau 1 tháng ? 1 tháng sau THẢO LUẬN (?) Vì sao phía trên vết cắt phình to còn phía dưới thì không ? (?) Mạch rây có chức năng gì ? (?) Nếu đắp đất ẩm vào chỗ cắt thì hiện tượng gì sẽ xảy ra trong những ngày tiếp theo ? (?) Làm sao có thể nhân giống nhanh các... Vận chuyển chất hữu cơ sẽ đi từ bộ phận nào đến bộ phận nào của cây? Bài tập  (?) Một số học sinh trong trường thường dùng vật nhọn để khắc tên lên vỏ cây, theo các em hành động của bạn có đúng không? Vì sao? Dặn • - Trả lời câu hỏi 1,2 SGk và làm bài tập /56 dò:- Chuẩn bò mẫu vật cho bài sau + kẻ bảng • Khoai tây Su hào Gừng Dong ta . độ cao là k (ta luôn có thể dựng được cây có độ cao là 1 với nút gốc bằng 1) 8 • Ta sẽ xây dựng các nút có độ cao là k+1. Bằng cách ta xét các nút ở độ cao k, giả sử ta có nút e i có độ cao

Ngày đăng: 19/10/2014, 21:06

Từ khóa liên quan

Mục lục

  • ĐẠI HỌC CÔNG NGHỆ

  • ĐẠI HỌC QUỐC GIA HÀ NỘI

  • TÍNH LŨY THỪA VỚI SỐ MŨ lỚN THEO MODULO

  • BÁO CÁO MÔN HỌC MẬT MÃ VÀ AN TOÀN DỮ LIỆU

  • Giảng viên : PGS.TS. Trịnh Nhật Tiến

  • Học viên : Ma Trọng Khôi

  • Hà Nội – 2014

  • Trước tiên, em xin gửi lời cảm ơn sâu sắc nhất đến hai thầy Phạm Bảo Sơn, thầy Nguyễn Phương Thái đã không quản vất vả hướng dẫn em trong suốt thời gian làm khóa luận tốt nghiệp vừa qua.Em cũng chân thành cảm ơn mọi người ở phòng HMI lab đặc biệt là hai anh Nguyễn Quốc Đại và Nguyễn Quốc Đạt đã luôn chỉ bảo mỗi khi em có những vấn đề vướng mắc.

  • Em xin bày tỏ lời cảm ơn sâu sắc đến các thầy cô giáo trong Trường Đại Học Công Nghệ đã tận tình dạy dỗ em suốt bốn năm học qua.

  • Con xin cảm ơn bố, mẹ và gia đình đã luôn bên con, cho con động lực để làm việc tốt hơn. Cảm ơn tất cả bạn bè đã luôn sát cánh cùng tôi.

  • Hà Nội, ngày 20 tháng 5 năm 2011

  • Yêu cầu của bài toán tính lũy thừa với số mũ lớn theo phép tính modulo là làm sao tính được phần dư của phép chia ad cho N một cách nhanh nhất, với a, d, N là các số tự nhiên lớn, có thể có hàng trăm chữ số.

  • Trong Toán học và Mã hóa thong tin thì đây là một phép toán khá quan trọng vì nó được ứng dụng ở rất nhiều lĩnh vực. Lấy ví dụ như trong thuật toán mã hóa RSA [1], kiểm tra số nguyên tố [2].

  • Nội dung chương nhắc lại một số kiến thức cơ bản của đại số tuyến tính để phục vụ cho các nội dung của chương sau

  • 1. Thuật toán nhị phân

  • Gọi là phương pháp nhị phân vì ta sẽ quy đổi d về dạng nhị phân, khi đó d sẽ có dạng:

Tài liệu cùng người dùng

Tài liệu liên quan