2.4. Kỹ thuật giấu tin CPT
2.4.4. Cải tiến phương pháp CPT nâng cao dung lượng giấu tin
Một cải tiến của thuật toán CPT sẽ được trình bày sau đây, chứng minh có thể giấu các giá trị trong miền Rmn = {2r, 2r + 1, …, mn-1} vào khối ảnh F mà cũng chỉ cần thay đổi tối đa không quá 2 bit trong F. Chẳng hạn, khối F có kích thước 10 x 16 có thể giấu không quá 7 bit theo thuật toán CPT, nhưng nếu mở rộng giá trị giấu được từ 128 đến 159 mà mức độ ảnh hưởng, an toàn như nhau thì rõ ràng là tăng dung lượng đáng kể [3].
Việc mở rộng giá trị được giấu không chỉ tăng thêm dung lượng giấu mà còn làm cho việc sử dụng thuật toán mềm dẻo hơn, không bị gò bó vào số bit thông tin cần giấu trong khối. Việc lựa chọn khối cũng mềm dẻo hơn, không phụ thuộc vào việc lựa chọn khối có kích thước phù hợp với lũy thừa của 2.
Giấu b vào dãy bit W
Kí hiệu x y là phép toán XOR hai bit x và y.
Một song ánh f:{1,2,…,k) {1,2,…,k).
Thực chất dãy{f(1), f(2), …, f(k)} là một hoán vị của dãy {1,2,…,k}. Cho dãy nhị phân W = { W(1), W(2 ), … , W(k)}.
Kí hiệu: U = { W(1) e(1), …, W(k) e(k)} (4.1) d = K 1 i ) i ( U ). i ( f (4.2) Đặt: U*(i) = U(f-1(i)) với i = 1, 2, …, k
Ta có: d = K 1 t K 1 t K 1 i ) t ( * U . t )) t ( 1 f ( U . t ) i ( U ). i ( f
Rõ ràng là khi thay đổi một bit trong dãy W giá trị d cũng thay đổi theo. Chẳng hạn nếu U*(i) = 1, đảo bit W(f-1
(i)), giá trị mới của U*(i) bằng 0, khi này d sẽ giảm một lượng i, ngược lại d sẽ tăng i đơn vị.
Đặt:
db = b - d (mod k) (4.3) Nếu db = 0 ta coi như đã giấu được số nguyên dương b vào dãy W. Khi cần tính lại b từ dữ liệu W đã chứa b, ta thực hiện theo (4.1), (4.2) và đặt:
b = d (mod K) (4.4) Giả thiết db < 0, đặt h = - db (h > 0) ta cần thay đổi W để d (mod k) giảm một lượng h. Trường hợp db > 0, cần thay đổi W để d (mod k) tăng một lượng db, nói cách khác, d (mod k) giảm một lượng h, với h = k - db(h > 0).
Không làm mất tính tổng quát và để giảm bớt sự phức tạp không cần thiết trong các công thức, trong phần sau ta chỉ xét cho trường hợp f(i) = i, i [1, …, k], khi này U*(i) = U(i).Vì vậy:
d = K 1 i ) i ( U . i Trường hợp 1 (C1): U(h) = 1.
d’ = K 1 i ) i ( U . i = d – h (4.5) Trường hợp 2 (C2): U(k - h) = 0.
Đảo bit W( k - h), giá trị mới của U(K-h) = 1. Ta có: d’ = d + k – h.
Trường hợp 3 (C3): Xét hai khả năng:
- Tồn tại t0 [1, .., h] sao cho U(t0) = 1 và U(t0 + k - h ) = 0. Đảo các bit W(t0) và W(to + k - h), giá trị mới của U(t0) = 0 và U(t0 + k - h) = 1.
Suy ra: d’ = d - t0 + t0 + k - h = d + k – h
- Tồn tại t0 [(h+1),..,(k-h)] sao cho U(t0) = 1 và U(t0 - h ) = 0. Đảo các bit W(t0) và W(t0 - h), giá trị của U(t0) = 0 và U(t0 - h) = 1.
Suy ra: d’ = d - t0 + t0 - h = d - h
Như vậy nếu xảy ra trường hợp thứ nhất hoặc thứ hai phải thay đổi một bit: W(h) hoặc W(k-h) là giấu được b vào dãy W. Trong trường hợp thứ ba phải thay đổi cặp bit W(t0) và W(t0 + k - h) hoặc cặp bit W(t0) và W(t0 - h) sẽ giấu được b vào dãy W (thay đổi hai bit). Luôn luôn xảy ra một trong ba trường hợp (C1), (C2) hoặc (C3), để có thể giấu b vào W (với 0 b k), mà thay đổi W không quá 2 bit. Thật vậy:
Rõ ràng là trong (4.3) khi db = 0, không cần thay đổi W. Khi db > 0 ta cần phải tăng d (mod K) một lượng db, tương đương với việc giảm d (mod K) một lượng h với h = k - db (h > 0). Vì vậy, theo nhận xét ở trên, ta chỉ cần chứng minh cho trong trường hợp db < 0.
a) Xét trường hợp (C2) và ( C3) không xảy ra.
Nghĩa là: U(k - h) = 1
t [1..h], U(t) = 1 U(t +k - h) = 1 (4.6) t [(h +1), .., (k-h)], U(t) = 1 U(t - h) = 1
Đặt k = qh + α, với 0 α < h, q 1. * Xét trường hợp q > 1.
Từ (4.6) suy ra: U(h + α) = U(k - (q - 1)h) = 1 (4.7) Nếu α = 0 ta có U(h) = 1, nghĩa là trường hợp thứ nhất (C1) xảy ra. Giả thiết α 0, ta có U(α) = 1.
Từ (4.6): U(2α) = U(α + k - qh) = 1 (4.8) Dễ dàng nhận thấy u(xα) = 1, với 1 x [h/α] + 1.
Với x = [h/α] + 1, ta có U(xα - h) = 1. Áp dụng (4.6) một số lần ta có:
U(xα - yh) = 1, x, y: 1 xα - yh h (4.9) Chọn x = h và y = α -1, ta được U(h) = 1, nghĩa là (C1) xảy ra.
* Xét trường hợp q = 1.
Với k = h + α, α < h, suy ra: U(α) = U(k - h) = 1. Tiếp tục xét như chứng minh trên, suy ra U(h) = 1.
b) Xét trường hợp (C1), (C2) không xảy ra.
Nghĩa là: U(h) = 0
Và t [1, .., h], U(t) = 1 U(t + k - h) = 1 t [h+1, .., K-h], U(t) = 1 U(t - h) = 1
Giả sử U(k-h)=1, chứng minh tương tự trường hợp a) suy ra U(h) = 1. Điều này mâu thuẫn với giả thiết U(h) = 0. Vì vậy U(k-h) = 0, nghĩa là trường hợp thứ hai (C2) xảy ra.
c) Xét trường hợp (C1) và (C2) không xảy ra.
Nghĩa là U(h) = 0 và U(k-h) =1. Giả thiết: t [1, .., h], U(t) = 1 U (t + k - h) = 1 t [h +1, .., k-h), U(t) = 1 U(t-h) = 1
Chứng minh tương tự trường hợp a) suy ra U(h) =1. Điều này mâu thuẫn với giả thiết U(h) = 0. Chứng tỏ tồn tại to [1..h] sao cho U(to) = 1 và U(to+k-h) = 0 hoặc to [(h+1)..(k-h)] sao cho U(to) = 1 và U(to-h) = 0. Nói cách khác nếu (C1) và (C2) không xảy ra, ta có (C3).
Giấu thông tin vàoảnh
Chia ảnh nhị phân thành các khối có kích thước m*n. Chọn k m*n. Xây dựng dãy bit E = { e(1),e(2),…,e(k)} tùy ý và xác định một song ánh:
Dãy bit E và ánh xạ f có thể được xây dựng riêng rẽ cho từng khối, một số khối nhất định hoặc cho toàn bộ các khối.
Kí hiệu F = {F(i, j): 1 i m, 1 j n} là khối điểm ảnh nhị phân được sử dụng và b, với 0 b < k, là giá trị cần giấu vào F.
Bước 1 (B1): Chuyển khối F vào dãy W:
W((i - 1)n + j) = F(i, j) với 1 i m , 1 j n.
Bước 2 (B2): Tính U, U*
và d: U = {U(1), U(1), .., U(k)}.
Trong đó U(i) = W(i) e(i) với i = 1, 2, .., k. U*(i) = U (f-1(i)), i = 1, 2, …, k, d = k 1 i ) i ( U ). i ( f = k 1 t ) t ( * U . t Bước 3 (B3): Tính db = b - d (mod k) Nếu db = 0 chuyển xuống bước 4.
Nếu db < 0 đặt lại h = - db, nếu db > 0 đặt lại h = k – db.
* Nếu U*(h) = 1 đảo bit W( f-1
(h)).
* Nếu U*(h) = 0, U*(k - h) = 0, đảo bit W(f-1(k-h)).
* Nếu U*(h) = 0, U*(k - h) = 1, tìm t0 theo (C3) và đảo cặp bit W(f-1(t0)) và W(f-1(t0 + k - h)) hoặc W(f-1(t0)) và W(f-1(t0 - h)) tùy theo t0 [1, .., h] hay t0 [h+1, .., k-h]. (Trong đó U* đóng vai trò thay cho U)
Bước 4 (B4): Gán lại dữ liệu vào khối F:
F(i,j) = W((i - 1)n + j), 1 i m, 1 j n
Với từng khối của ảnh nhị phân ban đầu làm tương tự như các bước từ (B1) đến (B4).
Chương 3
GIẤU THÔNG TIN VÀO ẢNH MÀU VÀ ẢNH ĐA CẤP XÁM
Đối với ảnh màu và ảnh đa cấp xám do có nhiều loại màu và tồn tại nhiều cấp độ xám trong ảnh nên việc giấu thông tin trong hai loại này khó có thể phát hiện hơn so với giấu tin trong ảnh đen trắng. Đồng thời với các vấn đề trên thì dung lượng thông tin được giấu trong ảnh màu và ảnh đa cấp xám cũng tăng đáng kể.
Các phương pháp giấu tin trong ảnh màu hiện nay đều thuộc vào một trong các nhóm sau đây [6]:
Nhóm phương pháp nhúng thông tin vào các bit có trọng số thấp thường được áp dụng trên các ảnh bitmap không nén và các ảnh dùng bảng màu. Ý tưởng chính của phương pháp này là lấy từng bit của mẩu tin mật, rải nó lên ảnh mang, gài nó vào các bit có trọng số thấp.
Nhóm phương pháp dựa trên các phép biến đổi ảnh lợi dụng việc biến đổi ảnh từ miền biểu diễn này sang miền biểu diễn khác để giấu các bit tin. Một ví dụ của hệ thống sử dụng phương pháp này là “Jpeg - Jsteg”, phần mềm này nhúng thông tin bằng cách điều chế các hệ số của phép biến đổi Cosin rời rạc theo các bit tin cần giấu và sự làm tròn lỗi khi lượng hóa. Một số các phương pháp thuộc nhóm này sử dụng ảnh mô hình vật lý với các dãy phổ thể hiện mức năng lượng. Khi đó giấu thông tin như việc điều chế tín hiệu giải hẹp vào một dải tần rộng.
Nhóm phương pháp dùng các mặt nạ giác quan dựa trên nguyên lý đánh lừa hệ thống giác quan của con người, một số điểm yếu của hệ thống giác quan là:
Hiệu ứng mặt nạ của cạnh.
Sự nhạy cảm đối với độ tương phản là một hàm của miền tần số.
Khả năng nhạy cảm kém đối với các thay đổi nhỏ trong độ chói trên các mảng ảnh có cấu tạo ngẫu nhiên.
Sự nhạy cảm kém đối với các tần số miền không cảm nhận được một tín hiệu nếu có ở bên cạnh một tín hiệu nhất định nào đó. Ngoài ra, người ta có thể phân loại các phương pháp theo định dạng ảnh, theo đặc điểm kỹ thuật… Sau đây là một số phương pháp giấu tin tiêu biểu.