Ring-LWE (Learning With Errors on Rings) là một hệ mật mã đối xứng được đề xuất bởi Oded Regev vào năm 2005. Nó dựa trên một vấn đề khó về toán học được gọi là vấn đề tìm kiếm cận dưới định lý hình cầu (Search-By-Sample Problem on the Shortest Vector in a Lattice).
Ring-LWE là một dạng mở rộng của hệ mật mã LWE trên trường số nguyên (integer). Ring-LWE được định nghĩa trên một vòng số học (ring), nơi các phép tính cộng, trừ và nhân đều có thể được thực hiện. Hệ mật mã này dựa trên việc tìm kiếm các vector ngắn nhất trong các lưới vòng (lattice) được xác định bởi một ma trận đặc biệt và một số vector ngẫu nhiên.
Ring-LWE được sử dụng trong nhiều ứng dụng an toàn, chẳng hạn như trong việc mã hóa và chứng thực thông tin, đặc biệt là trong các ứng dụng liên quan đến tính riêng tư và bảo mật dữ liệu.
Cơ sở toán học của Ring-LWE (Learning With Errors on Rings)
Cơ sở toán học của Ring-LWE bao gồm hai khái niệm chính là vòng số học và lưới vòng (lattice).
- Vòng số học (ring): Một vòng số học là tập hợp các phần tử được định nghĩa trên một phép toán nhị phân hai ngôi (+, *) thỏa mãn các tính chất sau:
- Phép cộng và phép nhân đóng với phép tính tương ứng của nó.
- Phép cộng có tính chất giao hoán, kết hợp và phân phối.
- Phép nhân có tính chất kết hợp và phân phối.
Ví dụ về vòng số học đơn giản là vòng số nguyên modulo m, trong đó m là một số nguyên dương.
- Lưới vòng (lattice): Lưới vòng là tập hợp các vector trong không gian n chiều có các giá trị nguyên được xác định bởi một ma trận A. Lưới vòng được xác định bởi tất cả các tổ hợp tuyến tính của các cột của ma trận A.
Trong Ring-LWE, một ma trận n x n là được tạo ngẫu nhiên với các giá trị trong vòng số học, và các vector ngẫu nhiên cũng được tạo ra để sử dụng trong việc xây dựng hệ mật mã.
Vấn đề cơ bản trong Ring-LWE là tìm kiếm vector ngắn nhất trong lưới vòng được xác định bởi ma trận A và các vector ngẫu nhiên. Vấn đề này có thể được giải quyết bằng cách sử dụng thuật toán tìm kiếm ngắn nhất (shortest vector search algorithm) trên lưới vòng.
Việc giải quyết vấn đề này sẽ giúp ngăn chặn các kẻ tấn công từ việc giải mã thông tin bảo mật bởi Ring-LWE.
Thuật toán Ring-LWE (Learning With Errors on Rings)
Ring-LWE là một hệ mã hóa công khai dựa trên bài toán Learning With Errors trên đa thức vòng. Trong Ring-LWE, việc mã hóa và giải mã được thực hiện bằng cách sử dụng đa thức với các hệ số trong một vòng số nguyên modulo một số nguyên tố q.
Encryption scheme trong Ring-LWE bao gồm các bước sau:
- Khởi tạo tham số: Chọn một số nguyên n đại diện cho độ dài của đa thức, một số nguyên tố q làm module, và một số nguyên k đại diện cho số lượng bit ngẫu nhiên được sử dụng để tạo ra khóa bí mật và khóa công khai.
- Tạo khóa bí mật: Chọn hai đa thức ngẫu nhiên a và s với các hệ số trong số nguyên modulo q và tính đa thức f = a*s + e, trong đó e là một đa thức ngẫu nhiên khác với các hệ số trong số nguyên modulo q. Đa thức f là khóa bí mật.
- Tạo khóa công khai: Chọn một đa thức ngẫu nhiên b với các hệ số trong số nguyên modulo q và tính đa thức h = a*b + e’, trong đó e’ là một đa thức ngẫu nhiên khác với các hệ số trong số nguyên modulo q. Đa thức h được sử dụng làm khóa công khai.
- Mã hóa tin nhắn: Chọn một đa thức ngẫu nhiên r với các hệ số trong số nguyên modulo q và tính đa thức c = r*h + m, trong đó m là tin nhắn cần được mã hóa.
- Giải mã tin nhắn: Sử dụng khóa bí mật f để tính tích vô hướng của đa thức f và đa thức c để thu được đa thức r. Sau đó, tính tích vô hướng của đa thức r và đa thức s để thu được tin nhắn ban đầu.
Trong Ring-LWE, bảo mật của hệ thống phụ thuộc vào khả năng giải quyết bài toán Learning With Errors trên đa thức vòng, đó là một bài toán được cho là khó giải trong một số trường hợp.
Ví dụ Encryption scheme
Ví dụ Encryption scheme
Để minh họa một ví dụ về hệ mã hóa Ring-LWE, hãy giả sử chúng ta muốn mã hóa một thông điệp đơn giản, chẳng hạn “Hello world!”, sử dụng một hệ mã hóa Ring-LWE.
Bước 1: Chuẩn bị các tham số
Trước khi mã hóa tin nhắn, chúng ta cần chuẩn bị một số tham số, bao gồm:
- Một số nguyên n, đại diện cho độ dài của véc-tơ đa thức.
- Một số nguyên q, đại diện cho một số nguyên tố lớn.
- Một đa thức định nghĩa trên một vòng tròn tại trường số Zq.
- Một đa thức định nghĩa trên một vòng tròn tại trường số Zq.
Giả sử chúng ta chọn các giá trị như sau:
- n = 4
- q = 23
- f(x) = x^4 + 1
- g(x) = 3x^3 + 4x^2 + 2x + 1
Bước 2: Tạo khóa
Chúng ta sử dụng đa thức f(x) và g(x) để tạo khóa. Để tạo khóa công khai, chúng ta chọn một số ngẫu nhiên và tạo đa thức h(x) bằng cách tính toán tích vô hướng của đa thức f(x) và đa thức ngẫu nhiên này. Sau đó, ta tạo khóa bằng cách tính toán đa thức công khai A(x) bằng cách tính toán tích vô hướng của đa thức ngẫu nhiên và đa thức g(x) và trừ đa thức kết quả từ tích vô hướng của đa thức bí mật h(x) và đa thức g(x).
Trong trường hợp này, giả sử chúng ta chọn ngẫu nhiên số 6 để tạo đa thức bí mật h(x). Để tính toán đa thức công khai A(x), ta sử dụng công thức sau:
A(x) = (h(x) * g(x) + e(x)) mod q
trong đó e(x) là một đa thức ngẫu nhiên.
Chúng ta có:
- h(x) = 6x^3 + 14x^2 + 17x + 20
- A(x) = (h(x) * g(x) + e(x)) mod q
Ta tính toán A(x) như sau:
- A(x) = (6x^3 + 14x^2 + 17x + 20) * (3x^3 + 4x^2 + 2x + 1) + e(x) mod 23
Bước 3: Mã hóa
Sau khi tạo khóa, chúng ta có thể sử dụng nó để mã hóa thông điệp. Để mã hóa một thông điệp, chúng ta chuyển đổi nó thành một đa thức r(x) và tính toán tích vô hướng của đa thức công khai A(x) và đa thức r(x), sau đó thêm một đa thức ngẫu nhiên e(x) để tạo thành một đa thức mã hóa c(x).
Trong trường hợp này, giả sử chúng ta muốn mã hóa thông điệp “Hello world!” bằng cách chuyển đổi các ký tự thành các giá trị ASCII và sau đó chuyển đổi các giá trị đó thành một đa thức. Đa thức này có thể được biểu diễn như sau:
r(x) = 13x^2 + 5x + 32
Ta tính toán đa thức mã hóa c(x) như sau:
- c(x) = (r(x) * A(x) + e(x)) mod q
- c(x) = (13x^2 + 5x + 32) * 3x^4 + e(x) mod 23
Sau khi tính toán, chúng ta có:
- c(x) = 8x^4 + 9x^3 + 6x^2 + 22x + 21
Bước 4: Giải mã
Để giải mã đa thức mã hóa c(x) và khôi phục thông điệp ban đầu, chúng ta tính toán tích vô hướng của đa thức bí mật h(x) và đa thức mã hóa c(x), sau đó chia kết quả cho đa thức công khai A(x).
Trong trường hợp này, ta tính toán đa thức ban đầu m(x) như sau:
- m(x) = (c(x) * h(x)^(-1)) mod A(x)
- m(x) = (8x^4 + 9x^3 + 6x^2 + 22x + 21) * (6x^3 + 14x^2 + 17x + 20)^(-1) mod 3x^4
Sau khi tính toán, chúng ta có:
- m(x) = 13x^2 + 5x + 32
Đa thức m(x) này tương ứng với thông điệp ban đầu “Hello world!” trong đa thức của chúng ta.