Rate this post

Trong quy trình mật mã ElGamal (Taher Elgamal, 1984) một bản nguồn có thể mã hoá thành nhiều bản mã khác nhau:

Tạo khóa

Người sử dụng tạo cặp khóa công khai/cá nhân:

Chọn số nguyên tố lớn p, và cơ số α là phần tử sinh (primitive root) theo modulo p (tức là với k = [1..p-1], αk mod p sẽ cho các giá trị [1..p-1]). Các giá trị này sẽ được công bố công khai.

Người dùng A chọn ngẫu nhiên số nguyên XA với 0 < XA < p-1 Tính:

Khoá cá nhân và khoá công khai của A là XA và {p, α, YA}

Mã hóa

Giả sử B có khóa công khai của A và B có thể mã hoá thông điệp để gửi cho A như sau:

  • Giả sử thông điệp M là một số nguyên: 0 ≤ M ≤ p -1
  • B chọn số nguyên ngẫu nhiên k với 1 ≤ k ≤ p -1
  • B tính khoá một lần: K = (YA )k mod p
  • Sau đó B tạo bản mã gồm cặp hai giá trị {C1, C2} với C1 = αk mod p; C2 = (K × M) mod p

Vậy B đã mã hóa bản nguồn M thành bản mã {C1, C2} và gửi bản mã cho A

Số k chỉ dùng đúng một lần để tính {C1, C2}.

Giải mã

A giải mã {C1, C2} bằng khóa cá nhân của mình XA như sau:

A tính:

A khôi phục lại bản nguồn M = (C2 × K-1) mod p

An toàn của thuật toán ElGamal phụ thuộc vào độ khó của bài toán tính logarit rời rạc trên các số lớn

Ví dụ như tính từ YA trong công thức:

Phải dùng phép tính logarit rời rạc. Hoặc để tính K trong công thức K = (YA )k mod p người thám mã phải tính được k từ công thức

C1 = αk mod p cũng phải dùng phép tính logarit rời rạc.

Để minh hoạ cho thuật toán, ta xem xét ví dụ sau:

Chọn số nguyên tố: p = 97, và giá trị sinh của nó: = 5 a

  • A chọn khoá cá nhân XA = 58
  • A tính:

Khóa công khai của A là {p, α, YA} = {97, 5, 44} được gửi cho B B muốn gửi thông điệp M = 3 cho A

  • B chọn k = 36, tính K = (YA )k mod p = 4436 mod 97 = 75
  • B tính C1= αk mod p = 536 mod 97 = 50

C2 = (K × M) mod p = (75 × 3) mod 97= 31 Nhận được thông điệp: {C1, C2} = (50, 31), A giải mã:

Các bài viết liên quan:

Leave a Reply

Call now
%d bloggers like this: