Tên tệp chứa Giá trị SNR dohoa.cpp (430 byte) DuyTanlogo.bmp (190 byte) map.gif (14845 byte)
S.wav 80.41 76.73 Không giấu được
speech-in.wav 76.35 72.27 Không giấu được
Kỹ thuật này giấu 8 bit trên đoạn gồm fw mẫu dữ liệu. Để giấu n byte dữ liệu thì tệp chứa cần ít nhất n*fw mẫu. Có trường hợp trong một đoạn khơng thể giấu tin do khơng có đủ số mẫu thỏa tiêu chí giấu. Chúng ta có thể điều chỉnh số bit giấu trong mỗi đoạn tăng hoặc bằng số mẫu là đỉnh trong mỗi đoạn. Giá trị ngưỡng được chọn khơng nên lớn vì số mẫu trong đoạn thoả điều kiện lớn hơn ngưỡng chọn không nhiều và tuỳ thuộc vào tệp âm thanh được chọn làm dữ liệu chứa.
Độ an toàn của lược đồ giấu phụ thuộc vào giá trị là d và k, trong đó d là giá trị dùng để điều chỉnh mẫu thỏa điều kiện giấu và k là giá trị ngưỡng để chọn các mẫu trong mỗi khối. Để tăng tính an tồn cho tin giấu, ta có thể kết hợp với chuỗi ngẫu nhiên như các kỹ thuật đã trình bày trước. Ngồi ra, ta có thể chọn giá trị d khác nhau trong các đoạn khác nhau để giấu tin, làm cho người thám tin khó lấy lại được tin.
Nếu chọn kích thước mỗi đoạn là 512, để giấu 1 byte dữ liệu, ta cần phải thực hiện 2*512*log2(512) và bằng 9216 phép toán để thực hiện biến đổi (FFT và IFFT). Để giấu n byte dữ liệu thì ta cần ít nhất n*9216 phép tốn.
Các nghiên cứu trong [49, 50, 51] cũng thực hiện giấu tin trên miền tần số, sử dụng phép biến đổi FFT. Các nghiên cứu này sử dụng phương pháp nội suy, dùng kết hợp với dãy số Fibonacci để giấu tin. Các thuật tốn giấu này có tỉ lệ dữ liệu cao và bền vững trước các tấn công thơng thường. Nghiên cứu [31, 40, 41] thực hiện tính cepstrum và giấu dữ liệu trực tiếp trên miền này, nhưng thực chất vẫn là các thuật toán dùng biến đổi FFT để giấu tin.
4.2. Thuật toán giấu điều chỉnh hệ số biến đổi wavelet
Trong phần này, luận án đề xuất sử dụng phương pháp lượng tử hoá giá trị trung bình các hệ số của phép biến đổi wavelet để giấu tin. Dữ liệu tệp âm thanh sẽ được chuyển từ miền thời gian sang miền tần số bằng biến đổi wavelet, sau đó sẽ thực hiện giấu tin và chuyển ngược lại miền thời gian. Trong phương pháp này sử dụng khóa là bộ gồm ba số (x0, a, m) cho quá trình giấu tin và giải tin. Các giá trị của khóa dùng để sinh chuỗi số ngẫu nhiên theo phương pháp đồng dư tuyến tính đã trình bày ở chương 2, với giá trị c= 2*a. Từ chuỗi số ngẫu nhiên được sinh ra, chúng ta sẽ biến đổi chuỗi bit mật cần giấu thành chuỗi khác. Mục đích của việc biến đổi này là làm cho người thám tin khó lấy lại được tin giấu nếu như biết thuật toán điều chỉnh đoạn dữ liệu để giấu bit.
Như ta đã biết, phép biến đổi wavelet sẽ phân tích tín hiệu thành hai thành phần là thành phần xấp xỉ A (Approximation) và thành phần chi tiết D (Detail). Thành phần xấp xỉ A tương ứng với thành phần tần số thấp và thành phần chi tiết D tương ứng với thành phần tần số cao. Trong hai thành phần A và D, thành phần D là không quan trọng và những thay đổi trên thành phần này ít ảnh hưởng đến tín hiệu âm thanh gốc khi ta khôi phục lại. Dựa vào đặc tính này, luận án đề xuất cách điều chỉnh các giá trị trên thành phần này để giấu tin, bằng cách lượng tử theo modulo. Thuật toán giấu tin thực hiện lượng tử giá trị trung bình của các mẫu trong một đoạn. Mỗi một bit sẽ được giấu vào đoạn gồm fw mẫu, được đánh số từ 1 đến fw.
Do thuật tốn giấu và trích bit chia mỗi đoạn gồm fw phần tử thành hai nửa bằng nhau nên giá trị fw được chọn trong thuật toán là số chẵn. Một nửa các mẫu thành phần D của mỗi đoạn, sẽ được điều chỉnh lên một khoảng d/2 để giấu tin nếu như không thỏa điều kiện giấu, nên giá trị số thực d khi chọn cần đủ nhỏ để ít làm thay đổi dữ liệu mang tin so với dữ liệu gốc.
4.2.1. Thuật toán giấu 1 bit
Đầu vào: - Dãy D gồm fw phần tử D[1..fw], bit cần giấu b, số thực d. Đầu ra: - Dãy D đã được điều chỉnh để chứa bit mật b.
ℎ1 = (∑ 𝐷[𝑖])/(𝑓𝑤/2) 𝑓𝑤 2 1 (4.7) ℎ2 = (∑𝑓𝑤𝑓𝑤 𝐷[𝑖] 2+1 )/(𝑓𝑤 2 )
Bước 2) Tính giá trị lệch giá trị trung bình giữa hai đoạn, theo modulo d: 𝑘 = 𝑎𝑏𝑠(ℎ1 − ℎ2) 𝑚𝑜𝑑 𝑑
Bước 3) Điều chỉnh giá trị để giấu bit b :
Nếu b=1 và k> d/2 hoặc b=0 và k<= d/2 thì đã thỏa điều kiện giấu, khơng cần điều chỉnh;
Ngược lại:
+Nếu b=1 và k<= d/2 thì cộng d/2 cho nửa đoạn trước : D[i] = D[i] + d/2, với i= 1 đến fw/2.
+Ngược lại nếu b=0 và k> d/2 thì cộng d/2 cho nửa đoạn sau : D[i] = D[i] + d/2, với i từ fw/2 +1 đến fw.
Trong thuật toán giấu, ta qui ước một đoạn đã thỏa điều kiện đã mang tin nếu như độ lệch trung bình hai nửa lớn hơn d/2 khi cần giấu bit 1 và độ lệch trung bình hai nửa nhỏ hơn hoặc bằng d/2 khi cần giấu bit 0.
4.2.2. Thuật tốn trích 1 bit trong đoạn
Đầu vào: - Dãy D gồm fw phần tử D[1..fw], số thực d. Đầu ra: - Bit mật b.
Bước 1) Tính giá trị trung bình của nửa đoạn trước ℎ1và nửa đoạn sau ℎ2 của D theo cơng thức (4.7)
Bước 2) Tính giá trị lệch giá trị trung bình giữa hai đoạn, theo modulo d: 𝑘 = 𝑎𝑏𝑠(ℎ1 − ℎ2) 𝑚𝑜𝑑 𝑑
Bước 3) Trích bit b : Nếu k> d/2 thì b =1 ngược lại b = 0.
4.2.3. Thuật toán giấu tin
Dưới đây là thuật toán giấu chuỗi bit mật M gồm n phần tử và tệp âm thanh H. Đầu vào: - Khoá K, tệp âm thanh gốc H, chuỗi bit mật M.
Bước 1) Dùng khoá K để sinh ra chuỗi số ngẫu nhiên SR gồm n phần tử. Bước 2) Biến đổi chuỗi bit mật M thành M’ dựa vào SR, trong đó:
𝑀′(𝑖) = [ 𝑀(𝑖) 𝑛ế𝑢 S𝑅(𝑖) 𝑙ẻ
1 − 𝑀(𝑖) 𝑛ế𝑢 S𝑅(𝑖) 𝑐ℎẵ𝑛 (4.8)
Bước 3) Đọc dữ liệu các mẫu từ tệp H vào mảng y. Thực hiện biến đổi wavelet cho dãy y.
[𝐴, 𝐷] = 𝐷𝑊𝑇(𝑦)
Bước 4) Chia dãy D thành các đoạn 𝐷𝑖 có cùng kích thước fw và điều chỉnh các đoạn giấu lần lượt từng phần tử 𝑀′(𝑖) vào các đoạn 𝐷𝑖, ta được 𝐷𝑖′.
Bước 5) Biến đổi wavelet ngược [A, D’] để có được y’ và ghi y’ ra tệp S.
4.2.4. Thuật tốn trích tin
Đầu vào: - Khố K, tệp mang tin S. Đầu ra : - Chuỗi bit mật M.
Bước 1) Đọc dữ liệu các mẫu từ tệp âm thanh S vào mảng y. Thực hiện biến đổi wavelet cho dãy y.
[𝐴, 𝐷] = 𝐷𝑊𝑇(𝑦)
Bước 2) Chia dãy D thành các đoạn 𝐷𝑖 có cùng kích thước fw và lấy lần lượt từng phần tử 𝑀′(𝑖) từ các đoạn 𝐷𝑖 theo thuật tốn trích bit.
Bước 3) Dùng khố K để sinh ra chuỗi ngẫu nhiên SR gồm n phần tử.
Bước 4) Biến đổi chuỗi M’ thành M dựa vào SR theo công thức 4.8 và trả về. Để rút trích đúng tin giấu thì kích thước fw dùng trong thuật toán giấu và giải tin phải giống nhau. Do biến đổi IDWT(DWT(y)) =Y nên độ lệch trung bình của hai nửa trong mỗi đoạn gồm fw mẫu vẫn duy trì nên ta có thể lấy chính xác tin đã giấu.
4.2.5. Kết quả thực nghiệm và đánh giá
Phần thực nghiệm thực hiện giấu tin trên các tệp âm thanh mono lượng tử 16 bit, ở nhiều thể loại khác nhau. Độ dài các chuỗi bit được giấu được thử nghiệm tuỳ thuộc vào tệp âm thanh chứa. Giá trị d được chọn là 0.1 và kích thước mỗi đoạn để
giấu 1 bit là 200. Hình 4.6 minh hoạ cho giấu 2000 bit vào trong tệp âm thanh, là bản hồ tấu nhiều nhạc cụ.
Hình 4.6. Âm thanh gớc và âm thanh chứa tin giấu
Bảng 4.3 thể hiện độ đo SNR khi tiến hành giấu các chuỗi bit vào các tệp âm thanh. Các giá trị của hệ số SNR trong Bảng 4.2 chứng tỏ kỹ thuật đề xuất đạt được tiêu chuẩn về tỉ lệ nhiễu khi giấu tin. Thuật toán đề xuất cũng cho phép rút trích tin giấu chính xác nếu như tệp âm thanh chứa tin mật không bị các tấn công.