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.
Trang 1PHẦ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
Trang 21 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
Bảng 1 Cấu trúc ảnh Bitmap
Trang 3Cấu trúc cụ thể của ảnh BMP như sau:
liệu
Offset của byte bắt đầu vùng dữ liệu
1: Nén runlength 8bits/pixel 2: Nén runlength 4bits/pixel
ảnh
khi hiện ảnh
Bảng 2.3: Cấu trúc header của file ảnh Bitmap
bit màu mới có Palette màu
Trang 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 (224 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
Trang 5cá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 2r ≤ 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
Trang 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
- 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, 2 r -1≤ m×n
- Ma trận trọng số W trong đó các giá trị trong tập V r = {1,2,…,2 r -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 d 1 d 2 …d r cần giấu.
Trang 72 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 V r do
S i := {(j,k) | 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
Trang 8Giả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 = 2r bất biến trên tương đương với các điều kiện sau đây
d = t (mod p)
Trang 9d-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=2r-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ổ
Trang 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) ∈ S i 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=2 r
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
Trang 11Giả 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 pThật vậy, các bước 10-13 cần thực hiện là như sau:
Theo bổ đề 1 các bước 10-11 sẽ tăng t thêm u đơn vị và các bước
11-13 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ó S e ∪ 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 Se = ∅ nên theo định nghĩa của tập Se, từ (j,k)
∉ Se ta suy ra M[j,k] = 1 Điều này chứng tỏ (j,k) ∈ Sp-e □
Trang 12Bổ đề 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).
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 S ke 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 = ∅
nguyên dương k > 1 sao cho,
u = ke mod p, v = p-((k-1)e mod p)
S u≠∅ và S v ≠∅
Chứng minh
Trang 13Để ý rằng do e ∈ V nên e > 0 Theo bổ đề 3, ta có Sp/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à Se
= ∅ nên k > 1, và do đó S(k-1)e mod p = ∅ Theo bổ đề 2 ta suy ra Sp-((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 Su 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
Bước 1 Tính p:=2 r 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(2 r ) = O(mn)
Bước 6 O(1)
Bước 7 O(1).
Trang 14Bước 8 O(1).
Bước 9 O(2 r ) = 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
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 2rvới t = SUM((B⊕K)⊗W) mod 2rThuậ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, 2 r -1≤ m×n
- Ma trận trọng số W trong đó các giá trị trong tập V r = {1,2,…,2 r -1} xuất hiện ít nhất 1 lần.
Output
Trang 15- Số nhị phân d tạo bởi r bit thông tin (d 1 , d 2 , …,d r ) cần giấu.
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
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
Trang 16Ta 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 = 1012 = 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 Si, 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 Si, 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
Trang 17Ma trận B sau khi giấu đoạn tin d sẽ như sau
Trang 18Khi trích tin, dựa theo bất biến ta thu được
Trang 19Khi 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
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 = (d1,
Trang 20d2, ,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:
- 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, 2 r ≤ 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
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;
Trang 21return 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à
- 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, 2 r ≤ 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
Trang 22D:=null;
while (còn khối chưa xử lý trong F) do
get next block B in F;
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