Tải bản đầy đủ (.pptx) (27 trang)

Slide lý thuyết mật mã - RSA - BKHN

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (534.65 KB, 27 trang )

Hệ mật mã khóa công khai RSA

Giảng viên hướng dẫn: Thầy Đỗ Trọng Tuấn
Nhóm thực hiện

: Nhóm 9

1


Mục Lục



I. Giới thiệu chung về hệ mật mã RSA
1.Lịch sử
2.Mô tả hoạt động



II. Cấu trúc hệ mật
1. Sơ đồ hệ mật
2. Tạo khóa
3. Mã hóa
4. Giải mã



III. Một số tính chất của hệ mật mã RSA




IV. Ưu - nhược điểm và ứng dụng
1.Ưu – nhược điểm
2.Chuyển đổi văn bản rõ
3.Tạo chữ kí số
4. Hàm băm mật mã

2


I. Giới thiệu chung về hệ mật mã RSA
1.

Lịch sử

-Thuật toán được Ron Rivest, Adi Shamir và Len Adleman mô tả lần đầu tiên vào
thuật toán lấy từ 3 chữ cái đầu của tên 3 tác giả.

năm 1977 tại Học viện Công nghệ Massachusetts (MIT). Tên của

-Thuật toán RSA được MIT đăng ký bằng sáng chế tại Hoa Kỳ vào năm 1983 (Số đăng ký 4.405.829). Bằng sáng chế này hết hạn vào ngày 21 tháng 9
năm 2000. Tuy nhiên, do thuật toán đã được công bố trước khi có đăng ký bảo hộ nên sự bảo hộ hầu như không có giá trị bên ngoài Hoa Kỳ. Ngoài ra,
nếu như công trình của Clifford Cocks đã được công bố trước đó thì bằng sáng chế RSA đã không thể được đăng ký.

3


2. Mô tả hoạt động




Thuật toán RSA có hai khóa:

- khóa công khai (Public Key)
- khóa bí mật ( Private Key).

- Mỗi khóa là những số cố định sử dụng trong quá trình mã hóa và giải mã.
- Khóa công khai được công bố rộng rãi cho mọi người và được dùng để mã hóa.
- Khóa bí mật được cá nhân giữ kín và dùng để giải mã.

4


Ví dụ:



Bob muốn gửi cho Alice một thông tin mật M mà Bob muốn duy nhất Alice
có thể đọc được .
Bod





(Mã hóa M bằng Public Key của A)

Alice
(Giải mã bằng Private Key của A đc M)


5


II. Cấu trúc hệ mật
1. Sơ đồ hệ mật

6


2. Tạo khóa:



Giả sử Alice và Bob cần trao đổi thông tin bí mật thông qua một kênh không an
toàn (ví dụ như Internet). Với thuật toán RSA, Alice đầu tiên cần tạo ra cho mình
cặp khóa gồm khóa công khai và khóa bí mật theo các bước sau:



Các bước tạo khóa:

B1. Chọn 2 số nguyên tố lớn p và q , với p≠ q, lựa chọn ngẫu nhiên và độc lập.
B2. Tính: n = pq.
B3. Tính: giá trị hàm số Ơle ф(n) = (p-1)(q-1) .
B4. Chọn một số tự nhiên e sao cho 1 < e < ф(n), và là số nguyên tố cùng nhau
với ф(n) .
B5. Tính: d sao cho d e≡ 1 (mod ф(n).)
Khóa công khai: (e, n)
Khóa bí mật: (d, n).


7


Một số lưu ý:



Các số nguyên tố thường được chọn bằng phương pháp thử xác suất.



Các bước 4 và 5 có thể được thực hiện bằng giải thuật Euclid mở rộng (xem thêm: số học môđun).



Bước 5 có thể viết cách khác:Tìm số tự nhiên x sao cho



Cũng là số tự nhiên.Khi đó ta sử dụng d mod (p-1)(q-1)



