1. Trang chủ
  2. » Luận Văn - Báo Cáo

Xây dựng thuật toán tấn công RSA không cần phân tích nhân tử

83 1,1K 0

Đ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

Thông tin cơ bản

Định dạng
Số trang 83
Dung lượng 1,07 MB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Thực tế vấn đề thám mã đối với hệ mật RSA hiện tại đang được các nhà nghiên cứu tập trung khai thác các sơ hở của RSA như: tấn công vào số mũ công khai hoặc số mũ bí mật thấp, tấn công v

Trang 1

TRƯỜNG ĐẠI HỌC CÔNG NGHỆ

Nguyễn Anh Tuấn

XÂY DỰNG THUẬT TOÁN TẤN CÔNG RSA KHÔNG CẦN PHÂN TÍCH NHÂN TỬ

Ngành : Công nghệ thông tin Chuyên ngành: Hệ thống thông tin

Mã số: 60.48.05

LUẬN VĂN THẠC SĨ

NGƯỜI HƯỚNG DẪN: TS HỒ VĂN CANH

Hà Nội – 2007

Trang 2

Mục lục

LỜI NÓI ĐẦU 3

Chương 1 - TỔNG QUAN VỀ MẬT MÃ VÀ MÃ THÁM 5

1.1 Mã truyền thống 5

1.1.1 Mã apphin 5

1.1.2 Mã thay thế (substitution cipher) 6

1.1.3 Mã chuyển dịch (shift cipher) 6

1.1.4 Mã hoán vị 6

1.1.5 Mã Vigenère 7

1.1.6 Mã Hill 7

1.2 Mã đối xứng 8

1.2.1 Mã theo dòng 8

1.2.2 Mã chuẩn DES 9

1.3 Mã bất đối xứng 10

1.4 Vấn đề thám mã 16

Chương 2 - TỔNG KẾT NHỮNG KẾT QUẢ TẤN CÔNG VÀO HỆ MẬT RSA TRONG NHỮNG NĂM QUA 19

2.1 Một số giả thiết ngầm định 19

2.2 Phân tích các số nguyên lớn 20

2.2.1 Modul chung 20

2.2.2 Mù (Blinding) 20

2.3 Số mũ riêng bé (Low Private Exponnent) 21

2.3.1 Độ lớn e 22

2.3.2 Sử dụng CRT 22

2.4 Số mũ công khai bé (Low public Exponent) 22

2.4.1 Hastad's Broadcast Attack 23

2.4.2 Franklin-Reiter Related Message Attack 24

2.5 Thành phần công khai bé 24

2.5.1 Coppersmith's Short Pad Attack 24

2.5.2 Tấn công bằng khóa riêng 25

2.6 Cài đặt các tấn công 26

2.6.1 Tấn công dựa trên thời gian 26

2.6.2 Tấn công dựa trên các lỗi ngẫu nhiên 28

2.6.3 Tấn công của Bleichenbacher trên PKCS 1 29

2.8 Một số tấn công bằng nhân tử hóa số N với số N lớn 29

2.8.1 Tìm nhân tử lớn nhất thứ nhất N 30

2.8.2 Phân tích thứ hai 30

2.8.3 Phân tích thứ ba 31

2.8.4 Thuật toán Pollard (p-1) 32

Trang 3

3.1 Biểu diễn số lớn 34

3.2 Các phép toán trong số lớn 35

3.2.1 So sánh hai số 35

3.2.2 Cộng hai số lớn dương 36

3.2.3 Trừ hai số lớn dương 37

3.2.4 Phép nhân hai số lớn 37

3.2.5 Phép chia hai số lớn dương 39

3.2.6 Lũy thừa 41

3.2.7 Ước chung lớn nhất 41

3.2.8 Phép nhân theo module p 42

3.2.9 Tính căn của số nguyên lớn 43

3.2.10 Tìm phần từ nghịch đảo theo module p 43

3.2.11 Phép cộng có dấu 44

3.2.12 Phép trừ có dấu 45

3.2.13 Phép nhân có dấu 45

Chương 4 - PHƯƠNG PHÁP TẤN CÔNG RSA KHÔNG CẦN PHÂN TÍCH NHÂN TỬ 46

4.1 Mở đầu 46

4.2 Cơ sở toán học 47

4.2.1 Bổ đề 1 47

4.2.2 Bổ đề 2 48

4.2.3 Bổ đề 3 48

4.2.4 Bổ đề 4 48

4.3 Các thuật toán 51

4.4 Các ví dụ: 54

KẾT LUẬN 62

Trang 4

LỜI NÓI ĐẦU

Hệ mật RSA được phát minh bởi Ron Rivest, Adi Shamir, và Len Adleman, công bố lần đầu vào tháng 8 năm 1977 trên tạp chí khoa học Mỹ Hệ mật sử dụng trong lĩnh vự đảm bảo tính riêng tư và cung cấp cơ chế xác thực của dữ liệu số Ngày nay, RSA đã được phát triển ứng dụng rộng rãi trong thương mại điện tử Nó được sử dụng trên Web servers và trên các Browsers nhằm đảm bảo an ninh đường truyền, được sử dụng trong việc tạo khóa và xác thực của mail, trong truy cập từ xa…, và đặc biệt nó là hạt nhận của hệ thống thanh toán điện tử Tóm lại, RSA được ứng dụng rộng rãi trong các lĩnh vực nơi mà an ninh an toàn thông tin được đòi hỏi

Ngay từ khi được công bố lần đầu, hệ RSA đã được phân tích hệ số an toàn bởi nhiều nhà nghiên cứu Mặc dầu đã trải qua nhiều năm nghiên cứu và đã có một

số cuộc tấn công ấn tượng nhưng không mang lại kết quả là phá hủy Đa phần họ mới chỉ ra được những mỗi nguy hiểm tiềm ẩn của RSA mà khi sử dụng RSA người dùng cần cải thiện Thực tế vấn đề thám mã đối với hệ mật RSA hiện tại đang được các nhà nghiên cứu tập trung khai thác các sơ hở của RSA như: tấn công vào số mũ công khai hoặc số mũ bí mật thấp, tấn công vào các tham số nguyên tố

p, q bé hoặc cách xa nhau lớn, hoặc họ tập trung vào việc phân tích nhân tử số n(modul của RSA) Tuy nhiên đối với số n lớn, chẳng hạn từ n=1024

trở lên thì các phương pháp hiện tại không phát huy được hiệu quả hoặc chạy chậm và tỏ ra không

có kết quả như mong muốn

Xuất phát từ thực tế đó, em đã phân tích về mặt toán học hệ mật để tìm cách thu hẹp khoảng cách mà thuật toán phải dò tìm số nguyên tố p kết hợp đưa ra một thuật toán tấn công vào RSA mà không phải phân tích nhân tử Và qua nghiên cứu cài đặt phương pháp tổng hợp này tỏ ra có hiệu quả cao hơn các thuật toán đã được công bố mới đây Nội dụng của phương pháp này sẽ được em trình bày trong chương cuối của luận văn

Để phục vụ cho việc phân tích các tính chất của hệ mật RSA, em đã trình bày

tổng quan về mật mã và thám mã trong chương I – “Tổng quan về mật mã và thám

mã” Ở chương này, em trình bày chi tiết về lịch sử cũng như các khái niệm về các

hệ mã thuộc dòng mã truyền thống cũng như dòng mã đối xứng, mã bất đối xứng giúp giúp chúng ta hiểu cơ sở lý thuyết về các hệ mật mã Vấn đề thám mã nói

Trang 5

chung và thám mã đối với hệ mật RSA cũng được em trình bày kỹ trong chương này

Trên cơ sở hiểu các hệ mật được trình bày ở chương I, để có cái nhìn tổng quan về vấn đề thám mã đối với hệ mật RSA trong những năm qua, em đã tổng kết lại các phương pháp và kết quả đã được công bố trong chương II của luận văn –

“Tổng kết những kết quả tấn công vào hệ mật RSA trong những năm qua” Trong

chương này em đã trình bày chi tiết các thuật toán tấn công vào hệ mật RSA như: các tấn công cơ bản – modul chung, mù; tấn công vào số mũ công khai hoặc số mũ

bí mật thấp; tấn công dựa trên thời gian hay dựa trên các lỗi ngẫu nhiên… Ngoài ra,

em cũng trình bày các thuật toán tấn công RSA bằng nhân tử hóa số n với số n lớn như thuật toán Pollard, tuy nhiên các thuật toán được giới thiệu ở đây mới chỉ giải quyết cho modul N của RSA có độ dài hạn chế, còn modulus N có độ dài lớn thì cho đến nay chưa có phương pháp khả thi nào được công bố

Qua nghiên cứu các thuật toán đã được công bố, em đề xuất phương pháp tấn công RSA mà không cần phần tích nhân tử, phương pháp này tỏ ra có hiệu quả đối với hệ RSA có số n lớn Để thực hiện phương pháp này, em xin phép được trình

bày thư viện các phép toán đối với số lớn trong chương III – “Thư viện tính toán số

lớn” Các thuật toán biểu diễn cũng như tính toán cộng, trừ, nhân, chia…phục vụ

cho việc xây dựng giải pháp tấn công RSA mà không phân tích nhân tử

