Tải bản đầy đủ (.doc) (40 trang)

CÁC THUẬT TOÁN GIẤU TIN TRONG ẢNH ĐEN TRẮNG

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (350.6 KB, 40 trang )

Các thuật toán giấu tin trong ảnh đen trắng- 1 -

--------------------------------------------------------------------------------------------

PHẦN I
CÁC THUẬT TOÁN GIẤU TIN TRONG ẢNH ĐEN TRẮNG
MỞ ĐẦU
Ngày nay, giấu tin được coi là một trong những vấn đề nóng bỏng của
Công Nghệ Thông Tin. Có rất nhiều kỹ thuật khác nhau nhưng giấu tin
trong ảnh chiếm vị trí chủ yếu trong các kỹ thuật giấu tin. Tuy nhiên, bản
thân nó cũng chia thành nhiều loại: giấu tin trong ảnh đen trắng, ảnh màu,
ảnh đa cấp xám. Trong tiểu luận này chỉ trình bày những thuật toán giấu tin
trong ảnh đen trắng.
Giấu tin ít nhiều cũng gây ra sự thay đổi dữ liệu trên ảnh gốc, kỹ thuật
dấu tin phải đảm bảo cho những thay đổi rất nhỏ tức là mắt thường khó mà
phân biệt được. Giấu tin trong ảnh cũng không làm thay đổi kích thước của
ảnh đồng thời đảm bảo yêu cầu chất lượng ảnh sau khi dấu thông tin và bền
vững trước các phép biến đổi. Trong khi đối với ảnh màu người ta quan tâm
đến các thuật toán làm sao giấu được càng nhiều tin càng tốt, thì với ảnh đen
trắng người ta chỉ quan tâm làm sao cho tin giấu không bị phát hiện.


Các thuật toán giấu tin trong ảnh đen trắng- 2 -

-------------------------------------------------------------------------------------------1. Giới thiệu về cấu trúc ảnh Bitmap (phần mở rộng .BMP)
Các kỹ thuật giấu tin ở phần sau được thực hiện trên ảnh Bitmap, nên
trong phần này chúng ta cùng tìm hiểu cấu trúc ảnh để hỗ trợ cho việc cài
đặt các kỹ thuật giấu tin.
Mỗi file ảnh BMP gồm ba phần:
∗ BitmapHeader
∗ Palette màu


∗ BitmapData
Bitmapheader (54 Byte)
Bảng màu ( Có thể có hoặc không )
Thông tin ảnh (Bitmap Data)
Bảng 1. Cấu trúc ảnh Bitmap


Các thuật toán giấu tin trong ảnh đen trắng- 3 -

-------------------------------------------------------------------------------------------Cấu trúc cụ thể của ảnh BMP như sau:
• BitmapHeader: được cho trong bảng sau
Byte

Đặt tên

Ý nghĩa

Giá trị

1-2

ID

Nhận dạng file

‘BM’ hay 19778

3-6

File_Size


Kích thước file

Kiểu Long trong Turbo C

7-10

Reserved

Dành riêng

Mang giá trị 0

11-14

OffsetBit

Byte bắt đầu vùng dữ Offset của byte bắt đầu vùng dữ
liệu

liệu

15-18

ISize

Số byte cho vùng info

40 byte


19-22

Width

Chiều rộng ảnh BMP

Tính bằng pixel

23-26

Height

Chiều cao ảnh BMP

Tính bằng pixel

27-28

Planes

Số planes màu

Cố định là 1

29-30

biCount

Số bit cho một pixel


Có thể là 1,4,8,16,24

31-34

Compression

Kiểu nén dữ liệu

0: Không nén
1: Nén runlength 8bits/pixel
2: Nén runlength 4bits/pixel

35-38

ImageSize

Kích thước ảnh

Tính bằng byte

39-42

XPelsPerMeter

Độ phân giải ngang

Tính bằng pixels/meter

43-46


YPelsperMeter

Độ phân giải dọc

Tính bằng pixels/meter

47-50

ColorsUsed

Số màu sử dụng trong
ảnh

51-54

ColorsImportant Số màu được sử dụng
khi hiện ảnh

Bảng 2.3: Cấu trúc header của file ảnh Bitmap
• Palette màu: bảng màu của ảnh, chỉ những ảnh nhỏ hơn hoặc bằng 8
bit màu mới có Palette màu.


Các thuật toán giấu tin trong ảnh đen trắng- 4 -

-------------------------------------------------------------------------------------------• BitmapData: Phần này nằm ngay sau phần palette màu của ảnh BMP.
Đây là phần chứa giá trị màu của điểm ảnh trong BMP. Các dòng ảnh được
lưu từ dưới lên trên, các điểm ảnh được lưu từ trái sang phải. Giá trị của mỗi
điểm ảnh là một chỉ số trỏ tới phần tử màu tương ứng của Palette màu.
Thành phần BitCount của cấu trúc BitmapHeader cho biết số bit dành cho

