Nguyên tắc của hệ mã RSA

Một phần của tài liệu Tìm hiểu về thuật toán RSA và lập trình mobile, xây dựng ứng dụng minh hoạ (Trang 27)

5. Hướng nghiên cứu phát triển

2.3.2Nguyên tắc của hệ mã RSA

* Mã hoá:

Với hệ mã RSA, đầu tiên chúng ta cần phải có một cặp khóa lập mã chính là cặp ( e, m) trong đó m là tích của hai số nguyên tố rất lớn nào đó, m=p*q, và e được chọn sao cho (e,Φ(m))=1. Trong trường hợp này Φ(m) = (p -1 )*(q – 1).

Cũng cần phải nói thêm là với các loại mã như mã mũ hay mã RSA mà ta sắp xét thì ta không mã hóa từng chữ cái như với mã Caesar nữa mà thay vào đó là mã hóa từng khối chữ cái của văn bản.

Ta có bảng chuyển tương ứng sau đây : A B C D E F G H I J K L M

01 02 03 04 05 06 07 08 09 10 11 12 13 N O P Q R S T U V W X Y Z

14 15 16 17 18 19 20 21 22 23 24 25 26

Đầu tiên chuyển các chữ cái trong văn bản thành các số tương ứng, sau đó nhóm các số nhận được thành từng nhóm 2k chữ số tương ứng với k chữ cái trong văn bản, và việc chọn k lại liên quan đến việc chọn m lúc đầu, và chúng ta sẽ nói lại ở phần sau. Ví dụ ta lấy m=2.

Tức là ta sẽ nhóm các chữ số lại thành từng khối 4 chữ số .(tương ứng với từng cặp 2 chữ cái ).

Đối với một khối P trong văn bản ( là một số có 4 chữ số ), để mã hóa ta lập khối C tương ứng bằng công thức sau :

E(P) ≡ C ≡ P^e (mod m ) , 0< C < m.

Từ một khối P trong văn bản ta đã mã hóa nó thành khối C.

* Giải mã:

Để giải mã, ta cần phải biết một nghịch đảo d của e modulo Φ(m). Nghịch đảo này tồn tại do lúc đầu ta đã chọn e nguyên tố cùng nhau với Φ(m) .

Tức là tìm d sao cho e*d= 1 + k*Φ(m). Khi đã có nghịch đảo d này, ta có D(C) ≡ C^d ≡ (P^e)^d ≡ P^ e*d ≡ P ^(1+ k*Φ(m)) ≡ P(mod m)

Trong đó P^Φ(m) ≡ 1 mod(m) , khi ( P , m) =1. ( Xác suất để P và m không nguyên tố cùng nhau là rất nhỏ khi p,q chọn đủ lớn). Cặp (d , m) được gọi là cặp khóa giải mã .

- Ví dụ:

Lấy m =53*51=2703 => s = Φ(m) =52*50 = 2600 Chọn e= 3 , dĩ nhiên là (e, s) =1

Giả sử ta cần mã hóa thông báo sau : DAY LA MA RSA

Trước tiên ta chuyển các chữ cái trong văn bản thành các chữ số và nhóm chúng lại thành từng khối như sau :

0401 2512 0113 0118 1901

( Lưu ý là khi khối cuối cùng chỉ có một chữ cái ta thêm vào một chữ cái khác sao cho không gây sự hiểu lầm, thường ta thêm vào chữ X )

Mã hóa toàn bộ văn bản ta được văn bản mật sau đây : 1136 0463 2198 2311 1724

Để giải mã văn bản mật này ta cần tìm một nghịch đảo d của e modulo s=2600.

Dùng thuật toán Euclid mở rộng : Cho a=2600 ; b= 3 u1 = 1 ; u2 = 0 ; u3 = 2600 ; v1 = 0 ; v2 = 1 ; v3 = 3 q = 866 u1 = 0 ; u2 = 1 ; u3 = 3 ; v1 = 1 ; v2 = -866 ; v3= 2 q = 1 u1 = 1 ; u2 = -866 ; u3= 2; v1 = -1 ; v2= 867 ; v3 = 1 q = 2 u1 = -1 ; u2 = 867 ; u3 = 1 suy ra (-1) * 2600 + 867 * 3 = 1 tức là ta có : 867 * 3 ≡ 1 ( mod 2600 ) => d =867 Khi có d, ta giải mã từng khối C bằng công thức : D(C) ≡ C^d ≡ P(mod m)

Ví dụ : 1136 ^ 867 ≡ (401^3) ^ 867 ≡ 401 ^(1 + 2600 ) ≡ 401 *401^ 2600 ≡ 401 (mod 2703 )