Các thuật toán đã được trình bày ở chương II chủ yếu là dò tìm 1 số nguyên

tố p(giả sử p < q) Trên cơ sở đó nếu xác định được một nhân tử nguyên tố p của n thì có thể từ đó suy ra được ngay nhân tử kia bằng cách lấy số n chia cho p: q=

p n

tuy nhiên với số lớn việc xác định p và q như vậy là không hiệu quả Qua nghiên cứu, em đưa ra phương pháp tấn công RSA bằng cách rút ngắn khoảng cách dò tìm

số nguyên tố p đồng thời không phải tìm một nhân tử nguyên tố bé của n Phương

pháp này được trình bày chi tiết ở chương IV – “Phương pháp tấn công RSA không

cần phân tích nhân tử”

Trang 6

Chương 1 - TỔNG QUAN VỀ MẬT MÃ VÀ MÃ THÁM

1.1 Mã truyền thống

Mã truyền thống hay còn gọi là mã cổ điển là một dạng của mật mã đã được

sử dụng trong lịch sử phát triển của loài người nhưng ngày nay đã trở nên lạc hậu

do các phương thức mã hóa này quá đơn giản và những kẻ tấn công có thể dễ dàng

bẻ khóa thông qua nhiều phương thức như tấn công vét cạn, hay dựa trên tấn công thống kê (dựa trên tần suất xuất hiện của các chữ cái) Nhìn chung, mã truyền thống hoạt động trên cơ sở bảng chữ cái (chẳng hạn các ký tự từ "A" tới "Z" trong tiếng Anh), và chúng được thực hiện bằng tay hay một số máy móc cơ khí đơn giản Các

phương thức mã hóa truyền thống chủ yếu dựa trên mật mã hóa hoán vị và mật mã

hóa thay thế Trong mật mã hóa thay thế, các ký tự (hoặc nhóm ký tự) được thay

thế một cách có quy luật trong toàn bộ thông điệp bằng các ký tự khác (hoặc nhóm ký tự), sau đó các ký tự còn lại trong bảng chữ cái được thay thế theo một quy luật nào

đó xác định trước Trong phương thức mật mã hóa hoán vị thì các ký tự được giữ không đổi, nhưng trật tự của chúng trong bản tin lại thay đổi theo một quy luật nào

đó Cụ thể một số hệ mã truyền thống như:

1.1.1 Mã apphin

Sơ đồ các hệ mật mã apphin được định nghĩa như sau:

S = ( P , C , K , E , D ) ,

trong đó P = C = Z26 , K = { (a,b) Z26 x Z26 gcd(a, 26) = 1} ,

các ánh xạ E và D được cho bởi:

E k(x ) = ax + b mod26,

D k(y ) = a-1(y - b) mod26, với mọi x P , y C , k = (a, b) K K là tập các khóa, kK là một khóa cụ

thể nào đó trong K

Trang 7

1.1.2 Mã thay thế (substitution cipher)

Sơ đồ các hệ mật mã thay thế được định nghĩa như sau:

S = ( P , C , K , E , D ) ,

trong đó P = C = Z26 , K là tập hợp tất cả các phép hoán vị trên Z26

các ánh xạ E và D được cho bởi:

1

( ) ( ), ( ) ( ),

Ta thường đồng nhất Z26 với bảng ký tự tiếng Anh, do đó phép hoán vị trên Z26

cũng được hiểu là một phép hoán vị trên tập hợp các ký tự tiếng Anh,

1.1.3 Mã chuyển dịch (shift cipher)

Hệ mã dùng phép chuyển dịch, ta dùng bảng ký tự gồm có 26 ký tự, được

đánh số từ 0 đến 25, ta có thể đồng nhất nó với tập Z26 Như vậy, sơ đồ các hệ mật

mã chuyển dịch được định nghĩa như sau:

S = ( P , C , K , E , D ) ,

trong đó P = C = K = Z26 , các ánh xạ E và D được cho bởi:

với mọi k, x , y Z26 : E (k, x) = x + k mod26,

D (k, y) = y - k mod26

Các hệ mật mã được xác định như vậy là đúng đắn, vì với mọi k, x , y Z26

ta đều có:

DkEk(x) = (x + k ) - k mod26 = x vì x  a, z

Các hệ mật mã chuyển dịch đã được sử dụng từ rất sớm, theo truyền thuyết,

hệ mã đó với k =3 đã được dùng bởi J Caesar từ thời đế quốc La mã, và được gọi

là hệ mã Caesar

1.1.4 Mã hoán vị

Các hệ mã hoán vị cũng được thực hiện trên từng bộ m ký tự liên tiếp, nhưng

bản mật mã chỉ là một hoán vị của các ký tự trong từng bộ m ký tự của bản rõ Ta

ký hiệu Sm là tập hợp tất cả các phép hoán vị của tập hợp { 1,2, ,m } Sơ đồ các

phép mã hoán vị được cho bởi

Trang 8

1.1.5 Mã Vigenère

Sơ đồ mật mã này lấy tên của Blaise de Vigenère, sống vào thế kỷ 16 Khác

với các hệ mật mã đã kể trước, các hệ mật mã Vigenère không thực hiện trên từng

ký tự một, mà được thực hiện trên từng bộ m ký tự (m là số nguyên dương)

Sơ đồ các hệ mật mã Vigenère được định nghĩa như sau:

D k(y1, , ym ) = ( y1-k1 , , ym-km) mod26

với mọi x =(x1, , xm ) P , y =(y1, , ym ) C , k = (k1, ,km)K

Sơ đồ mã Vigenère có thể được xem là mở rộng của sơ đồ mã chuyển dịch, nếu mã chuyển dịch thực hiện việc chuyển dịch từng ký tự một thì mã

Vigenère thực hiện đồng thời từng bộ m ký tự liên tiếp

1.1.6 Mã Hill

Sơ đồ mật mã này được đề xuất bởi Lester S Hill năm 1929 Cũng giống

như sơ đồ mã Vigenère, các hệ mã này được thực hiện trên từng bộ m ký tự liên

tiếp, điều khác là mỗi ký tự của bản mã được xác định bởi một tổ hợp tuyến tính

(trên vành Z26) của m ký tự trong bản rõ Như vậy, khoá sẽ được cho bởi một ma

trận cấp m, tức là một phần tử của K Z m xm Để phép biến đổi tuyến tính xác định

bởi ma trận K có phép nghịch đảo, bản thân ma trận K cũng phải có ma trận nghịch

đảo K -1

theo mod26; mà điều kiện cần và đủ để K có nghịch đảo là định thức của

nó, ký hiệu detK, nguyên tố với 26 Vậy, sơ đồ mật mã Hill được định nghĩa là sơ

đồ

Trang 9

S = ( P , C , K , E , D ) ,

trong đó P = C = 26

m

Z , K = KZ26m m : gcd(detK, 26) 1  , các ánh xạ E và D được cho bởi:

E k(x1, , xm ) = (x1, , xm ) K mod26,

D k(y1, , ym ) = (y1, , ym ) K -1 mod26

với mọi x =(x1, , xm ) P , y =(y1, , ym ) C , k K

1.2 Mã đối xứng

Mã đối xứng (symmetric-key algorithms) là hệ mã mà người gửi và người

nhận cùng có một khóa chung K K được giữ như bí mật riêng của hai người, K

dùng cả cho lập mật mã và giải mã nên có thể dễ dàng tìm được một khóa nếu biết khóa kia Nhiều thuật ngữ khác dành cho việc mã hóa dùng chìa khóa đối xứng bao

gồm các phương pháp mã hóa đơn khóa (single-key), phương pháp mã hóa một

khóa (one-key) và phương pháp mã hóa khóa cá nhân (private-key) Thuật toán đối

xứng có thể được chia ra làm hai thể loại, mã luồng (stream ciphers) và mã khối (block ciphers) Mã luồng mã hóa từng bit của thông điệp trong khi mã khối gộp

một số bit lại và mã hóa chúng như một đơn vị Cỡ khối được dùng thường là các

khối 64 bit Thuật toán tiêu chuẩn mã hóa tiên tiến (Advanced Encryption

Standard), được NIST công nhận tháng 12 năm 2001, sử dụng các khối gồm 128

bit, 192 bít hoặc 256 bít tùy người gửi/nhận thống nhất với nhau Mã đối xứng nhìn chung có tốc độ tính toán nhanh Điển hình như:

1.2.1 Mã theo dòng

Với cách lập mã theo dòng, ta còn cần có một bộ sinh dòng khoá để với mỗi

mầm khoá s cho trước nó sinh ra một dòng khoá K 1 K 2 K 3 , mỗi Ki dùng để lập

mã cho khối xi của văn bản Mỗi từ khoá Ki , ngoài việc phụ thuộc vào mầm khoá

s còn có thể phụ thuộc vào đoạn từ khoá K 1 Ki -1 đã được sinh ra trước đó và cả vào các yếu tố khác, chẳng hạn như đoạn văn bản x1 xi-1 đã được lập mã trước đó

Như vậy, ta có thể định nghĩa lại như sau: Một sơ đồ hệ mã theo dòng được cho bởi

một bộ

S = ( P , C , R, K , F, E , D ) (1)