mỗi điểm ảnh và số lượng màu lớn nhất của ảnh. BitCount có thể nhận các
giá trị sau:
• 1: Bitmap là ảnh đen trắng, mỗi bit biểu diễn một điểm ảnh. Nếu bit
mang giá trị 0 thì điểm ảnh là đen, bit mang giá trị 1 điểm ảnh là điểm
trắng.
• 4: Bitmap là ảnh 16 màu, mỗi điểm ảnh được biểu diễn bởi 4 bit.
• 8: Bitmap là ảnh 256 màu, mỗi điểm ảnh được biểu diễn bởi 1 byte.
• 16: Bitmap là ảnh high color , mỗi dãy 2 byte liên tiếp trong bitmap
biểu diễn cường độ tương đối của màu màu đỏ, xanh lá cây, xanh lơ
của một điểm ảnh.
• 24: Bitmap là ảnh true color (2 24 màu), mỗi dãy 3 byte liên tiếp trong
bitmap biểu diễn cường độ tương đối của màu đỏ, xanh lá cây, xanh lơ
(RGB) của một điểm ảnh.
Thành phần ColorUsed của cấu trúc BitmapHeader xác định số lượng màu
của palette màu thực sự được sử dụng để hiển thị bitmap. Nếu thành phần
này được đặt là 0, bitmap sử dụng số màu lớn nhất tương ứng với giá trị của
BitCount.
2. Phát biểu bài toán
Cho một ảnh nguồn đen trắng F, là ảnh dùng làm môi trường để giấu
thông tin. Cho D = d1d2…dp là lượng thông tin cầu giấu thể hiện qua dãy p
bít nhị phân (nhận các giá trị 0/1). Cho trước ma trận khoá mật K và ma trận
trọng số mật W bậc m×n. Ma trận khoá K và ma trận trọng số W được giữ bí
mật, chỉ có người gửi và nhận tin có trách nhiệm mới biết được. Yêu cầu bài
toán đặt ra là hãy giấu thông tin D vào trong ảnh F sao cho đảm bảo được


Các thuật toán giấu tin trong ảnh đen trắng- 5 -

-------------------------------------------------------------------------------------------các tính chất cơ bản của một hệ bảo mật thông tin, bao gồm việc đảm bảo
cao về tính không nhìn thấy của thông tin giấu, tỉ lệ thông tin giấu nhiều.

Khi giải mã để lấy lại thông tin được dễ dàng chính xác.
Cho trước khóa K là một ma trận nhị phân kích thước m×n.
Cho trước ma trận trọng số W cùng kích thước m×n với khóa K và
thoả các tính chất sau:
Các giá trị V={1,2,...,2r-1} xuất hiện trong W ít nhất một lần cho mỗi
giá trị, trong đó r là số nguyên dương, thoả điều kiện 2 r ≤ m×n. Các
phần tử còn lại của W có thể nhận các giá trị tùy ý trong tập các số
nguyên dương U nào đó.
Như vậy, số bit tối đa có thể giấu vào một khối ảnh kích thước m×n là
r=log2(m×n) và thuật toán sẽ sửa tối đa là hai điểm ảnh trong mỗi khối.
3. Thuật toán DH1: giấu tin trong một khối ảnh đen trắng
Dưới đây mô tả thuật toán DH1 giấu dãy r bit thông tin vào một khối
ảnh đen trắng F, chỉ sửa tối đa 2 bit.
Trong thuật toán sử dụng các phép toán và toán tử đã định nghĩa trong
chương 1, cụ thể là:
⊕ - phép cộng loại trừ theo vị trí (XOR) trên hai ma trận cùng bậc,
⊗ - phép nhân theo vị trí trên hai ma trận cùng bậc,
Ngoài ra ta bổ sung các phép toán, toán tử và các ký hiệu sau đây.
- 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, …, p-1}
Trên Zp ta thực hiện các phép toán theo module p như sau:
∀ x,y ∈ Zp:
- Phép cộng : x+y (mod p) = (x + y) mod p,


Các thuật toán giấu tin trong ảnh đen trắng- 6 -

-------------------------------------------------------------------------------------------- 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.
- Ký hiệu ∅ biểu thị một tập rỗng.
- Nếu b là một bit nhận giá trị 0/1 thì ký hiệu ~b cho ra giá trị đảo của
b, cụ thể là ~0=1 và ~1=0.
- Trong các biểu thức logic, ∧ ký hiệu cho phép hội (AND), ∨ ký hiệu
cho phép tuyển (OR).

Algorithm DH1
Input
- Kích thước khối m,n
- Khối ảnh gốc B kích thước m× n
- Ma trận khóa nhị phân K kích thước m× n
- r: số lượng bít được giấu vào khối ảnh B, 2r-1≤ m×n.
- Ma trận trọng số W trong đó các giá trị trong tập V r = {1,2,…,2r-1}
xuất hiện ít nhất 1 lần.
- Số nhị phân d tạo bởi r bit thông tin d1d2…dr cần giấu.
Output
- Khối ảnh B đã chứa thông tin giấu biến đổi từ B.
Format
DH1(d,B,K,W,m,n,r)
Method
1. p:=2r;


Các thuật toán giấu tin trong ảnh đen trắng- 7 -

-------------------------------------------------------------------------------------------2. M:=B⊕K;
3. t:=SUM(M⊗W); // ta có t=SUM((B⊕K)⊗W)
4. if d =( t mod p) then return B endif;
// d = t (mod p): coi như đã giấu xong d vào B

5. // xét trường hợp d ≠ t (mod p):
for each i in Vr do
Si

:=

{(j,k)

|

((W[j,k]=i)∧(M[j,k]=0))∨((W[j,k]=p-

i)∧(M[j,k]=1))}
endfor;
6. e:=(d+(p-t)) mod p; // e ≠ 0
// e = d-t (mod p) là độ chênh lệch giữa d và t theo mod p
// Điều kiện e = 0 tương đương với điều kiện
// d = (t mod p) đã xét ở bước 4
7. if Se ≠ ∅ then
7.1. select (j,k) in Se
7.2. B[j,k]:=~B[j,k];
7.3. return B;
endif;
8. // xử lý trường hợp Se = ∅
u:= e;
9. while (Su = ∅) do
9.1. v:=p-u; // Su = ∅ ⇒ Sv ≠ ∅
9.2. u:=(u+e) mod p;
endwhile;



