Bài viết được lấy từ https://truongphuoc.wordpress.com/2023/03/21/blockchain-19-he-mat-duong-cong-elliptic/
Chào các bạn, trong bài viết trước mình đã trình bày về hệ mật RSA. RSA đầy bảo mật nhưng có nhược điểm là quá trình mã hóa và giải mã chậm. Trong bài viết này mình sẽ trình bày về hệ mật đường cong Elliptic (Elliptic curve cryptography).
Đường cong Elliptic
Trong mật mã học, đường cong Elliptic được định nghĩa với biểu thức sau: .
Đồ thị của đường cong Elliptic:
Tại vì nên đồ thị hàm số đối xứng qua một trục nào đó. Khá đơn giản phải không nào, sau đây là một vài chuẩn của đường cong được sử dụng trong mã hóa.
Đường con Elliptic trong trường Galois (Galois Fields)
Đồ thị hàm số ta thấy ở trên là xét trong tập R, nên ta thấy đồ thị liền mạch. Trong mật mã chúng ta chỉ làm việc với các số nguyên, nên chúng ta không thể xét trong tập R. Chúng ta có thể sử dụng trường Galois để chắc chắn rằng chúng ta chỉ làm việc với số nguyên.
Hàm số Elliptic trong trường Galois được định nghĩa như sau:
Với và p là một số nguyên tố, a và b là các số nguyên dương, nhỏ hơn p và thỏa mãn điều kiện:
Ví dụ với ta có như sau:
Nên hợp lệ => Hàm số . Ta có thể ký hiệu hàm số như sau: .
Với đường cong thì được định nghĩa thuộc lập trong bảng sau:
Tính như sau: với , tương tự với các trường hợp còn lại.
Vì nên , với hàm số trên ta thay x vào sẽ tìm được y như sau:
Tính như sau: Với thay vào biểu thức Đối chiếu với bảng trên ta được hoặc
Ta có đồ thị sau:
Phép cộng hai điểm trên đường cong Elliptic
Về mặt hình học, phép cộng hai điểm P và Q trên đường cong Elliptic được định nghĩa như sau:
Người ta định nghĩa phép cộng hai điểm trên đường cong Elliptic như sau: Cho hai điểm P và Q thuộc đường cong Elliptic, đường thằng đi qua P và Q cắt đường cong Elliptic tại một điểm -R, lấy R đối xứng với -R qua trục của đường cong, ta nói P + Q = R.
Phép cộng trong trường Galois
Còn trong trường Galois:
Cho hai điểm và nằm trong đường cong . Và O là điểm vô cực. Phép cộng hai điểm được định nghĩa như sau:
- .
- Nếu = và = , tức và . Khi đó .
- Nếu thì với được tính như sau:
với
Bạn có thể tính phép cộng tại đây
Phép nhân vô hướng trên đường cong Elliptic
Phép nhân vô hướng trên đường cong Elliptic thực chất là phép cộng với chính nó. Ví dụ .
Ví dụ như sau: nằm trong , ta tính 2P như sau:
Theo công thức ở trên ta có:
Nên
Chú ý ở trên có phép toán tức là nhé, cách tính mình đã nói ở phần trước rồi.
Bạn có thể tính phép nhân tại đây
*Ngoài phép cộng điểm và phép nhân vô hướng thì trên đường cong Elliptic không có các phép tính khác.
Một bài toán thú vị
Mình có một bài toán như sau: Cho điểm và điểm cùng nằm trong đường cong . Tìm biết rằng có tồn tại một thỏa mãn: .
Bài toán trên cũng đơn giản phải không nào, do đường cong Elliptic chỉ có phép cộng điểm và phép nhân vô hướng, nên ta không thể lấy được. Do đó để tìm không có cách nào khác chúng ta phải vét cạn thôi (tức là thử từng trường hợp một đó). Với ,.. tương tự với các k khác ta có bảng dưới đây
Ta thấy rằng với thì . Do đó ta kết luận .
Bài toán trên đã được chứng minh là có nghiệm duy nhất.
Có vẻ đơn giản phải không nào, giờ chúng ta sẽ tăng lên thành thì sao nhỉ? lúc này thì tính toán sẽ khó hơn nhỉ, nếu là một số 256 bit thì sao nhỉ? Lúc đó . Các bạn đã nhìn thấy chưa, nó như vầy này:
2^256 = 115,792,089,237,316,195,423,570,985,008,687,907,853,269,984,665,640,564,039,457,584,007,913,129,639,935 = 1.15e77
Ta thử tính thời gian vét cạn với không gian bit này nhé. Với siêu máy tính mạnh nhất thế giới 2006 là Hệ thống Blue Gene/L, được lắp đặt tại Phòng thí nghiệm Quốc gia Lawrence Livermore tính toán được 280,6 nghìn tỉ phép tính trên giây (), suy ra một năm (1 năm = 31.556.952 giây) siêu máy tính này tính được phép tính. Thế cần bao lâu để siêu máy tính này vét cạn được với ? Ta cùng tính nhé: tức là 12 tỷ tỷ tỷ tỷ tỷ tỷ năm đó các bạn, trong đó thiên hà của chúng ta mới được có 14 tỷ năm thôi à 🤣.
Chúng ta thấy rằng nếu có thể áp dụng đường cong Elliptic vào trong mật mã, k là Private key và kG là Public key với G là một điểm trên đường cong thì cực kỳ khó, hay có thể nói là bất khả thi để tìm ra Private key k khi biết Public key kG. (Giống bài toán trên cho điểm Q và P thì khó có thể tìm được k vậy)
Hệ mật đường cong Elliptic
Dựa vào tính chất chỉ có phép cộng của đường cong Elliptic cùng sự khó khăn trong việc vét cạn với số lớn, người ta tạo ra hệ mật được cong Elliptic.
Trong hệ mật đường cong Elliptic, quá trình mã hóa Plain text M thành Cypher text C trong được thực hiện như sau:
Encryption
- Plain text M được chuyển đổi thành một điểm nằm trong , gọi là điểm .
- Chọn một điểm G nằm trong sao cho số n trong biểu thức nG = O là một số rất lớn (O là điểm vô cực). G được gọi là điểm cơ sở.
- và G là công khai.
- Bình muốn tạo cặp khóa (key pair) cho mình, Bình chọn một số k sao cho k < n. Sau đó tính kG được kết quả là . Lúc này k là Private key của Bình và là Public key của Bình.
- An muốn mã hóa Plain text với Public key của Bình thì làm như sau: An chọn một số ngẫu nhiên r , sau đó chuyển Plain text thành Cypher text với công thức:
Decryption
Sau đó An gửi cho Bình. Sau khi nhận được từ An, Bình giải mã với công thức sau:
Thế là hết về phần lý thuyết, tiếp theo tới ví dụ nào (các bạn có thể sử dụng tool mình link ở trên để tính toán phép cộng và nhân cho nhanh nhé)
Ví dụ với đường cong , ta chọn G = (3, 10). Với G này thì ta được 28G = O.
Bình muốn tạo cặp khóa của mình thì đầu tiên phải chọn ngẫu nhiên một số k với . Ví dụ Bình chọn . Vậy Private key của Bình là 13 và Public key của Bình là .
An muốn gửi Plain text thì làm như sau: An chọn một số ngẫu nhiên r = 3, sau đó sử dụng Public key của Bình để tính Cypher text như sau:
= [(r*G), (]
= [3 × (3, 10), (6, 4) + 3 × (1, 7)]
= [(19, 5), (6, 4) + (18, 20)]
= [(19, 5), (11, 20)]
An gửi Cypher text cho Bình, sau khi nhận được Bình giải mã như sau:
Thế là Bình đã tìm được chính xác rồi.
Còn bạn nào thắc mắc về cách quy từ Plain text ra . Cũng có nhiều cách làm phần này. Ví dụ An và Bình cùng thống nhất một bảng mapping giữa số và các điểm trên . Ví dụ ta có các điểm sau nằm trên . An và Bình có thể quy ước như sau:
Poin | Symbol |
---|---|
(6, 4) | a |
(1, 7) | b |
(19, 18) | c |
... | ... |
Bảng mapping điểm và ký tự
Như vậy là mình đã trình bày về hệ mật đường cong Elliptic, cũng không khó lắm phải không nào. Hệ mật này được sử dụng rộng rãi ngày nay nhờ sự bảo mật và khả năng tính toán nhanh của nó.
Còn một vấn đề nữa là trao đổi khóa công khai an toàn, việc trao đổi khóa công khai an toàn trong Elliptic curve cryptography cũng giống như trong RSA mình đã giới thiệu ở bài trước. Đó cũng là cơ chế chung của việc trao đổi khóa an toàn trong hệ mật bất đối xứng.
Bài tập về nhà: Bạn hãy mapping chuỗi AYE sau đó thực hiện mã hóa và giải mã sử dụng hệ mật Elliptic curve. Bạn nên làm bài tập này, bài tiếp theo nói về một chủ đề rất hay là chữ ký điện tử, có sử dụng kiến thức của bài này, thế nên nếu bạn không làm bài tập thì khó lòng mà hiểu sâu sắc được bài tiếp theo đó.
Link bài viết gốc https://truongphuoc.wordpress.com/2023/03/21/blockchain-19-he-mat-duong-cong-elliptic/