thỏa mãn các điều kiện sau đây:

Trang 10

E là một ánh xạ từ K xP vào C ,, được gọi là phép lập mật mã; và D là

một ánh xạ từ K x C vào P , được gọi là phép giải mã Với mỗi k K , ta định

nghĩa Ek : P C , Dk :C P là hai hàm cho bởi :

yi = E (Ki ,xi) , trong đó Ki = fi (r, K1, ,Ki- 1, x1x2 xi- 1), (i =1,2, ,m)

Điều đó có nghĩa là từ mầm khoá r và bản rõ x sinh ra được dòng khoá

Nếu bộ sinh dòng khoá không phụ thuộc vào văn bản rõ, tức là nếu mỗi fi là

một ánh xạ từ R xK i- 1 vào K , thì ta gọi bộ sinh dòng khoá đó là đồng bộ ; dòng

khoá chỉ phụ thuộc vào mầm khoá và là như nhau đối với mọi văn bản rõ Một dòng khóa K =K 1 K 2 K 3 được gọi là tuần hoàn với chu kỳ d nếu có số nguyên N

sao cho Ki +d = Ki với mọi i N Chú ý rằng mã Vigenère với độ dài khóa m có thể được coi là mã dòng với dòng khoá có chu kỳ m, và có các phép lập mã và giải mã

Trang 11

= 64

2

Z DES có tập khoá K = 56

2

Z , tức mỗi khoá là một từ 56 bit Với mỗi khoá K và

bản rõ x, quá trình lập mã diễn ra như sau: Bước đầu, dùng một phép hoán vị ban đầu IP, từ x 64 bit sẽ biến thành một từ mới IP (x ), từ này được chia thành hai nửa

L0 và R0 , mỗi nửa là một từ 32 bit Bước tiếp theo, ta sẽ dùng 16 lần những phép

toán giống nhau để liên tiếp được các cặp (L1,R1 ), , (L16 ,R16 ), sau đó dùng phép

hoán vị nghịch đảo IP -1 cho từ đảo ngược R16L16 ta sẽ được bản mã y tương ứng

1.3 Mã bất đối xứng

Sự ra đời của khái niệm hệ mã bất đối xứng là một tiến bộ có tính chất bước ngoặt trong lịch sử mật mã nói chung, gắn liền với sự phát triển của khoa học tính toán hiện đại Mã hóa bất đối xứng là một dạng mật mã hóa cho phép người sử dụng trao đổi các thông tin mật mà không cần phải trao đổi các khóa chung bí mật trước đó Điều này được thực hiện bằng cách sử dụng một cặp khóa có quan hệ toán học với nhau là khóa công khai và khóa cá nhân (hay khóa bí mật) Trong mã bất đối xứng, khóa cá nhân phải được giữ bí mật trong khi khóa công khai được phổ biến công khai Trong 2 khóa, một dùng để mã hóa và khóa còn lại dùng để giải mã Điều quan trọng đối với hệ thống là khó có thể tìm ra khóa bí mật nếu chỉ biết khóa công khai Hệ thống mã bất đối xứng có thể sử dụng với các mục đích như:

 Mã hóa: giữ bí mật thông tin và chỉ có người có khóa bí mật mới giải mã được

 Tạo chữ ký số: Việc kiểm tra một chữ ký nào đó dễ dàng được thực hiện nhờ khóa công khai cho trước

 Thỏa thuận khóa: cho phép thiết lập khóa dùng để trao đổi thông tin mật giữa

Trang 12

chúng được áp dụng trong nhiều ứng dụng Các hệ mã bất đối xứng dựa trên tính

chất của các bài toán cơ bản như:

Bài toán phân tích số nguyên (thành thừa số nguyên tố):

Cho số nguyên dương n , tìm tất cả các ước số nguyên tố của nó, hay là tìm dạng phân tích chính tắc của n = 1 2

Bài toán RSA (Rivest-Shamir-Adleman) :

Cho số nguyên dương n là tích của hai số nguyên tố lẻ khác nhau, một số nguyên dương e sao cho gcd(e, (n)) =1, và một số nguyên c ; tìm một số nguyên m

sao cho m ec(mod )n

Điều kiện gcd(e, (n)) =1 bảo đảm cho việc với mỗi số nguyên c 0,1, ,n

-1 có đúng một số m 0,1, ,n -1 sao cho m ec(mod )n

Dễ thấy rằng nếu biết hai thừa số nguyên tố của n, tức là biết n =p.q thì sẽ

biết  (n) = (p -1)(q -1), do gcd(e, (n)) =1 sẽ tìm được d =e -1mod (n), và do đó sẽ tìm được m =c d modn Như vậy, bài toán RSA có thể qui dẫn trong thời gian đa thức về bài toán phân tích số nguyên

Bài toán thặng dư bậc hai :

Giả sử cho trước một hợp số nguyên lẻ và một số nguyên a Jn , tập tất cả

các số a có ký hiệu Jacobi Hãy quyết định xem a có là thặng dư bậc hai theo modn

hay không?

Trong lý thuyết mật mã, bài toán này cũng thường được xét với trường hợp n

là số nguyên Blum, tức n là tích của hai số nguyên tố p và q , n =p.q Ta chú ý rằng trong trường hợp này, nếu a Jn , thì a là thặng dư bậc hai theo modn, điều này có

thể thử được dễ dàng vì nó tương đương với điều kiện a (p -1)/2 1 (modp) Như vậy, trong trường hợp này, bài toán thặng dư bậc hai có thể qui dẫn trong thời gian đa

thức về bài toán phân tích số nguyên Mặt khác, nếu không biết cách phân tích n

thành thừa số nguyên tố thì cho đến nay, không có cách nào giải được bài toán

Trang 13

thặng dư bậc hai trong thời gian đa thức Điều đó củng cố thêm niềm tin rằng bài toán thặng dư bậc hai và bài toán phân tích số nguyên là có độ khó tương đương nhau

Bài toán tìm căn bậc hai modn :

Định nghĩa thặng dư bậc 2: Giả sự a,n là số nguyên n  1 và (a,n) = 1 Khi đó a được gọi là thặng dư bậc 2 theo module n nếu và chỉ nếu tồn tại x nguyên sao cho:

x2 a modn (1) Nếu a không thỏa mãn phương trình (1) thì a được gọi là không thặng dư bậc 2 theo module n Tập tất cả các số nguyên a là thặng dư bậc 2 theo module n được ký hiệu

là Qn Tập tất cả các số nguyên không thặng dư bậc 2 theo module n được ký hiệu

bằng Qn

Cho một số nguyên lẻ n là hợp số Blum, và một số a Qn (Qn là tập tất cả

các thặng dư bậc 2 theo modul n) tức a là một thặng dư bậc hai theo modn Hãy tìm một căn bậc hai của a theo modn, tức tìm x sao cho x 2 a (modn)

Nếu biết phân tích n thành thừa số nguyên tố, n =p.q , thì bằng cách giải các phương trình x 2 a theo các modp và modq, rồi sau đó kết hợp các nghiệm của

chúng lại theo định lý số dư Trung quốc ta sẽ được nghiệm theo modn , tức là căn

bậc hai của a theo modn cần tìm Vì mỗi phương trình x 2 a theo modp và modq

có hai nghiệm (tương ứng theo modp và modq ), nên kết hợp lại ta được bốn

nghiệm, tức bốn căn bậc hai của a theo modn Người ta đã tìm được một số thuật toán tương đối đơn giản (trong thời gian đa thức) giải phương trình x 2 a (modp) với p là số nguyên tố Như vậy, bài toán tìm căn bậc hai modn có thể qui dẫn trong

thời gian đa thức về bài toán phân tích số nguyên Ngược lại, nếu có thuật toán 

giải bài toán tìm căn bậc hai modn thì cũng có thể xây dựng một thuật toán giải bài

toán phân tích số nguyên như sau: Chọn ngẫu nhiên một số x với gcd(x,n) =1, và tính a =x2modn Dùng thuật toán  cho a để tìm một căn bậc hai modn của a Gọi căn bậc hai tìm được đó là y Nếu y  x (modn), thì phép thử coi như thất bại, và

ta phải chọn tiếp một số x khác còn nếu y  x (modn), thì gcd(x-y, n) chắc chắn là

một ước số không tầm thường của n, cụ thể là p hay là q Vì n có 4 căn bậc hai

modn nên xác suất của thành công ở mỗi lần thử là 1/2, và do đó số trung bình (kỳ

vọng toán học) các phép thử để thu được một thừa số p hayq của n là 2, từ đó ta thu

Trang 14

được một thuật toán giải bài toán phân tích số nguyên (Blum) với thời gian trung bình đa thức Tóm lại, theo một nghĩa không chặt chẽ lắm, ta có thể xem hai bài toán phân tích số nguyên và tìm căn bậc hai modn là khó tương đương nhau

Bài toán lôgarit rời rạc :

Cho số nguyên tố p, một phần tử nguyên thuỷ  theo modp (hay  là phần tử

nguyên thuỷ của Z p), và một phần tử  Zp Tìm số nguyên x (0 x p - 2) sao cho

x  (modp)

