2.6.1.3.Những yếu điểm, hạn chế của mật mã với khóa côngkhai

Một phần của tài liệu Xây dựng chương trình chữ ký điện tử bằng ngôn ngữ c# (Trang 40 - 82)

- Thuật giải tƣơng tự cho mã hóa và giải mã.

- Ngƣời gửi và ngƣời nhận phải tham gia cùng thuật giải và cùng khóa

* Tính bảo mật

- Khóa phải đƣợc bí mật

- Không thể hay ít nhất không có tính thực tế để giải mã đoạn tin nếu thông tin khác có sẵn

- Kiến thức về thuật giải cộng với các mẫu về mật mã không đủ để xác định khóa

* Yêu cầu

- Một thuật giải cho mã hóa và một thuật giải cho giải mã

- Ngƣời gửi và ngƣời nhận, mỗi ngƣời phải có cặp khóa riêng của mình

* Tính bảo mật

- Một trong hai khóa phải đƣợc giữ bí mật

- Không thể hay ít nhất không có tính thực tế để giải mã đoạn tín nếu thông tin khác không có sẵn

- Kiến thức về thuật giải cộng với một trong các khóa, cộng với các mẫu về mật mã không đủ để xác định khóa

2.6.1.3 Những yếu điểm, hạn chế của mật mã với khóa công khai

Tồn tại khả năng một ngƣời nào đó có thể tìm ra đƣợc khóa bí mật. Không giống với hệ thống mật mã sử dụng một lần (one-time pad) hoặc tƣơng đƣơng, chƣa có thuật toán mã hóa khóa bất đối xứng nào đƣợc chứng minh là an toàn trƣớc các tấn công dựa trên bản chất toán học của thuật toán. Khả năng một mối quan hệ nào đó giữa 2 khóa hay điểm yếu của thuật toán dẫn tới cho phép giải mã không cần tới khóa hay chỉ cần khóa mã hóa vẫn chƣa đƣợc loại trừ. An toàn của các thuật toán này đều dựa trên các ƣớc lƣợng về khối lƣợng tính toán để giải các bài toán gắn với chúng. Các ƣớc lƣợng này lại luôn thay đổi tùy thuộc khả năng của máy tính và các phát hiện toán học mới.

Mặc dù vậy, độ an toàn của các thuật toán mật mã hóa khóa công khai cũng tƣơng đối đảm bảo. Nếu thời gian để phá một mã (bằng phƣơng pháp duyệt toàn bộ) đƣợc ƣớc lƣợng là 1000 năm thì thuật toán này hoàn toàn có thể dùng để mã hóa các thông tin về thẻ tín dụng - Rõ ràng là thời gian phá mã lớn hơn nhiều lần thời gian tồn tại của thẻ (vài năm).

Nhiều điểm yếu của một số thuật toán mật mã hóa khóa bất đối xứng đã đƣợc tìm ra trong quá khứ. Thuật toán đóng gói ba lô là một ví dụ. Nó chỉ đƣợc xem là không

dạng tấn công đã đơn giản hóa việc tìm khóa giải mã dựa trên việc đo đạc chính xác thời gian mà một hệ thống phần cứng thực hiện mã hóa. Vì vậy, việc sử dụng mã hóa khóa bất đối xứng không thể đảm bảo an toàn tuyệt đối. Đây là một lĩnh vực đang đƣợc tích cực nghiên cứu để tìm ra những dạng tấn công mới.

Một điểm yếu tiềm tàng trong việc sử dụng khóa bất đối xứng là khả năng bị tấn công dạng kẻ tấn công đứng giữa (man in the middle attack): kẻ tấn công lợi dụng việc phân phối khóa công khai để thay đổi khóa công khai. Sau khi đã giả mạo đƣợc khóa công khai, kẻ tấn công đứng ở giữa 2 bên để nhận các gói tin, giải mã rồi lại mã hóa với khóa đúng và gửi đến nơi nhận để tránh bị phát hiện. Dạng tấn công kiểu này có thể phòng ngừa bằng các phƣơng pháp trao đổi khóa an toàn nhằm đảm bảo nhận thực ngƣời gửi và toàn vẹn thông tin. Một điều cần lƣu ý là khi các chính phủ quan tâm đến dạng tấn công này: họ có thể thuyết phục (hay bắt buộc) nhà cung cấp chứng thực số xác nhận một khóa giả mạo và có thể đọc các thông tin mã hóa.

2.6.1.4 Ứng dụng của mật mã a.Bảo mật

Ứng dụng rõ ràng nhất của mật mã hóa khóa công khai là bảo mật: một văn bản đƣợc mã hóa bằng khóa công khai của một ngƣời sử dụng thì chỉ có thể giải mã với khóa bí mật của ngƣời đó.

