3.1. Ý tưởng
Yu Yuan, Hsiang Kuang Pan và Yu Chee Tseng đã phát triển một kỹ thuật giấu tin mới trên cơ sở của thuật toán Wu_Lee. Kỹ thuật này sử dụng một ma trận khóa và một ma trận trọng số để giấu tin. Thuật toán đảm bảo được độ an toàn của thông tin giấu và cũng giấu được nhiều thông tin trong ảnh bằng cách chỉ thay đổi nhiều nhất 2 bit trong mỗi khối ảnh. Đối với ảnh đen trắng thì kỹ thuật này có nhược điểm là chất lượng ảnh chưa cao, dễ bị phát hiện.
Định nghĩa 5: Khóa bí mật là một ma trận nhị phân có cùng kích thước mxn với kích thước của khối ảnh. Khóa được dùng một cách bí mật mà chỉ có người gửi và người nhận đích thực mới biết được.
Định nghĩa 6: Ma trận W trọng số cấp r là một ma trận số nguyên có kích thước bằng kích thước của khối ảnh mxn và thỏa mãn các điều kiện sau: (i) W là ma trận số nguyên có các phần tử nằm trong khoảng giá trị (0,
…,2r-1) với r là một số nguyên dương cho trước thỏa mãn 2r < mxn. (ii) Mỗi phần tử có giá trị từ 1 đến 2r -1 xuất hiện ít nhất một lần trong
ma trận.
Định nghĩa 7: Phép đảo bit (bitwise) là một phép biến đổi trên các bit nhị phân. Đảo bit b tương đương với phép biến đổi thay b bởi 1-b.
Định nghĩa 8: Với mỗi số nguyên dương p, ta xét tập các số dư trong phép chia cho p, Zp={0, 1, 2, …, p-1}. Trên Zp ta thực hiện các phép toán theo modulo p như sau: x, y Zp:
- Phép cộng: x+y (mod p) = (x +y) mod p - Phép lấy phần tử đối: -x (mod p) = p-x - Phép trừ: x – y (mod p) = (x+(p-y)) mod p - Phép nhân: x f y (mod p) = (x f y) mod p.
Các phép toán dùng trong ma trận cũng giống như đã định nghĩa nếu trên
Ý tưởng thuật toán
Ý tưởng chính của thuật toán giấu tin Yuang_Pan_Tseng là sử dụng thêm một ma trận trọng số kết hợp với ma trận khóa K và để giấu được r bit dữ liệu vào một khối m x n nhưng chỉ thay đổi nhiều nhất hai bit dữ liệu trên khối.
3.2. Thuật toán
a. Quá trình giấu tin
Input:
- F là một ma trận giá trị các điểm ảnh gốc dùng để giấu tin. - K là một ma trận khóa nhị phân có kích thước m x n.
- r là số lượng bit cần giấu trong mỗi khối ảnh kích thước m x n. - D là xâu thông tin cần giấu gồm k*r bit, k là số khối ảnh giấu. - W là một ma trận trọng số r với các giá trị W[i,j] thuộc tập {1,2, …,2r-1} xuất hiện ít nhất một lần.
Output:
- Một file ảnh F’ đã giấu tin b.
Thuật toán
Bước 1: Chia ảnh F thành các khối nhỏ Fi có kích thước mxn, đặt p = 2r; Với mỗi khối Fi thực hiện các bước biến đổi sau
Bước 2: Tính T = Fi K; P= T W;
Bước 3: Tính tổng s = sum(P) mod p; đặt b=b1b2…br; d = b – s (mod p);
Bước 4: Với mỗi khối T:
Sw = {[j, k] | (W[j, k] = w Ti[j, k] =0) (W[j, k]=2r-w Ti[j, k] =1)}
Endfor;
Bước 5:
if d=0 then giữ nguyên Fi;
Bước 6:
if Sd then
Chọn phần tử [j, k] bất kì thuộc Sd và đảo bit Fi[j, k];
Bước 7: u=d; while (Su= ) do v = p – u; u = (u + d) mod p; endwhile; Bước 8:
Chọn phần tử [j, k] bất kì thuộc Su và đảo bit Fi[j, k]; Chọn phần tử [j, k] bất kì thuộc Sv và đảo bit Fi[j, k]; End
Thí dụ 1: Giả sử ta có một ma trận ảnh F8x8. Một ma trận khóa K4x4 và một ma trận trọng số W4x4. Ta giấu 12 bit sau D=001 000 010 001 vào trong ảnh F. Cho r = 3. Ban đầu chia F thành các khối ảnh F1, F2, F3, F4 có cùng kích thước 4 4. F1 F2 1 1 1 0 1 0 1 0 0 1 1 0 1 1 1 1 1 1 1 1 1 1 0 0 0 0 1 0 0 1 0 1 0 1 1 0 0 0 0 0 1 0 1 0 1 5 2 6 1 1 0 1 1 1 1 1 0 1 0 1 2 6 3 7 1 0 1 1 0 1 0 0 1 0 1 0 3 7 4 1 1 1 1 1 0 1 0 1 0 1 0 1 4 1 5 2 F3 F4 K W
Với r = 3, p = 2r =23 – 8. Như vậy đoạn bít 001 giấu vào khối F1, 000 giấu vào khối F2, 010 giấu vào khối F3 và 001 giấu vào khối F4.
Ta thực hiện phép tính Fi K và (Fi K) W trên mỗi khối đã chia và thu được kết quả như sau:
F1 K F2 K (F1 K) W (F2 K) W 0 1 0 0 0 0 0 0 0 5 0 0 0 0 0 0 0 0 1 1 1 0 1 0 0 0 3 7 2 0 3 0 0 1 0 1 0 1 1 0 0 7 0 1 0 7 4 0 0 1 1 1 0 0 0 0 0 1 5 2 0 0 0 0 1 1 0 0 1 0 1 0 1 5 0 0 1 0 2 0 1 0 0 0 1 0 1 0 2 0 0 0 2 0 3 0 0 0 0 1 1 1 1 0 0 0 0 1 3 7 4 0 1 0 1 1 0 0 0 0 4 0 5 2 0 0 0 0 F3 K F4 K (F3 K) W (F4 K) W
Với mỗi khối T, để tiếp tục ta cần tính tập Sw với w=1, 2,…,7. Ta sử dụng một bảng S* ghi nhận các phần tử của các tập Sw. Phần tử trên ma trận S* được xác định như sau S*[j, k]=W[j, k] nếu T[j, k] = 0; S*[j, k]=p-W[j, k] nếu T[j, k] = 1. Sau đó từ bảng S*, ta xét nếu S*[j, k] = w thì ta có [j, k] Sw.
S*1 S*2 1 3 2 6 1 5 2 6 2 6 5 1 6 6 5 7 3 1 4 7 3 1 4 1 4 7 3 6 4 1 5 2 7 3 2 6 7 5 6 6 6 6 3 7 6 6 5 7 3 7 4 7 5 1 4 1 4 1 3 6 4 1 5 2 S*3 S*4
Chẳng hạn từ bảng trên ta xét khối S*1 và thu được các Sw (w =1, 2, …, 7) sau S1={[1,1]; [2,4]; [3,2]} S2={[1,3]; [2,1]} S3={[1,2]; [3,1]; [4,3]} S4={[3,3]; [4,1]} S5={[2,3]} S6={[1,4}; [2,2]; [4,1]} S7={[3,4]; [4,2]} Với khối F1: b = (001)2 = 1, Ta có
s = sum(F1 K) W) mod 8 = 31mod 8 =7; d = b-s (mod 8) = 1-7(mod 8) =
2 0.
Sd=S2 ={[1,3]; [2,1]} nên ta có thể chọn tùy ý một trong hai vị trí trong S2 để đảo bit. Ta chọn đảo bit ở F1[2,1] khi đó thu được F’1.
Với khối F2:
b = (000)2 = 0, Ta có s = sum(F2 K) W) mod 8 = 16 mod 8 =0.
d = b-s (mod 8) = 0-0 (mod 8) = 0. Giữ nguyên khối F2 và coi như đã giấu được đoạn bit này.
Với khối F3:
d = b-s (mod 8) = 2-4 (mod 8) = 6 0.
Sd=S6 ={[1,4]; [2,1]; [2,2]; [4,4]} nên ta có thể chọn tùy ý một phần tử trong S2 để đảo bit. Ta chọn đảo bit ở F3[2,2] khi đó thu được F’3.
Với khối F4:
b = (001)2 = 1, Ta có s = sum(F3 K) W) mod 8 = 22 mod 8 =6. d = b-s (mod 8) = 1-6 (mod 8) = 3 0.
Sd=S3 = ; u = d = 3; v = 8 – 3 = 5; u = 3 + 3 (mod 8) = 6 Su = S6={[1,3]; [1,4]; [2,1]; [2,2]}. Ta chọn đảo bit tại [1,4] Sv = S5 = {[1,2]; [2,3]; [3,1]; [4,3]}. Ta chọn đảo bit tại [4,3]
Vậy ảnh F’ thu được bằng cách ghép 4 khối F’1, F’2, F’3, F’4 như sau:
F’1 F’2 1 1 1 0 1 0 1 0 1 1 1 0 1 1 1 1 1 1 1 1 1 1 0 0 0 0 1 0 0 1 0 1 0 1 1 0 0 0 0 1 1 0 0 1 1 1 1 1 1 0 1 1 0 1 0 0 1 1 1 1 0 1 1 1 F’3 F’4 3.3. Quá trình tách tin Input
- F’ là ảnh đã được giấu dãy bit bí mật D - K là ma trận khóa bí mật, kích thước m x n. - r là số lượng bit đã giấu ở mỗi khối
- Ma trận trọng số W cấp r Output
- F là file ảnh chứa tin đã được giấu - D là dãy bit bí mật đã giấu
Thuật toán
- Đọc header ảnh để biết các thông tin về ảnh, đọc bảng mầu, đọc phần dữ liệu ảnh vào ma trận hai chiều M
- Chia M thành các khối nhỏ F’i với kích thước mxn.
- Với mỗi khối nhỏ F’i. Tính b= sum((F’i K) W) mod 2r. Trong đó b là xâu nhị phân được tạo ra bởi r bit thông tin.
Thí dụ 2: Với phần thông tin đã được giấu như trong Thí dụ 1 ở trên. Với mỗi khối F’i ta thực hiện phép toán Fi K) W) thu được kết quả như sau:
F’1 K F’2 K (F’1 K) W (F’2 K) W 0 1 0 0 0 0 0 0 0 5 0 0 0 0 0 0 1 0 1 1 1 0 1 0 2 0 3 7 2 0 3 0 0 1 0 1 0 1 1 0 0 7 0 1 0 7 4 0 0 1 1 1 0 0 0 0 0 1 5 2 0 0 0 0 1 1 0 0 1 0 1 1 1 5 0 0 1 0 2 0 1 1 0 0 1 0 1 0 2 6 0 0 2 0 3 0 0 0 0 1 1 1 1 0 0 0 0 1 3 7 4 0 1 0 1 1 0 0 1 0 4 0 5 2 0 0 5 0 F’3 K F’4 K (F’3 K) W (F’4 K) W
Tiếp theo ta có các kết quả sau:
sum((F’1 K) W) mod 2r= 33 mod 8 = 1 tương ứng xâu 3 bit nhị phân 001 sum((F’2 K) W) mod 2r = 16 mod 8 = 0 tương ứng xâu 3 bit nhị phân 000 sum((F’3 K) W) mod 2r = 26 mod 8 = 2 tương ứng xâu 3 bit nhị phân 010 sum((F’4 K) W) mod 2r = 33 mod 8 = 1 tương ứng xâu 3 bit nhị phân 001
Như vậy cuối cùng ta thu được xâu bít nhị phân đã giấu ban đầu là
D=001000010001.
3.4. Phân tích thuật toán
Với thuật toán giấu tin sử dụng ma trận trọng số W cấp rvà ma trận khóa K ở trên, ta có thể coi khóa K như một mặt nạ, khi đó ma trận T là ma trận nhị phân cho biết những phần tử tương ứng trong hai khối Fi và K là khác nhau hay không.
Tổng s = sum(P) cho biết tổng các trọng số tại các phần tử khác nhau giữa khối Fi và K.
d chính là điều kiện để giấu tin. d Zp. Nếu d = 0 thì ta không làm gì cả và coi như dãy bit b đã được giấu vào khối Fi tương ứng. Ngược lại nếu d 0 thì thuật toán sẽ thực hiện từ bước 6 đến bước 8 với mục đích để đẳng thức sau thỏa mãn
sum((Fi K) W) b1b2…br (mod 2)
Đẳng thức trên gọi là bất biến của thuật toán giấu tin này. Thủ tục sửa hai vị trí trong một khối bất kỳ như sau:
Trước hết cần tính các Sw (w=1, 2,…,2r -1) theo như bước 4 của thuật toán Sw = {[j,k] | (W[j,k] = w Ti[j,k] =0) (W[j,k]=2r-w Ti[j,k] =1)} Như vậy Sw là tập các chỉ số [j,k] trong các khối thỏa các điều kiện sau (i) Tại vị trí đó, ma trận trọng số W có giá trị w và các phần tử
Fi[j,k]=K[j,k] (do M[j,k]=0)
(ii) Tại vị trí đó, ma trận trọng số W có giá trị 2r-w và các phần tử Fi[j,k] K[j,k] (do M[j,k]=0).
Nếu [j,k] Sw thì ta đảo bit [j,k] trong khối đang xét, tức là thực hiện đổi bit 0 thành 1 hoặc bit 1 thành 0 và như vậy đại lượng s sẽ tăng lên w đơn vị tính theo modulo 2r.
II. KỸ THUẬT THỦY VÂN TRÊN ẢNH