Mật mã đường cong elliptic (Elliptic Curve Cryptography) là một kỹ thuật mã hóa khóa công khai dựa trên lý thuyết đường cong elliptic có thể được sử dụng để tạo các khóa mật mã nhanh hơn, nhỏ hơn và hiệu quả hơn. ECC tạo khóa thông qua các thuộc tính của phương trình đường cong elliptic thay vì phương pháp tạo truyền thống như là tích của các số nguyên tố rất lớn. Đặc biệt ECC được ứng dụng rất nhiều trong Blockchain. Để hiểu về khái niệm đường cong elliptic, các bạn đọc bài viết tại Khái niệm đường cong Eliptic
1. Trao đổi khóa EC Diffie-Hellman
Trước tiên ta chọn một số nguyên q lớn, với q là số nguyên tố (nếu sử dụng đường cong Elliptic Zp) hoặc q có dạng 2m(nếu chọn đường cong GF(2m)), và chọn 2 tham số a, b tương ứng để tạo thành nhóm Eq(a,b). Ta gọi G là điểm cơ sở của nhóm nếu tồn tại một số nguyên n sao cho nG=0. Số nguyên n nhỏ nhất như vậy được gọi là hạng của G.
Trong trao đổi khóa EC Diffie-Hellman, ta chọn một điểm G có hạng n lớn, và giao thức trao đổi khóa giữa Alice và Bob tiến hành như sau:
1) Alice chọn một số nA < n và giữ bí mật số nA này. Sau đó trong Eq(a,b) Alice
Tính PA= nAG và gửi cho Bob.
2) Tương tự Bob chọn một số bí mật nB, tính PB và gửi PB cho Alice.
3) Alice tạo khóa phiên bí mật là K= nA PB = nA nBG
4) Bob tạo khóa phiên bí mật là K= nB PA = nA nBG (nhóm Abel có
tính giao hoán) giống với khóa của Alice.
Trudy có thể chặn được PA và PB, tuy nhiên chỉ có thể tính được điều này là bất khả thi như ta đã thấy ở phần trên.
Chú ý: khóa phiên K là một điểm trong đường cong Elliptic, để sử dụng khóa này cho mã hóa đối xứng như DES hay AES, ta cần chuyển K về dạng số thường.
2. Mã hóa và giải mã EC
Tương tự như vấn đề trao đổi khóa, trong vấn đề mã hóa/giải mã, ta cũng chọn các tham số để tạo một nhóm Abel Eq(a,b) và chọn một điểm cơ sở G có hạng n lớn.
Các thành phần khóa khóa riêng và công khai trong mã hóa EC được định nghĩa như sau:

Trong đó d<n và E=dG với d là một số bí mật do người sinh khóa chọn. Do tính
chất của hàm một chiều từ E và G không thể suy ra được d.
Từ đó chúng ta có hai cách thức thực hiện mã hóa/ giải mã như sau:
- Phương pháp Elgamal:
Giả sử Alice muốn gửi một thông điệp M cho Bob, trước tiên Alice chuyển M từ dạng dãy bít sang dạng điểm PM =(x, y). Bản mã CM (dùng khóa công khai của Bob) được tính là một cặp điểm như sau:
C M = {kG, PM + kE}với k là một số ngẫu nhiên do Alice chọn
Để giải mã dùng khóa riêng, Bob sẽ nhân điểm thứ nhất trong C M với d, sau đó lấy điểm thứ hai trừ cho kết quả:

Trong phương thức mã hóa, Alice đã che giấu PM bằng cách cộng PM với kE. Để giải mã, Bob cần trừ ra lại kE. Thay vì gửi trực tiếp k cho Bob để Bob tính kE (Trudy có thể chặn được), Alice gửi một dấu hiệu là kG . Dựa vào kG và d, Bob có thể tính kE. Còn Trudy, dù biết G và kG, tuy nhiên vẫn không thể tính được k do tính chất của hàm một chiều.
Ví dụ: chọn p = 751, a = 1, b = 188 ta có đường cong Elliptic trên Z751 như sau:
y2 mod 751 = (x3 + x + 188) mod 751 trong đó a,b,x,y Z751
Chọn điểm cơ sở là G=(0,376)
Giả sử Alice cần mã hóa bản rõ là điểm PM=(562,201) dùng khóa công khai E=(201,5). Alice chọn k=386. Ta có
386(0,36)=(676,58)
(562,201)+368(201,5)=(385,328)
Vậy bản mã là cặp điểm {(676,58), (385,328)}
- Phương pháp Menezes – Vanstone:
Thông điệp M của Alice được tách thành hai phần M=(m1, m2) sao cho m1, m2 Zp. Alice chọn một số ngẫu nhiên k, kết hợp với khóa công khai của Bob, Alice tính điểm P như sau:
P(xp,yp) = kE
Bản mã CM gồm 3 thành phần:
CM ={ c0, c1, c2 } ={kG, xpm1 mod p, ypm2 mod p}
Để giải mã dùng khóa riêng, từ dấu hiệu kG, Bod tính:
P(xp,yp) = kdG
Và từ đó tính nghịch đảo của xp-1 và yp-1 trong phép modulo p. Cuối cùng bản giải mã là:
M ={m1,m2} = { xp-1 c1 mod p, yp-1 c2 mod p}
Tương tự như phương pháp Elgamal, dù biết G và kG, Trudy cũng không thể tính được k để tính P.
3. Độ an toàn của ECC so với RSA
Hiện nay, phương pháp nhanh nhất để tính logarit đường cong Elliptic (tính k biết G và kG) là phương pháp Pollar rho. Bảng sau đây liệt kê kích thước hóa của phương pháp ECC và phương pháp RSA dựa trên sự tương đương về chi phí phá mã.

Như vậy với cùng một độ an toàn thì mã hóa ECC chỉ dùng các phép tính có số bít nhỏ hơn nhiều lần so với mã hóa RSA.