Hệ mã ElGamal

Một phần của tài liệu Luận văn: MỘT SỐ ỨNG DỤNG CỦA SỐ HỌC TRONG LÝ THUYẾT MẬT MÃ docx (Trang 32 - 35)

2 Một số ứng dụng của số học trong lý thuyết mật mã

2.2.3Hệ mã ElGamal

Giả sử A muốn chuyển cho B một thông báo mật M (đang ở dạng mã hoá

và nằm trong khoảng 0vàp). Khi ấyA cần chọn ngẫu nhiên một số nguyên

s nằm trong khoảng (1;p−1)và gửi cho B cặp số(gs, M gskB). Cặp số này

A tính được nhờ biết trước phần tử cơ sở g và khoá công khai gkB của B. Khi nhận được cặp số này, B tính được M bằng thủ tục gồm hai bước sau:

1. Lấy số thứ nhất (trong cặp số) nâng lên luỹ thừa với bậc bằng khoá bí mật kB của mình, tức là nhận được (gs)kB = gskB

2. Lấy nghịch đảo số vừa nhận theomodulo p bằng thuật toán Euclid rồi đem nhân với số thứ hai, tức là có:

(gskB)−1.M.gskB = (gskB)−1.gskB.M = M. Ví dụ: Thực hành trên Maple

Trước tiên ta quy ước một số kí hiệu sau: a := kB(chìa khoá bí mật),

β := gkB (chìa khoá công khai), M := vbro, r := gs, k := gs.kB.M. Sau đây là thủ tục lập mã và giải mã một văn bản đã được số hoá.

[> p := nextprime(573895454535831238556787878786543245245345782347 89456756789098766);

p := 5738954545358312385567878787865432452453457823478945675 6789098777.

[> g := 563135812177388214178789567789945; g := 563135812177388214178789567789945. [> a := (rand(1 .. p-1))(); a :=4803619766379393277727329564540502461901561826214080798 6503324762. [> keyprv := [a]; keyprv := [4803619766379393277727329564540502461901561826214 0807986503324762].

[> beta := g&∧a mod p;

β :=1321549407504424114980849015668944721641266351773 7433917683931501. [> keypub := [g, β]; keypub := [563135812177388214178789567789945,13215494075044 241149808490156689447216412663517737433917683931501]. [> vbro := 1234567891223334444555556666667777777888888889999; vbro :=1234567891223334444555556666667777777888888889999. [> s := (rand(1 .. p-1))(); s := 473798186565532722900524732814564178902203286562653170 58369891684.

[> r := keypub[1]&∧s mod p;

r := 198035064944466645030690249900611984391934211508731966 76602193440.

[> k :=(keypub[2]&∧s (mod p))∗(vbro) mod p;

k :=5163201251813578538079467487163430971125553922816017145 174934923. [> vbma := [r, k]; vbma := [19803506494446664503069024990061198439193421150873 196676602193440, 51632012518135785380794674871634309711255539 22816017145174934923].

[> vbro := ((vbma[1])&∧(−keyprv[1])) (mod p)∗(vbma[2]) mod p; vbro := 1234567891223334444555556666667777777888888889999. Nhận xét: Hệ mã này rất an toàn (chú ý không để lộ tham số s) ý tưởng của hê mã ElGamal là rất tổng quát. Nó được dùng cho hệ mã sử dụng hàm mũ, hàm một chiều và vài hệ khác.

Một nét chung của hai hệ mã trên là cho phép công bố công khai một phần thông tin phục vụ cho việc lập mã hoặc hỗ trợ cho việc "trao đổi chìa" vốn thường thấy ở các hệ mã đối xứng. Ưu điểm của hệ mã này là không có thông tin khác thuộc loại "bí mật chung" cần phải gửi. Đây là mô hình luôn được phát triển và ngày càng hoàn thiện, có tên gọi chung là mã hoá với khoá công khai.

Nguyên tắc chung của mã hóa với khoá công khai

Giả sử trong hệ thống đang xét có n cá thể cùng trao đổi các thông tin mật. Mỗi cá thể chọn cho mình một chìa khoá lập mã k và một công thức mã hoá Ek được thông báo công khai. Như vậy cón khoá lập mã công khai

k1, k2, ..., kn. Khi cá thể thứimuốn gửi thông báo cho cá thể thứj (đã chuyển thành số, nhóm thành từng khối có độ dài nào đó ). Với mỗi khối P trong văn bản được mã hoá bằng khoá lập mã Ekj của cá thể thứ j ( đã thông báo công khai) và gửi dưới dạng C = Ekj(P).

Để giải mã thông báo này, cá thể thứj chỉ cần dùng khoá giải mã (bí mật riêng của mình) Dkj.

Dkj(C) = DkjEkj(P) = P.

Vì Dkj và Ekj là các khoá lập mã và giải mã của cùng một cá thể thứ j. Nhận xét: Mã hoá với khoá công khai sử dụng hai chìa khoá khác biệt thực sự cho hai công việc lập mã và giải mã. Mỗi cá nhân chỉ cần giữ kín chìa khoá giải mã, còn chìa khoá lập mã được thông báo công khai (để những người khác có thể mã hoá bản tin mật gửi cho mình). Điều then chốt là từ chìa khoá lập mã không thể tìm ra chìa khoá giải mã (nếu không được biết thông tin đặc biệt nào khác). Rõ ràng với cơ chế này, việc bảo mật thông

tin trở nên rễ ràng hơn (mỗi người chỉ việc giữ bí mật của chính mình). Các nguyên tắc vừa trình bày được cụ thể hoá bằng hệ mã công khai được phát minh năm 1978 bởi Rivest, Shamir và Adleman mang tên RSA.

Một phần của tài liệu Luận văn: MỘT SỐ ỨNG DỤNG CỦA SỐ HỌC TRONG LÝ THUYẾT MẬT MÃ docx (Trang 32 - 35)