An ninh

Một phần của tài liệu nghiên cứu các lược đồ chữ ký số dựa trên hệ mật rsa, ứng dụng trong hệ thống tiền điện tử (Trang 46 - 54)

Độ an toàn của hệ thống RSA dựa trên 2 vấn đề của toán học: bài toán phân tích ra thừa số nguyên tố các số nguyên lớn và bài toán RSA. Nếu 2 bài toán trên là

Số hóa bởi Trung tâm Học liệu http://www.lrc-tnu.edu.vn/

khó (không tìm đƣợc thuật toán hiệu quả để giải chúng) thì không thể thực hiện đƣợc việc phá mã toàn bộ đối với RSA. Phá mã một phần phải đƣợc ngăn chặn bằng các phƣơng pháp chuyển đổi bản rõ an toàn.

Bài toán RSA là bài toán tính căn bậc e môđun n (với n là hợp số): tìm số m

sao cho me=c mod n, trong đó (e, n) chính là khóa công khai và c là bản mã. Hiện nay phƣơng pháp triển vọng nhất giải bài toán này là phân tích n ra thừa số nguyên tố. Khi thực hiện đƣợc điều này, kẻ tấn công sẽ tìm ra số mũ bí mật d từ khóa công khai và có thể giải mã theo đúng quy trình của thuật toán. Nếu kẻ tấn công tìm đƣợc 2 số nguyên tố pq sao cho: n = pq thì có thể dễ dàng tìm đƣợc giá trị (p-1)(q-1) và qua đó xác định d từ e. Chƣa có một phƣơng pháp nào đƣợc tìm ra trên máy tính để giải bài toán này trong thời gian đa thức (polynomial-time). Tuy nhiên ngƣời ta cũng chƣa chứng minh đƣợc điều ngƣợc lại (sự không tồn tại của thuật toán). Xem thêm phân tích ra thừa số nguyên tố về vấn đề này.

Tại thời điểm năm 2005, số lớn nhất có thể đƣợc phân tích ra thừa số nguyên tố có độ dài 663 bít với phƣơng pháp phân tán trong khi khóa của RSA có độ dài từ 1024 tới 2048 bít. Một số chuyên gia cho rằng khóa 1024 bít có thể sớm bị phá vỡ (cũng có nhiều ngƣời phản đối việc này). Với khóa 4096 bít thì hầu nhƣ không có khả năng bị phá vỡ trong tƣơng lai gần. Do đó, ngƣời ta thƣờng cho rằng RSA đảm bảo an toàn với điều kiện n đƣợc chọn đủ lớn. Nếu n có độ dài 256 bít hoặc ngắn hơn, nó có thể bị phân tích trong vài giờ với máy tính cá nhân dùng các phần mềm có sẵn. Nếu n có độ dài 512 bít, nó có thể bị phân tích bởi vài trăm máy tính tại thời điểm năm 1999. Một thiết bị lý thuyết có tên là TWIRL do Shamir và Tromer mô tả năm 2003 đã đặt ra câu hỏi về độ an toàn của khóa 1024 bít. Vì vậy hiện nay ngƣời ta khuyến cáo sử dụng khóa có độ dài tối thiểu 2048 bít.

Năm 1993, Peter Shor công bố thuật toán Shor chỉ ra rằng: máy tính lƣợng tử (trên lý thuyết) có thể giải bài toán phân tích ra thừa số trong thời gian đa thức. Tuy nhiên, máy tính lƣợng tử vẫn chƣa thể phát triển đƣợc tới mức độ này trong nhiều năm nữa.

Số hóa bởi Trung tâm Học liệu http://www.lrc-tnu.edu.vn/

Năm 2010, các nhà khoa học thuộc Đại học Michigan đã công bố phát hiện một kẽ hở trong hệ thống mật mã hoá RSA. Cách phá vỡ hệ thống, lấy khoá bí mật RSA 1024 bit chỉ trong vài ngày thay vì vài năm nếu tấn công theo cách thông thƣờng - tấn công bằng brute force (dò tìm lần lƣợt). Các nhà khoa học tạo một điện thế lớn để gây lỗi hệ thống, từ đó giúp tìm ra khoá bí mật. Việc tấn công đƣợc thực hiện trên một FPGA. Báo cáo đƣợc trình bày tại hội nghị DATE 2010 diễn ra tại Dresden, Đức tháng 3 năm 2010.

3.1.4.2. Các phương thức tấn công

Một nhận định chung là tất cả các cuộc tấn công giải mã đều mang mục đích không tốt. Trong phần độ an toàn của hệ mã hoá RSA sẽ đề cập đến một vài phƣơng thức tấn công điển hình của kẻ địch nhằm giải mã trong thuật toán này.

