a) Một số định nghĩa
Định nghĩa 1: Ký hiệu ⊗ là phép nhân theo phần tử của hai ma trận cùng cấp m×n:
( ⊗ ), = F, × G,, i = 1,2, … , m và j = 1,2, … , n
Định nghĩa 2: Phép ⨁ hai số nguyên không âm là phép toán xor trên từng cặp bít tương ứng của chúng.
Ví dụ: 5 ⨁ 12 = 0101⨁1100 = 1001=9
Định nghĩa 3:Với D là ma trận nguyên không âm cấp m×n, ký hiệu s = XSUM(D) hay ∑⨁, , được hiểu là phép ⨁ trên tất cả các phần tử của D.
b) Thuật toán giấu tin trên một khối
Nội dung phần này trình bày các thuật toán giấu tin trên một ma trận nhị phânkhối điểm ảnh F cấp m×n, các thuật toán trong mục này chỉ biến đổi nhiều nhất một phần tử trên F.
c) Thuật toán nhúng một bít
Đối với ảnh nhị phân, lược đồ của Wu-Lee được biết đến như là một lược đồ đơn giản thuộc nhóm kỹ thuật giấu tin theo khối bít. Lược đồ này sử dụng ma trận nhị phân ngẫu nhiên K cấp m×n làm khóa bí mật. Theo đó, thuật toán có thể nhúng một bít b vào F bằng việc biến đổi nhiều nhất một phần tử trên F để nhận được G thỏa mãn điều kiện:
53
SUM(G⨂K)mod 2 = b
Lược đồ này không thể mở rộng để giấu một dãy bít.
Xét một thuật toán khác bằng cách thay XSUM(G⨂K) = b cho điều kiện
SUM(G⨂K)mod 2 = b trong thuật toán Wu-Lee. Thuật toán này có thể mở rộng để giấu một dãy r bít.
Thuật toán 1
Thuật toán này sẽ biến đổi nhiều nhất một phần tử trên F để nhận được G thỏa mãn điều kiện:
XSUM(G⨂K) = b
Thuật toán được thực hiện như sau: Bước 1:Tính s = XSUM(F⨂K)
Nếu b = s, đặt G = F, kết thúc thuật toán \\Nhúng mà không cần thay đổiảnh
Ngược lại, chuyển đến Bước 2 Bước 2:Tính d = s⨁b
Tìm một phần tử ( , )sao cho , =
Fu,v = 1- Fu,v \\ Đảo phần tửFu,v Đặt G = F
Kết thúc thuật toán
Nhận xét 1: Trong thuật toán d = 1.Vì vậy, để bước 2 luôn thực hiện được thì ma trận K cần thỏa mãn điều kiện:
{1} ⊂ { , | = 1, … , và = 1, . . . , }
c) Thuật toán nhúng dãy bít
Trong mục này ta sẽ mở rộng Thuật toán 1 để nhúng dãy bít = … vào khối điểm ảnh F bằng cách sử dụng ma trận khóa K gồm các phần tử là các dãy nhị phân r bít. Nói cách khác, các phần tử Ki,j có giá trị từ 0 đến 2r-1.
Tương tự như Thuật toán 1, thuật toán dưới đây sẽ biến đổi nhiều nhất một phần tử của F để được ma trận G thỏa mãn điều kiện:
54 Thuật toán 2:
Bước 1:Tı́nh s = XSUM(F⨂K)
Nếu = , đặt G = F và kết thúc thuật toán Ngược lại, chuyển sang Bước 2
Bước 2:Tı́nh d = s⨁b
Chọn một phần tử (u, v) sao cho K , = d F , = 1 − F ,
Đặt G = F và kết thúc thuật toán
Nhận xét 2: Trong thuật toán trên, d là một số nguyên từ 1 đến 2r-1. Do đó, để bước 2 luôn thực hiện được thì ma trận khóa K phải thỏa mãn điều kiện:
{1, 2, … , 2 − 1} ⊆ { , | = 1,2, … , và = 1,2, … , }
Từ điều kiện này suy ra: ≤ ⌊log ( × + 1)⌋
d) Ví dụ minh họa
Nhúng hai bít b1b2 vào ma trận F với các tham số cụ thể như sau:
b=b1b2=10 F K 1 0 0 10 01 10 0 1 1 11 01 10 0 1 1 11 11 01 Bước 1: Tính s = ( ⨂ ) = 10⨁01⨁10⨁11⨁01 = 11
Do s ≠ b, chuyển sang Bước 2 Bước 2: Tính = ⨁ = 11⨁10 = 01
Theo thuật toán chọn ( , )| , = , suy ra (u,v) = (1,2) Đảo F1,2: F1,2=1-0 = 1
Đặt G = F.
55 G 1 1 0 0 1 1 0 1 1
e)Chứng minh thuật toán nhúng dãy bít
Để khẳng định Thuật toán 2 đúng ta cần chứng minh trong mọi trường hợp kết thúc G luôn thỏa mãn điều kiện: ( ⨂ ) =
Xét hai trường hợp kết thúc của thuật toán:
Trường hợp 1: Thuật toán kết thúc tại Bước 1, hiển nhiên G thỏa mãn điều kiện (2). Bởi, G chính là F, mà F thỏa mãn điều kiện ( ⨂ ) = .
Trường hợp 2:Thuật toán kết thúc tại Bước 2 - Tính = ⨁ ,
- Chọn một phần tử (u, v)| , = , - Đảo Fu,v: Fu,v=1-Fu,v
- Đặt G=F
Khi đó, dễ dàng suy ra các phần tử của G được xác định theo công thức sau: , = , , ê ( , ) ≠ ( , ) 1 − , , ê ( , ) = ( , ) (3.1) Gọi j i j i j i K G K G XSUM s , , , ) ( ' Từ (3.1) suy ra: ] ) 1 [( ' , , ) , ( ) , ( , , uv uv v u j i j i j i K F K F s (3.2)
Do F là ma trận nhị phân nên Fu,v=0 hoặc 1. Xét hai trường hợp của Fu,v.
o Trường hợpFu,v=0, từ (3.2) suy ra:
] ) 1 [( ' , , , , , uv uv j i j i j i K F F F s s'sKu,v (3.3)
56 o Trường hợp Fu,v=1, từ (3.2) suy ra:
v u v u v u v u v u j i j i j i K F K K K F s , , , , ) , ( ) , ( , , [(1 ) ] ' uv uv uv j i j i j i K F F K F s , , , , , , [(1 ) ] ' s'sKu,v (3.4)
Từ (3.3) và (3.4) suy ra khi đảo giá trị Fu,v thì s = XSUM(G⨁K) = s ⨁ K ,
Mặt khác, theo thuật toánK , = d ma ̀d = s⨁b nên s = s ⨁ s ⨁b = b
Vậy ( ⨂ ) = .
Thuật toán 3
Để nâng cao mức độ an toàn của Thuật toán 2, ta có thể sử dụng thêm một số
∈ {0,1,2, … , 2 − 1} làm khóa thứ 2. Khi đó ta nhận được thuật toán 3 có nội dung tương tự như Thuật toán 2 ngoại trừ s được tính theo công thức:
s = XSUM(F⨂K)⨁ w
Ngoài ra, để khôi phục dãy bít b, sử dụng công thức sau:
SUM(G⨂K)⨁ w = b
Ta nhận thấy ma trận G trong Thuật toán 3 được xác định từ F, K, w và b. Vì vậy, ta có thể xem Thuật toán 3 như một phép biến đổi T từ (F,K,w,b) đến G:
G = T(F,K,w,b)
f) Lược đồ giấu tin trên ảnh nhị phân
Giả sử I là ảnh nhị phân dùng để giấu tin và b là dãy bít tin mật cần giấu. Trong thuật toán sử dụng hai khóa K và W, trong đó K là ma trận cấp m×n thỏa mãn hai điều kiện:
(1)∀(i, j) K, ∈ {0,1, … , 2 − 1}
(2){1,2, … , 2 − 1} ⊂ {K, |i = 1, … , mvàj = 1, … , n}
với r ≤ ⌊log (m × n + 1)⌋
và W = {w , w , … . , w }với 0 ≤ w ≤ 2 − 1 và 0 < t ≤ N
57
Bước 1: Chia khối - Chia ảnh I thành N khối Fi cấp m×n, chia b thành N dãy bít bi có độ dài
Bước 2: Giấu tin trên từng khối For i=1 to N do
α = (i − 1) mod t + 1
Gi=T(Fi, K, wα, bi) End for
Thuật toán cho ta ảnh G gồm các khối Gi cấp m×n với i =1,…,N
Thuật toán khôi phục thông tin
Gọi G là ảnh có chứa dãy bít tin mật, thuật toán khôi phục tin giấu cần biết hai khóa bí mật K và W đã được sử dụng trong thuật toán giấu tin.
Bước 1: Chia ảnh G thành N khối Gi cấp m×n Bước 2: Khôi phục dãy bít
For i = 1 to N do
α = (i − 1) mod t + 1
b = XSUM(G ⨂K)⨁w
End for
Kết quả ta nhận được dãy bít tin mật b gồm N dãy con r bít bi, i=1,2,…,N