Các thuật toán giấu tin trong ảnh đen trắng- 8 -

-------------------------------------------------------------------------------------------// Su ≠ ∅ and Sv ≠ ∅
10. select (j,k) in Su;
11. B[j,k]:=~B[j,k];
12. select (j,k) in Sv;
13. B[j,k]:=~B[j,k];
14. return B;
endDH1.
Giải thích thuật toán DH1
Có thể coi khóa mật K như một mặt nạ, khi đó ma trận M = B⊕K sẽ là
ma trận nhị phân cho biết những phần tử tương ứng của các khối B và K có
khác nhau hay không, cụ thể là nếu M[j,k] = 1 thì B[j,k] ≠ K[j,k], ngược lại,
nếu M[j,k]=0 thì B[j,k]=K[j,k].
Biểu thức t:=SUM(M⊗W) = SUM((B⊕K)⊗W) tại bước 3 của thuật
toán cho ta t là tổng các trọng số tại các phần tử khác nhau giữa B và K.
Đặt p = 2r. Điều kiện d = t mod p tại bước 4 của thuật toán chính là
điều kiện giấu tin. Vì d là số nhị phân r bit nên d ∈ Zp = {0,1,…,2r-1}, mặt
khác, t mod p ∈ Zp. Nếu d = t mod p thì ta không làm gì và coi như dãy bit d
hay là số d đã được giấu vào khối B. Ngược lại, nếu d ≠ (t mod p) thuật toán
thực hiện từ bước 7 đến bước 13 với mục đích sửa khối ảnh B để đạt được
đẳng thức
d = (t mod 2r)
Đẳng thức trên được gọi là bất biến của thuật toán giấu tin DH1. Sau
này ta sẽ chứng minh rằng chỉ cần sửa tối đa 2 vị trí trong khối B để thu
được bất biến. Theo tính chất của số học modulo trên p = 2 r bất biến trên
tương đương với các điều kiện sau đây
d = t (mod p)



Các thuật toán giấu tin trong ảnh đen trắng- 9 -

-------------------------------------------------------------------------------------------d-t (mod p) = 0
(d+(p-t)) mod p = 0
Thủ tục sửa 2 vị trí trong khối B sẽ như sau:
Trước hết cần tính, theo bước 5 của thuật toán, với mỗi i ∈ {1,2,…,2r1} các tập Si như sau
Si:={(j,k) | ((W[j,k]=i)∧(M[j,k]=0)) ∨ ((W[j,k]=p-i)∧(M[j,k]=1))}
Như vậy, Si là tập các chỉ số (j,k), hay các vị trí , trong các khối thỏa
điều kiện sau:
(1) Tại vị trí đó, ma trận trọng số có giá trị i (W[j,k]=i) và các phần tử
tương ứng của khối B và khóa K là giống nhau (M[j,k]=0 tương đương với
điều kiện B[j,k]=K[j,k]) hoặc là
(2) Tại vị trí đó, ma trận trọng số có giá trị i (W[j,k]=p-i=2 r-i) và các
phần tử tương ứng của khối B và khóa K là khác nhau (M[j,k]=1 tương
đương với điều kiện B[j,k]≠K[j,k]).
Dựa trên điều kiện xác định các tập Si ta phát biểu và chứng minh bổ
đề sau.
Bổ đề 1 Nếu (j,k) ∈ Si thì khi đảo bit (j,k) trong khối B, tức là khi
thực hiện thao tác B[j,k]:=~B[j,k] đại lượng SUM((B⊕K)⊗W) sẽ tăng thêm
i đơn vị hoặc giảm đi p-i đơn vị ( p=2r).
Chứng minh
Đặt t = SUM((B⊕K)⊗W). Theo định nghĩa của tập Si ta xét hai
trường hợp.
Trường hợp 1: W[j,k]=i và M[j,k]=0.
Do M = B⊕K nên khi M[j,k]=0 thành phần M[j,k]×W[j,k]=0×i=0.
Mặt khác, từ M[j,k]=0 ta suy ra B[j,k]=K[j,k], do đó khi thay B[j,k] bằng


Các thuật toán giấu tin trong ảnh đen trắng- 10 -


-------------------------------------------------------------------------------------------~B[j,k] ta thu được B[j,k]≠K[j,k] hay M[j,k]=1. Từ đây suy ra
M[j,k]×W[j,k]=1×i=i. Điều này cho thấy t được tăng thêm i đơn vị.
Trường hợp 2: W[j,k]=p–i và M[j,k]=1.
Do M = B⊕K nên khi M[j,k]=1 thành phần M[j,k]×W[j,k]=1×(p–
i)=p–i. Mặt khác, từ M[j,k]=1 ta suy ra B[j,k]≠K[j,k], do đó khi thay B[j,k]
bằng ~B[j,k] ta thu được B[j,k]=K[j,k] hay M[j,k]=0. Từ đây suy ra
M[j,k]×W[j,k]=0×(p–i)=0. Điều này cho thấy t bị giảm đi p–i đơn vị □
Chú ý rằng trong số học modulo p thì t giảm p-i đơn vị tương đương
với p tăng thêm i (mod p) đơn vị, vì t-(p-i) (mod p) = t+(p-(p-i)) (mod p) =
t+i (mod p). Vậy ta có thể phát biểu mệnh đề tương đương với bổ đề 1 như
sau.
Nếu (j,k) ∈ Si thì khi đảo bit (j,k) trong khối B, tức là khi thực hiện
thao tác B[j,k]:=~B[j,k] đại lượng SUM((B⊕K)⊗W) sẽ tăng thêm i đơn vị
tính theo modulo p=2r.
Từ bổ đề trên ta suy ra nhận xét sau đây.
Nếu e = d-t (mod p) ≠ 0 và (j,k) ∈ Se thì khi đảo bit (j,k) trong khối B
ta sẽ thu được bất biến
d = (t mod 2r)
Thật vậy, ta có, theo bổ đề 1, sau khi đảo bit B[j,k] thì đại lượng
t = SUM((B⊕K)⊗W) sẽ được nhận giá trị mới như sau,
t+e (mod p) = t+(d-t) (mod p) = t+d-t (mod p) = d (mod p) = d.
Nhận xét trên giải thích cho bước 7 của thuật toán trong trường hợp e
≠ 0 và Se ≠ ∅.
Ta chứng minh tính đúng của thuật toán DH1 cho trường hợp độ lệch
e≠0 và Se là tập rỗng để giải thích cách làm trong các bước 8-14 của thuật
toán.