Phần mềm PGP miễn phí chỉ đƣợc sử dụng cho ngƣời dùng cá nhân với mục đích phi thƣơng mại, có thể tải về tại địa chỉ :

http://www.pgp.com/products/freeware.html

b.Chứng thực

Các thuật toán tạo chữ ký số khóa công khai có thể dùng để nhận thực. Một ngƣời sử dụng có thể mã hóa văn bản với khóa bí mật của mình. Nếu một ngƣời khác có thể giải mã với khóa công khai của ngƣời gửi thì có thể tin rằng văn bản thực sự xuất phát từ ngƣời gắn với khóa công khai đó. Dùng chữ ký số cho email và mã hóa email khi gửi đi thông qua nhà cung cấp chứng chỉ số làm trọng tài điều khiển

Nhà chứng chỉ số của nhà cung cấp Thawte(www.thawte.com) cho phép bạn có thể đăng ký cho mình một tài khoản Personal Email Certificate hoàn toàn miễn phí tại đây để thực hiện giao dịch khi gởi và nhận mail

(http://www.thawte.com/secure-email/personal-email-certificates/index.htm) c.Ứng dụng trong thƣơng mại điện tử

Nhiều đơn vị, tổ chức ở Việt Nam đã đang xây dựng mạng máy tính có quy mô lớn phục vụ cho công việc kinh doanh của mình: mạng chứng khoán, mạng ngân hàng, mạng bán vé tàu xe, kê khai và nộp thuế qua mạng….

Công ty phần mềm và Truyền thông VASC đã chính thức ký kết hợp đồng ―ứng dụng chứng chỉ số trong giao dịch ngân hàng điện tử‖ với ngân hàng cổ phần thƣơng mại Á Châu (ACB) từ ngày 30/9/2003, cho phép khách hàng ACB sẽ giao dịch trực tuyến trên mạng với chữ ký điện tử do VASC cấp.

Mạng giao dịch chứng khoán VCBS (http://www.vebs.vn) : mở tài khoản ngân hàng cho phép giao dịch trực tiếp qua sàn, báo giá cổ phiếu, cho phép đặt lệnh mua bán cổ phần chỉ bằng thao tác click chuột. Mạng ngân hàng VCB, EAB

(http://www.vietcombank.com.vn, http://ebanking.dongabank.com.vn) cho phép xem số dƣ, chuyển khoản cho tài khoản khác cùng hệ thống từ 20-500 triệu đồng mỗi ngày, bản kê chi tiết giao dịch của tài khoản trên Internet. (adsbygoogle = window.adsbygoogle || []).push({});

Hệ thống bán vé qua mạng của ngành hàng không

(http://www.pacificairline.com.vn), đƣờng sắt (http://www.vr.com.vn) đã triển khai 1/2007, mua bán trực tuyến (http://www.ebay.vn).

Chi cục thuế thành phố Hồ Chí Minh (http://www.hcmtax.gov.vn) đang thử nghiệm cho phép doanh nghiệp đăng ký tự in hóa đơn theo mẫu, tự kê khai báo cáo thuế, khấu trừ thuế qua mạng…

Nếu nhƣ có đƣợc một cơ chế bảo mật tốt, đảm bảo xác thực rõ ràng giữa các bên tham gia vào hệ thống thì chắc chắn rằng những vấn đề liên quan đến mạng máy tính nêu trên chỉ còn là vấn đề thời gian.

2.7 Hệ mật RSA

Trong mật mã học, RSA là một thuật toán mật mã hóa khóa công khai. Đây là thuật toán đầu tiên phù hợp với việc tạo ra chữ ký điện tử đồng thời với việc mã hóa. Nó đánh dấu một sự tiến bộ vƣợt bậc của lĩnh vực mật mã học trong việc sử dụng khóa công cộng. RSA đang đƣợc sử dụng phổ biến trong thƣơng mại điện tử và đƣợc cho là đảm bảo an toàn với điều kiện độ dài khóa đủ lớn.

2.7.1 Lịch sử

Thuật toán đƣợc Ron Rivest, Adi Shamir và Len Adleman mô tả lần đầu tiên vào năm 1977 tại Học viện Công nghệ Massachusetts (MIT). Tên của thuật toán lấy từ 3 chữ cái đầu của tên 3 tác giả.Trƣớc đó, vào năm 1973, Clifford Cocks, một nhà toán học ngƣời Anh làm việc tại GCHQ, đã mô tả một thuật toán tƣơng tự. Với khả

năng tính toán tại thời điểm đó thì thuật toán này không khả thi và chƣa bao giờ đƣợc thực nghiệm. Tuy nhiên, phát minh này chỉ đƣợc công bố vào năm 1997 vì đƣợc xếp vào loại tuyệt mật.

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

2.7.2 Mô tả thuật toán

Thuật toán RSA có hai khóa: khóa công khai (hay khóa công cộng) và khóa bí mật (hay khóa cá nhân). Mỗi khóa là những số cố định sử dụng trong quá trình mã hóa và giải mã. Khóa công khai đƣợc công bố rộng rãi cho mọi ngƣời và đƣợc dùng để mã hóa. Những thông tin đƣợc mã hóa bằng khóa công khai chỉ có thể đƣợc giải mã bằng khóa bí mật tƣơng ứng. Nói cách khác, mọi ngƣời đều có thể mã hóa nhƣng chỉ có ngƣời biết khóa cá nhân (bí mật) mới có thể giải mã đƣợc.

Ta có thể mô phỏng trực quan một hệ mật mã khoá công khai nhƣ sau : Bob muốn gửi cho Alice một thông tin mật mà Bob muốn duy nhất Alice có thể đọc đƣợc. Để làm đƣợc điều này, Alice gửi cho Bob một chiếc hộp có khóa đã mở sẵn và giữ lại chìa khóa. Bob nhận chiếc hộp, cho vào đó một tờ giấy viết thƣ bình thƣờng và khóa lại (nhƣ loại khoá thông thƣờng chỉ cần sập chốt lại, sau khi sập chốt khóa ngay cả Bob cũng không thể mở lại đƣợc-không đọc lại hay sửa thông tin trong thƣ đƣợc nữa). Sau đó Bob gửi chiếc hộp lại cho Alice. Alice mở hộp với chìa khóa của mình và đọc thông tin trong thƣ. Trong ví dụ này, chiếc hộp với khóa mở đóng vai trò khóa công khai, chiếc chìa khóa chính là khóa bí mật.

a. Tạo khóa

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

1. Chọn 2 số nguyên tố lớn p và q với p≠q, lựa chọn ngẫu nhiên và độc lập. 2. Tính: n= pq

4. Chọn một số tự nhiên e sao cho 1< e< (n) và là số nguyên tố cùng nhau với

(n) .

5. Tính: d sao cho de 1 (mod (n).

Một số lƣu ý:

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

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

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

cũng là số tự nhiên. Khi đó sử dụng giá trị .

Từ bƣớc 3, PKCS#1 v2.1 sử dụng thay cho

).

Khóa công khai bao gồm:

n, môđun.

e, số mũ công khai (cũng gọi là số mũ mã hóa).

Khóa bí mật bao gồm: (adsbygoogle = window.adsbygoogle || []).push({});

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

Một dạng khác của khóa bí mật bao gồm:

p and q, hai số nguyên tố chọn ban đầu,

d mod (p-1) và d mod (q-1) (thƣờng đƣợc gọi là dmp1 và dmq1), (1/q) mod p (thƣờng đƣợc gọi là iqmp)

Dạng này cho phép thực hiện giải mã và ký nhanh hơn với việc sử dụng định lý số dƣ Trung Quốc (tiếng Anh: Chinese Remainder Theorem - CRT). Ở dạng này, tất cả thành phần của khóa bí mật phải đƣợc giữ bí mật.

Alice gửi khóa công khai cho Bob, và giữ bí mật khóa cá nhân của mình. Ở đây, p và q giữ vai trò rất quan trọng. Chúng là các phân tố của n và cho phép tính d khi

biết e. Nếu không sử dụng dạng sau của khóa bí mật (dạng CRT) thì p và q sẽ đƣợc xóa ngay sau khi thực hiện xong quá trình tạo khóa.

b. Mã hóa

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

một số m<n theo một hàm có thể đảo ngƣợc (từ m có thể xác định lại M) đƣợc thỏa thuận trƣớc. Quá trình này đƣợc mô tả ở phần sau

Lúc này Bob có m và biết n cũng nhƣ e do Alice gửi. Bob sẽ tính c là bản mã hóa

của m theo công thức:

Hàm trên có thể tính dễ dàng sử dụng phƣơng pháp tính hàm mũ (theo môđun) bằng thuật toán bình phƣơng và nhân. Cuối cùng Bob gửi c cho Alice.

c. Giải mã

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

Biết m, Alice tìm lại M theo phƣơng pháp đã thỏa thuận trƣớc. Quá trình giải mã

hoạt động vì ta có

.

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

Do p và q là hai số nguyên tố cùng nhau nên ta có: .

hay:

Ví dụ:

Sau đây là một ví dụ với những số cụ thể. Ở đây chúng ta sử dụng những số nhỏ để tiện tính toán còn trong thực tế phải dùng các số có giá trị đủ lớn.

Lấy:

P = 61 — số nguyên tố thứ nhất (giữ bí mật hoặc hủy sau khi tạo khóa)

Q = 53 — số nguyên tố thứ hai (giữ bí mật hoặc hủy sau khi tạo khóa)

N = pq =

3233 — môđun (công bố công khai)

E = 17 — số mũ công khai (adsbygoogle = window.adsbygoogle || []).push({});

D = 2753 — số mũ bí mật

Khóa công khai là cặp (e, n). Khóa bí mật là d. Hàm mã hóa là: encrypt(m) = me mod n = m17 mod 3233

với m là văn bản rõ. Hàm giải mã là: decrypt(c) = cd mod n = c2753 mod 3233 với c là văn bản mã.

Để mã hóa văn bản có giá trị 123, ta thực hiện phép tính: encrypt(123) = 12317 mod 3233 = 855

Để giải mã văn bản có giá trị 855, ta thực hiện phép tính: decrypt(855) = 8552753 mod 3233 = 123

Cả hai phép tính trên đều có thể đƣợc thực hiện hiệu quả nhờ giải thuật bình phƣơng và nhân.

2.7.3 Tốc độ mã hóa RSA

Tốc độ và hiệu quả của nhiều phần mềm thƣơng mại có sẵn và công cụ phàn cứng của RSA đang gia tăng một cách nhanh chóng. Việc Pentium 90Mhz, bộ toolkit BSAFE 3.0 của cơ quan bảo mật dữ liệu RSA đạt tốc độ tính khóa bí mật là 21,6 Kbps với khóa 512 bit và 7,4 Kbps với khóa 1024 bit. Phần cứng RSA nhanh

nhất đạy 300 Kbps với khóa 512 bit, nếu đƣợc xử lý song song thì đạt 600 Kbps với khóa 512 bit và 185 Kbps với khóa 970 bit.

So sánh với giải thuật DES và các giải thuật mã khối khác thì RSA chậm hơn: về phần mềm DES nhanh hơn RSA 100 lần, về phần cứng DES nhanh hơn RSA từ 1000 tới 10000 lần tùy thuộc công cụ (implementation) sử dụng

(thông tin này đƣợc lấy từ http://www.rsa.com) Kích thƣớc của khóa trong RSA:

Hiệu quả của một hệ thống mật mã khóa bất đối xứng phụ thuộc vào độ khó (lý

thuyết hoặc tính toán) của một vấn đề toán học nào đó chẳng hạn nhƣ bài toán phân tích ra thừa số nguyên tố. Giải các bài toán này thƣờng mất nhiều thời gian nhƣng thông thƣờng vẫn nhanh hơn là thử lần lƣợt từng khóa theo kiểu duyệt toàn bộ. Vì thế, khóa dùng trong các hệ thống này cần phải dài hơn trong các hệ thống mật mã khóa đối xứng. Tại thời điểm năm 2002, độ dài 1024 bít đƣợc xem là giá trị tối thiểu cho hệ thống sử dụng thuật toán RSA.

Năm 2003, công ty RSA Security cho rằng khóa RSA 1024 bít có độ an toàn tƣơng đƣơng với khóa 80 bít, khóa RSA 2048 bít tƣơng đƣơng với khóa 112 bít và khóa RSA 3072 bít tƣơng đƣơng với khóa 128 bít của hệ thống mật mã khóa đối xứng. Họ cũng đánh giá rằng, khóa 1024 bít có thể bị phá vỡ trong khoảng từ 2006 tới 2010 và khóa 2048 bít sẽ an toàn tới 2030. Các khóa 3072 bít cần đƣợc sử dụng trong trƣờng hợp thông tin cần giữ bí mật sau 2030. Các hƣớng dẫn về quản lý khóa của NIST cũng gợi ý rằng khóa RSA 15360 bít có độ an toàn tƣơng đƣơng với khóa đối xứng 256 bít.

Một dạng khác của thuật toán mật mã hóa khóa bất đối xứng, mật mã đƣờng cong elliptic (ECC), tỏ ra an toàn với khóa ngắn hơn khá nhiều so với các thuật toán khác. Hƣớng dẫn của NIST cho rằng khóa của ECC chỉ cần dài gấp đôi khóa của hệ thống khóa đối xứng. Giả định này đúng trong trƣờng hợp không có những đột phá trong việc giải các bài toán mà ECC đangsử dụng. Một văn bản mã hóa bằng ECC với khóa 109 bít đã bị phá vỡ bằng cách tấn công duyệt toàn bộ.

Tùy thuộc vào kích thƣớc bảo mật của mỗi ngƣời và thời gian sống của khóa mà khóa có chiều dài thích hợp

- loại Export 512 bit - loại Person 768 bit

- loại Militery 2048 bit Chu kỳ sống của khóa phụ thuộc vào

- việc đăng ký và tạo khóa - việc phân bố khóa

- việc kích hoạt và không kích hoạt khóa - việc thay thế hoặc cập nhật khóa

Một phần của tài liệu Xây dựng chương trình chữ ký điện tử bằng ngôn ngữ c# (Trang 40 - 82)