Lưu ý là trong ví dụ trên, mọi khối P : 0401 ; 2512 ; 0113 ; 0118 ; 1901 đều nguyên tố cùng nhau với m = 2703 nên ta có P^ Φ(m) ≡ 1 (mod m )

Giờ ta sẽ nói kỹ hơn cách chọn các giá trị m, e, cũng như cách nhóm từng khối chữ số. Chú ý là để giải được mật mã thì phải tìm được d, mà để tìm d trước tiên ta phải tìm được giá trị Φ(m) .

Đầu tiên là chọn m, ta phải lấy m là tích của hai số nguyên tố lớn vì các nguyên nhân sau:

Nếu chọn m chỉ là một số nguyên tố thôi thì người ta sẽ dễ dàng tìm được Φ(m) = m-1

Nếu đặt như vậy thì m chỉ có thể phân tích thành tích của hai số nguyên tố rất lớn .

Khi ta chọn p và q là các số nguyên tố khoảng 100 chữ số thì với những máy tính nhanh nhất hiện nay, để phân tích được m cũng phải mất hàng tỷ năm. (adsbygoogle = window.adsbygoogle || []).push({});

Tiếp theo là việc chọn giá trị e và cách nhóm từng khối chữ số. Với P là một khối đã được nhóm, P là một số có tối thiểu 2 chữ số.

Khi mã hóa P ta được C ≡ P^e (mod m) . Nếu P^e < m thì C = P^e ( với e công khai ).

Như vậy để giải mã , ta chỉ cần tính căn bậc e của C ( tính theo cách thông thường ) .

Vì vậy, khi đã có m , ta phải chọn e sao cho 2 ^ e > m . ( => P^e > m với mọi P ).

Cũng vì lý do đó , ta cũng nên chọn cách nhóm sao cho P đủ lớn . Nhưng P không được vượt quá m vì nếu P > m thì: Khi giải mã một khối C : ta có D(C) ≡ P(mod m) ≡ P1 ( mod m) ( với P1 < m < P ) Ta không tìm được giá trị P ban đầu .

Tóm lại, chúng ta nên chọn m là tích của hai số nguyên tố rất lớn p và q, e là số nguyên tố tùy ý lớn hơn p và q. Nhất thiết phải chọn e thỏa điều kiện 2^e > m. Đối với các chữ số trong văn bản đầu , ta nhóm lại thành từng khối P có độ dài đủ lớn và P không được vượt quá m .

Bây giờ ta sẽ cho thấy Hệ mã RSA là một hệ mã công khai :

Trong một nhóm cá thể cần trao đổi thông tin, mỗi cá thể sẽ chọn cho mình một cặp khóa lập mã (e , m) và thông báo công khai, dĩ nhiên cặp khóa giải mã (d , m) chỉ có người này biết .

Các cá thể khác nếu chỉ biết e và m thì không thể nào tìm được d ( vì không thể phân tích được m ) .

(d , m) là cặp khóa bí mật , phải được giữ kín .

Khi một cá thể nào đó muốn gửi thư mật cho cá thể I, anh ta chỉ cần mã hóa bức thư lại theo công thức lập mã đã được công khai ( của cá I ) sau đó gửi đi. Cá thể I nhận đươc bức thư này , giải mã theo công thức giải mã của mình để biết nội dung. Nếu bức thư này rơi vào tay kẻ khác thì nội dung của nó vẫn đươc an toàn vì chỉ có cá thể I mới có khóa giải mã.

Ta nhắc lại lần nữa là nếu chỉ biết e và m , thì không cho phép tìm ra d. Vì để tìm được d, ta phải tìm được Φ(m), và để tìm được Φ(m) thì ta phải phân tích m ra thừa số nguyên tố.

Nếu p và q là số lớn với chiều dài là 1024 bits, thì với những máy computer nhanh nhất hiện thời cũng phải mất hàng tỷ năm mới có thể phân tích m ra thành p và q.

Nhưng có thể bạn sẽ đặt ra câu hỏi : nếu các số p, q, e quá lớn thì làm sao chúng ta có thể thực hiên các phép tính với chúng . Ở ví dụ phần trước ta chỉ xét số lũy thừa e = 3 và tìm ra được giá trị d= 867 , nhưng hoàn toàn không đi vào phần giải mã một cách cụ thể. Bây giờ chúng ta sẽ tìm hiểu một phương pháp để tính toán modulo với những số mũ rất lớn.

