Hệ mã hóa bất đối xứng mã hóa khóa công khai:

Một phần của tài liệu Ứng dụng mô hình an toàn thông tin và bảo mật thư điện tử (Trang 34)

2.3.1. Khái niệm:

Thuật toán mã hoá bất đối xứng là khác biệt so với thuật toán đối xứng. Chúng đƣợc thiết kế sao cho khóa sử dụng vào việc mã hoá là khác so với khóa gi i m Hơn nữa khóa giải mã không thể tính toán đƣợc từ khóa mã hoá. Chúng đƣợc gọi với tên hệ thống mã hoá công khai bởi vì khóa để mã hoá có thể công khai, một ngƣời bất kỳ có thể sử dụng khóa công khai để mã hoá dữ liệu, nhƣng chỉ một vài ngƣời có đúng khóa giải mã thì mới có khả năng giải mã. Trong nhiều hệ thống, khóa mã hoá gọi là khóa công khai (Public key), khóa giải mã thƣờng đƣợc gọi là khóa riêng, khoá bí mật (Private key).

Trong đó: - Public Key: Dùng để mã hoá dữ liệu

- Private Key: Dùng để giải mã dữ liệu, khôi phục lại dữ liệu gốc ban đầu

Hình: 2.7: Mô hình mã hóa công khai

26

Public Key sẽ mã hóa dữ liệu và để giải mã dùng Private Key. Từ Public Key, không thể suy đoán hay biết đƣợc điều gì về Private Key, do đó, Public Key có thể công bố rộng rãi, bất kỳ ai cũng có thể đọc chúng mà không gây nguy hiểm cho dữ liệu. Một ngƣời muốn sử dụng thuật toán Asymmetric để mã hoá dữ liệu thì phải công bố Public Key của mình đến những ngƣời khác để sử dụng và giữ kín Private Key. Private Key là bí mật, không thể để ngƣời khác biết đến, nếu không thì dữ liệu sẽ không đƣợc đảm bảo tính bảo mật, an toàn.. Và sau đó, một ngƣời khác sử dụng Public Key này sẽ mã hoá dữ liệu và gửi đến ngƣời gửi, và để đọc đƣợc nội dung của dữ liệu thì ngƣời này phải dùng Private key của anh ta để giải mã lại.

2.3.2. Xây dựng thuật toán mã hóa công khai (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).

Thuật toán mật mã hóa khóa công khai đƣợc thiết kế đầu tiên[4] bởi James H. Ellis, Clifford Cocks, và Malcolm Williamson tại GCHQ(Anh) vào đầu thập kỷ 1970. Thuật toán sau này đƣợc phát triển và biết đến dƣới tên Diffie-Hellman, và là một trƣờng hợp đặc biệt của RSA. Tuy nhiên những thông tin này chỉ đƣợc tiết lộ vào năm 1997. Trong các hệ mã hoá công khai có rất nhiều thuật toán sau :

Một số thuật toán mã hóa khóa công khai đƣợc đánh giá cao:

Trao đổi khóa Diffie-Hellman; ElGamal; Thuật toán mã hóa RSA (PKCS), DSS (Tiêu chuẩn chữ ký số); Các kỹ thuật mã hóa đƣờng cong elliptic; Các kỹ thuật thỏa thuật khóa chứng thực bằng mật khẩu; Hệ thống mật mã Paillier

Một số thuật toán không đƣợc đánh giá cao: Merkle-Hellman (sử dụng bài toán cái balô)

Tuy nhiên trong luận văn này chỉ đề cập một số thuật toán đƣợc đánh giá cao thƣờng sử dụng trong bảo mật thƣ điện tử nhƣ «Trao đổi khóa Diffie-Hellman, Thuật toán mã hóa RSA (PKCS), ElGamal».

27

D-H là một phƣơng pháp trao đổi khóa đƣợc phát minh sớm nhất trong mật mã học. Phƣơng pháp trao đổi khóa D-H cho phép hai bên (ngƣời, thực thể giao tiếp) thiết lập một khóa bí mật chung để mã hóa dữ liệu sử dụng trên kênh truyền thông không an toàn mà không cần có sự thỏa thuận trƣớc về khóa bí mật giữa hai bên. Khóa bí mật tạo ra sẽ đƣợc sử dụng để mã hóa dữ liệu với phƣơng pháp mã hóa khóa đối xứng.