Từ bước 3 PKCS #v2.1 sử dụng

thay cho

8





Khóa công khai bao gồm:
-n, môđun, và
-e, số mũ công khai (cũng gọi là số mũ mã hóa).



Khóa bí mật bao gồm:
-n, môđun, xuất hiện cả trong khóa công khai và khóa bí mật, và
-d, số mũ bí mật (cũng gọi là số mũ giải mã).



Một dạng khác của khóa bí mật bao gồm:
-p và q, hai số nguyên tố chọn ban đầu,
-d mod (p-1) và d mod (q-1) (thường được gọi là dmp1 và dmq1),
-(1/q) mod p (thường được gọi là iqmp)

 

9


3. Mã hóa:



Giả sử Bob muốn gửi đoạn thông tin M cho Alice. Đầu tiên Bob chuyển M thành


một số m < n theo một hàm có thể đảo ngược (từ m có thể xác định lại M) được thỏa
thuận trước. Quá trình nàyđược mô tả ở phần Chuyển đổi văn bản rõ.
Lúc này Bob có m và biết n cũng như e do Alice gửi. Bob sẽ tính c là bản mã hóa
của m theo công thức:

Hàm trên có thể tính dễ dàng sử dụng phương pháp tính hàm mũ (môđun) bằng
phương pháp bình phương (exponentiation by squaring). Cuối cùng Bob gửi c cho Alice

10


4. Giải mã :



Alice nhận c từ Bob và biết khóa bí mật d. Alice có thể tìmđ ược m t ừ c theo công
thức sau:



Biết m, Alice tìm lại M theo phương pháp đã th ỏa thuận tr ước. Quá trìnhgiải mã
hoạt động vì ta có :



Do ed ≡ 1 (mod p-1) và ed ≡ 1 (mod q-1), (theo Định lý Fermat nh ỏ) nên:






Do p và q là hai số nguyên tố cùng nhau, áp dụng đ ịnh lý số dư Trung Hoa, ta có:



hay:

11


12


Ví dụ 1:



Ta chọn p=11, q=3.



n = pq = 11.3 = 33



phi = (p-1)(q-1) = 10.2 = 20



e= 3




gcd(e, p-1) = gcd(3, 10) = 1 ( ước chung lớn nhất của 3 và 10 )



gcd(e, q-1) = gcd(3, 2) = 1



Vì thế, gcd(e, phi) = gcd(e, (p-1)(q-1)) = gcd(3, 20) = 1



Tìm d sao cho ed ≡ 1 (mod phi)



Giả sử ta tính toán d=e-1 mod phi = 3 -1 mod 20



Ta tìm đước d với phi chia cho (ed-1) hay 20/(3d -1)



Chọn d= ( 1,2, 3…), lấy d= 7. Ta có : ed-1 = 3.7 - 1 = 20




Vậy khóa công khai là: (n, e) = (33, 3)



Khóa bí mật là: (n, d) = (33, 7).

13




Bây giờ ta sẽ mã hóa 1 thông báo là: m =7.



Ta có: c = me mod n = 73 mod 33 = 343 mod 33 = 13



Lúc này thông báo đã được mã hóa là: c= 13.



Và để kiểm tra giải mã, ta tính toán: m' = c d mod n = 137 mod 33 = 7.



Chú ý rằng ở đây ta không áp dụng tính với số 13 để có số 7 mà ta tính toán theo cách sau :




m' = 137 mod 33 = 13(3+3+1) mod 33 = 133 .133 .13 mod 33



= (133 mod 33).(133 mod 33).(13 mod 33) mod 33



= (2197 mod 33).(2197 mod 33).(13 mod 33) mod 33



= 19.19.13 mod 33 = 4693 mod 33 =7



Nếu ta tính toán c từ m có giá trị ( 0, 32) ta có:



m

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16



c


0 1 8 27 31 26 18 13 17 3 10 11 12 19 5 9 4



m

17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32



c

