Thuật toán nhúng thủy vân trên ảnh tĩnh

Một phần của tài liệu Một số kĩ thuật giấu dữ liệu trong ảnh tĩnh (Trang 37 - 59)

3.2.1 Đặc điểm và tính chất của thuật toán

Thủy ấn hay nhúng thuỷ vân trong một phương tiện là một công nghệ mới được đánh giá mang lại nhiều hứa hẹn trong ứng dụng bảo vệ bản quyền, phát hiện xuyên tạc, điều khiển truy cập đối với các dữ liệu đa phương tiện. Không giống như các hệ mật được sử dụng cho truyền thông và không ngăn cấm được người dùng sử dụng trái phép những dữ liệu đó. Các phương pháp

thuỷ vân hứa hẹn một giải pháp cho vấn đề bảo vệ bản quyền đối với sản phẩm số khi mà sản phẩm đó được sử dụng trong môi trường mở mà không cần đến việc mã hóa. Tạo thủy vân là một phương pháp nhúng một lượng thông tin nào đó vào trong dữ liệu đa phương tiện cần được bảo vệ sở hữu mà không để lại ảnh hưởng nào đến chất lượng của sản phẩm. Thuỷ vân phải tồn tại bền vững với sản phẩm số và không thể loại bỏ bằng tấn công có chủ đích hay không chủ đích nào trừ khi phá huỷ sản phẩm.

Thuỷ vân phải mang thông tin có ý nghĩa xác định duy nhất người được sở hữu ảnh đó. Người ta tập trung vào việc làm sao cho thủy vân đó thoả 2 tính chất quan trọng sau:

+ Ẩn (hidden): Không hiển thị trên nền ảnh, không làm ảnh hưởng nhiều đến chất lượng tri giác của ảnh.

+ Bền vững (robust): Thủy vân phải tồn tại bền vững cùng sản phẩm, không bị xoá bởi các tấn công có chủ đích hay không có chủ đích. Một cách lý tưởng là để loại bỏ thuỷ vân chỉ còn cách là phá huỷ ảnh đó.

Tính phức tạp của kỹ thuật thủy vân thể hiện ở 2 tính chất mâu thuẫn lẫn nhau này. Nếu như để đảm bảo tính ẩn thì thủy vân phải được giấu trong những vị trí có ý nghĩa tri giác nhất, ít bị chú ý nhất, nhưng để đảm bảo tính bền vững thì thủy vân phải chịu được những phép xử lý ảnh phổ biến như dịch chuyển ảnh, co giãn ảnh, quay ảnh hoặc nén ảnh. Đơn cử như phép nén JPEG lại loại bỏ ở ảnh những thông tin ít có tính tri giác nhất để làm giảm kích thước của ảnh mà vẫn đảm bảo được chất lượng ảnh. Căn cứ trên các giải pháp đã công bố, ta có thể phân loại các kĩ thuật hiện nay thành 2 nhóm chính:

+ Nhóm các kĩ thuật biến đổi miền không gian ảnh (spatial image transfroms): Nhóm kĩ thuật này tập trung vào việc thay đổi trực tiếp lên

không gian các điểm ảnh và sử dụng các mô hình tri giác và phương pháp hình học. Tuy nhiên, các kĩ thuật này chỉ đảm bảo được thuộc tính ẩn mà không có tính bền vững. Kĩ thuật này thường được sử dụng trong các ứng dụng nhận thực thông tin, phát hiện xuyên tạc.

+ Nhóm các kĩ thuật biến đổi miền tần số ảnh (frequency image transforms): Nhóm kĩ thuật này sử dụng một phương pháp biến đổi trực giao nào đó, chẳng hạn như Cosine rời rạc, hay Fourier...để chuyển miền không gian ảnh sang miền số. Thủy vân sẽ được nhúng trong miền không gian tần số của ảnh theo kĩ thuật trải phổ trong truyền thông. Đây là kĩ thuật phổ biến nhất với nhiều thuật toán và được hứa hẹn là một phương pháp tốt giải quyết vấn đề đảm bảo hai thuộc tính quan trọng của thủy vân sau khi giấu.

Ngoài 2 nhóm trên, gần đây đã xuất hiện những kỹ thuật dựa trên đặc thù của ảnh.

3.2.2 Thuật toán nhúng thủy vân