Giao thức này đƣợc công bố đầu tiên bởi Whitfield Diffie và Martin Hellman vào năm 1976 và đƣợc cấp bằng sáng chế Hoa Kỳ số 4.200.770 mô tả thuật toán này từ năm 1977 ghi nhận Hellman, Diffie, và Merkle [19] là tác giả phát minh, dù rằng trƣớc đó vài năm nó đã đƣợc phát minh một cách độc lập trong GCHQ, cơ quan tình báo Anh, bởi James H. Ellis, Clifford Cocks và Malcolm J. Williamson nhƣng đƣợc giữ bí mật. Năm 2002, Hellman đề xuất thuật toán nên đƣợc gọi là trao đổi khóa Diffie–Hellman–Merkle để ghi nhận sự đóng góp của Ralph Merkle trong phát minh lĩnh vực mật mã hóa khóa công khai (Hellman, 2002).

Mặc dù giao thức trao đổi khóa Diffie–Hellman bản thân nó là giao thức trao đổi khóa ẩn danh (không xác thực), nó đã đƣa ra một nền tảng cơ sở cho nhiều loại giao thức xác thực và đƣợc sử dụng để tạo nên bí mật chuyển tiếp hoàn hảo trong chế độ ngắn hạn của giao thức Transport Layer Security (EDH hoặc DHE tùy theo bộ mã hóa). Phƣơng pháp này đƣợc áp dụng sau đó cho thuật toán RSA.

Mô tả giao thức: Sau đây là mô tả khái quát của giao thức.  Thiết lập khóa:

Bƣớc 1: Alice và Bob thỏa thuận sử dụng chung một nhóm cyclic hữu hạn G và một phần tử sinh g của G. Phần tử sinh g công khai với tất cả mọi ngƣời, kể cả kẻ tấn công. Dƣới đây chúng ta giả sử nhóm G là nhóm nhân.

Bƣớc 2: Alice chọn một số tự nhiên ngẫu nhiên a và gửi ga mod p cho Bob. Bƣớc 3: Bob chọn một số tự nhiên ngẫu nhiên b và gửi gb mod p cho Alice. Bƣớc 4: Alice tính (gb)a mod p.

28

Vì giá trị (gb)a và (ga)b là bằng nhau (do nhóm G có tính kết hợp), cả Alice và Bob đều tính đƣợc giá trị gab và có thể sử dụng nó cho khóa bí mật chung.

Mã hóa:

Thông điệp m trƣớc khi đƣợc gửi đi bởi Alice (hoặc Bob) sẽ đƣợc mã hóa thành mgab.

Giải mã:

Để giải mã thông điệp m, gửi dƣới dạng mgab, Bob (hoặc Alice) phải tính đƣợc giá trị (gab

)-1. Giá trị (gab

)-1 đƣợc tính nhƣ sau: Vì Bob biết |G|, b, và ga, mặt khác theo định lý Lagrange trong lý thuyết nhóm ta có x|G| = 1 với mọi x thuộc G, nên Bob tính đƣợc (ga

)|G|-b = ga(|G|-b) = ga|G|-ab = ga|G|g-ab = (g|G|)ag-ab=1ag-ab=g-ab=(gab)-1. Việc giải mã bây giờ trở nên dễ dàng: Bob sử dụng (gab)-1 để tính và phục hồi thông điệp nguyên thủy bằng cách tính: mgab(gab)-1 = m(1) = m.

b) Hệ mật RSA: (adsbygoogle = window.adsbygoogle || []).push({});

Ý tƣởng về một hệ mật khoá công khai đã đƣợc Diffie và Hellman đƣa ra vào 1976. Còn việc hiện thực hóa hệ mật khoá công khai thì do Rivest, Shamir và Adleman đƣa ra đầu tiên vào 1977 tại MIT, họ đã tạo nên hệ mật RSA [16] nổi tiếng.

Hệ mật này sử dụng các tính toán trong Zn, trong đó n là tích của 2 số nguyên tố phân biệt p và q. Ta có thể mô tả hệ mật RSA các bƣớc thực hiện nhƣ sau:

 Sinh khóa