29 24 28 14 21 22 23 30 16 20 15 7 2 6 25 32

14




Nhưng theo hệ thống Unicode nên ta sẽ bỏ đi 0 và 1 không còn bí mật nữa mà nó công khai vì khi ta đã mã hóa rồi mà nó vẫn còn nguyên như cũ. Do đó phải
loại bỏ nó đi và ta chọn số khác. Nếu ta muốn sử dụng hệ thống bảo mật này ta cần chọn:



A=2, B=3, ..., Z=27.



Chẳng hạn như ta muốn chọn thông báo cần mã hóa có tên là:




"HELLOWORLD" và được thể hiện dưới dạng số nguyên m1, m2…



Ta có: {9, 6, 13, 13, 16, 24,16,19, 13, 5}



Và ta có thông báo mã hóa :



{3, 18, 19, 19, 4,30,4,28,19,26}

15


III. Một số tính chất của hệ mật mã RSA



Trong các hệ mật mã RSA, một bản tin có thể được mã hoá trong thời gian tuyến tính.
Đối với các bản tin dài, độ dài của các số được dùng cho các khoá có thể được coi như là hằng. Tương tự như vậy, nâng một số lên luỹ thừa được thực hiện trong thời gian

hằng, các số không được phép dài hơn một độ dài hằng. Thực ra tham số này che dấu nhiều chi tiết cài đặt có liên quan đến việc tính toán với các con số dài, chi phí của các phép
toán thực sự là một yếu tố ngăn cản sự phổ biến ứng dụng của phương pháp này. Phần quan trọng nhất của việc tính toán có liên quan đến việc mã hoá bản tin. Nhưng chắc chắn
là sẽ không có hệ mã hoá nào hết nếu không tính ra được các khoá của chúng là các số lớn.


16




Các khoá cho hệ mã hoá RSA có thể được tạo ra mà không phải tính toán quá nhiều.



Một lần nữa, ta lại nói đến các phương pháp kiểm tra số nguyên tố. Mỗi số nguyên tố lớn có thể được phát sinh bằng cách đầu tiên tạo ra một số ngẫu nhiên lớn, sau đó kiểm tra
các số kế tiếp cho tới khi tìm được một số nguyên tố. Một phương pháp đơn giản thực hiện một phép tính trên một con số ngấu nhiên, với xác suất 1/2 sẽ chứng minh rằng số
được kiểm tra không phải nguyên tố. Bước cuối cùng là tính p dựa vào thuật toán Euclid.



Như phần trên đã trình bày trong hệ mã hoá công khai thì khoá giải mã (private key) k B và các thừa số p,q là được giữ bí mật và sự thành công của phương pháp là tuỳ thuộc
vào kẻ địch có khả năng tìm ra được giá trị của k B hay không nếu cho trước N và KB. Rất khó có thể tìm ra được kB từ KB cần biết về p và q, như vậy cần phân tích N ra thành
thừa số để tính p và q. Nhưng việc phân tích ra thừa số là một việc làm tốn rất nhiều thời gian, với kỹ thuật hiện đại ngày nay thì cần tới hàng triệu năm để phân tích một số có
200 chữ số ra thừa số.

17


Độ an toàn của thuật toán RSA dựa trên cơ sở những khó khăn của việc xác định các thừa số nguyên tố của một số lớn. Bảng dưới đây cho biết các thời gian
dự đoán, giả sử rằng mỗi phép toán thực hiện trong một micro giây.

Số các chữ số trong số được phân tích

Thời gian phân tích


50

4 giờ

75

104 giờ

100

74 năm

200

4.000.000 năm

300

15
5×10 năm

500

25
4×10 năm

18


IV. Ưu - nhược điểm và ứng dụng


1. Ưu điểm của RSA



Có độ an toàn cao, và được sử dụng trong thông tin mật.



Có mô tả toán học đơn giản, cấu trúc rõ ràng.