Ta đã biết rằng trong trường hợp chung, cho đến nay chưa có một thuật toán nào giải bài toán này trong thời gian đa thức Bài toán này cũng được suy rộng cho các nhóm cyclic hữu hạn như sau:

Bài toán lôgarit rời rạc suy rộng :

Cho một nhóm cyclic hữu hạn G cấp n, một phần tử sinh (nguyên thuỷ)

của G, và một phần tử  G Tìm số nguyên x (0 x n - 1) sao cho x

=  Cho Zn = {0,1,…,n-1} Trên Zn ta định nghĩa hai phép toán là cộng (+) và phép nhân (.) theo module n nói chung không phải là một trường Zn là một trường khi và chỉ khi n là số nguyên tố Trong trường hợp n là số nguyên tố thì Zn* =

Zn/{0} Các nhóm được quan tâm nhiều nhất trong lý thuyết mật mã là: nhóm nhân

của trường hữu hạn GF (p)- đẳng cấu với nhóm Z p của trường Zp, nhóm nhân 2m

Bài toán Diffie-Hellman :

Cho số nguyên tố p, một phần tử nguyên thuỷ theo modp (tức phần tử sinh

của Zp), và các phần tử amodp và bmodp

Hãy tìm giá trị abmod

p

Có thể chứng minh được rằng bài toán Diffie-Hellman qui dẫn được về bài toán lôgarit rời rạc trong thời gian đa thức Thực vậy, giả sử có thuật toán  giải bài toán lôgarit rời rạc Khi đó, cho một bộ dữ liệu vào của bài toán Diffie-Hellman

Trang 15

gồm p, ,amodp và bmodp; trước hết dùng thuật toán  cho (p, ,amodp) ta tìm được a, và sau đó tính được :

mod ( ) mod

  

Người ta cũng chứng minh được hai bài toán lôgarit rời rạc và Diffie-Hellman là

tương đương về mặt tính toán trong một số trường hợp, ví dụ p -1 là B-mịn với B =

O ((lnp) c ),c là hằng số

Tương tự như với bài toán lôgarit rời rạc, ta cũng có thể định nghĩa các bài toán Diffie-Hellman suy rộng cho các nhóm cyclic hữu hạn khác

Bài toán tổng tập con (hay bài toán KNAPSACK) :

Cho một tập các số nguyên dương a a1 , 2 , ,a nvà một số nguyên dương s Hãy xác định xem có hay không một tập con các aj mà tổng của chúng bằng s Một cách tương đương, hãy xác định xem có hay không các xi 0,1 (1 i n) sao cho

Bài toán giải mã đối với mã tuyến tính :

Mã tuyến tính là một lớp mã truyền tin có tính chất tự sửa sai được sử dụng trong kỹ thuật truyền tin số hoá Ta phát biểu bài toán giải mã đối với mã tuyến tính như sau:

Cho một ma trận cấp n xm A=(aij) gồm các thành phần là 0 hoặc 1, một

vectơ y =(y1,y2, ,ym) các giá trị 0 và 1, và một số nguyên dương K Hỏi: có hay

không một vectơ x =(x1,x2, ,xn) gồm các số 0 hoặc 1 và có không nhiều hơn K số 1 sao cho với mọi j (1 j m):

1

(mod 2)

n

i ij j i

Trang 16

RSA được phát minh bởi Ron Rivest, Adi Shamir, và Len Adleman [18], được đưa

ra công khai lần đầu tiên vào tháng 8 năm 1977 trên tạp chí khoa học Mỹ Hệ mật thường sử dụng cho việc cung cấp sự riêng tư và bảo đảm tính xác thực của dữ liệu

số Sơ đồ chung của hệ mã khoá công khai được cho bởi :

S = ( P , C , K , E , D )

trong đó P là tập ký tự bản rõ, C là tập ký tự bản mã, K là tập các khoá K , mỗi

khoá K gồm có hai phần K =(K’,K''), K' là khoá công khai dành cho việc lập

mật mã, còn K'' là khoá bí mật dành cho việc giải mã Với mỗi ký tự bản rõ xP ,

thuật toán lập mã E cho ta ký tự mã tương ứng y =E (K', x) C , và với ký tự mã y

thuật toán giải mã D sẽ cho ta lại ký tự bản rõ x : D (K'', y) = D (K'', E (K', x)) =x

Để xây dựng một hệ mã khoá công khai RSA, ta chọn trước một số nguyên n

=p.q là tích của hai số nguyên tố lớn, chọn một số e sao cho gcd(e, (n)) =1, và tính số d sao cho

e.d  1(mod (n))

Mỗi cặp K =(K’,K''), với K' =(n,e) và K'' = d sẽ là một cặp khoá của một hệ mật mã

RSA cụ thể cho một người tham gia

Như vậy, sơ đồ chung của hệ mật mã RSA được định nghĩa bởi danh sách (1), trong đó:

P = C = Zn , trong đó n là một số nguyên Blum, tức là tích của hai

số nguyên tố;

K = {K =(K’,K''): K' =(n,e) và K'' = d, gcd(e, (n)) =1,

e.d  1(mod (n))};

E và D được xác định bởi:

Để chứng tỏ định nghĩa trên là hợp thức, ta phải chứng minh rằng với mọi cặp khoá K =(K' ,K'' ), và mọi x P , ta đều có

D (K'', E (K', x)) = x

Thực vậy, do e.d  1(mod (n)) ta có thể viết e.d = t (n) +1 Nếu x nguyên tố với

Trang 17

(mod ), (mod );

Tính bảo mật của RSA có độ khó tương đương với bài toán phân tích số

nguyên (Blum) thành thừa số nguyên tố Do đó, giữ tuyệt mật khoá bí mật d, hay giữ tuyệt mật các thừa số p,q , là có ý nghĩa rất quyết định đến việc bảo vệ tính an

toàn của hệ mật mã RSA

1.4 Vấn đề thám mã

Từ khi ra đời các kỹ thuật bảo mật thông tin thì đồng thời nó cũng ra đời các

kỹ thuật thám mã, tức là các kỹ thuật với chúng cho phép người ta đọc được nội dung thông tin đã mật mã hóa mà không cần cho trước khóa mã Rõ ràng việc thám

mã khó khăn hơn nhiều lần việc giải mã vì người thám mã chỉ có trong tay bản mã

và không có bất cứ một thông tin nào khác Đúng như Edgar Poe – nhà nghiên cứu lâu đời về mã thám người Pháp đã tầng nói: “Khó ai có thể tin rằng: Trí tuệ con người lại có thể sinh ra một bí ẩn (mật mã - người dịch) mà cũng chính trí tuệ con người lại không khám phá được bí ẩn đó sau mỗi lao động chuyên cần thích đáng” (1968)

Dù khó khăn là vậy, như chủ tịch Hồ Chí Minh của chúng ta đã dạy: “Biết địch, biết mình trăm trận đánh, trăm trận thắng” Biết mình đã khó nhưng biết địch càng khó khăn gấp bội Tình báo điện tử nói chung, mã thám nói riêng là một biện pháp nghiệp vụ để biết địch Chính vì vậy song song với sự phát triển của kỹ thuật mật mã là kỹ thuật thám mã Tất cả các nước tiên tiến đều có các cơ quan tình báo điện tử (Bao gồm thu tin và thám mã) Ở Mỹ, cơ quan an ninh quốc gia NSA (The nationnal Security Agency) được thành lập ngày 04/11/1952 theo chỉ thị của tổng thống Truman Theo con số mới nhất (năm 2001) thì hàng năm ngân sách chi cho NSA xấp xỉ 15 tỷ USA Ở Nga, trước đây là KGB sau đó đổi thành Fapxi, trong đó cục 16 trực thuộc tổng thống làm nhiệm vụ thu tin thám các loại điện mật trên thế

Trang 18

giới mà họ quan tâm Các nước Trung Quốc, Đức, Anh, Pháp v.v đều có cơ quan thám mã, có điều kết quả thám mã của họ được giữ bí mật tuyệt đối, do đó mà những thông tin về kỹ thuật mã thám cụ thể không được đăng trên bất cứ tạp chí nào

Ở Việt Nam, công tác tình báo điện tử ra đời từ 1954 và đã có nhiều kết quả cực kỳ quan trọng, góp phần làm nên chiến thắng lẫy lầng miền Nam và bảo vệ miền Bắc Xã hội chủ nghĩa thống nhất đất nước

Nếu nói mật mã là một khoa học thì thám mã là một khoa học và nghệ thuật

Nó đòi hỏi người mã thám không những cần công cụ tính toán vượt trội mà điều căn bản ở họ cần có lòng say mê nghề nghiệp và phải học tập suốt đời Như vậy, công việc thám mã không phải do các Hackers thực hiện mà do một tổ chức Nhà nước đảm nhiệm; Ở đó phải có sự đầu tự thích đáng về người và kinh phí, đồng thời với sự hợp tác đăc lực của nhiều cơ quan nghiên cứu khoa học và các trường đại học lớn thì mới có hy vọng thành công

Ngày nay, mật mã và mã thám là một bộ môn rất quan trọng của An toàn thông tin Xét trong phạm vi của một quốc gia thì hai lĩnh vực mật mã và mã thám

bổ sung cho nhau cùng nhau phát triển, mặc dù chúng hoàn toàn độc lập đối với nhau Chính vì vậy việc nghiên cứu thám mở một hệ mật nào đó có ý nghĩa quan trong ở chỗ là không những tìm ra được những thông tin mật mà còn bổ sung nhằm hoàn thiện hơn cho các hệ mật mà cơ quan chức năng về mật mã đang nghiên cứu ứng dụng Sở dĩ đề tài “Nghiên cứu thám mã hệ mật RSA mà không phải phân tích nhân tử nguyên tố của module n RSA” được chọn làm mục tiêu nghiên cứu là vì đây là một hệ mật mã khóa công cộng được sử dụng rộng rãi nhất (như trong PKI, trong một số hệ điều hành, trong các thiết bị tự động ATM v.v ) Tuy nhiên việc nghiên cứu tấn công hệ mật RSA là một vấn đề rất lớn mà nhiều nhà khoa học trên thế giới đã tập trung tìm hiểu và đã cho nhiều kết quả quan trọng Ở chương II chúng ta sẽ tìm hiểu những kết quả chính đạt được qua hơn 20 năm về tấn công RSA trên thế giới

Quá trình nghiên cứu, chúng ta sử dụng Alice và Bob để biểu thị cho hai phía muốn truyền thông lẫn nhau Chúng ta coi Marvin là kẻ gian muốn tấn công nghe lén hay lấy trộm thông tin giữa Alice và Bob Ta mô tả một phiên bản được đơn

Trang 19

thước (mỗi số n/2 bít) Số N với kích thức 1024 bit, nghĩa là 309 số thập phân Mỗi

một nhân tử là 512 bit Giả sử e, d là hai số nguyên thỏa mãn ed = 1 mod (N) với

điều kiện (N) = (p − 1)(q − 1) là cấp của nhóm nhân trên Z*N Chúng ta gọi N là modul RSA, e là số mũ mã hóa và d là số mũ giải mã Cặp (N,e) là khóa công khai Cặp (N,d) được gọi là khóa bí mật hay còn gọi là khóa riêng và chỉ có người nhận mới được biết Khóa bí mật dùng để giải mã bản mã

Một thông điệp (message) là một số nguyên M  Z*

điều kiện n=log2N và c

là một hằng số nhỏ (bé hơn 5), thực tế thuật toán tốt hay không phụ thuộc vào kích thước đầu vào Trong luận văn này chúng ta quan tâm đến thuật toán được coi là có hiệu quả Chúng ta không tập trung chủ yếu vào nghiên cứu hàm ngược của RSA

để tấn công vào RSA Việc khó khăn của tính hàm ngược RSA chính là từ đầu vào ngẫu nhiên, được cho bởi (N,e,C), một kẻ tấn công khó có thể tìm ra bản rõ M Nếu cho trước (N,e,C), rất khó để tìm ra thông tin về M Điều này được biết trong lý thuyết an ninh an toàn Chúng ta chỉ ra rằng RSA được mô tả ở trên là không an toàn: nếu cho (N,e,C), chúng ta có thể dẽ dàng suy diễn ra một vài thông tin của bản rõ M (ví dụ, ký tự Jacobi của M trên N được dễ dàng suy ra từ C) RSA có thể được an toàn ngữ nghĩa bằng việc thêm các bít ngẫu nhiên vào quá trình xử lý mã

Trang 20

hóa Hàm RSA x  xe mod N là một ví dụ về hàm của sập một chiều (trapdoor one-way function) Nó có thể được tính toán dẽ dàng, nhưng như chúng ta đã biết không thể tính ngược hiệu quả nếu không có (cửa sập) d ngoại trừ một vài trường hợp đặc biệt

Chương 2 - TỔNG KẾT NHỮNG KẾT QUẢ TẤN CÔNG VÀO HỆ MẬT

RSA TRONG NHỮNG NĂM QUA 2.1 Một số giả thiết ngầm định

1) N – RSA modulus

2) e – số mũ mã hóa (encryption exponent)

3) d – số mũ giải mã (decryption exponent)

4) M – Thông điệp số nguyên (message integer), M  Z*N

6) Chúng ta nghiên cứu độ khó của hàm ngược (nghịch đảo) RSA khi không cho trước của sập d và nghiên cứu phương pháp tấn công RSA trong trường hợp này

7) Về mặt lý thuyết, nếu cho trước (N,e,C), rất khó để tìm ra thông tin về M 8) Tấn công vét cạn (brute-force attack) bằng cách phân tích các modulus, thời gian chạy với số nguyên n-bít là:

exp((c + o(1))n1/3log2/3n) trong đó c < 2

Trang 21

2.2 Phân tích các số nguyên lớn

Vấn đề phân tích một số nguyên tố lớn thành tích các số nguyên tố khác nhau là bài toán rất hấp dẫn và đã được nhiều nhà toán học quan tâm nghiên cứu; chẳng hạn [5], [9], [12] tuy nhiên trong phạm vi của một luận văn cao học, em chỉ tập trung nghiên cứu trong trường hợp N là tích của hai số nguyên tố phân biệt sau đây là một số mệnh đề quan trọng phục vụ việc tấn công cơ bản:

Mệnh đề 1:

Với (N,e) là khóa công khai của RSA Cho trước khóa riêng d, người ta có thể phân tích thành nhân tử môdul N=pq một cách hiệu quả Ngược lại cho các thừa số của N, người ta có thể khôi phục được d một cách có hiệu quả

Từ mệnh đề ở trên người ta đã đưa ra một số tấn công vào RSA sau đây: Các tấn công cơ bản:

2.2.1 Modul chung

Để đơn giản cho việc sử dụng nhiều cặp số nguyên tố khác nhau cho các người dùng khác nhau, chúng ta lấy N chung cho tất cả Cùng một N được sử dung cho tất cả người sử dụng Khi đó trung tâm phân phối khóa một khóa công khai là (N,ei) và khóa riêng là (N,di)

Thoạt nhìn, người ta có cảm giác không có vấn đề gì về việc ảnh hưởng đến

an toàn bảo mật cả Bởi vì bản mã C = Me

mod N nhằm gửi cho Alice Còn Bob cho dù có nhận được bản mã C cũng không thể giải mã được để tìm bản rõ M vì Bob không có khóa bí mật là da Tuy nhiên điều đó không đúng, cuối cùng hệ thống mất an toàn

Từ mệnh đề 1, Bob có thể sử dụng số mũ bí mật của mình là eb và db để phân tích N thành nhân tử là p và q Và do đó Bob tìm được khóa riêng da của Alice từ khóa công khai ea của cô ấy Chính vì vậy, Simmons đã chỉ ra rằng moduls RSA không bao giờ được dùng chung cho hai thực thể trở lên

2.2.2 Mù (Blinding)

Marvin chọn ngẫu nhiên một số r  Z*

N và đặt M’ = re M mod N Sau đó anh

ta nhờ Bob ký lên M’ Bob có thể cung cấp chứ ký của mình là S’ lên M’ Nhưng

từ cách tính S’= (M’)d

mod N, Marvin có thể đơn giản tính S = S’/r mod N để có được chữ ký của Bob là S trên M

Trang 22

Se = (S’)e/re = (M’)ed/re = M’/re = M/(mod N)

2.3 Số mũ riêng bé (Low Private Exponnent)

Trong thực tế, để giải mã nhanh đòi hỏi số d nhỏ và điều này để lộ lỗ hổng

mà kẻ tấn công có thể thực hiện như sau Trước hết ta nghiên cứu định lý Wiener

Định lý 1 (M Wiener): Cho N = pq với q < p< 2q Giả sử d < 1/3N 1/4

Cho trước (N,e) với ed = 1 mod (N), Marvin có thể tìm được d hiệu quả.

Việc chứng minh định lý trên dựa trên xấp xỉ hóa phân số liên tục như sau: Khi ed = 1 mod (N), tồn tại một số k thỏa mãn ed - k(N) = 1

Vì thế:

) (

1 )

k N

k N

k Nd

N k Nd

N N

2 4

/ 1

2

1 1

d dN

d

k N

N e

[12, Th, 177] Tất cả kết quả đó đều thu được từ

Trang 23

việc tính toán logN hội tụ của việc tính toán phân số

2.3.1 Độ lớn e

Thay vì rút gọn e trong (N), ta sử dụng (N,e’) cho khóa công khai thỏa mãn e’ = e + t.(N) trong đó số t lớn Rõ ràng có thể sử dụng e’ thay thế e để mã hóa thông điệp Tuy nhiên, khi số e có giá trị lớn, theo chứng minh ở trên thì số k không thể nhỏ hơn e Một tính toán đơn giản chỉ ra rằng nếu e’ > N1.5

=d mod (q - 1) đều nhỏ 128 bits Để giải mã nhanh bản C ta có thể tiến hành:

Trước hết ta tính Mp = Cdp mod p và Mq = Cdq mod q Sau đó sử dụng CRT

để tính giá trị M  ZN thỏa mãn M = Mp mod p và M = Mq mod q Kết quả M phải thỏa mãn M = Cd

mod N là bắt buộc Mặc dầu dp và dq là nhỏ song giá trị d mod