Các thuật toán giấu tin trong ảnh đen trắng- 11 -


-------------------------------------------------------------------------------------------Giả sử, trong tường hợp e = d-t ≠ 0 (mod p) và Se = ∅ ta tìm được các
tập Su và Sv thỏa các tính chất sau
(i) u = ke mod p, v = p-((k-1)e mod p), k > 1 và
(ii) Su ≠ ∅, Sv ≠ ∅.
Trước hết ta hãy chứng minh rằng khi thực hiện các bước 10-13 của
thuật toán ta sẽ đạt được bất biến
d = t mod p
Thật vậy, các bước 10-13 cần thực hiện là như sau:
10. select (j,k) in Su; // Chọn phần tử (j,k) trong Su
11. B[j,k]:=~B[j,k]; // đảo bit B[j,k]
12. select (j,k) in Sv; // Chọn phần tử (j,k) trong Sv
13. B[j,k]:=~B[j,k]; // đảo bit B[j,k]
Với u = ke (mod p), v = -(k-1)e (mod p) = -ke+e (mod p), e = d-t (mod
p).
Theo bổ đề 1 các bước 10-11 sẽ tăng t thêm u đơn vị và các bước 1113 tiếp tục tăng t thêm v đơn vị theo modulo p. Tổng hợp lại ta có, t+u+v
(mod p) = t+ke-ke+e (mod p) = t+e (mod p) = t+d-t (mod p) = d (mod p).
Để chứng minh sự tồn tại của các tập Su ≠ ∅ và Sv ≠ ∅ trong trường
hợp e = d-t ≠ 0 (mod p) và Se = ∅ ta cần các bổ đề sau đây.
Bổ đề 2 Với mọi e ∈ V = {1,2,…,p}, p = 2r ta có Se ∪ S~e ≠ ∅.
Chứng minh
Giả sử Se = ∅.
Theo định nghĩa của ma trận trọng số thì trong W có ít nhất một phần
tử W[j,k] = p-e. Ngoài ra, do S e = ∅ nên theo định nghĩa của tập S e, từ (j,k)
∉ Se ta suy ra M[j,k] = 1. Điều này chứng tỏ (j,k) ∈ Sp-e




Các thuật toán giấu tin trong ảnh đen trắng- 12 -


-------------------------------------------------------------------------------------------Bổ đề 3 Ta luôn có
S2r-1 ≠ ∅
Chứng minh
Khi e=2r-1 ta có ~e = 2r-e = 2r-2r-1 = 2r-1 = e. Theo bổ đề 2 ta suy ra
∅ ≠ Se ∪ S~e = Se ∪ Se = Se



Ta giả thiết r ≥ 2 và để ý rằng nếu p = 2r thì p là số chẵn và 2r-1 = p/2
cũng là một số chẵn.
Bổ đề 4 Với mọi giá trị e trong tập V = {1,2,…,p-1} luôn luôn tồn tại
số nguyên dương k để ke = p/2 (mod p).
Chứng minh
Nếu e là số lẻ, e = 2a+1, thì ta chọn k=p/2. Khi đó, ke = (2a+1)p/2 =
2a.(p/2) + p/2 = ap+p/2, do đó ke mod p = p/2.
Nếu e là số chẵn thì sau khi chia e liên tiếp cho 2 ta thu được e = 2 b.c,
trong đó b ≤ r-1 và c là một số lẻ, c = 2a+1. Ta chọn k=2(r-1)-b . Ta có k.2b =
2(r-1)-b+b = 2r-1 = p/2. Khi đó ke = k.2b.(2a+1) = (p/2)(2a+1) = (p/2).2a+p/2 =
a.p+p/2, do đó ke mod p = p/2 □
Bổ đề 3 cho ta Sp/2 ≠ ∅. Kết hợp bổ đề 3 và bổ đề 4 ta suy ra rằng với
mọi giá trị e trong tập V = {1,2,…,p-1} luôn luôn tồn tại số nguyên dương k
thỏa điều kiện Ske mod p ≠ ∅.
Bây giờ ta chứng minh sự tồn tại của các tập Su ≠ ∅ và Sv ≠ ∅ trong
trường hợp e = d-t ≠ 0 (mod p) và Se = ∅.
Bổ đề 5 Với e ∈ V = {1,2,…,2r-1} và Se=∅ luôn luôn tìm được số
nguyên dương k > 1 sao cho,
u = ke mod p, v = p-((k-1)e mod p)
Su ≠ ∅ và Sv ≠ ∅
Chứng minh