Đó là phương pháp bình phương liên tiếp . Xét ví dụ sau :

p= 61 <- số nguyên tố đầu tiên q = 53 <- số nguyên tố thứ hai p và q phải được giữ bí mật . m=p*q = 3233

e = 17

e và m được thông báo công khai .

ta tìm được nghịch đảo của 17 modulo Φ(3233) là d = 2753

d phải được giữ bí mật .

Chìa khóa riêng là (e,m). Hàm số mã hóa là:

mãhoá(P) ≡ (P^e) mod m≡ (P^17) mod 3233 Hàm số giải mã là:

Giảimã (C) ≡ (C^d) mod m ≡ (C^2753) mod 3233 Để mã hoá số “123”, làm như sau:

Mã hoá(123) ≡ (123^17) (mod 3233 ) ≡

337587917446653715596592958817679803 (mod 3233 ) ≡ 855 Như thế “123” được mã hóa thành “855”

Để giải mã “855”, làm như sau :

giải mã(855) ≡ (855^2753) ( mod 3233 )≡ 123

Viết kết quả ngay ra đây, thì các bạn thấy qúa dễ dàng.

Vấn đề ở chỗ là tìm ra trị số của 855 khi được nâng lên luỹ thừa 2753 . Đây là chỗ mà ta áp dụng phương pháp bình phương liên tiếp :

ta có 2753 = 1010110000012 (adsbygoogle = window.adsbygoogle || []).push({});

2753 = 1 + 2^6 + 2^7 + 2^9 + 2^11 = 1 + 64 + 128 + 512 + 2048

Xét bản luỹ thừa sau đây của 855: 855^1 ≡ 855 (mod 3233) 855^2 ≡ 367 (mod 3233) 855^4 ≡ 367^2 (mod 3233) ≡ 2136 (mod 3233) 855^8 ≡ 2136^2 (mod 3233) ≡ 733 (mod 3233) 855^16 ≡ 733^2 (mod 3233) ≡ 611 (mod 3233) 855^32 ≡ 611^2 (mod 3233) ≡ 1526 (mod 3233) 855^64 ≡1526^2 (mod 3233) ≡ 916 (mod 3233) 855^128 ≡ 916^2 (mod 3233) ≡ 1709 (mod 3233) 855^256 ≡ 1709^2 (mod 3233) ≡ 1282 (mod 3233) 855^512 ≡ 1282^2 (mod 3233) ≡ 1160 (mod 3233) 855^1024 ≡ 1160^2 (mod 3233) ≡ 672 (mod 3233)

855^2048 ≡ 672^2 (mod 3233) ≡ 2197 (mod 3233) Vậy: 855^2753 (mod 3233) ≡ 855^(1 + 64 + 128 + 512 + 2048) (mod 3233) ≡ 855^1 * 855^64 * 855^128 * 855^512 * 855^2048 (mod 3233) ≡ 855 * 916 * 1709 * 1160 * 2197 (mod 3233) ≡ 794 * 1709 * 1160 * 2197 (mod 3233) ≡ 2319 * 1160 * 2197 (mod 3233) ≡ 184 * 2197 (mod 3233) ≡ 123 (mod 3233) ≡ 123

Đây cũng chính là cách mà các máy tính của chúng ta làm việc để tính lũy thừa các số nguyên.Ưu điểm của nó là không bao giờ phải làm việc với nhũng

số lớn hơn ( m – 1 )^2.

2.3.2.2.Thuật toán

- Bước khởi đầu của thuật toán

a. Chọn hai số nguyên tố ngẫu nhiên p và q, và tính tích n = p*q. Sau đó tính θ( )n = (p-1)(q-1).

b. Tìm số d sao cho d và PHI(n) là nguyên tố cùng nhau (d,PHI(n)) = 1. c. Tìm số e thõa mãn d*e = 1 (Mod n)

Trong đó d và e lần lượt là các khóa giải mã và khóa công khai. Hàm mã hóa là Ek = Me mod n.

Hàm giải mã là: Dk = (Ek)d mod n. - Mô tả thuật toán:

Bước 1: Chọn p, q là hai số nguyên tố và tính n = p*q. Số n được gọi là Modul của hệ mã.

Bước 2: Tìm ngẫu nhiên số e thỏa mãn các điều kiện sau đây: a) 1 < e < n.

gọi là số mũ mã hóa.

Bước 3: Tính d sao cho d*e mod f(n) = 1; Với 1 < d < n. d được gọi là số mũ giải mã.

Khi đó khóa công khai là cặp (e,n) và khóa mật là cặp số (d,e). - Cài đặt thuật toán