Bƣớc 1: Tạo ra một cặp số nguyên tố lớn, ngẫu nhiên p và q. (p≠q) Bƣớc 2: Tính N = pq.

Bƣớc 3: Chọn một mũ công khai lẻ e nằm giữa 3 và n-1 cùng nguyên tố với p - 1 và q – 1: φ(n)=(p-1)*(q-1)

Bƣớc 4: Tính toán số mũ riêng d từ e, p và q sao cho 1<e< φ(n)

Bƣớc 5: Đầu ra (n,e) là khóa công khai và (n,d) là khóa riêng: de1(mod φ(n)) 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,

29

 (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(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.

Bob gửi khóa công khai cho Alice, 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 nhâ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.

Mã hoá:

Việc mã hóa thực hiện theo công thức:

- Theo phƣơng án 1 (mã hóa bảo mật): cE m( )memodn [16] - Theo phƣơng án 2 (mã hóa chứng thực): cE m( )md modn [16]  Giải mã:

Việc giải mã thực hiện theo công thức:

- Theo phƣơng án 1 (mã hóa bảo mật): mD c( )cdmodn[16] - Theo phƣơng án 2 (mã hóa chứng thực): mD c( )cemodn [16] Bản rõ M có kích thƣớc i-1 bít, bản mã C có kích thƣớc i bít.

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.

Bƣớc 1: Tạo ra một cặp số nguyên tố lớn, ngẫu nhiên p và q

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) Bƣớc 2: Tính: n = pq = = 61*53=3233 — môđun (công bố công khai) Bƣớc 3: φ(n)=(p-1)*(q-1) = (61-1)*(53-1)=3120 Bƣớc 4: Chọn e = 17 vì ƢCLN(17,3120) = 1 Bƣớc 5: Tính d x* 1 e    => 17d=1+3120x e = 17 — số mũ công khai

30

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

Với hệ mật RSA đƣợc trình bày ở trên ta thấy cách tấn công dễ thấy nhất đối với hệ mật này là thám mã cố gắng phân tích n ra các thừa số nguyên tố. Nếu thực hiện đƣợc phép phân tích này thì có thể dễ dàng tính đƣợc (n)=(p-1)(q-1) và rồi tính số mũ a và b đúng nhƣ ví dụ trên đã làm. Vì thế để hệ RSA đƣợc coi là mật thì nhất thiết n=pq phải là một số đủ lớn để việc phân tích nó sẽ không có khả năng về mặt tính toán.

c) Hệ mật Elgamzzal: (adsbygoogle = window.adsbygoogle || []).push({});

Hệ mật Elgamal là một hệ mật mã công khai dựa trên bài toán logarithm rời rạc do ông Teher Elgamal ngƣời ai cập đề xuất năm 1984 [18]. Nó là một hệ mật không tất định vì bản mã phụ thuộc vào cả bản rõ x lẫn giá trị ngẫu nhiên k do ngƣời gửi chọn. Bởi vậy sẽ có nhiều bản mã đƣợc mã từ cùng bản rõ.

Bài toán logarithm rời rạc trong Zp:

Đặc trƣng của bài toán: I = (p,,) trong đó p là số nguyên tố  Zp là phần tử nguyên thuỷ,  Zp*

Mục tiêu: hãy tìm một số nguyên duy nhất a, 0  a  p-2 sao cho a (mod p) Ta sẽ xác định số nguyên a bằng log.

Hệ mật khoá công khai Elgamal trong Zp*:

Cho p là số nguyên tố sao cho bài toán logarithm rời rạc trong Zp là khó giải. cho  Zp* là phần tử nguyên thuỷ. Giả sử P=Zp*, C= Zp* x Zp*. [18] Ta định nghĩa:

31 K=(p, ,a, ): a

(mod p)[18] Các giá trị p, ,  đƣợc công khai, còn a giữ kín

Với K=(p, ,a, ) và một số ngẫu nhiên bí mật k  Zp-1 ta xác định: ek(x,k)=(y1,y2) [18] Trong đó y1 = k mod p [18] y2 = xk mod p [18] Với y1, y2  Zp* ta xác định: dk(y1,y2) = y2(y1a)-1 mod p [18]

Ví dụ: Cho p=2579,  =2, a=765. Khi đó =2765 mod 2579 = 949