Các thuật toán giấu tin trong ảnh đen trắng- 13 -

-------------------------------------------------------------------------------------------Để ý rằng do e ∈ V nên e > 0. Theo bổ đề 3, ta có S p/2 ≠ ∅. Theo giả
thiết của bổ đề 5, Se = ∅ nên ta suy ra e ≠ p/2. Gọi k là giá trị nhỏ nhất thỏa
Ske mod p ≠ ∅. Theo bổ đề 5 thì k tồn tại. Theo giả thiết, vì e = 1.e mod p và S e
= ∅ nên k > 1, và do đó S (k-1)e mod p = ∅. Theo bổ đề 2 ta suy ra S p-((k-1)e mod p) ≠
∅. Đặt u = ke mod p, v = p-((k-1)e mod p) ta có Su ≠ ∅ và Sv ≠ ∅ □
Chứng minh bổ đề 5 cho ta phương thức xác định các tập S u và Sv như
sau. Ta lần lượt tính các giá trị 2e mod p, 3e mod p,... cho đến khi gặp giá
trị k đầu tiên thỏa Ske mod p ≠ ∅. Để ý rằng, theo bổ đề 2 thì khi Su = ∅ với u =
ie mod p thì Sv ≠ ∅ với v = p-u. Đoạn trình triển khai phương thức này là
như sau.
8. // xử lý trường hợp Se = ∅
u:= e;
9. while (Su = ∅) do
9.1. v:=p-u; // Su = ∅ ⇒ Sv ≠ ∅
9.2. u:=(u+e) mod p;
endwhile;
Để đánh giá độ phức tạp của thuật toán DH1 ta dựa trên số lượng các
thao tác cần thực hiện tại mỗi bước của thuật toán như sau.
Bước 1. Tính p:=2r cần 1 thao tác dịch r bit qua trái: O(1).
Bước 2. Tính M:=B⊕K cần m×n phép toán trên bit: O(mn).
Bước 3.Tính t:=SUM(M⊗W) cần m×n phép toán nhân và cộng các
số nguyên dương: O(mn).
Bước 4. O(1).
Bước 5. O(2r) = O(mn).
Bước 6. O(1)
Bước 7. O(1).



Các thuật toán giấu tin trong ảnh đen trắng- 14 -

-------------------------------------------------------------------------------------------Bước 8. O(1).
Bước 9. O(2r) = O(mn).
Bước10 - 14. O(1).
Tổng hợp các phần chứng minh trên ta thu được định lý sau đây.
Định lý Với các số tự nhiên m và n thỏa m ×n ≥ 4, thuật toán DH1
giấu được tối đa r = log2(mn) bit dữ liệu trong một khối ảnh đen trắng B
kích thước m×n trên cơ sở đổi màu tối đa 2 điểm ảnh trong B. Độ phức tạp
tính toán của thuật toán là O(mn) tức là tuyến tính theo chiều dài dữ liệu
vào.
4. Thuật toán IDH1: trích tin từ một khối ảnh đen trắng
Để trích tin từ khối ảnh đen trằng B đã được giấu dãy bit dữ liệu d =
d1d2…dr ta chỉ cần dựa vào bất biến
d = t mod 2r
với t = SUM((B⊕K)⊗W) mod 2r
Thuật toán IDH1 dưới đây cho biết thủ tục trích tin không cần sử dụng
ảnh gốc và có độ phức tạp tính toán là tuyến tính theo chiều dài dữ liệu vào,
cụ thể là O(mn).
Algorithm IDH1
Input
- Kích thước khối m,n
- Khối ảnh đích B kích thước m× n có chứa tin
- Ma trận khóa nhị phân K kích thước m× n
- r: số lượng bít đã giấu vào khối ảnh B, 2r-1≤ m×n.
- Ma trận trọng số W trong đó các giá trị trong tập V r = {1,2,…,2r-1}
xuất hiện ít nhất 1 lần.
Output



Các thuật toán giấu tin trong ảnh đen trắng- 15 -

-------------------------------------------------------------------------------------------- Số nhị phân d tạo bởi r bit thông tin (d1, d2, …,dr) cần giấu.
Format
IDH1(B,K,W,m,n,r)
Method
return SUM((B⊕K)⊗W) mod 2r ;
endIDH1.
5. Minh họa cho các thuật toán DH1 và IDH1
Dưới đây sẽ trình bày một thí dụ minh họa quy trình giấu và
trích đoạn dữ liệu 3 bit vào khối ảnh đen trắng B kích thước 3×3.
Giả sử khoá mật K, ma trận trọng số W có kích cỡ là 3×3 và khối ảnh nhị
phân B 3×3 được cho như dưới đây. Chọn r = 3, ta có 2r = 8 < m×n = 9.
Sau khi thực hiện toán tử M:=B⊕K ta thu được ma trận M như dưới đây.

B

1

1

0

1

0

1


0

1

1

1

0

0

0

1
1 K0
M

0
1

1

1

0

1


1

0

0

1

1 W

1

3

3

5

2

4

1

7

6

Kế tiếp, thực hiện toán tử R:=M⊗W ta thu được ma trận R như dưới
đây.

1

0

3

0

2

0

1

0 6
R

Ta tính được t = SUM(R) = 1+0+3+0+2+0+1+0+6 = 13.


Các thuật toán giấu tin trong ảnh đen trắng- 16 -