Thuật toán tìm p,q

Tìm p:

+ Khởi tạo 1số ngẫu nhiên (trong khoảng từ 2 đến 200) + Duyệt từ i=2 đến 200 nếu n%i=0 thì số p=n (n>2) Tìm q:

+ Khởi tạo 1 số ngẫu nhiên x (trong khoảng từ 2 đến 300) + Lấy x % i( với i=2...x) nếu dư =0 và số đó >2 thì q=x Tìm q

+Khởi tạo một số x ngẫu nhiên (trtong khoảng 2 đến 300) +Lấy x%i( với i=2..x). Nếu dư=0 và >2 thì q=x

 Tính φ(n)

+n=p*q

+φ(n)=(p-1)(q-1)

 Thuật toán tính khoá công khai

+ Tạo biến kiểm tra trạng thái

+ Lần lượt thực hiện phép lấy dư của số φ(n) (với i=2 đến φ(n) )

+ Nếu biến kiểm tra trạng thái = false và số dư khác 0 thì i chính là khoá công khai chuyển biến kiểm tra sang trạng thái true.

 Thuật toán tính khoá bí mẩt

+ Tạo biến kiếm tra cho biến kiểm tra ở trạng thái false + Lần lượt kiểm tra từ i = 1 đến 100.000 (adsbygoogle = window.adsbygoogle || []).push({});

+ Nếu tích khoá công khai * i và φ(n) là hai số nguyên tố cùng nhau thì

khoá bí mật là i.

+ Mỗi lần mã hoá hai ký tự

+ Nếu dãy ký tự mã hoá là lẻ thì thêm ký tự “ “ vào cuối (tạo dãy chẵn) + Chuyển đổi các số tương ứng với dãy ký tự cần mã hoá thành xâu số + Thực hiện phép chia lấy dư của xâu số với khoá công khai. Kết quả được lưu vào xâu kết quả.

CHƯƠNG III:

XÂY DỰNG ỨNG DỤNG BẢO MẬT THƯ MỤC CHO ĐIỆN THOẠI DI ĐỘNG

3.1. Cài đặt và cấu hình cho các thiết bị giả lập3.1.1. Giới thiệu 3.1.1. Giới thiệu

Nếu bạn cài đặt đồng thời 2 hệ điều hành trở lên trên 1 PC hoặc MAC bạn sẽ đối diện với những phiền phức về định dạng “ FILE SYSTEM ” (như FAT, EXT2, EXT3, NTFS, HFS) và không sớm thì muộn cũng gặp vấn đề về bootstrap loader, bootstrap hoặc boot loader (là phần mềm nhỏ chạy sau BIOS (chứa trong CMOS) và trước khi khởi động 1 hệ điều hành). Và vấn đề còn mệt mỏi hơn nếu không nắm vững FILE SYSTEM (FS) có thể bạn sẽ mất dữ liệu lưu trong ổ cứng vì phân vùng EXT2, 3 trong linux thì windows lại coi như là UNKNOWN do đó nó yêu cầu Format , nếu bạn đồng ý thì sẽ bị lỗi. Còn nếu bạn chỉ cài 1 hệ điều hành nhưng cài và xóa quá nhiều ứng dụng thì cũng gặp rắc rối về File rác trong máy, và Registry của máy càng ngày càng phình to, dẫn đến kết quả là máy chạy rất chậm.

Vấn đề này trên PC, MAC đã có các giải quyết khác bằng sử dụng phần mềm VMware Workstation, Microsoft Virtual PC chúng là những phần mềm giả lập máy ảo PC trên PC, MAC và các phần mềm giả lập MAC trên PC, bạn có thể dễ dàng vô tư cài đặt Linux OS, Mac OS trên các máy ảo này mà không cần phải cài trên phân vùng khác ổ cứng, chỉ có điều chúng chạy chậm hơn 1 chút mà thôi.

Thế còn trên PDA thì sao? Bạn cũng có thể cài đặt nhiều hệ điệu hành, Windows mobile OS, Palm OS, …trên từng phần mềm ảo thích hợp…

3.1.2. Chuẩn bị

3.1.2.1. Tải Windows Mobile 6 Professional Images (USA).msi (181.0 MB)

Giới thiệu: Windows Mobile 6 (Emulator) là bản cập nhật HĐH cho các thiết bị di động và điện thoại thông minh mới nhất của Microsoft, chạy