(N) có thể lớn, tùy thuộc vào (N) Theo kết quả, sự tấn công của định lý 2 không được áp dụng Chúng ta lưu ý rằng nếu (N,e) được biết thì kẻ địch có thể tấn công N trong thời gian O(min( dp, dq)), vì thể dp và dq không thể quá nhỏ

Mặt khác ta không thể biết được điều gì xẩy ra đối với vấn đề an ninh này Chúng ta chỉ biết thông qua tấn công hữu hiệu của Wiener Định lý 1 gần đây đã được cải thiện bởi Boneh và Durfee [4], họ chỉ ra rằng số với d < N0.292, kẻ tấn công

có thể tính được d từ (N,e) Kết quả này chỉ ra ranh giới của Wiener là không rõ ràng Nó có vẻ như là d< N0.5, đây là một bài toán mở

Bài toán mở : Cho N = pq và d < N 0.5 Nếu Marvin biết (N,e) với ed = 1 mod

(N) và e < (N), anh ta có thể tìm được d không ?

2.4 Số mũ công khai bé (Low public Exponent)

Trang 24

Định lý 2 (Coppersmith): Cho N là một số nguyên và f Z[x] là một đa thức mà

có độ đo là d Đặt X = N 1/d-e

cho e 0 Sau đó biết (N,f) Marvin có thể tìm tất cả số nguyên |x 0 | < X thỏa mãn f(x 0 ) = 0 mod N Thời gian chạy phụ thuộc vào thời gian chạy thuật toán LLL với trên một lưới có khoảng cách là O() với  = min(1/e, log 2 N)

Định lý cung cấp một thuật toán có thể tìm kiếm hiệu quả tất cả gốc f của N

ít hơn X = N1/d Với X nhỏ hơn, thời gian chạy thuật toán cũng giảm Sức mạnh của thuật toán là có thể tìm được gốc của N trong thời gian đa thức Định lý Coppersmith làm việc rất hiệu quả với một số nguyên tố

2.4.1 Hastad's Broadcast Attack

Để đơn giản ta coi ei là thành phần công khai bằng 3 Marvin tìm ra M rất đơn giản nếu k  3 Thực vậy, Marvin có được C1, C2, C3, thỏa mãn:

C1 = M3 mod N1, C2 = M3 mod N2, C3 = M3 mod N3

Nên với e = 3, gửi các thông điệp giống nhau đến 3 người nhận là không an toàn Giải pháp chống tấn công này chúng ta gắn các thông điệp trước khi mã hóa với đa thức ?

từng đôi một Với g i Z Ni [x], k là đa thức có giá trị nhỏ nhất là d Tồn tại M <

N min thỏa mãn: g i (M) = m mod N i với tất cả i = 1,…,k Giả thiết rằng k > d, có thể tìm M khi cho (N i ,g i ) k i=1

Định lý chỉ ra rằng một hệ thống đồng biến với các đa thức nguyên tố hỗn hợp có thể giải quyết hiệu quả, giả thiết rằng các hàm được cung cấp đầy đủ Bằng cách cài đặt gi = fi

ei – Ci mod Ni, chúng ta thấy rằng Marvin có thể tìm được M từ bản mã được cho với số thành viên ít nhất là d, khi đó d là giá trị lơn nhất của

eideg(fi) với i = 1,…,k

Chúng ta lưu ý rằng để chống lại tấn công broadcast ở trên chúng ta sử dụng một cặp số ngẫu nhiên thay vì gắn cứng vào một giá trị

Trang 25

2.4.2 Franklin-Reiter Related Message Attack

Hệ quả (FR): Giả sử rằng với e =3 và (N,e) là một khóa công khai của RSA

Cho M 1 M 2 Z * N thỏa mãn M 1 = f(M 2 ) mod N trong đó f = ax + b Z * N là đa thức tuyến tính với b 0 Khi đó cho trước (N, e, C 1 ,C 2 , f), Marvin có thể tìm được

M 1 , M 2 với thời gian là đa thức bậc hai log N

- Để chứng minh hệ quả FR ta tính gcd của hai đa thức

- Với e = 3 thì giá trị gcd phải là giá trị tuyến tính

Thật vậy, đa thức x3–C2 phân tích thành p và q là phép phân tích tuyên tính

và không thể rút gọn về nhân tố bậc hai (ta nhớ rằng gcd(e, (N)) = 1 và vì thế x3

C2 chỉ có giá trị gốc nằm trong ZN) Khi đó g2 không thể chia cho g1, gcd phải là một hàm tuyến tính Với e = 3 hàm gcd luôn là tuyến tính Tuy nhiên, đối với một vài M1, M2 và f, gcd có thể không phải là tuyến tính, trong trường hợp này việc tấn công là thất bại

- Thường nó chỉ áp dụng với khi số mũ công khai e được sử dụng với giá trị nhỏ Với e lớn, công việc tính toán gcd là rất khó Một câu hỏi thú vị (nếu không nói là khó) đặt ra là liệu việc tấn công với một số e bất kỳ sẽ như thế nào Khí đó việc tính toán gcd của g1 và g2 theo cách trên có trong thời gian đa thức đối với log

e ?

2.5 Thành phần công khai bé

2.5.1 Coppersmith's Short Pad Attack

- Ý tưởng chính của tấn công này là ta thêm ngẫu nhiên các bít vào cuối của thông điệp, thuật toán này có thể thu được bản rõ của M Tấn công này rất đơn giản nhưng rất nguy hiểm

Định lý 4: Với (N,e) là một khóa công khai của RSA, N có độ dài n-bits Đặt

m = [n/e 2 ] Với M Z *

N là một thông điệp có độ dài n-m bit M 1 = 2 m M + r 1 và M2

= 2 m M + r 2 với điều kiện r 1 và r 2 là hai số nguyên khác nhau thỏa mãn 0 r 1 , r 2 <

2 m Nếu Marvin biết (N,e) và các bản mã hóa C 1 , C 2 của M 1 , M 2 (nhưng không biết

r 1 , r 2 ), anh ấy có thể tìm ra M một cách có hiệu quả

Thực tế, khi e = 3 tấn công có thể đạt được với độ dài của các bít thêm vào là

ít hơn 1/9th

độ dài của bản thông điệp Đây là một kết quả quan trọng Lưu ý rằng

Trang 26

việc đưa ra giá trị e = 65537 thì sự tấn công là vô ích đối với các modul kích kỡ chuẩn

2.5.2 Tấn công bằng khóa riêng

Với (N,d) là một khóa riêng của RSA Giả sử rằng Marvin có thể tìm được một nhân tử trong dãy bit của d, hay một phần của d Từ đó Marvin có thể khôi phục được phần còn lại của d Cụ thể ta có định lý sau:

Định lý 5 (BDF): Cho (N,d) là một khóa riêng của RSA trong đó N có độ dài

là n bit Biết [n/4] bít ít ý nghĩa nhất của d, Marvin có khôi phục được số d với thời gian tuyến tính elog 2 e

Định lý 6 (Coppersmith): Giả sử số N = pq (là một modul RSA) có n bit

Cho trước n/4 bít ít ý nghĩa nhất (hoặc n/4 bít nhiều ý nghĩa nhất) của p (giả thiết p<q) Khi đó có tồn tại một phân tích số N một cách có hiệu quả

- Định lý BDF được chứng minh thông qua định lý Coppersmith

Định lý 5 là kết quả của định lý 6 Trong thực tế, từ e và d, tồn tại một số nguyên k sao cho

ed – k(N – p – q + 1) = 1

vì thế d < (N), mặt khác ta có 0 < k  e Rút gọn với 2n/4 và đặt q = N/p, chúng ta có:

(ed)p – kp(N – p + 1) + kN = p (mod2n/4)

Khi Marvin biết được ít nhất n/4 bít của chuỗi bít d, anh ta có được giá trị của ed mod 2n/4 Ví thế anh ta có được phương trình có k và p Mặt khác từ giá trị của e và có thể là k, Marvin giải phương trình bậc hai chứa p và thu được một giá trị của p mod 2n/4 Với các giá trị thu được này, anh ta chạy thuật toán của định lý 6

để phân tích nhân N thành nhân tử Do tổng các giá trị của p mod 2n/4

lớn nhất là e log2e Vì thế tại giá trị lớn nhất e log2e, N sẽ bị phân tích

Định lý 5 được biết như là một phương pháp tấn công vào khóa riêng (partial key-exposure) Tương tự như các phương pháp tấn công đã tồn tại, với giá trị e lớn hơn và phải bé hơn N , tuy nhiên với số bít tăng kỹ thuật sẽ phức tạp hơn Có một điều thú vị là các hệ mật dựa trên log rời rạc như hệ mật khóa công khai ElGamal,

Trang 27

thì dường như không dẽ bị phá vỡ bởi phương pháp này Hơn nữa nếu gx

mod p và một nhân tử là hằng số x được cho, không có thuật toán với thời gian đa thức để tính phần còn lại của x

Với cách tấn công này, chúng ta chỉ ra rằng khi mã hóa với thành phần e nhỏ, hệ mật RSA bị rò rỉ một nửa số bít quan trọng nhất (hoặc ít quan trọng nhất) tương ứng với rò khóa riêng d Để hiểu rõ điều này, chúng ta xét phương trình