Chúng ta xét đến trƣờng hợp khi kẻ địch nào đó biết đƣợc modulo N, khoá công khai KB và bản tin mã hoá C, khi đó kẻ địch sẽ tìm ra bản tin gốc (Plaintext) nhƣ thế nào. Để làm đƣợc điều đó kẻ địch thƣờng tấn vào hệ thống mật mã bằng hai phƣơng thức sau đây:

Phƣơng thức thứ nhất :

Trƣớc tiên dựa vào phân tích thừa số modulo N. Tiếp theo sau chúng sẽ tìm cách tính toán ra hai số nguyên tố p và q, và có khả năng thành công khi đó sẽ tính đƣợc (n) và khoá bí mật kB. Ta thấy N cần phải là tích của hai số nguyên tố, vì nếu N là tích của hai số nguyên tố thì thuật toán phân tích thừa số đơn giản cần tối đa bƣớc, bởi vì có một số nguyên tố nhỏ hơn . Mặt khác, nếu N là tích của n số nguyên tố, thì thuật toán phân tích thừa số đơn giản cần tối đa N1/n bƣớc.

Một thuật toán phân tích thừa số có thể thành phức tạp hơn, cho phép phân tích một số N ra thành thừa số trong O( ) bƣớc, trong đó p là số chia nhỏ nhất của N, việc chọn hai số nguyên tố là cho thuật toán tăng hiệu quả.

Phƣơng thức thứ hai :

Phƣơng thức tấn công thứ hai vào hệ mã hoá RSA là có thể khởi đầu bằng cách giải quyết trƣờng hợp thích hợp của bài toán logarit rời rạc. Trƣờng hợp này kẻ địch đã có trong tay bản mã C và khoá công khai KB tức là có cặp (KB,C)

Số hóa bởi Trung tâm Học liệu http://www.lrc-tnu.edu.vn/

O(exp (N)), trong đó N là số modulo.

3.1.4.3. Các vấn đề đặt ra trong thực tế Quá trình tạo khóa

Việc tìm ra 2 số nguyên tố đủ lớn pq thƣờng đƣợc thực hiện bằng cách thử xác suất các số ngẫu nhiên có độ lớn phù hợp (dùng phép kiểm tra nguyên tố cho phép loại bỏ hầu hết các hợp số).

pq còn cần đƣợc chọn không quá gần nhau để phòng trƣờng hợp phân tích

n bằng phƣơng pháp phân tích Fermat. Ngoài ra, nếu p-1 hoặc q-1 có thừa số nguyên tố nhỏ thì n cũng có thể dễ dàng bị phân tích và vì thế pq cũng cần đƣợc thử để tránh khả năng này.

Bên cạnh đó, cần tránh sử dụng các phƣơng pháp tìm số ngẫu nhiên mà kẻ tấn công có thể lợi dụng để biết thêm thông tin về việc lựa chọn (cần dùng các bộ tạo số ngẫu nhiên tốt). Yêu cầu ở đây là các số đƣợc lựa chọn cần đồng thời ngẫu nhiên và không dự đoán đƣợc. Đây là các yêu cầu khác nhau: một số có thể đƣợc lựa chọn ngẫu nhiên (không có kiểu mẫu trong kết quả) nhƣng nếu có thể dự đoán đƣợc dù chỉ một phần thì an ninh của thuật toán cũng không đƣợc đảm bảo. Một ví dụ là bảng các số ngẫu nhiên do tập đoàn Rand xuất bản vào những năm 1950 có thể rất thực sự ngẫu nhiên nhƣng kẻ tấn công cũng có bảng này. Nếu kẻ tấn công đoán đƣợc một nửa chữ số của p hay q thì chúng có thể dễ dàng tìm ra nửa còn lại (theo nghiên cứu của Donald Coppersmith vào năm 1997)

Một điểm nữa cần nhấn mạnh là khóa bí mật d phải đủ lớn. Năm 1990, Wiener chỉ ra rằng nếu giá trị của p nằm trong khoảng q và 2q (khá phổ biến) và d < n1/4/3 thì có thể tìm ra đƣợc d từ ne.

Mặc dù e đã từng có giá trị là 3 nhƣng hiện nay các số mũ nhỏ không còn đƣợc sử dụng do có thể tạo nên những lỗ hổng (đã đề cập ở phần chuyển đổi văn bản rõ). Giá trị thƣờng dùng hiện nay là 65537 vì đƣợc xem là đủ lớn và cũng không quá lớn ảnh hƣởng tới việc thực hiện hàm mũ.

