Phép tính mã hóa/giải mã

Một phần của tài liệu bài giảng an toàn và bảo mật (Trang 74 - 77)

Phép tính mã hóa và giải mã dùng phép lũy thừa modulọ Để an toàn, thường phải chọn N, e, d, M lớn. Nếu thực hiện bằng cách tính phép lũy thừa trước sau đó rút gọn modulo, thì giá trị của phép lũy thừa là quá lớn để có thể lưu trữ và tính toán. Tuy nhiên số học modulo có một tính chất sau:

[ ]

15 bảnmã

Chúng ta có thể sử dụng tính chất này để đơn giản phép tính lũy thừa modulo thông qua một phương pháp gọi là “bình phương liên tiếp”. Ví dụ cần tínhx16modn , đầu tiên sẽ tính a=xmodn, tiếp theo làb =x2modn=a2modn, tiếp theo làc =x4modn=b2

modn, tiếp theo làd=x8modn=c2modn, và cuối cùngx16modn=d2modn. Các sốa,

b,c,d luôn nhỏ hơnn do đó tránh được việc tính số lũy thừa lớn đồng thời nâng cao tốc độ tính toán.

Trong trường hợp tổng quát để tính xbmodn,taviếtb dưới dạng số nhị phân.

b=bkbk-1…b2b1b0 trong đóbi là các bít 0, 1

Như vậy: ∑ 2

Do đó ∏

Như vậy ứng bới cácbi =1, ta dùng phương pháp bình phương liên tiếp để tính các . Sau đó nhân các kết quả với nhau và rút gọn modulo để có kết quả cuối cùng Ví dụ, tínhy = 520 mod 11 : số 20 viết dưới dạng nhị phân là 10100, có bít 2 và bít 4 bằng 1. (nghĩa là 20 = 16 + 4) 51 =5mod11 52 =(51)2=253mod11 54 =(52)2=329mod11 58 =(54)2=92=814mod11 516 =(58)2=42=165mod11

Kết quả cuối cùng y=520mod11=(54mod11)(516mod11)=9x5mod11=1

/* Thuật toán tính lũy thừa modulo xbmodn */ a = x; y = 1; do if (b mod 2 <> 0) y = (y*a) mod n; end if b = b shr 1; a = (a*a) mod n; 68 while (b>0); return y;

Để tăng tốc quá trình mã hóa dữ liệu, người ta thường chọn một khóa công khaie cụ thể nào đó. Thường thìe là 65537 (216 + 1 ). Ngoài ra còn có thể chọne là 3 hoặc 17. Lý do để chọn các con số này là lúc đóe chỉ có 2 bít 1. Do đó giảm được phép các phép nhân trong phép tính lũy thừa modulo (một điểm cần chú ý là phải chọnpq sao choe nguyên tố cùng nhau với n). Tuy nhiên nếu chọn e quá nhỏ thì RSA sẽ bị phá mã bằng cách sử dụng định lý số dư Trung Hoa (xem Phụ Lục 2-3).

Giả sử chọne =3và Alice gửi cùng một thông điệp M cho ba người khác có khóa công khai lần lượt là (3,N1), (3,N2), (3,N3). Ba bản mã sẽ làC1=M3modN1 ,C2=M3

modN1 ,C3=M3modN3 . Thường thì N1,N2,N3 sẽ nguyên tố cùng nhau theo từng cặp. Theo nguyêntắc của RSA, M đều nhỏ hơnN1,N2,N3nênM3 <N1N2N3.Vậy xét dưới góc

độ của định lý số dư Trung Hoa:

N1N2N3T M3A

N1t1, N2t2,N3t3

C1a1,C2a2,C1a3

Theo định lý số dư Trung Hoa, nếu biếta1,a2,a3,t1,t2,t3 ta có thể khôi phục được giá trị Vậy nếu Trudy có được C1,C2,C3 của Alice, Trudy sẽ tìm đượcM3 và từ đó tính đượcM.

Vì ta đã chọn e nhỏ nên d tìm được sẽ khá lớn. Do đó ngoài việc áp dụng phương pháp bình phương liên tiếp để tính , người ta còn áp dụng định lý số dư Trung Hoa để tăng tốc độ tính toán lên 4 lần. Cách thực hiện như sau:

Bổ sung vào khóa riêng các tham sốp,qdP,dQ,qInv, với: − p,q là hai số nguyên tố để tínhN

dP.e1 mod p

dQ.e1 mod q

qInv.q1 mod p (với giả địnhp>q)

Áp dụng định lý số dư Trung Hoa theo phương án Garner, thay vì tính , chúng ta có thể tínhM như sau:

− − − −

Với cách thực hiện trên, chúng ta chỉ tính phép modulo trên các số p, q có kích thước nhỏ hơn N.

Ch

ứ ng minh:

Tương tự như cách chứng minh RSA, đặt 1 1, ta có:

(vìN chia hết chop) 69

Từ đó áp dụng định lý Fermat bé, ta suy ra: Tương tự, ta cũng có

Do đó, xét theo định lý số dư Trung Hoa theo phương án Garner thì M trong ZN

tương ứng với cặp (m1,m2) trongZp×Zq:

NT, MA,pt2,qt1,m1a2,m2a1,qInvc12

Ta có:

Vậy:

4.3.2 Phép tính sinh khóa

Phép tín h sinh khóa là chọnp v

àq nguyên tố để tínhN. Để phân tích

sốN thành tíc h

hai thừa số ng uyên tốp,q, chỉ có một

cách duy nhấ t là thử từng sốpq.

Do đó phải ch ọn

p,q đủ lớn đ ể việc thử là không khả

thị Hiện nay chưa có phương pháp n

ào để sinh ra số

nguyên tố lớ n tùy ý. Chỉ có cách là c

họn một số l ẻ ngẫu nhiên nào đó và

kiểm tra số đ ó có

phải là số nguyên tố không. Việc kiểm tra tính nguyên tố cũng gặp nhiều khó khăn. Thuật toán kiểm tra số nguyên tố hiệu quả hiện nay là thuật toán Miller-Rabin (xem Phụ lục 2), dù rằng không hoàn toàn chính xác 100%, tuy nhiên có thể đạt sai số nhỏ không đáng kể.

Dựa vào lý thuyết số nguyên tố, người ta ước tính rằng cần thử trung bình khoảng 70 số lẻ để tìm ra một số nguyên tố lớn chừng 2200.

Vì chúng ta đã chọn e trước là 65537 (hay 3 hoặc 17 …), do đó cần kiểm tra xem e

có nguyên tố cùng nhau với n = (p−1)(q−1) hay không. Nếu không ta phải thử lại vớip

q khác. Sau khi đã tìm pq thích hợp, cần tìm d sao cho 1 . Bằng cách dùng thuật toán Euclid mở rộng, chúng ta có thể kết hợp việc kiểm tra tính nguyên tố cùng nhau củaen, đồng thời nếue nguyên tố cùng nhau vớin thì thuật toán cũng cho biếtd. Vì vậy không cần tiến hành bước tìmd riêng.

Một phần của tài liệu bài giảng an toàn và bảo mật (Trang 74 - 77)

Tải bản đầy đủ (DOCX)

(194 trang)
w