ed –k(N – p – q + 1) = 1 trong đó k là một số nguyên thỏa mãn 0 < k  e Cho k, Marvin có thể dẽ dàng tính:

kN e

d  (  1 ) / Sau đó tính:

N e

N k e q p k d

d  (  ) /  3 /  3

Vì thế d là một xấp xỉ tốt cho d Với biên này cho thấy với d tốt nhất, một nửa số tín hiệu bít của d sẽ dẫn tới d Vì thế chỉ e mới có thể là giá trị của k, Marvin có thể xây dựng một tập con nhỏ của e như là một thành phần của tập bằng một nửa tín hiệu bít có ý nghĩa nhất của d Trong trường hợp e = 3 là trường hợp đặc biệt, tại đây có thể chỉ ra rằng k luôn bằng 2 và vì thế hoàn toàn bị rò rỉ một nửa tín hiệu bít

ý nghĩa nhất của d

2.6 Cài đặt các tấn công

2.6.1 Tấn công dựa trên thời gian

Tấn công thông minh của Kocher cho thấy rằng bằng phương pháp lựa chọn thời gian chính xác để giải mã (hoặc ký số) RSA của smartcard, Marvin có thể nhanh chóng tìm ra thành phần giải mã riêng d

Sử dụng thuật toán “repeated squaring algorithm” tính C = Md

Trang 28

- Nếu d1 = 1, smardcard sẽ tính C.z = M M2 mod N Nếu khác 1 thì không tính Gọi ti là thời gian tính Mi.Mi

2 mod N Các giá trị ti’s sẽ khác nhau phụ thuộc vào giá trị của Mi (Cũng như thuật toán rút gọn, thời gian tính toán sẽ phụ thuộc vào giá trị mà ta cần tình toán) Đơn vị ti’s là số lần anh ta ngừng để yêu cầu với card (trước khi thực hiện tấn công) tương ứng với những lần anh ta thao tác vật lý trực tiếp card

- Khi d1 = 1, hai bộ {ti} và {Ti} có tương quan với nhau Ví dụ: Nếu với i, tilớn hơn so với sự mong đợi, thì Ti cũng lớn hơn so với sự mong đợi Mặt khác: nếu

d1 = 0, hai bộ {ti} và {Ti} độc lập như các biến ngẫu nhiên Với độ đo độ tương quan, Marvin có thể xác định được d1 hoặc bằng 1 hoặc bằng 0 Tiếp tục với phương pháp này, anh ta có thể khôi phục được d2,d3… Lưu ý rằng, khi thành phần

e của khóa công khai được sử dụng thấp, khóa riêng tìm được theo phương pháp ở phần trên giúp cho phương pháp của Kocher có thể khôi phục được toàn bộ d chỉ cần biết trước một phần tư số bít của d

Giải pháp chống đỡ:

1) Đơn giản nhất là tăng độ trễ nhất định để quá trình mũ hóa luôn mất một thời gian nhất định

2) Rivest đưa ra dựa trên cơ chế bịt các kẽ hở (blinding)

Kocher đã khám phá ra một cách tấn công khác dọc theo các hàng được gọi

là phân tích mật mã theo lũi thừa (power cryptanalysis) Kocher đã chỉ ra rằng bằng cách đo chính xác lũy thừa của smartcard trong suốt quá trình sinh chữ ký, Marvin

có thể dễ dàng ra khóa riêng Thật vậy, trong suốt quá trình thực hiện một phép nhân, năng lương tiêu thụ của card cao hơn mức bình thường Bằng phương pháp

Trang 29

định được nếu card lặp đi lặp lại một vài phép nhân, bằng cách anh ta thu được chuỗi bít của d

2.6.2 Tấn công dựa trên các lỗi ngẫu nhiên

Quá trình cài đặt giải mã và ký số RSA thường sử dụng định lý đồng dư trung hoa ( Chinese Remainder Theorem) nhằm cải thiện tốc độ tính toán Md mod

N Boneh, DeMillo, và Lipton [8] đã quan sát và thấy rằng có một lỗi nguy hiểm khi sử dụng phương pháp CRT Vấn đề là khi sinh chữ ký mà máy tính của Bob hoạt động không đều là nguyên nhân gây nên lỗi tính toán Hay nói cách khác trong khi copy giữa các thanh ghi, một bit của dòng bít bị thất lạc (Sự hoạt động không đều nguyên nhân có thể do xung đột điện từ hoặc cũng có thể do sâu phần cứng, các lỗi này đã sớm được tìm thầy trong các phiên bản của chíp Pentium) Được cung cấp một chữ ký lỗi, kẻ tấn công như Marvin có thể dẽ dàng phân tích thành nhân tử modul N

Bình thường Bob tính:

Cp = Mdp mod p và Cq = Mdq mod q Với dp = d mod (p - 1) và dp = d mod (q - 1) Anh ấy thu được chữ ký C bằng cách:

C = T1Cp + T2Cq (mod N), Với

mod 0

mod 1

mod 1

mod 0

2

Nhưng khi một lỗi đơn xẩy ra lúc Bob đang sinh chứ ký Kết quả là Cp hoặc

Cq sẽ sai Giả sử là Cp đúng, nhưng Cq

Trang 30

nào để tránh các tấn công trước Một cách đơn giản để an toàn là Bob thực hiện kiểm tra trong lúc ký trước khi gửi chúng đi Công việc kiểm tra là hết sức quan trọng vì khi sử dụng phương pháp CRT để cải thiện tốc độ, những lỗi ngẫu nhiên gặp phải rất nguy như đã trình bày ở phần trước Nhiều hệ thống, bao gồm cả những hệ không cài đặt CRT, có thể bị tấn công bằng cách sử dụng những lỗi ngẫu nhiên này [8] Tuy nhiên, trong thực tế kết quả thu được chưa được như tính toán lý thuyết

2.6.3 Tấn công của Bleichenbacher trên PKCS 1

Trước khi dùng RSA để mã hóa thông điệp, ta chèn n bít ngẫu nhiên vào nó Trong phiên bản chuẩn cũ – Public Key Cryptography Standard 1 (PKCS1) đã sử dụng cách tiếp cận này Sau khi chèn vào, thông điệp có dạng:

Khi nhận được một 1 thông điệp PKCS 1 từ Bob, một ứng dụng (như web browser) giải mã nó, kiểm tra khối khởi tạo, và cắt đoạn bít ngẫu nhiên thêm vào Tuy nhiên, một vài ứng dụng khi kiểm tra khối khởi tạo mà không thấy chuỗi “02”

nó sẽ gửi trở lại một thông báo “bản mã lỗi” Tuy nhiên Bleichenbancher đã chỉ ra rằng lỗi này dẫn đến hậu quả rất nghiệm trọng đó là: kẻ tấn công như Marvin sử dụng lỗi này để thực hiện tấn công và có thể giải mã được bản mã

Thực vậy Marvin chặn một bản mã C mà Bob đang mong và muốn giải mã

nó Để thực hiện tấn công, Marvin lấy ngẫu nhiên một số r  Z*N, tính C’ = rC mod

N, và gửi C’ đến máy Bob Một ứng dụng trên máy Bob sẽ nhận C’ và cố gắng giải

mã nó Nó có thể thu được một thông điệp lỗi hoặc chẳng thu được gì vì rằng có thể C’ vô tình vẫn đúng khuôn dạng Vì thế Marvin có thể thu được toàn bộ toàn bộ

16 bít tín hiệu giải mã của C’ bằng 02 Trong trường hợp này, Marvin sẽ tiên đoán

và kiểm tra liệu 16 bít tín hiệu có ý nghĩa của bản giải mã của rC mod N có bằng 02 không ? Với bất kỳ r mà anh ấy đã chọn, Bleichenbacher đã chỉ ra rằng như thế đủ

để giải mã C

2.8 Một số tấn công bằng nhân tử hóa số N với số N lớn

Trang 31

Khi các sơ hở của hệ mật RSA được “bịt kín” thì người ta thường sử dụng một số tính toán sau đây để nhân tử hóa số N

2.8.1 Tìm nhân tử lớn nhất thứ nhất N

Định lý 7 Fermat: Giả sử n là một số nguyên dương lẻ có dạng n = p.q

trong đó pq và p, q là các số nguyên tố lẻ Khi đó biểu thức n có thể được viết dưới dạng: n = t 2

– s 2 (t, s là các số nguyên dương) Các số nguyên t, s, p và q có mối quan hệ: t =

y x y x

{Đây chính là hai nhân tử của n(p,q)}

Trang 32

dài của p xấp xỉ bằng một nửa độ dài của n Khí đó xác suất p nẳm trong khoảng (2 3 n 1 , n) là rất cao

Bài toán đặt ra là cho n là số nguyên dương lẻ, d  2 3 n 1 Tìm nhân tử lẻ nhỏ nhất

f sao cho d < f n Thuật toán được thực hiện như sau:

n

s =  n ; (2) If d> s thuật toán kết thúc với kết quả không tìm được nhân tử;

(3) Đặt d = d +2, x = r

r = 2r – r’, r’ = x (4) If r < 0, set r = r + d

q = q + 1, goto (6) (5) If r < d, set r = r –d