Bây giờ giả sử ngƣời gửi muốn gửi thông báo x=1299 tới ngƣời nhận. Giả sử số ngẫu nhiên k mà ngƣời gửi chọn là k=853. Sau đó ngƣời gửi tính:

y1 = 2853 mod 2579 = 435

y2 = 1299 x 949853 mod 2579 = 2396

Khi ngƣời nhận thu đƣợc bản mã y = (435, 2396), ngƣời nhận tính x = 2396 x (435765)-1 mod 2579 = 1299

Đây chính là bản rõ mà ngƣời gửi đã mã hoá.

2.4. Kết luận:

Trong chƣơng này, đã giới thiệu các dạng mã hoá từ các phƣơng pháp mã hóa đối xứng và bất đối xứng. Trong đó hai loại mã khóa này khác nhau ở số lƣợng khóa. Mã hóa đối xứng sử dụng cùng một khóa để mã hóa/giải mã. Trong khi đó, mã hóa bất đối xứng sử dụng hai khóa khác nhau để mã hóa và giải mã thông tin. Mỗi hệ thống mã hóa có ƣu nhƣợc điểm riêng.

2.4.1. Ƣu điểm, hạn chế và ứng dụng mã hoá bí mật: a) Ƣu điểm:

- Đƣợc phổ biến rộng rãi, là nền móng cho các kỹ thuật mã hóa sau này tiếp tục phát triển.

32

- Có tốc độ cao do khóa tƣơng đối ngắn. Có thể đƣợc kết hợp để tạo ra các thuật toán mã hoá mạnh hơn.

b) Hạn chế:

Các thuật toán khóa bí mật tuy đƣợc sử dụng trong một thời gian dài và ít phức tạp về mặt toán học hơn các phƣơng pháp mã hóa khóa công khai. Tuy nhiên vẫn còn một số hạn chế làm giảm đi khả năng của hệ mã hóa này.

- Không có tính bảo mật cao do đơn giản, khóa có độ dài tƣơng đối ngắn.

- Vấn đề phân phối khóa: Các phƣơng pháp mã hóa này đòi hỏi ngƣời mã hóa và ngƣời giải mã phải cùng chung một khóa. Khi đó khóa phải đƣợc giữ bí mật tuyệt đối, nếu biết đƣợc một khóa thì dễ dàng xác định đƣợc khóa còn lại. Trƣớc đây hệ mã hóa khóa bí mật đƣợc sử dụng chủ yếu trong quân đội và các tổ chức ngoại giao, mặt khác khoa học kỹ thuật lúc bấy giờ cũng chƣa thực sự phát triển mạnh nên việc truyền khóa, đổi khóa không có gì trở ngại. Ngày nay do nhu cầu nhiều ngƣời muốn truyền tin qua mạng nhƣng không cần thiết phải biết nhau nên việc thiết lập kênh an toàn để trao đổi là bất khả thi.

- Về việc quản lý khóa: Trong hệ thống có n ngƣời sử dụng, giả sử mọi ngƣời đều muốn liên lạc an toàn với tất cả mọi ngƣời thì cần có n(n-1)/2 khóa. Trong khi nhu cầu trao đổi thông tin trên tất cả các lĩnh vực nhƣ kinh tế, chinh trị, quân sự … ngày càng tăng nên việc lƣu trữ khóa trở nên rất khó khăn.

c) Ứng dụng:

Do tốc độ nhanh, việc trao đổi và phân phối khóa không an toàn nên phƣơng pháp này thích hợp cho việc mã hoá dữ liệu tại một hệ thống – bảo mật dữ liệu tại chỗ, mã hóa thông tin lƣu trữ trên đĩa, đặc biệt phù hợp trong việc mã hoá database.

Dùng để mã hóa những dữ liệu có kích thƣớc lớn. Để sử dụng tính năng này có hiệu quả, ngƣời ta dùng khóa công khai để mã hóa khóa bí mật, sử dụng khóa bí mật này mã hóa dữ liệu.

2.4.2. Ƣu điểm, hạn chế và ứng dụng mã hoá công khai: a) Ƣu điểm: (adsbygoogle = window.adsbygoogle || []).push({});

33

Độ 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).

b) Hạn chế:

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à

Một phần của tài liệu Ứng dụng mô hình an toàn thông tin và bảo mật thư điện tử (Trang 34)