-------------------------------------------------------------------------------------------Ta có t mod 8 = 13 mod 8 = 5.
Nếu đoạn dữ liệu cần giấu trong khối B là d = 101 2 = 5 thì B được bảo
toàn và coi như đã giấu xong.
Để tiếp tục ta cần tính các tập S i, i = 1,2,…,7. ta sử dụng bảng sau đây
để ghi nhận các phần tử của các tập S i, i = 1,2,…,7. Nếu phần tử nằm trên
giao của dòng j và cột k mà bằng i, tứcc là S[j,k] = i thì ta có (j,k) ∈ Si.
Bảng S sẽ như sau.
S


1

2

3

1

7

3

5

2

5

6

4

3

7

7

2


Theo bảng trên ta có
S1 = ∅
S2 = {(3,3)}
S3 = {(1,2)}
S4 = {(2,3)}
S5 = {(1,3),(2,1)}
S6 = {(2,2)}
S7 = {(1,1),(3,1),(3,2)}
Ta lần lượt cho d các giá trị từ 0 đến 7 để khảo sát các tình huống
khác nhau của thuật toán.
1) d = (0,0,0) = 0. Ta có độ lệch e = d-t (mod 8) = 0+(8-5) (mod 8) =
3. Ta chọn phần tử (1,2) trong S3 và đảo bit B[1,2] để tăng t thêm 3 đơn vị và
thu được bất biến
d = (t+3) mod 8 = (5+3) mod 8 = 0


Các thuật toán giấu tin trong ảnh đen trắng- 17 -

-------------------------------------------------------------------------------------------Ma trận B sau khi giấu đoạn tin d sẽ như sau.
1

0

0

1

0


0

1

1

0

Khi trích tin, dựa theo bất biến ta thu được
d = SUM((B⊕K)⊗W) = 16 mod 8 = 0 = (0,0,0)
2) d = (0,0,1) = 1. Ta có độ lệch e = d-t (mod 8) = 1+(8-5) (mod 8) =
4. Ta chọn phần tử (2,3) trong S4 và đảo bit B[2,3] để tăng t thêm 4 đơn vị và
thu được bất biến
d = (t+4) mod 8 = (5+4) mod 8 = 1
Ma trận B sau khi giấu đoạn tin d sẽ như sau.
1

1

0

1

0

1

1

1


0

Khi trích tin, dựa theo bất biến ta thu được
d = SUM((B⊕K)⊗W) = 17 mod 8 = 1 = (0,0,1)
3) d = (0,1,0) = 2. Ta có độ lệch e = d-t (mod 8) = 2+(8-5) (mod 8) =
5. Ta chọn phần tử (1,3) trong S5 và đảo bit B[1,3] để tăng t thêm 5 đơn vị và
thu được bất biến
d = (t+5) mod 8 = (5+5) mod 8 = 2
Ma trận B sau khi giấu đoạn tin d sẽ như sau.
1

1

1

1

0

0

1

1

0


Các thuật toán giấu tin trong ảnh đen trắng- 18 -


-------------------------------------------------------------------------------------------Khi trích tin, dựa theo bất biến ta thu được
d = SUM((B⊕K)⊗W) = 10 mod 8 = 2 = (0,1,0)
4) d = (0,1,1) = 3. Ta có độ lệch e = d-t (mod 8) = 3+(8-5) (mod 8) =
6. Ta chọn phần tử (2,2) trong S6 và đảo bit B[2,2] để tăng t thêm 6 đơn vị và
thu được bất biến
d = (t+4) mod 8 = (5+6) mod 8 = 3
Ma trận B sau khi giấu đoạn tin d sẽ như sau.
1

1

0

1

1

0

1

1

0

Khi trích tin, dựa theo bất biến ta thu được
d = SUM((B⊕K)⊗W) = 11 mod 8 = 3 = (0,1,1)
5) d = (1,0,0) = 4. Ta có độ lệch e = d-t (mod 8) = 4+(8-5) (mod 8) =
7. Ta chọn phần tử (1,1) trong S7 và đảo bit B[1,1] để tăng t thêm 7 đơn vị và

thu được bất biến
d = (t+7) mod 8 = (5+7) mod 8 = 4
Ma trận B sau khi giấu đoạn tin d sẽ như sau.
0

1

0

1

0

0

1

1

0

Khi trích tin, dựa theo bất biến ta thu được
d = SUM((B⊕K)⊗W) = 12 mod 8 = 4 = (1,0,0)
6) d = (1,0,1) = 5 = t mod 8 = 5. Như trên đã phân tích, không phải
sửa B.


Các thuật toán giấu tin trong ảnh đen trắng- 19 -

-------------------------------------------------------------------------------------------Khi trích tin, dựa theo bất biến ta thu được

d = SUM((B⊕K)⊗W) = 13 mod 8 = 5 = (1,0,1)
7) d = (1,1,0) = 6. Ta có độ lệch e = d-t (mod 8) = 6+(8-5) (mod 8) =
1. Vì S1 = ∅ nên ta chọn các phần tử (3,3) ∈ S2 và (1,1) ∈ S7 để tăng t thêm
2 và 7 đơn vị và thu được bất biến
d = (t+2+7) mod 8 = (5+9) mod 8 = 6
Ma trận B sẽ bị sửa hai bit và sau khi giấu đoạn tin d sẽ như sau.
0

1

0

1

0

0

1

1

1

Khi trích tin, dựa theo bất biến ta thu được
d = SUM((B⊕K)⊗W) = 6 mod 8 = 6 = (1,1,0)
8) d = (1,1,1) = 7. Ta có độ lệch e = d-t (mod 8) = 7+(8-5) (mod 8) =
2. Ta chọn phần tử (3,3) ∈ S2 để tăng t thêm 2 đơn vị và thu được bất biến
d = (t+2) mod 8 = (5+2) mod 8 = 7
Ma trận B sau khi giấu đoạn tin d sẽ như sau.