Dễ dàng triển khai trên nhiều nền tảng khác nhau



Chi phí triển khai thấp.

2. Nhược điểm của RSA



Tốc độ mã hóa không cao



Phức tạp trong việc tạo khóa

19



2. Chuyển đổi văn bản rõ:

-Trước khi thực hiện mã hóa, ta phải thực hiện việc chuyển đổi văn bản rõ (chuyển đổi từ M sang m) sao cho không có giá trị nào của M tạo ra văn bản mã không
an toàn.
-Nếu không có quá trình này, RSA sẽ gặp phải một số vấn đề sau:
-Nếu m = 0 hoặc m = 1 sẽ tạo ra các bản mã có giá trị là 0 và 1 tương ứng.
-Khi mã hóa với số mũ nhỏ (chẳng hạn e = 3) và m cũng có giá trị nhỏ, giá trị me cũng nhận giá trị nhỏ (so với n). Như vậy phép môđun không có tác dụng và có
thể dễ dàng tìmđược m bằng cách khai căn bậc e của c (bỏ qua môđun).
-RSA là phương pháp mã hóa xác định (không có thành phần ngẫu nhiên) nên kẻ tấn công có thể thực hiện tấn công lựa chọn bản rõ bằng cách tạo ra một bảng tra
giữa bản rõ và bản mã. Khi gặp một bản mã, kẻ tấn công sử dụng bảng tra để tìm ra bản rõ tươngứng.

20




Trên thực tế, ta thường gặp 2 vấn đề đầu khi gửi các bản tin ASCII ngắn với m là nhóm vài ký tự ASCII. Một đoạn tin chỉ có 1 ký tự NUL sẽ được gán giá
trị m = 0 và cho ra bản mã là 0 bất kể giá trị của e và N. Tương tự, một ký tự ASCII khác, SOH, có giá trị 1 sẽ luôn cho ra bản mã là 1. Với các hệ thống
dùng giá trị e nhỏ thì tất cả ký tự ASCII đều cho kết quả mã hóa không an toàn vì giá trị lớn nhất của m chỉ là 255 và 2553 nhỏ hơn giá trị n chấp nhận được.
Những bản mã này sẽ dễ dàng bị phá mã.



Để tránh gặp phải những vấn đề trên, RSA trên thực tế thường bao gồm một hình thức chuyển đổi ngẫu nhiên hóa m trước khi mã hóa. Quá trình chuyển đổi
này phải đảm bảo rằng m không rơi vào các giá trị không an toàn. Sau khi chuyển đổi, mỗi bản rõ khi mã hóa sẽ cho ra một trong số khả năng trong tập hợp
bản mã. Điều này làm giảm tính khả thi của phương pháp tấn công lựa chọn bản rõ (một bản rõ sẽ có thể tươngứng với nhiều bản mã tuỳ thuộc vào cách
chuyển đổi).


21




Một số tiêu chuẩn, chẳng hạn như PKCS, đã được thiết k ế để chuyển đ ổi b ản rõ tr ước khi mã hóa b ằng RSA. Các ph ương pháp chuy ển đ ổi
này bổ sung thêm bít vào M. Các phương pháp chuyển đ ổi cần đ ược thi ết k ế c ẩn th ận đ ể tránh nh ững d ạng t ấn công ph ức t ạp t ận d ụng
khả năng biết trước được cấu trúc của bản rõ. Phiên b ản ban đ ầu của PKCS dùng m ột ph ương pháp đ ặc ứng (ad-hoc) mà v ề sau đ ược bi ết
là không an toàn trước tấn công lựa chọn bản rõ thích ứng (adaptive chosen ciphertext attack). Các ph ương pháp chuy ển đ ổi hi ện đ ại s ử
dụng các kỹ thuật như chuyển đổi mã hóa bất đ ối xứng tối ưu (Optimal Asymmetric Encryption Padding - OAEP) đ ể ch ống l ại t ấn công
dạng này. Tiêu chuẩn PKCS còn được b ổ sung các tính năng khác để đ ảm b ảo an toàn cho ch ữ ký RSA (Probabilistic Signature Scheme for
RSA - RSA-PSS).