Số hóa bởi Trung tâm Học liệu http://www.lrc-tnu.edu.vn/

RSA có tốc độ thực hiện chậm hơn đáng kể so với DES và các thuật toán mã hóa đối xứng khác. Trên thực tế, Bob sử dụng một thuật toán mã hóa đối xứng nào đó để mã hóa văn bản cần gửi và chỉ sử dụng RSA để mã hóa khóa để giải mã (thông thƣờng khóa ngắn hơn nhiều so với văn bản).

Phƣơng thức này cũng tạo ra những vấn đề an ninh mới. Một ví dụ là cần phải tạo ra khóa đối xứng thật sự ngẫu nhiên. Nếu không, kẻ tấn công (thƣờng ký hiệu là Eve) sẽ bỏ qua RSA và tập trung vào việc đoán khóa đối xứng.

Phân phối khóa

Cũng giống nhƣ các thuật toán mã hóa khác, cách thức phân phối khóa công khai là một trong những yếu tố quyết định đối với độ an toàn của RSA. Quá trình phân phối khóa cần chống lại đƣợc tấn công đứng giữa (man-in-the-middle attack). Giả sử Eve có thể gửi cho Bob một khóa bất kỳ và khiến Bob tin rằng đó là khóa (công khai) của Alice. Đồng thời Eve có khả năng đọc đƣợc thông tin trao đổi giữa Bob và Alice. Khi đó, Eve sẽ gửi cho Bob khóa công khai của chính mình (mà Bob nghĩ rằng đó là khóa của Alice). Sau đó, Eve đọc tất cả văn bản mã hóa do Bob gửi, giải mã với khóa bí mật của mình, giữ 1 bản copy đồng thời mã hóa bằng khóa công khai của Alice và gửi cho Alice. Về nguyên tắc, cả Bob và Alice đều không phát hiện ra sự can thiệp của ngƣời thứ ba. Các phƣơng pháp chống lại dạng tấn công này thƣờng dựa trên các chứng thực khóa công khai (digital certificate) hoặc các thành phần của hạ tầng khóa công khai (PKI). (adsbygoogle = window.adsbygoogle || []).push({});

3.1.5. Một số tính chất của hệ RSA

Trong các hệ mật mã RSA, một bản tin có thể đƣợc mã hoá trong thời gian tuyến tính.

Đối với các bản tin dài, độ dài của các số đƣợc dùng cho các khoá có thể đƣợc coi nhƣ là hằng. Tƣơng tự nhƣ vậy, nâng một số lên luỹ thừa đƣợc thực hiện trong thời gian hằng, các số không đƣợc phép dài hơn một độ dài hằng. Thực ra

Số hóa bởi Trung tâm Học liệu http://www.lrc-tnu.edu.vn/

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

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

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

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

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

3.1.6. Ứng dụng hệ mã RSA trong chữ ký số

Ta thấy rằng, hệ mã khoá công khai RSA có thể dùng làm sơ đồ chữ kí số. Thực thể B kí bức điện x dùng qui tắc giải mã RSA là dk , B là ngƣời tạo ra chữ kí vì dk = sigk là bí mật. Thuật toán xác minh dùng qui tắc mã RSA ek. Bất kì ai cũng có thể xác minh chữ kí vì ek đƣợc công khai.

Số hóa bởi Trung tâm Học liệu http://www.lrc-tnu.edu.vn/

Tuy nhiên, ai đó có thể giả mạo chữ kí của B trên một bức điện ― ngẫu nhiên‖ x bằng cách tìm x=ek(y) với y nào đó; khi đó y= sigk(x).

Một giải pháp xung quanh vấn đề khó khăn này là yêu cầu bức điện chƣa đủ phần dƣ để chữ kí giả mạo kiểu này không tƣơng ứng với bức điện. Có thể dùng các hàm Hash trong việc kết nối với các sơ đồ chữ kí số sẽ loại trừ đƣợc phƣơng pháp giả mạo này.

3.1.7. Sơ đồ chữ kí RSA

Cho n= p*q, p và q là các số nguyên tố. Cho P = A = Zn và định nghĩa P = {(n, p, q, a, b): n=p*q, p và q là nguyên tố, a*b 1(mod( (n))) }. Các giá trị n và b là công khai, ta định nghĩa :

Sigk(x)= xa mod n

verk (x,y)= true x yb (mod n) ( với x,y Zn) Với sơ đồ chữ ký RSA, có thể ký trƣớc mã sau hoặc mã trƣớc ký sau.

