Giới thiệu về phương pháp CPT

Một phần của tài liệu Nghiên cứu nâng cao tính bảo mật trong giấu tin, ứng dụng thuật toán giấu tin CPT trên ảnh 24 bit màu (Trang 27)

Trên cơ sở phát triển ý tưởng của nhóm M.Y.Wu và J.H.Lee, nhóm các tác giả Y.Y.Chen, H.Pan và Y.Tseng (Chen – Pan – Tseng) đề xuất một phương pháp giấu tin trong ảnh nhị phân, theo đó ảnh nhị phân được phân thành nhiều khối có cùng kích thước mxn. Với mỗi khối dữ liệu có thể giấu tối đa r bits thông tin, r ≤ [log2(m.n + 1)] bằng cách thay đổi không quá 2 bits trong khối dữ liệu ảnh [20, 21]

Khóa bí mật K là một ma trận nhị phân có kích thước bằng khối ảnh, được dùng chung giữa người giấu tin và người giải mã thông tin.

Ma trận trọng số W (Weight matrix) là một ma trận có cùng kích thước với khóa và được sử dụng chung giữa người giấu thông tin và người giải mã thông tin. Ma trận trọng số kích thước mxn có các phần tử nhận giá trị trong tập 2R = [1,…, 2r – 1] và phủ đầy tập 2R.

Với cách lựa chọn khóa K và ma trận trọng số W như vậy thì sẽ có tới t1 = 2mn khả năng của khóa K và t2 C2mnr1*(2r 1)!*(2r 1)mn(2r1) khả năng của ma trận trọng số W, do đó có tới t1*t2 khả năng lựa chọn K, W. Nếu người giấu tin lựa chọn m, n đủ lớn thì khả năng đối phương dò tìm được thông tin được giấu là vô cùng khó. Độ an toàn của thuật toán giấu tin này rất cao.

2.4.2. Nội dung thuật toán.

Với khối ảnh F, ma trận trọng số W, khóa K, ta cần giấu r bit thông tin b1b2…br vào F, bằng cách đảo nhiều nhất 2 bit của F. Quá trình biến đổi của thuật toán gồm 4 bước sau:

Bước 1: Tính ma trận T = F  K với phép  là phép toán XOR theo các phần tử tương ứng của hai ma trận nhị phân cùng bậc.

Bước 2: Tính tổng SUM(T W) với phép  là phép nhân theo các phần tử tương ứng của hai ma trận cùng bậc, phép SUM dùng để tính tổng các phần tử của một ma trận.

0 1 1 0 0 1 0 1 1 F 1 1 0 0 1 1 1 1 0 K 3 2 1 3 2 1 3 2 1 W

Ta có kết quả như sau:

1 0 1 0 1 0 1 0 1 K F T   ; 3 0 1 0 2 0 3 0 1  W T và SUM = 10.

Bước 3: với ma trận T và với mọi w = 1,2,…,2r

– 1 ta xây dựng tập hợp Sw như sau:

Sw = {(j,k)|((W[j,k]=w) and (T[j,k]=0)) or ((W[j,k]= 2r-w) and (T[j,k])=1))} Dễ nhận thấy Sw là tập hợp các tọa độ (j,k) của ma trận F[j,k] sao cho khi đảo bit F[j,k] thì tổng SUM tăng lên w đơn vị (hiểu theo mod 2r

). Thực vậy ta có:

- Trường hợp 1: Nếu W[j,k] = w và T[j,k] = 0. Khi đó đảo bit F[j,k] sẽ làm cho T[j,k] = 1, do đó SUM tăng lên w

- Trường hợp 2: Nếu W[j,k] =2r

- w và T[j,k] = 1. Khi đó đảo bit Fi [j,k] sẽ làm cho T[j,k] = 0, do đó SUM sẽ giảm đi (2r - w), tức tăng lên w theo mod 2r.

Bước 4: Gọi F' là khối bit sau khi đã giấu dãy r bit (b1,b2,… br) vào F. Việc đảo bit trên khối F phải thỏa mãn yêu cầu:

SUM (( F’  K)  W)  b1b2…br (mod 2r).

Đây cũng chính là cơ sở để khôi phục thông tin được giấu. Khi nhận được F', biết các khóa K, ma trận trọng số W người giải tin chỉ cần đi tính giá trị b = SUM (( F'  K)  W) mod 2r, chính là thông tin được giấu.

Các mệnh đề sau chứng minh tính đúng đắn của thuật toán, nghĩa là luôn giấu được r bit thông tin mà chỉ cần thay đổi nhiều nhất 2 bit của khối.

Mệnh đề 1: Với mọi w = 1, 2,…, 2r -1 và w  2r-1

, ta có nếu Sw =  thì S2

r

- w  . (Một cách nói khác: nếu Sw =  thì S-w  )

Thật vậy, theo định nghĩa của ma trận trọng số, tồn tại ít nhất một phần tử W[j,k] = w. Giả sử T[j,k] = F[j,k]  K[j,k] = 0, đảo bit F[j,k] sẽ làm SUM tăng w, hay Sw  , trái với giả thiết.

Vậy T[j,k] = F[j,k]  K[j,k] = 1, nếu ta đảo bit F[j,k] sẽ làm SUM giảm đi w hay tăng lên (2r - w) (mod 2r), suy ra S2r - w .