1

1

0

1

0

0

1

1

1

Khi trích tin, dựa theo bất biến ta thu được
d = SUM((B⊕K)⊗W) = 7 mod 8 = 7 = (1,1,1)
Thuật toán DH: giấu tin trong ảnh đen trắng
Để giấu dãy dữ liệu D trong ảnh đen trắng F, ta chia ảnh gốc F thành
các khối ảnh B kích thước m×n, với mỗi khối B ta giấu r bít dữ liệu d = (d 1,


Các thuật toán giấu tin trong ảnh đen trắng- 20 -

-------------------------------------------------------------------------------------------d2, ...,dr) trích từ dãy dữ liệu D theo thuật toán DH1. Sau khi giấu r bit dữ
liệu vào khối B của ảnh gốc F, khối ảnh B sẽ được thay đổi tối đa 2 bit (2
điểm ảnh) và thoả bất biến:

SUM((B ⊕ K) ⊗ W) mod 2r = d
Để giấu dãy dữ liệu D trong toàn ảnh F ta thực hiện thuật toán DH dưới
đây:
Algorithm DH
Input
- Ảnh đen trắng F
- Kích thước khối m,n
- Ma trận khóa nhị phân K kích thước m× n
- r : Số lượng bít được giấu vào mỗi khối ảnh B của F, 2r ≤ m×n.
- Ma trận trọng số W trong đó các giá trị 1,2,…,2 r-1 xuất hiện ít nhất
1 lần.
- Dãy bit D cần giấu.
Output
- Ảnh F chứa thông tin giấu.
Format DH(D,F,K,W,m,n,r)
Method
while (còn bit chưa xử lý trong D) and
(còn khối chưa xử lý trong F) do
get next r bit in D and form an integer d;
get next block B in F;
DH1(d,B,K,W,m,n,r);
endwhile;


Các thuật toán giấu tin trong ảnh đen trắng- 21 -

-------------------------------------------------------------------------------------------return F;
endDH.
Do độ phức tạp của thuật toán DH1 giấu một đoạn dữ liệu d gồm r bit
trong một khối ảnh B trích từ ảnh nguồn F là O(mn) nên độ phức tạp của

thuật toán DH giấu dãy dữ liệu D trong toàn ảnh gốc sẽ là O(kmn), trong đó
k là số khối của F. Như vậy độ phức tạp của thuật toán DH sẽ là O(||F||),
trong đó ||F|| là kích thước, tức là số pixel của ảnh nguồn. Vậy độ phức tạp
của thuật toán DH phụ thuộc tuyến tính theo diện tích ảnh nguồn.
Thuật toán IDH: trích tin giấu từ ảnh đen trắng
Để thu lại được tin đã giấu trong bức ảnh đen trắng F ta lần lượt đọc
từng khối ảnh B từ F và gọi thuật toán IDH1 để lấy lại đoạn tin d bao gồm r
bit đã giấu trong B. Đoạn tin này được ghép với nhau để tạo ra dãy dữ liệu
D. Bất biến trong trường hợp này cũng là
SUM((B ⊕ K) ⊗ W) mod 2r = d
Algorithm IDH
Input
- Ảnh đen trắng F có chứa tin giấu
- Kích thước khối m,n
- Ma trận khóa nhị phân K kích thước m× n
- r : Số lượng bít được giấu vào mỗi khối ảnh B của F, 2r ≤ m×n.
- Ma trận trọng số W trong đó các giá trị 1,2,…,2 r-1 xuất hiện ít nhất
1 lần.
Output
- Dãy bit dữ liệu D đã giấu trong F.
Format IDH(F,K,W,m,n,r)
Method


Các thuật toán giấu tin trong ảnh đen trắng- 22 -

-------------------------------------------------------------------------------------------D:=null;
while (còn khối chưa xử lý trong F) do
get next block B in F;
add IDH1(B,K,W,m,n,r) to D;

endwhile;
return D;
endIDH.
Dễ thấy độ phức tạp của thuật toán IDH phụ thuộc tuyến tính theo diện
tích ảnh nguồn.
6. Độ an toàn thông tin giấu theo thuật toán DH
Trước hết, ta giả sử rằng đối phương biết được thuật toán giấu dữ liệu
trong ảnh như đã trình bày, ảnh gốc F, giá trị r và bậc khối m×n. Cũng như
vậy, đối phương chiếm được một bản sao ảnh kết quả F’ có chứa dữ liệu.
Bây giờ đối phương bắt đầu cuộc tấn công để tìm ra dữ liệu đã giấu trong
ảnh. Ta đánh giá độ phức tạp của thủ tục dò tìm này. Muốn tìm được các bít
dữ liệu giấu trong ảnh, đối phương phải biết được ma trận khoá K và ma trận
trọng số W.
Khoá mật K là một ma trận nhị phân bậc m×n nên có 2mn khả năng điền
trị.
Ma trận trọng số mật W cũng có nhiều cách xây dựng, do điều kiện
2r-1 ≤ mn nên trước tiên ta có thể chọn 2r - 1 vị trí bất kì của ma trận W và
gán các giá trị của tập V = {1, 2, ..., 2r - 1} cho các vị trí đó. Với mn - (2r - 1)
vị trí còn lại của ma trận W ta có thể chọn cho mỗi vị trí bất kì một giá trị
tùy ý trong tập gồm k số tự nhiên nào đó. Vậy số khả năng tạo nên ma trận
W sẽ là:

(

)

2 −
1
(2
Cmn

2r −
1 ! k mn −
r

r

)