Ký trước mã sau:

Giả sử A và B có các khóa công khai eA , eB và khóa bí mật là dA , dB. A cần gửu bản rõ X cho B thì làm nhƣ sau:

- A tính Y = eB(X) và Z = dA (X) rồi gửi cặp (Y, Z) cho B.

- B nhận đƣợc cặp (Y, Z) tiến hành tính dB(Y) = dB(eB(X)) = X để đọc nội dung bản tin và tính eA(Z) = eA(dA(X)) = X để xác nhận ngƣời gửi. (nếu ngƣời gửi không là A mà là C chẳng hạn thì khi tính eA(Z) = eA(dC(X)) không thể là X đƣợc.

Mã trước ký sau:

Giả sử A và B có các khóa công khai eA , eB và khóa bí mật là dA , dB. A cần gửu bản rõ X cho B thì làm nhƣ sau:

- A tính Y = eB(X) và tính Z = dA(Y) còn B tính dB(Y) để đọc nội dung và tính eA(Z) = Y để xác nhận.

- Khi đó nếu C nhận đƣợc (Y, Z) sẽ giả mạo nhƣ sau: C tính Z‘ = dC(Y) và gửi cặp (Y, Z‘) cho B. B tính dB(Y) để đọc nội dung và tính eC(Z‘) = Y để xác nhận và tin là C gửi chứ không phải A.

- Trƣờng hợp này C cũng không đọc đƣợc bản rõ X mà chỉ ký giả mạo lên bản mã Y.

Số hóa bởi Trung tâm Học liệu http://www.lrc-tnu.edu.vn/

Chú ý rằng, đối phƣơng có thể kí bản mã eB (X) ngay cả khi không biết bản rõ. Khi đó nếu đối phƣơng truyền (X, Y‘) đến B thì chữ kí của đối phƣơng đƣợc B xác minh bằng verĐ và B có thể suy ra rằng, bản rõ x xuất phát từ đối phƣơng. Do khó khăn này, hầu hết ngƣời sử dụng đƣợc khuyến nghị nên kí trƣớc khi mã.

3.2. CHỮ KÝ MÙ RSA 3.2.1. Khái niệm chữ ký mù (adsbygoogle = window.adsbygoogle || []).push({});

Chữ ký mù đƣợc David Chaum giới thiệu vào năm 1983 [09], nó là một loại chữ ký số, trong đó nội dung của thông điệp cần đƣợc ký bị ―che‖ đi trƣớc khi nó đƣợc ký. Chữ ký thu đƣợc có thể đƣợc xác thực nhƣ là đối với chữ ký số thông thƣờng. Chữ ký mù thƣờng đƣợc dùng trong các vấn đề đòi hỏi sự nặc danh nhƣ trong các ứng dụng tiền điện tử, bỏ phiếu điện tử,….

Chữ ký mù là chữ ký mà ngƣời ký không biết mình đang ký trên nội dung gì. Vì vậy mà ngƣời ta gọi là ―mù‖. Làm đƣợc nhƣ vậy vì nội dung X trƣớc khi đƣa cho ngƣời ký đã đƣợc làm mù thành X‘. Ngƣời ký ký trên X‘ chứ không phải ký trên X. A cần B ký cho một chữ ký trên nội dung X, A không đƣa X cho B ký mà làm mù X thành X‘. Sau đó A đƣa X‘ cho B ký. Sau khi nhận đƣợc chữ ký trên X‘, A xóa mù để thu đƣợc chữ ký trên X. Nhƣ vậy A vẫn có chữ ký trên X mà B không biết thông tin gì về X.

3.2.2. Sơ đồ chữ ký mù RSA Sơ đồ

Mục đích là ông A có đƣợc chữ ký của bà B trên văn bản x theo sơ đồ chữ ký RSA nhƣng không để cho B biết giá trị x thực sự. Chữ ký đó là giá trị xamod n. Lúc này A và B phải thực hiện một số bƣớc sau:

- A làm mù x ( che x ) thành u: u = Blind(x) = x.rb(mod n) , với n và b đƣợc lấy từ khóa công khai của B, r là ngẫu nhiên r Zn và r nguyên tố cùng nhau với n. ( r phải nguyên tố cùng nhau với n để tồn tại phần tử nghịch đảo r-1 mod n )

- A gửi u cho B, B ký trên u, đƣợc chữ ký là v = Sig(u) sau đó gửi lại cho A:

Một phần của tài liệu nghiên cứu các lược đồ chữ ký số dựa trên hệ mật rsa, ứng dụng trong hệ thống tiền điện tử (Trang 46 - 54)