Đổi khoá CSDL mức cột là thay đổi khoá cũ của các cột trong bảng dữ liệu bằng các khoá mới tương ứng của cột đó. Để đổi khoá cho CSDL mã, ta phải tạo ra cây khoá KMT mới (bài toán tổng quát là thay đổi khoá của tất cả các cột trong bảng, các trường hợp riêng như thay đổi một số cột cụ thể hoặc mã hoá một số cột nhạy cảm trong CSDL là tập con của bài toán này) và tiến hành thay khoá cũ bằng khoá mới tương ứng từ cây khoá KMT cũ và KMT mới trên các dữ liệu trong bảng.
Thuật toán 3.5:Thuật toán NaiveKeyChanged
Input: Outsourced database name
Output: Change key of encrypted data 1 listOldKey ← readKMT("OldKMT.file") 2 listNewKey ← readKMT("NewKMT.file") 3 db ← connect to outsourced database
4 DataTable dt ← SELECT * FROM tableName
5 DELETE * FROM tableName
6 while dt.nextRow() do
7 list[] ← ∅
8 for each value ∈ dt.column do
9 plaintext = DlistOldKey(i)(value) 10 ciphertext = ElistNewKey(i)(plaintext)
11 list.append(ciphertext)
12 end
13 INSERT INTO tableName VALUES(list)
14 end
Phương pháp ngây thơ (naive method) giải quyết bài toán thay khóa được mô tả như sau:
❼ Bước 2: Giải mã CSDL bằng khoá đã có,
❼ Bước 3: Mã hoá toàn bộ dữ liệu bằng khóa mã mới, ❼ Bước 4: Lưu trữ dữ liệu được mã lên ODBS.
Phương pháp đổi khoá ngây thơ có thể được thực hiện như thuật toán 3.5. Ta xem thời gian thực hiện giải mã, mã hóa đối với các dữ liệu đầu vào khác nhau là thay đổi không đáng kể; Cho CSDL có bảng T với n dòng và m cột. Độ phức tạp thời gian tính toán của thuật toán 3.5 là: O(n)) = 2.tread+n.m.(tdec+tenc). Vì vậy, khi CSDL có số lượng bản ghi n lớn thì phương pháp ngây thơ sẽ tốn nhiều thời gian và có thể không thực hiện được.