1


Các thuật toán giấu tin trong ảnh đen trắng- 23 -

-------------------------------------------------------------------------------------------Như vậy muốn tìm được dữ liệu giấu trong ảnh thì số trường hợp đối
phương phải kiểm tra là:

(

)

2 −
1
2 mn C mn
2r −
1 ! k mn −(2
r

r



1

)

Từ các phân tích trên ta có thể khẳng định với n, m đủ lớn thì việc này
rất khó có thể thực hiện được. Để minh hoạ cho điều này, ta xét trường hợp
m=n=4, r=4, k = 15 thì đối phương phải tiến hành số phép thử là:
216 * C1615 * 15!*15 = 313.841.848.320.000

Hoặc với m = 10, n = 10, r = 4, k = 15 thì số trường hợp cần phải
kiểm tra là:
15
2100 * C100
*15!*1585

Tóm lại, việc giải mã thông tin càng khó khăn khi bậc khối m×n đủ
lớn; khoá mật K, ma trận trọng số mật W được cất giữ an toàn.


Các thuật toán giấu tin trong ảnh đen trắng- 24 -

--------------------------------------------------------------------------------------------

PHẦN II
MỘT SỐ KHÁI NIỆM CƠ BẢN VỀ
GIẢI THUẬT DI TRUYỀN
Giải thuật di truyền là một thuật toán tìm kiếm mô phỏng cơ chế của
chọn lọc tự nhiên và di truyền tự nhiên được phát triển bởi John Holland, các
đồng nghiệp và các sinh viên của ông tại trường Đại học của Michigan, Hoa

Kỳ. Giải thuật di truyền chính thức được công bố trong một cuốn sách tên là
Adaption in Natural and Artificial Systems của John Holland, xuất bản năm
1975.
Giải thuật di truyền thường được sử dụng chủ yếu trong các bài toán
tối ưu hoá, chúng ta sẽ tìm hiểu về GAs qua việc giải bài toán tối ưu hoá.
Trong chương này, ta tìm hiểu về giải thuật di truyền bắt đầu bằng việc miêu
tả về nó, sau đó tìm hiểu những tính chất và nguyên lý hoạt động của nó.
1. Miêu tả về GA và những khái niệm cơ bản.

Một bài toán tối ưu hoá có thể được phát biểu dưới dạng một bài toán
tìm điểm cực trị (điểm tối ưu) trong một không gian tìm kiếm. ở đó điểm cực
trị là điểm làm cho hàm mục tiêu đạt giá trị max (min). Để dễ hình dung các
khái niệm cơ bản trong giải thuật di truyền chúng ta sẽ giải thích những khái
niệm đó thông qua việc khảo sát bài toán đơn giản sau đây trong Ví dụ A:
Ví dụ A. Giả sử có bài toán tìm x để hàm f(x)=x2 đ ạt max, v ới x
({0,…, 31} ( Z. Hàm mục tiêu của bài toán này là f(x)=x2 , không gian tìm
kiếm là tập các số nguyên {0,…, 31}, và nhiệm vụ là phải tìm điểm x*
sao cho f(x*) đạt giá trị cực đại, khi đó x* chính là điểm tối ưu.
Trong nhiều bài toán thực tế không yêu cầu phải tìm chính xác điểm
tối ưu mà chỉ cần tìm những điểm tối ưu theo nghĩa có thể chấp nhận được,
gần với điểm tối ưu thực sự. GAs là một kỹ thuật tìm kiếm điểm tối ưu có
thể chấp nhận được.


Các thuật toán giấu tin trong ảnh đen trắng- 25 -

-------------------------------------------------------------------------------------------1.1 Mã hoá không gian tìm kiếm.

Để áp dụng giải thuật di truyền đối với một bài toán tìm kiếm đã cho
ta cần mã hoá không gian tìm kiếm của bài toán đó. Mã hoá không gian tìm

kiếm bằng cách xây dựng một đơn ánh X(Y, trong đó X là không gian tìm
kiếm, Y là tập các chuỗi ký tự có một độ dài cố định cho trước được tạo bởi
từ các ký tự thuộc một bộ ký tự . Qua đơn ánh X(Y, mỗi phần tử của X được
mã hoá thành một chuỗi riêng biệt.
Chúng ta thử mã hoá không gian tìm kiếm của bài toán trong Ví
dụ A. Mỗi số nguyên x của không gian tìm kiếm có thể đ ược bi ểu
diễn duy nhất dưới dạng chuỗi nhị phân a0a1…an độ dài n, ở đó x= an12n-1 + … + a121 + a020 (ai ( {0, 1}, i=0…n-1). Không gian tìm
kiếm có 32 số nguyên, chọn n=5 thì có 25=32 chuỗi mã hoá cho 32 s ố
nguyên của không gian tìm kiếm.
Ví dụ, chuỗi 01001 biểu diễn cho số nguyên x=13 vì ta

0*24+1*23+1*22+0*21+1*20 = 13
Trong giải thuật di truyền một tập hợp có thể được gọi là một quần
thể. Thông thường khi không nói rõ tập hợp các phần tử gì, ta nói một quần
thể được hiểu là một tập các chuỗi, khi cần phân biệt sẽ nói rõ.
Quá trình tìm kiếm bắt đầu từ một quần thể (các chuỗi) ban đầu. Quần
thể ban đầu được chọn một cách ngẫu nhiên.
Với bài toán trong Ví dụ A, ta chọn ngẫu nhiên quần th ể ban
đầu gồm 4 chuỗi như sau:
No
Chuỗi
1

01101


×