Thuật toỏn dưới đây sử dụng phương pháp trải phổ trong truyền thông để nhúng thuỷ vân. Giải tần được sử dụng để chứa tớn hiệu thuỷ võn là miền tần số giữa của một khối biến đổi cụsin rời rạc DCT (discret cosne tranfomation 8ì8. Trong đó, các khối DCT 8×8 là những khối ảnh cùng kích thước đó được chọn ra ngẫu nhiên từ ảnh ban đầu và được áp phép biến đổi cosin rời rạc DCT để chuyển sang miền tần số. Mỗi tín hiệu thuỷ vân sẽ được chứa trong một khối.

3.2.2.1 Mô tả thuật toán

- Input: Một chuỗi cỏc bớt thể hiện bản quyền. Một ảnh. - Output: Một ảnh sau khi thuỷ vân. Khoá để giải mó.

- Chia ảnh có kích thước m × n thành (m×n)/64 khối 8×8, mỗi bít sẽ được giấu trong một khối.

- Chọn một khối bất kỡ B và biến đổi DCT khối đó thu được B’

- Chọn hai hệ số ở vị trớ bất kỡ trong miền tần số ở giữa của khối DCT, giả sử đó là b’(i,j) b’(p,q).

Ta tớnh: d = || b’(i,j)|- |b’(p,q)|| mod a

Trong đó a là một tham số thoả món điều kiện: a=2(2t+1), t là một số nguyên dương.

Bớt si sẽ được nhúng sao cho thoả món điều kiện sau:

d >= 2t+1 nếu si = 1

d < 2t+1 nếu si = 0

- Nếu d<2t+1 si = 1 thỡ một trong hai hệ số DCT b’(i,j) hoặc b’(p,q)

có trị tuyệt đối lớn hơn sẽ bị thay đổi để d>=2t +1 theo cụng thức sau:

max(|b’(i,j)|, |b’(p,q)|) + (INT(0,75 *a) - d)

Với hàm max(|b’(i,j)|, |b’(p,q)|) là hàm chọn ra hệ số có trị tuyệt đối lớn hơn, hệ số được chọn sẽ được cộng thêm một lượng là (INT(0,75 *a) - d).

Hoặc cũng có thể biến đổi một trong hai hệ số theo cụng thức:

min(|b’(i,j)|, |b’(p,q)|) - (INT(0,25 *a) + d)

Với hàm min(|b’(i,j)|, |b’(p,q)|) là hàm chọn ra hệ số có trị tuyệt đối nhỏ hơn, hệ số được chọn sẽ bị trừ đi một lượng là (INT(0,25 *a) + d)

- Tương tự, nếu d >= 2t+1 si= 0 thỡ một trong hai hệ số DCT b’(i,j)

hoặc b’(p,q) có trị tuyệt đối lớn hơn sẽ được thay đổi để thoả món d<2t +1

như sau:

max(|b’(i,j)|,|b’(p,q)|) - (d - INT(0,25*a))

Hàm max(|b’(i,j)|, |b’(p,q)|) là hàm chọn ra hệ số có trị tuyệt đối lớn hơn, hệ số được chọn sẽ bị trừ đi một lượng là (d - INT(0,25 *a))

Hoặc min(|b’(i,j))|,|b’(p,q)|) + INT(1,25*a) - d

Quỏ trỡnh nhỳng thuỷ võn được mô tả trong hỡnh 3.1

3.2.2.3 Quá trình nhúng thủy vân để lấy lại thông tin

Đọc khối DCT từ ảnh chứa thuỷ võn và vị trí hai hệ số đó biến đổi, sau đó tính: d = ||b’(i,j)|-|b’(p,q)|| mod a với (a =2(2t+1))

Nếu d >= 2t+1 thỡ gỏn si =1 Nếu d<2t +1 thỡ gỏn si = 0

Quỏ trỡnh giải mó được mô tả trong hỡnh 3.2 Hỡnh 3.1 Quỏ trỡnh nhỳng thủy võn Ảnh gốc tỏch khối Cỏc khối ảnh biến đổi DCT Watermark Cỏc khối DCT nhỳng thuỷ võn Các khối đó nhỳng thuỷ võn

biến đổi IDCT

Ảnh đó nhỳng thuỷ võn Hỡnh 3.2 Quỏ trỡnh giải mó Ảnh đó nhỳng thuỷ võn tỏch khối Lấy ra các khối đó chọn biến đổi DCT

Khối đó biến đổi DCT

giải mó

Watermarks

3.2.2.4 Chứng minh tính đúng đắn của thuật toán Xét các trường hợp sau đây:

- Nếu d < 2t +1 với si = 0 và d >= 2t+1 với si =1 thỡ sẽ khụng thay đổi gỡ hệ số của khối DCT, và vỡ DCT là phộp biến đổi thuận nghịch nên khi giải mó thỡ ta cũng thu được kết quả chính xác.

- Trường hợp d <2t+1 và si = 1.

Ta biến đổi một trong hai hệ số b’(i,j) b’(p,q) như sau:

max(|b’(i,j)|,|b’(p,q)|) + (INT(0,75*a) -d)

Khi đó giá trị d mới là:

d = (| | b(i,j) | - | b(p,q)| | + (INT(0.75 * a) – d )) mod a

d’ = (||b’(i,j)|- |b’(p,q)|| mod a)+ (INT(0,75*a) mod a) - (d mod a) d’ = d + INT(0,75*a) - d = INT(0,75 *a) > 0,5 *a = 2t +1 (dpcm)

Hoặc ta sử dụng cách biến đổi hai hệ số theo kiểu khác:

min(|b’(i,j)| - |b’(p,q)|) - (INT(0,25 *a) +d))

d’ = (||b’(i,j)|-|b’(p,q)|| - (INT(0,25*a) +d)) mod a

d’ = (||b’(i,j)|- |b’(p,q)|| mod a) - (INT(0,25*a) mod a) - (d mod a)

d’= d-(INT(0,25*a) mod a) - d = - INT(0,25*a) mod a = INT(0,75*a)>2t +1

- Trường hợp d>=2t +1 và si = 0

Ta sẽ biến đổi một trong hai hệ số DCT b’(i,j) hoặc b’(p,q) như sau:

max(||b’(i,j)|,|b’(p,q)||) - (d- INT(0,25*a))

Giỏ trị mới của d sẽ là:

d’ = (||b’(i,j)|-|b’(p,q)|| - (d-(INT(0,25*a)) mod a

d’= ((||b’(i,j)|-|b’(p,q)||) mod a) - (d mod a) + (INT(0,25*a) mod a) d’= d-d + 0,25*a = 0,25*a < 0,5*a = 2t +1 (dpcm)

Hoặc ta sử dụng cách biến đổi khác đối với hai hệ số DCT:

min(||b’(i,j)|- |b’(p,q)||) + INT(1,25*a) - d

Khi đó tính lại d ta được:

d’ = (||b’(i,j)|-|b’(p,q)|| + INT(1,25*a) -d) mod a

d’= (||b’(i,j))|-|b’(p,q)|| mod a) + (INT(1,25*a) mod a) - (d mod a) d’ = d +INT(0,25*a) -d = INT(0,25*a) < 0,5*a = 2t+1

Vậy với các phép biến đổi trên, ta luôn thoả món được điều kiện giấu tin.

3.2.2.5 Nhận xét

Trờn đõy là một thuật toỏn nhỳng thuỷ võn vào ảnh tĩnh sử dụng kỹ thuật giấu tin trên miền biến đổi cosin rời rạc. Ảnh được chia thành các khối 8×8, các khối này được chọn một cách ngẫu nhiên để nhúng thuỷ võn. Mỗi khối sẽ được áp dụng phép biến đổi cosin rời rạc để chuyển dữ liệu về tần số của khối

thấy của ảnh, các thay đổi dữ liệu trên miền này sẽ dẫn đến thay đổi đáng kể ảnh hiển thị. Ngược lại, miền tần số cao chứa dữ liệu ảnh khụng ảnh hưởng đáng kể đến tri giác ảnh. Đây là miền tần số cho phép thay đổi mà không gây nhiễu nhiều đến ảnh. Tuy nhiờn, thuỷ võn trong miền này lại không bền vững với các phép biến đổi ảnh thông thường. Với thuật toán này, miền được chọn để giấu tin là miền có tần số ở giữa tần số cao và tần số thấp, kết quả thực nghiệm của thuật toỏn cũng cho thấy thuỷ vân đảm bảo được tính chất ẩn trên ảnh và bền vững trên một số phép biến đổi ảnh thông thường.

Chương 4

CẢI TIẾN THUẬT TOÁN GIẤU DỮ LIỆU DẠNG VĂN BẢN TRONG ẢNH TĨNH

4.1 Cải tiến

4.1.1 Một số ý tưởng

- Mã hoá dữ liệu dạng văn bản bằng một thuật toán mã hóa (DES, RSA, NAPSACK…) và văn bản đem giấu trong ảnh là văn bản kết quả của quá trình mã hoá. Sau khi thực hiện lấy tin từ ảnh ra văn bản thu được phải qua bước giải mã tương ứng với phép toán mã hóa trước đó để thu được dạng dữ liệu ban đầu.

- Nén dữ liệu cần giấu để tăng dung lượng giấu (với JPG, JPEG...).

- Trích các LSB từ ảnh gốc một cách ngẫu nhiên bằng một hàm băm để tạo thành ma trận F và chia thành các khối Fi.

- Sinh ngẫu nhiên ma trận W và K.

- Để tăng dung lượng tin giấu, thay vì việc sử dụng thuật toán là giấu tin trong khối bit, ta có thể thay đổi trực tiếp giá trị các bit của ma trận F để giấu thông tin. Nhược điểm của giải pháp này là tính bảo mật của thuật toán chỉ còn phụ thuộc vào chiến lược trích các bit LSB. Tuy nhiên, có thể khắc phục nhược điểm này bằng cách mã hoá thông tin cần giấu bằng một hệ mật mã nào đó trước khi giấu.

4.1.2 Hướng cải tiến

4.1.2.1 Nội dung cải tiến

- Giấu tin: Với văn bản cần giấu là R ta mã hóa R bằng hệ mật RSA được văn bản mã hóa R’. Có ảnh gốc A định dạng .BMP 24 Bit, sau khi đọc dữ liệu từ A, lấy ra các bit LSB được ma trận F. Văn bản R’ sẽ được giấu vào F thu

chính là ảnh đã giấu thông tin. ảnh A’ nhìn bằng mắt thường khó phát hiện ra sự khác biệt với ảnh gốc A.

- Lấy lại văn bản ban đầu: Từ ảnh A’ với khoá là ma trận W, K, kích thước khối bít đã dùng để giấu tin ta lấy ra ma trận F’. Từ F’ lấy lại ma trận F và R’. Dùng thuật toán giải mã RSA với khoá đã dùng để mã hoá để tìm được văn bản ban đầu R.

Trong thuật toán cải tiến mã hoá dữ liệu trước khi giấu thì dữ liệu đã được mã hoá RSA 2 lần. Mục đích để dữ liệu sau khi mã hoá thể hiện ở dạng kí tự chứ không phải dạng số như mã hoá RSA một lần.

4.1.2.2 Chương trình cải tiến

Chương trình viết trên ngôn ngữ lập trình Visual Basic

Function nto(e As Integer) As Boolean

Dim k As Integer, kt As Boolean kt = True If e <= 1 Then kt = False Else For k = 2 To Int(Sqr(e)) If e Mod k = 0 Then kt = False End If Next k End If nto = kt End Function Function luythuanhanh(a, z, t) As Double

Dim a1 As Double, z1 As Double, x As Double a1 = a z1 = z x = 1 Do While z1 <> 0 Do While z1 Mod 2 = 0 z1 = z1 \ 2

a1 = (a1 * a1) Mod t Loop

z1 = z1 - 1

x = (x * a1) Mod t Loop

luythuanhanh = x End Function

Function inv(a, n1) As Long

Dim x As Long, y As Long

Dim g(100), u(100), v(100) As Long g(0) = n1 g(1) = a u(0) = 1 v(0) = 0 u(1) = 0 v(1) = 1 i = 1 Do While g(i) <> 0 y = g(i - 1) \ g(i)

g(i + 1) = g(i - 1) - y * g(i) v(i + 1) = v(i - 1) - y * v(i) i = i + 1 Loop x = v(i - 1) If x > 0 Then inv = x Else inv = x + n1 End If End Function

Private Function makitu(s As String) As String Dim i, j, k As Byte i = Asc(s) j = luythuanhanh(i, e, n) k = luythuanhanh(j, e1, n1) makitu = Chr(k) End Function

Private Function giaikitu(s As String) As String Dim i, j, k As Byte k = Asc(s) j = luythuanhanh(k, de1, n1) i = luythuanhanh(j, de, n) giaikitu = Chr(i) End Function

Private Sub mnursanhap_Click()

Form4.Show

'MsgBox Str(n) + Str(e) + Str(de)

Private Sub mnuRsaMa_click()

Dim nextline As String Dim s As String * 1 Dim i As Byte Dim txtfile, Txt Dim ts As String n = Int(Form4.Txtn) e = Int(Form4.Txte) de = Int(Form4.Txtde) cc = makitu("a")

MsgBox "ma cua a la " + cc On Error GoTo loi

With CommonDialog1 .CancelError = True

.Filter = "Text (*.txt)|*.txt|Doc (*.doc)|*.doc"

.ShowOpen ftext = .FileName End With

ftextma = InputBox("Ma hoa va ghi toi file")

MsgBox ftextma If ftext <> "" Then

On Error GoTo loi Dim f As Integer f = FreeFile

Open ftext For Input As f

ts = ""

Do Until EOF(f)

Line Input #f, nextline For i = 1 To Len(nextline) s = Mid(nextline, i, 1) If s = " " Then ts = ts + " " Else ts = ts + makitu(s) End If Next ts = ts + Chr(13) + Chr(10) Loop Close f

Dim fma As Integer fma = FreeFile

Open ftextma For Output As fma Print #fma, ts Close fma Exit Sub End If loi: End Sub

Private Sub mnuRsaGiai_click()

Dim nextline As String Dim i As Long

Dim fso, txtfile Dim ts As String Dim s As String * 1 n = Int(Form4.Txtn) e = Int(Form4.Txte) de = Int(Form4.Txtde)

' MsgBox Str(n) + Str(e) + Str(de) MsgBox "giai cua" + cc + " la " + giaikitu(cc)

On Error GoTo loi With CommonDialog1 .CancelError = True

.Filter = "Text (*.txt)|*.txt|Doc (*.doc)|*.doc"

.ShowOpen

ftextma = .FileName End With

ftextgiai = InputBox("Giai ma va ghi toi file")

If ftextma <> "" Then

On Error GoTo loi Dim f As Integer f = FreeFile

Open ftextma For Input As f

ts = "" Do Until EOF(f)

Line Input #f, nextline For i = 1 To Len(nextline) s = Mid(nextline, i, 1) If s = " " Then ts = ts + " " Else ts = ts + giaikitu(s) End If Next ts = ts + Chr(13) + Chr(10) Loop Close f Dim fg As Integer fg = FreeFile

Open ftextgiai For Output As fg Print #fg, ts Close fg Exit Sub End If loi: End Sub

Trong đó các hàm, thủ tục thực hiện các chức năng sau:

Function nto(e As Integer) As Boolean

Là hàm kiểm tra một số nguyên dương có là số nguyên tố hay không

Function luythuanhanh(a, z, t) As Double

Là hàm tính nhanh giá trị biểu thức azmod t Function inv(a, n1) As Long

Là hàm tìm giá trị nghịch đảo của số nguyên a trong modul n1 Private Function makitu(s As String) As String

Là hàm thực hiện mã kí tự s theo thuật toán RSA về một kí tự trong bảng mã ASCII

Private Sub mnuRsaMa_click()

Là thủ tục thực hiện đầy đủ các bước mã hoá RSA một file (mở file mã hoá, ghi tới file, mã hoá)

Private Sub mnuRsaGiai_click()

Là thủ tục thực hiện đầy đủ các bước giải mã RSA một file văn bản (mở file giải mã, ghi tới file, giải mã)

4.2 Giao diện và các chức năng của chương trình

Thao tác File --> open hoặc --> để mở một file ảnh hoặc file văn bản.

Hình 4.1 Mở một file ảnh

Hình 4.2 Hình 4.3 Mở một file văn bản

Hình 4.3

File văn bản được mở ra thể hiện trên một Form khác (Hình 4.4)

Nếu muốn dữ liệu được mã hoá trước khi giấu ta thực hiện thao tác --> RSA --> Nhap

Hình 4.5 Nhập các dữ liệu mã hoá RSA

--> RSA --> Ma hoa : Sẽ xuất hiện hộp thoại mở file Hình 4.3 Sau khi chọn file dữ liệu cần mã hoá. Xuất hiện hộp nhập trong Hình 4.6

Để giải mã một file kết quả của mã hoá RSA

--> RSA --> Giai ma Xuất hiện hộp thoại mở file, chọn file lưu kết quả giải mã, tiếp tục xuất hiện hộp nhập trong Hình 4.7

Hình 4.7

Để xem file kết quả sau khi giải mã ta thực hiện mở file đó. File này dữ liệu đúng như file ban đầu trước khi mã hoá RSA.

Để thực hiện giấu file văn bản vào trong file ảnh BMP

-->

Xuất hiện hộp thoại mở file --> file ảnh BMP dùng chứa dữ liệu cần giấu.

Một phần của tài liệu Một số kĩ thuật giấu dữ liệu trong ảnh tĩnh (Trang 37 - 59)