trên nền windows, hiện nay cũng đã hỗ trợ cho các OS khác như linux…, Các phiên bản Windows Mobile trước cung cấp nhiều chức năng cho Pocket PC hơn là cho điện thoại với các kiểu bàn phím khác nhau, nhưng sự phân biệt như thế hầu như biến mất trong Windows Mobile 6. Tuy nhiên, Microsoft vẫn sẽ phải đưa ra 2 phiên bản Windows Mobile 6 dựa trên loại màn hình của thiết bị: bản chuẩn hướng đến các thiết bị không có màn hình cảm ứng, và bản Pro hỗ trợ cho thiết bị có màn hình cảm biến và bút cảm ứng ( dĩ nhiên là không có chức năng thoại)

Tải nó Tại http://www.microsoft.com/downloads/d...DisplayLang=en

Hệ Điều hành hỗ trợ : Windows Server 2003 Service Pack 2; Windows Vista; Windows XP Service Pack 2 (32 & 64 bit).

Ghi chú : Bạn có thể tải phiên bản Windows Mobile 6 Professional and Standard Software Development Kits Refresh (phiên bản thiết kế cho việc lập trình di động Pocker PC bằng Visual C++ Smart trong bộ Microsoft Visual Studio 2005).

Tên File : Windows Mobile 6 Professional SDK Refresh.msi dung lượng 454.7 MB) theo địa chỉ :

http://www.microsoft.com/downloads/d...displaylang=en

3.1.2.2. Tải phần mềm Microsoft ActiveSync 4.5 (7,52 MB)

Microsoft ActiveSync là phần mềm được dùng để đồng bộ hóa các dạng thức tập tin hay thông tin khác nhau giữa các thiết bị Pocket PC hay Windows Mobile

Địa chỉ tải :

https://www.microsoft.com/windowsmob...x?ProductID=76 hoặc

http://www.microsoft.com/downloads/d...1PH3rKoQ%3d%3d

Sau khi tải về nên đổi tên thành Microsoft ActiveSync 4.5.msi (cho dễ nhớ vì nó có tên setup.msi rất dễ nhầm lẫn).

Hệ điều hành hỗ trợ : Windows 2000 Service Pack 4; Windows Server 2003 Service Pack 1; Windows Server 2003 Service Pack 1 for Itanium-based Systems; Windows Server 2003, Standard x64 Edition; Windows XP Home Edition; Windows XP Professional Edition; Windows XP Media Center Edition; Windows XP Professional x64 Edition; Windows XP Service Pack 1; Windows XP Service Pack 2; Windows XP Tablet PC Edition.

Ghi chú : Nếu bạn dùng Windows Vista bạn phải tải Microsoft Windows Mobile Device Center 6.1 for Windows Vista (32-bit hoặc 64-bit) dung lượng 12,1 MB thay cho bản Microsoft ActiveSync 4.5

Tại địa chỉ : http://www.microsoft.com/downloads/d...displaylang=en.

3.1.2.3. Cấu hình, Từng bước, ..( Step by Step)

Bước 1:Khởi động Windows Mobile 6 Professional SDK (adsbygoogle = window.adsbygoogle || []).push({});

Theo đường dẫn mà bạn cài thường thì nó ở Start/All Programs/ Windows Mobile 6 SDK/ Standalone Emulator Images /…..

Nó có các giao diện (skin) sau :

+ Windows Mobile 6 Classic (240x320 pixels - 96 dpi) + Windows Mobile 6 Professional (240x320 pixels - 96 dpi)

+ Windows Mobile 6 Professional Square (240x240 pixels - 96 dpi)

+ Windows Mobile 6 Professional Square QVGA (320x320 pixels - 128 dpi)

+ Windows Mobile 6 Professional Square VGA (480x480 pixels - 192 dpi)

+ Windows Mobile 6 Professional VGA (480x640 pixels - 192 dpi) Sau khi khởi động xong vào menu File chọn Configure …..

Hình (1)

Sau đó chọn nơi làm thẻ nhớ ảo, góc nhìn (Display) , thiết lập (Display), giao tiếp mạng (Network), cổng kết nối như hình sau :

Hình (2)

Chọn tiếp

Hình (3)

Chọn tiếp tab Network (Trong tab Network tốt nhất là theo mặc định). Chọn tiếp tab Peripherals

Hình (4)

Xong rồi thì bấm OK

Còn Windows Mobile 6 Professional (Pocker PC ảo vẫn để đó chưa đóng lại).

Bước 2: Khởi động Microsoft ActiveSync 4.5 & thiết lập cấu hình

Một phần của tài liệu Tìm hiểu về thuật toán RSA và lập trình mobile, xây dựng ứng dụng minh hoạ (Trang 27)