CHƯƠNG 2. MÔ HÌNH XỬ LÝ DỮ LIỆU MÃ HÓA VÀ BẢO MẬT DỮ LIỆU TRONG ĐIỆN TOÁN ĐÁM MÂY
2.2. CryptDB và mô hình xử lý dữ liệu mã hóa
2.2.3. Truy vấn trên dữ liệu mã hóa
2.2.3.1. Mã hóa trong CryptDB
Phần này mô tả các loại mã hóa mà CryptDB sử dụng. Mỗi loại mã hóa sẽ đƣợc làm rõ đặc điểm an toàn, chức năng và cách mà nó đƣợc thực hiện.
Random (RND): RND cung cấp bảo mật tối đa trong CryptDB. An toàn ngữ nghĩa dưới một tấn công lựa chọn bản rõ thích ứng - IND-CPA, hai giá trị bằng nhau đƣợc ánh xạ tới hai bản mã khác nhau. Mặt khác, RND không cho phép bất cứ sự tính toán nào đƣợc thực hiện hiệu quả trên bản mã. Một cấu trúc
Số hóa bởi Trung tâm Học liệu – ĐHTN http://www.lrc.tnu.edu.vn
hiệu quả của RND là sử dụng mã hóa khối nhƣ AES hoặc Blowfish trong chế độ CBC với một vector khởi tạo ngẫu nhiên (hầu nhƣ sử dụng AES, ngoại trừ các giá trị nguyên, Blowfish được sử dụng với kích thước khối là 64 bit vì khối 128 bit của AES sẽ khiến cho bản mã dài hơn đáng kể). Lớp mã hóa này cho phép máy chủ thực hiện các truy vấn SELECT không có điều kiện.
Deterministic (DET): DET có một đảm bảo hơn, yếu hơn. Nhƣng nó vẫn cung cấp bảo mật mạnh mẽ: Nó chỉ rò rỉ các giá trị mã hóa tương ứng với giá trị cùng một dữ liệu, bằng cách sinh ra cùng bản mã cho cùng bản rõ. Lớp mã hóa này cho phép server thực hiện các equality checks, có nghĩa là nó có thể thực hiện SELECT … WHERE …, GROUP BY, IN, COUNT, DISTINCT,…
Trong giới hạn mật mã, DET là một phép hoán vị giả ngẫu nhiên (pseudo- random permutation – PRP – hay còn gọi là Block ciphers). Với các giá trị 64 bit và 128 bit, một mã hóa khối với một kích thước khối phù hợp được sử dụng (Blowfish và AES tương ứng). Các giá trị nhỏ hơn 64 bít sẽ được đệm (padding), nhƣng với dữ liệu dài hơn một khối AES 128 bit, chế độ CBC tiêu chuẩn của phép toán sẽ rò rỉ tiền tố bằng nhau (ví dụ, nếu hai mục dữ liệu có một tiền tố đồng nhất dài ít nhất 128 bit). Để tránh vấn đề này, AES đƣợc sử dụng với biến thể của chế độ CMC [5].
Order-preserving encryption (OPE): OPE cho phép quan hệ thứ tự giữa các mục dữ liệu đƣợc thiết lập dựa theo các giá trị mã hóa của chúng mà không tiết lộ dữ liệu của chính nó. Nếu x < y, thì OPEK(x) < OPEK(y), với bất cứ khóa bí mật K nào. Vì thế, nếu một cột đƣợc mã hóa với OPE, server có thể thực hiện các truy vấn sắp xếp (range queries) khi các hằng số đƣợc mã hóa đã cho OPEK(c1) và OPEK(c2) tương ứng với khoảng [c1, c2]. Server cũng có thể thực hiện ORDER BY, MIN, MAX, SORT, …
OPE là một lƣợc đồ mã hóa yếu hơn DET vì nó để lộ thứ tự. Do đó, CryptDB proxy sẽ chỉ để lộ các cột đƣợc mã hóa OPE cho máy chủ nếu những người dùng yêu cầu các truy vấn thứ tự (order queries) trên các cột đó. Thuật
Số hóa bởi Trung tâm Học liệu – ĐHTN http://www.lrc.tnu.edu.vn
toán mã hóa của Boldyreva [6] đƣợc sử dụng giúp OPE đạt đƣợc những đảm bảo an toàn có thể chứng minh được: Mã hóa tương đương với một ánh xạ ngẫu nhiên duy trì thứ tự.
Homomorphic encryption (HOM): HOM là một lƣợc đồ mã hóa cho phép máy chủ thực hiện các tính toán trên dữ liệu mã hóa với kết quả cuối dùng đƣợc giải mã tại proxy. Trong khi mã hóa đồng cấu đầy đủ (fully homomorphic encryption) phục vụ chậm [7], mã hóa đồng cấu cho các phép toán cụ thể có hiệu quả hơn. Để hỗ trợ tính tổng của các giá trị nguyên, hệ mật Paillier [8] đƣợc thực hiện, với Paillier kết quả của phép nhân các mã hóa của hai giá trị dẫn tới kết quả là một mã hóa của tổng các giá trị đó, ví dụ HOMK(x) * HOMK(y)=
HOMK(x + y), với phép nhân đƣợc thực hiện modulo một vài giá trị khóa công khai. Để tính các hàm tập hợp SUM, proxy thay thế SUM với các lời gọi tới một UDF thực hiện phép nhân Paillier trên một cột đƣợc mã hóa với HOM. HOM cũng có thể đƣợc sử dụng để tính toán giá trị trung bình bằng cách DBMS server trả về giá trị tổng (sum) và đếm (count) riêng biệt.
Join (Equi-JOIN và OPE-JOIN): Một lƣợc đồ mã hóa riêng là cần thiết để phục vụ cho phép kết hợp (joins) giữa hai cột vì CryptDB sử dụng các key khác nhau cho DET để ngăn chặn các mối tương quan giữa các cột. Equi-JOIN hỗ trợ tất cả các phép toán mà DET cho phép và cũng cho phép máy chủ xác định những giá trị lặp lại giữa hai cột. OPE-JOIN cho phép các liên kết dựa trên các mối liên hệ thứ tự.
Word search (SEARCH): SEARCH đƣợc sử dụng để thực hiện các tìm kiếm trên văn bản đƣợc mã hóa để hỗ trợ các truy vấn nhƣ LIKE của MySQL chẳng hạn. Giao thức mã hóa của Song [9] đƣợc sử dụng theo một cách khác, dẫn tới kết quả là một đảm bảo an toàn tốt hơn. Cho mỗi cột cần SEARCH, văn bản đƣợc chia thành các từ khóa sử dụng các ký tự phân cách tiêu chuẩn (hoặc sử dụng một chức năng trích ra từ khóa đặc biệt được quy định bởi người phát triển lƣợc đồ). Sau đó những từ lặp lại đƣợc loại bỏ, hoán vị ngẫu nhiên vị trí
Số hóa bởi Trung tâm Học liệu – ĐHTN http://www.lrc.tnu.edu.vn
của các từ và mã hóa mỗi từ sử dụng lƣợc đồ của Song, đệm (padding) mỗi từ cho cùng kích thước. SEARCH có mức độ an toàn gần như RND: Mã hóa không để lộ cho máy chủ DBMS bất cứ một từ nào đó đƣợc lặp đi lặp lại trong nhiều hàng, nhƣng nó rò rỉ số lƣợng từ khóa đƣợc mã hóa với SEARCH, kẻ xấu có thể ƣớc lƣợng số lƣợng các từ khác biệt hoặc trùng lặp (ví dụ, bằng cách so sánh kích thước của các bản mã SEARCH và các bản mã RND của cùng dữ liệu).
Chú ý rằng SEARCH chỉ cho phép CryptDB thực hiện các tìm kiếm từ khóa từ đầy đủ (full-word keyword searches), nó không thể hỗ trợ các biểu thức chính quy tùy ý. Với các ứng dụng yêu cầu tìm kiếm nhiều từ liền kề, CryptDB cho phép nhà phát triển ứng dụng vô hiệu hóa việc loại bỏ trùng lặp và sắp xếp lại bằng cách chú thích lƣợc đồ, mặc dù đây không phải là mặc định. Sử dụng LIKE hầu hết đƣợc SEARCH hỗ trợ với những chú thích nhƣ vậy. Tất nhiên, ta vẫn có thể kết hợp nhiều toán tử LIKE với AND hoặc OR để kiểm tra xem nhiều từ độc lập có trong văn bản hay không.