q = q - 1, goto (5) (6) If r = 0 then d là một thừa số của n

Thuật toán kết thúc, ta sẽ thu được f = d

Else goto (2)

Ta thấy rằng thuật toán sẽ quét tất cả các giá trị lẻ nằm trong khoảng (2 3 n 1 , n)

2.8.3 Phân tích thứ ba

Ta lấy r số nguyên: m1, m2, , mr thỏa mãn gcd(mi, mj) = 1 i,j 1 ,r

Trước tiên ta lập ma trận S[i,j] với 1ir, 0  jm i  1 thỏa mãn:

1 nếu j2

– n  y(modm i) có nghiệm y S[i,j] =

0 nếu trái lại Thuật toán tiến hành như sau:

(1) Set x =  n và ki = (-x) mod mi For 1  i  r

(2) If S[i,j] = 1

Trang 33

(3) Set x = x + 1, ki = (ki -1) mod mi

For 1  i  r goto (2) (4) Set y =  x2 n or x2 n

If y2 = x2 – b then (x - y) là một nhân tử cần tìm của n và thuật toán kết thúc

Else goto (3)

Trong đó:

-  x là số nguyên bé nhất mà lơn hơn hoặc bằng x

-  x là số nguyên lớn nhất mà nhỏ hơn hoặc bằng x

2.8.4 Thuật toán Pollard (p-1)

Giả sử n là B – mịn (tập tất cả các ước nguyên tố nhỏ hơn hay bằng B), Q là bội số chung nhỏ nhất của tất cả các lũy thừa của số nguyên tố  B mà bản thân chúng 

q ln

ln

Trong đó tích lấy theo tất cả các số nguyên tố khác nhau q  B Nếu p là một thừa

số nguyên tố của n sao cho p – 1 là B – mịn, thì p-1|Q và do đó với mọi a bất kỳ thỏa mãn gcd(a,p) = 1, theo định lý Fermat ta có: aQ 1(mod p)

Vì vậy:

- Nếu lấy d = gcd(aQ – 1, n) thì p|d

- Nếu d = n coi như thuật toán không cho ta kết quả như mong muốn

Tuy nhiên điều đó sẽ không xẩy ra nếu n có ít nhất hai thừa số nguyên tố khác nhau Cụ thể thuật toán như sau:

(1) Chọn một lần cho độ min B

(2) Chọn ngẫu nhiên một số nguyên a, 2 a  n – 1

Tính d = gcd(a,n)

Trang 34

- Tính a = aq1 mod n

(4) Tính d = gcd (a-1,n)

(5) If 1< d < n then cho kết quả (d)

(6) Else không tìm thấy kết quả nào thỏa mãn

Thuật toán Pollars phân tích n thành thừa số nguyên tố có hiệu quả đối với những số nguyên n là B mịn, người ta tính được thời gian thực hiện thuật toán là O(Bln n/ln B)

Như vậy, cho đến nay người ta mới công bố được một số phương pháp tấn công vào hệ thống mật mã RSA Trong đó, phương pháp phân tích nhân tử modulus N của RSA được nhiều nhà toán học tập trung nghiên cứu hơn cả Tuy nhiên thuật toán sàng bình phương đã và đang được chú ý hơn, mặc dù thuật toán này cũng mới chỉ giải quyết cho trường hợp modulus N có độ dài không lớn lắm Còn nếu độ dài modulus N của RSA mà lớn hơn thì cho đến nay chưa có một thuật toán nào khả thi được công bố

Sau đây, trên cơ sở nghiên cứu các thuật toán đã được công bố em đề xuất một thuật toán phá vỡ RSA (thám mã RSA) mà không phải phân tích nhân tử nguyên tố modulus N của hệ mật RSA

Trước hết, trong chương tiếp theo (chương 3) em trình bày các phép toán số lớn nhằm phục vụ yêu cầu tình toán cho thuật toán sẽ được đề xuất ở chương 4

Trang 35

Chương 3 - THƯ VIỆN TÍNH TOÁN SỐ LỚN

Trước khi xây dựng giải pháp tấn công RSA, chúng ta nghiên cứu cách biểu diễn số nguyên lớn cũng như các thuật toán số học làm việc với các số lớn đó trong máy tính

3.1 Biểu diễn số lớn

Có nhiều cách để biểu diễn và lưu trữ số lớn Cách thông thường nhất là biểu diễn bằng xâu ký tự Cho một số lớn có n+1chữ số thập phân được biểu diễn trong

hệ cơ số b, có dạng a = (an-1an-2…a0)b ta sử dụng một xâu ký tự s có độ dài n là ký tự

để biểu diễn a theo cách:

Chữ số a0 được lưu vào phần tử s[0]

Chữ số a1 được lưu vào phần tử s[1]

………

Chữ số an-1 được lưu vào phần tử s[n-1]

Dấu của số lớn được đặt trong biến trạng thái “dau”:

- Nếu dau = 1 thì a là số dương

- Nếu dau = -1 thì a là số âm

Trang 36

Ta quy ước khi nói đến số lớn a thì a là xâu ký tự, các phần tử của xâu chính là các phần tử của số lớn được biểu diễn ở hệ cơ số b một cách tương ứng

Giả sử ta đang biểu diễn số lớn ở hệ cơ số c nào đó và ta muốn chuyển số lớn sang biểu diễn ở hệ cơ số b thông qua thuật toán sau:

Input: số nguyên dương a, số nguyên dương b (2  b  256)

Output: biểu diễn ở hệ cơ số b của a = (an-1an-2…a0)b , 0  n; an 0

1 If (x dương, y âm) return 1;

2 If (x âm, y dương) return 0;

3: If (n > m)&&(x âm) return 0; // x <y

4 if (n < m) && (y âm) return 1;// x >y

5 If (n > m) && (x dương) return 1; //x >y

Trang 37

6 If (n < m) && (y dương) return 0; //x < y

For ( i = n-1; i-0; i )

If (x[i] > y[i]) return 0;//x <y Else If (x[i]<b[i]) return 1; // x > y

8 return 2;

3.2.2 Cộng hai số lớn dương

Cho x, y là hai số lớn có độ dài lần lượt là n và m Nếu số nào nhỏ hơn sẽ

được chèn thêm 0 vào sao cho độ dài của hai số là bằng nhau

Cộng từng phần từ một của hai xâu lưu trữ hai số

Input: Hai số lớn x = (xn-1 x0), y = (ym-1 y0) có độ dài là n và m

Trang 38

nho = l;

else nho = 0;

4 Retum a;

3.2.3 Trừ hai số lớn dương

Cho x, y là hai số lớn có độ dài lần lượt là n và m Nếu số nào nhỏ hơn sẽ

được chèn thêm 0 vào sao cho độ dài của hai số bằng nhau khi ta tiến hành trừ Ta tiến trừ từng phần tử một của hai xâu lưu trữ hai số lớn

Input: Hai số lớn x = (xn-1 x0), y = (ym-1 y0) có độ dài là n và m

Output: z = x – y

Algorithm:

1 nho = 0; // nho: biến lưu giá trị nhớ của phép trừ

2 for (i=0;i < n; i++)

3 if (i > m) y[i] = 0;//chèn 0 vào nếu x có độ dải nhỏ hơn y

4 if (x[i] < y[i] + nho)

z[i] = x[i] + 10 - y[i] - nho;

Trang 39

2 for (i = 0; i<n; i++)

3 temp = x[i]*k + nho;

- Lấy phần tử của số hạng thứ hai nhân với tất cả các phần tử của số hạng thứ

nhất hay nói cách khác lấy từng phần tử của y nhân với toàn bộ x cộng thêm một

phần tử nhớ, được kết quà đem chia cho hệ cơ số, lấy số dư làm kết quả của hàng tương ứng, thương số là số nhớ của số mới

- Dịch trái một số bước phù hợp

- Cộng tất cả các kết quả nhân lại

Cụ thể thuật toán nhân hai số lớn như sau:

Input: Hai số lớn x = (xn-1 x0), y = (ym-1 y0) có độ dài là n và m

Output: z = x * y

Algorithm:

1 i, temp, nho;

Trang 40

2 BigNum b;

3 for (i=0; i < m; i++)

4 temp = y[i]; b = x * temp; // Nhân một số lớn với một số nguyên

5 Dichtrai (b,i); // dịch trái b, i vị trí;

6 z = z + b;

7 retum z;

3.2.5 Phép chia hai số lớn dương

Cho hai số lớn x = (xn-1 x0), y = (ym-1 y0) có độ dài là n và m, ta xét hai trường hợp sau:

Phép chia hai số lớn có thương nhỏ hơn hoặc bằng 9

Input: Hai số lớn x = (xn-1 x0), y = (ym-1 y0) có độ dài là n và m

Output: z = x / y, z có độ dài là k = n – m;

Algorithm:

1 For i = 0 to i = 10 do

2 BigNum c ;

3 c = b*i ; // Nhân một số lớn với một số nguyên

4 If (Sosanh(c,a)==1) return i-1 ;//c>a

5 Else IF(Sosanh(c,a)==2) retum i ;//c=a

Ngày đăng: 25/03/2015, 10:29

TỪ KHÓA LIÊN QUAN

TRÍCH ĐOẠN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w