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 1TRƯỜ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 2Mụ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 33.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 4LỜ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 5chung 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 6Chươ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 71.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 81.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 9S = ( 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 10E 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 12chú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 13thặ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 15gồ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 16RSA đượ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 18giớ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 19thướ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 20hó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 212.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 22Se = (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 23việ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 252.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 26việ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 27thì 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 30nà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 31Khi 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 32dà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 1ir, 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 35Chươ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 36Ta 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 376 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 38nho = 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 392 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 402 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