Mệnh đề 2: Tập hợp S2r-1  .

Lập luận tương tự như trên: Ma trận trọng số tồn tại ít nhất một phần tử có giá trị 2r-1. Do đó đảo bit ở vị trí tương ứng sẽ làm SUM tăng 2r-1

hoặc giảm 2r - 2r-1 = 2r-1, tức là làm SUM tăng lên 2r-1 (mod 2r)

Mệnh đề 3: Giả sử Sd = . Luôn tìm được số tự nhiên h sao cho Shd   và Sd - hd   với mọi d {0, 1, 2, …, 2r

-1}.

Với mọi giá trị w = 1, 2,…, 2r -1, luôn chọn được số tự nhiên h, k sao cho: hd = k.2r + w với 1 < d < 2r. Theo mệnh đề 1 và 2, luôn tồn tại tập hợp Sw  , nghĩa là luôn tồn tại số tự nhiên h để Shd  . Gọi h là giá trị nhỏ nhất thỏa mãn điều kiện này, tức là S(h-1)d = , suy ra S-(h-1)d hay Sd-hd   (mệnh đề 1). Mệnh đề đã được chứng minh.

Việc đảo bit trên F được tiến hành như sau:

Kí hiệu d  (b1b2…br) - SUM(( F  K)  W) (mod 2r).

Ta cần thực hiện việc đảo bit trên F để được F’ sao cho tổng SUM tính được ở bước 2 khi thay F bởi F’ sẽ tăng lên d.

- Nếu d = 0: không cần thay đổi F - Nếu d 0: Có hai khả năng xảy ra.

+ Nếu Sd   thì chọn phần tử (j, k)  Sd rồi thay đổi giá trị bit F[j,k]. Trong trường hợp này giấu được b vào F mà chỉ phải đảo một bit.

+ Nếu Sd =  thì thực hiện theo các bước:

Theo mệnh đề 3, luôn tồn tại h để Shd   và Sd - hd  .

 Chọn (j,k)Shd và đảo bit F[j,k], SUM sẽ tăng hd đơn vị.

 Chọn (u,v)Sd-hd và đảo bit F[u,v], SUM sẽ tăng (d-hd) đơn vị.

Như vậy khi ta đảo đồng thời hai bit nói trên thì tổng SUM sẽ tăng lên [hd + (d - hd)] = d. Đây là trường hợp giấu được thông tin b vào khối F mà phải thay đổi hai bit trong F.

Xét ví dụ với các khối Fi có kích thước 3x3, thông tin được giấu vào mỗi khối nhiều nhất, theo thuật toán CPT, là 3 bit (r = 3).

F1 F2 1 0 1 1 0 1 0 0 1 1 1 1 0 1 1 0 0 0 1 0 0 1 0 1 1 1 0 1 0 1 0 1 1 0 0 0 F3 F4 K = W = 0 1 0 1 0 1 0 1 0 1 2 3 3 5 7 2 4 6

Như vậy với 4 khối Fi thì ta có thể giấu tối đa 12 bit thông tin. Gọi chuỗi bit thông tin cần giấu b = 001.111.010.101.

Ta có kết quả quá trình giấu tin:

T1 = F1  K T2 = F2  K 1 1 1 1 1 1 1 0 0 0 1 0 0 0 1 0 1 0 1 1 0 1 1 1 0 1 1 0 0 0 0 0 1 0 1 0 T3 = F3  K T4 = F4  K

SUM1 = 15; SUM1 mod 23 = 7; d1 = b1b2b3 - 7 = -6

SUM2 = 15; SUM2 mod 23 = 7; d2 = b4b5b6 - 7 = 0

SUM3 = 21; SUM3 mod 23 = 5; d3 = b7b8b9 - 5 = -3

SUM4 = 10; SUM4 mod 23 = 2; d4 = b10b11b12 - 2 = 3

- Đối với khối F1, cần đảo bit để SUM1 (mod 8) tăng lên 2 (tức là giảm đi 6). Ta thấy S2 = {(3,1), (3,3)} nên đảo bit F1[3,1] hoặc F1[3,3] sẽ giấu được b1b2b3.

- Đối với khối F2, do d2 = 0 nên không cần đảo bit, giấu được b4b5b6. - Đối với khối F3, cần đảo bit để SUM3 (mod 8) tăng lên 5 (tức là giảm

đi 3): Ta thấy S5 = , trong trường hợp này cần phải đảo 2 bit mới giấu được thông tin. Cần tìm x sao cho Sx  và Sx-5  . Ta có S1 = {(2,3)} và S4 = {(3,2)}, do đó đảo 2 bit F4[2,3] và F4[3,2] ta sẽ giấu được b7b8b9.

- Đối với khối F4, cần đảo bit để SUM1 (mod 8) tăng lên 3: Ta thấy S3 = {(2,1)} nên đảo bit F4[2,1] sẽ giấu được b10b11b12.

Các khối Fi sau khi đảo bit: F'1 F'2 1 0 1 1 0 1 0 0 1 1 1 1 1 1 1 0 0 0 1 1 0 1 0 1 1 1 0 0 0 1 0 0 1 0 0 0 F'3 F'4

Một phần của tài liệu Nghiên cứu nâng cao tính bảo mật trong giấu tin, ứng dụng thuật toán giấu tin CPT trên ảnh 24 bit màu (Trang 27)