1.5.3.1 Ý tưởng chính của thuật toán
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 1.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 1.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 1.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 1.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 y (mod p) = (x y) mod p.
Các phép toán dùng trong ma trận cũng giống nhƣ đã định nghĩa ở mục 1.5.2.
Ý 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 [10].
1.5.3.2 Thuật toán 1) 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 mxn.
- r là số lƣợng bit cần giấu trong mỗi khối ảnh kích thƣớc mxn. - D là xâu thông tin cần giấu gồm k*r bít, 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
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 : For each w {1,2,…,2r-1} do
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ụ:
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 4x4.
F1 F2 1 1 1 0 1 0 1 0 0 1 1 0 1 1 1 1 1 0 1 0 1 5 2 6 1 1 1 1 1 1 0 0 0 1 0 1 2 6 3 7 0 0 1 0 0 1 0 1 1 0 1 0 3 7 4 1 0 1 1 0 0 0 0 0 0 1 0 1 4 1 5 2 1 1 0 1 1 1 1 1 K W 1 0 1 1 0 1 0 0 1 1 1 0 0 1 0 1 F3 F4 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 FiK và (FiK)W trên mỗi khối đã chia và thu đƣợc kết quả nhƣ sau F1K F2K (F1K)W (F2K)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 F3K F4K (F3K)W (F4K)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(F1K)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(F2K)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:
b = (010)2 = 2, Ta có s = sum(F3K)W) mod 8 = 20 mod 8 =4. 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(F3K)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 bít 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 0 0 1 1 1 F’3 F’4 2) 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 mxn. - 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’iK)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 FiK)W thu đƣợc kết quả nhƣ sau:
F'1K F'2 K (F'1K)W (F'2K)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 6 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'3K F'4K (F'3K)W (F'4K)W
Tiếp theo ta có các kết quả sau: sum((F’1K)W) mod 2r
= 33 mod 8 = 1 tƣơng ứng xâu 3 bit nhị phân 001 sum((F’2K)W) mod 2r = 16 mod 8 = 0 tƣơng ứng xâu 3 bit nhị phân 000 sum((F’3K)W) mod 2r = 26 mod 8 = 2 tƣơng ứng xâu 3 bit nhị phân 010 sum((F’4K)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.
1.5.3.3 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((FiK)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ênh 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.