22


3. Tạo chữ kí số:



Thuật toán RSA còn được dùng để tạo chữ ký số cho văn bản. Giả sử Alice muốn gửi cho Bob một văn bản có chữ ký c ủa mình. Để làm vi ệc
này, Alice tạo ra một giá trị băm(hash value) của văn bản cần ký và tính giá trị mũ d mod n của nó (gi ống nh ư khi Alice th ực hiện gi ải mã).
Giá trị cuối cùng chính là chữ ký điện tử c ủa văn b ản đang xét. Khi Bob nh ận đ ược văn b ản cùng v ới ch ữ ký đi ện t ử, anh ta tính giá tr ị
mũ e mod n của chữ ký đồng thời với việc tính giá tr ị băm c ủa văn b ản. N ếu 2 giá tr ị này nh ư nhau thì Bob bi ết r ằng ng ười t ạo ra ch ữ ký
biết khóa bí mật của Alice và văn bản đã không b ị thay đ ổi sau khi ký.



Cần chú ý rằng các phương pháp chuyển đổi bản rõ (như RSA-PSS) giữ vai trò quan trọng đối với quá trình mã hóa cũng như chữ ký đi ện tử
và không được dùng khóa chung cho đ ồng thời cho c ả hai m ục đích trên.


23




Ngày nay, có ba hệ mã hóa thông dụng được sử dụng đ ể xây dựng các l ược đ ồ ký đi ện t ử, đó là h ệ mã hóa RSA, h ệ mã hóa d ựa trên bài
toán logarit rời rạc và hệ mã hóa dựa trên đ ường cong elliptic. Các hàm m ột chi ều s ử dụng trong các h ệ mã này hi ện đang đ ược xem là an
toàn theo thừa nhận (tức là không có thuật toán nào h ữu hi ệu đ ể tính hàm ng ược c ủa chúng). Tuy nhiên, m ột v ấn đ ề c ơ b ản c ủa tính an
toàn đối với một lược đồ ký điện tử lại là tính không th ể gi ả mạo đ ược ch ữ ký và điều này không suy ra đ ược tr ực ti ếp t ừ tính an toàn c ủa
hệ mã mà nó dựa vào.



Trong khoảng mười năm gần đây, vấn đề này đang thu hút rất nhi ều s ự quan tâm của cộng đồng m ật mã trên th ế gi ới. Ng ười ta đang c ố
gắng đưa ra những lược đồ ký sao cho tính không th ể giả mạo được của nó có th ể đ ược đánh giá thông qua đ ộ an toàn c ủa các hàm m ột
chiều mà nó sử dụng. Trong bài này chúng tôi xem xét một số lược đ ồ ký s ử d ụng hàm m ột chi ều c ủa h ệ mã RSA (đang đ ược xem là ph ổ
biến nhất hiện nay).

24




Giả sử A muốn gửi cho B một văn bản có chữ ký của mình. Để làm việc này, A tạo ra một giá tr ị băm (hash value) c ủa văn b ản c ần ký và
tính giá trị mũ d mod n của nó (giống như khi A th ực hi ện gi ải mã). Giá tr ị cuối cùng chính là ch ữ ký đi ện t ử c ủa văn b ản đang xét. Khi B
nhận được văn bản cùng với chữ ký điện tử, anh ta tính giá tr ị mũ e mod n c ủa ch ữ ký đ ồng th ời v ới vi ệc tính giá tr ị băm c ủa văn b ản. N ếu
2 giá trị này như nhau thì Bbiết rằng người tạo ra ch ữ ký bi ết khóa bí mật c ủa A và văn b ản đã không b ị thay đ ổi sau khi ký. Ký đi ện t ử và
những mô hình nguyên thủy


25


×