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 lf 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.
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 transformation) 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ó.
3.2.2.2. Quá trình Watermarking
− 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) và 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 và 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:
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)
INT() là hàm làm lấy phần nguyờn của một số thực.
− Tương tự, nếu d >= 2t+1 và 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 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
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) và 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))
Tớnh lại 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:
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 ảnh. Miền tần số thấp của khối ảnh đó được chứng minh là chứa dữ liệu nhỡn 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 của thuật toán trong chương trình.
4.1.1. Các hướng cải tiến.
- 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. Cải tiến luận văn thực hiệ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 được F’. Chuyển từ ma trận F’ về ảnh BMP 24 Bit gọi là A’. A’ thu
được 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
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
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:
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ã)