Chương 3 MỘT SỐ THUẬT TOÁN GIẤU TIN TRÊN MIỀN THỜI GIAN
3.1. Thuật toán giấu tin kết hợp mã sửa lỗi Hamming
Các phương pháp giấu tin trên dữ liệu số thực hiện giấu tin vào các “khe hở” của dữ liệu chứa C. Khe hở của dữ liệu được hiểu là khoảng biến thiên giá trị của dữ liệu có cùng ảnh hưởng đến hệ thống tri giác của con người. Sau khi giấu tin xong, dữ liệu mang tin giấu C’ sẽ được truyền đi ra môi trường công cộng và bên nhận sẽ giải tin để lấy lại tin giấu. Trong q trình truyền, đối tượng C’ có thể chịu một số tấn công [9, 57] làm cho nội dung C’ bị thay đổi thành C’’. Khi giải tin, người giải tin sẽ giải được M’ từ C’’ thay vì có được M từ C’. Sẽ có trường hợp M’ khác với M trong
khi người giải tin không hề hay biết và vẫn dùng M’. Trong một số ứng dụng, việc sai sót này trong một mức độ nào đó là có thể cho phép, nhưng đa số ứng dụng thì việc sai khác giữa M và M’ là khơng thể chấp nhận và có thể gây ra hậu quả nghiêm trọng, chẳng hạn như trong lĩnh vực ngân hàng, y tế, qn sự... địi hỏi sự chính xác tuyệt đối. Thuật toán giấu kết hợp với mã hoá Hamming nhằm giúp cho người nhận tin hạn chế thấp nhất khả năng nhận tin sai, có thể biết được tin khi nhận M’ có bị sai khác với bản tin gốc M được giấu hay không và đưa ra bản sửa lỗi M’’.
3.1.1. Mã Hamming
Mã Hamming là một mã trong họ các mã sửa lỗi ECC (Error Correction Code) được công bố năm 1950. Nguyên lý của mã Hamming bắt nguồn từ việc khai triển và mở rộng quan điểm chẵn lẻ. Với mỗi nhóm 4 bit dữ liệu, mã Hamming thêm 3 bit kiểm tra. Hình 3.1 là minh hoạ mã Hamming (7,4) trong đó có 4 bit dữ liệu được truyền đi d1, d2, d3, d4 và 3 bit chẵn lẻ kiểm tra p1, p2, p3.
Hình 3.1. Minh hoạ mã Hamming với 4 bit dữ liệu và 3 bit kiểm tra chẵn lẻ
Mã Hamming sử dụng hai ma trận, gọi là ma trận sinh G và ma trận kiểm tra H. Đối với mã Hamming (7,4) ma trận G và H sẽ như sau :
Chuỗi bit thông tin u sẽ được mã hóa bằng cách nhân với ma trận sinh G, kết quả được từ mã v. Từ mã v được tính theo cơng thức :
v = G ∗ u (3.1)
Nếu nhân v với H sẽ được 0. Đây là công thức để kiểm tra lỗi :
H ∗ v = 0 (3.2)
Ví dụ ta cần gửi đi chuỗi bit thơng tin là u = 1011. Chuỗi u này sẽ được mã hóa thành từ mã là v = 0110011 và truyền đi.
Bên nhận sẽ nhận được chuỗi bit r. Để kiểm tra r nhận được có sai hay khơng, ta tiến hành nhân r với H, nếu kết quả khác 0 thì r bị sai.
Ta có thể viết r = v + e trong đó e là vector lỗi. Nếu e chỉ gồm có một bit lỗi thì mã Hamming có thể sửa được. Nếu e gồm 2 lỗi thì mã Hamming chỉ phát hiện được lỗi chứ khơng sửa được [67].
Mã Hamming (7,4) có thể mở rộng sang (8,4) bằng cách thêm một dòng bit chẵn lẻ ở dòng đầu tiên của ma trận G và thêm bit chẵn lẻ vào dòng cuối cùng của ma trận H.
Vận dụng tính chất có thể phát hiện được 2 lỗi trên 7 bit nhận được của mã Hamming, thuật toán đề xuất dưới đây kết hợp phương pháp giấu với phương pháp mã hóa chuỗi bit sử dụng mã Hamming. Việc dùng mã Hamming nhằm mục đích kiểm sốt q trình tin giấu gửi đi (trong đối tượng chứa) có bị thay đổi hay khơng.
3.1.2. Quá trình giấu tin
Quá trình giấu tin gồm 2 bước là mã hố và giấu. Mục đích của bước 1 là thêm các bit kiểm tra tin giấu có bị thay đổi khơng. Bước 2 sẽ thực hiện giấu chuỗi bit đã mã hoá vào tệp âm thanh theo một thuật toán đã định trước.
Thuật toán giấu tin kết hợp mã xác thực như sau: Đầu vào: - Tệp âm thanh gốc C;
- Chuỗi bit M cần giấu có độ dài L (L là bội số của 8). Đầu ra: - Tệp âm thanh chứa tin giấu C’.
Chuỗi bit M được chia thành các đoạn có độ dài 4 bit. Mỗi đoạn bit thơng tin này sẽ được mã hoá dùng mã Hamming sẽ thành từ mã có độ dài 7 bit. Ghép các chuỗi bit kết quả lại để được chuỗi bit M’. Độ dài chuỗi M’ sẽ bằng (L/4)*7.
Bước 2) Giấu tin
- Đọc tệp chứa C, trích phần header và phần dữ liệu.
- Kiểm tra tệp chứa có đủ để giấu chuỗi bit M’ khơng. Nếu khơng đủ thì dừng và báo không giấu được. Ngược lại sẽ ghi header của C vào C’ sau đó thực hiện giấu từng bit của chuỗi M’ vào phần dữ liệu của C để ghi ra C’ như sau :
+ Trích tuần tự 3 mẫu dữ liệu của C và tính tổng. Nếu bit đang xét của M’ là 1 mà tổng lẻ thì đã thỏa điều kiện giấu, khơng cần điều chỉnh, ngược lại điều chỉnh mẫu số 2 của 3 mẫu đang xét để cho tổng là số lẻ. Nếu bit đang xét của M’ là 0 mà tổng chẵn thì đã thỏa điều kiện giấu, khơng cần điều chỉnh, ngược lại điều chỉnh mẫu 1 hoặc mẫu thứ 3 trong 3 mẫu đang xét để cho tổng là số chẵn.
+ Ghi 3 mẫu đang xét ra tệp C’.
- Lặp lại hai bước con trên bước trên cho đến khi toàn bộ các bit của chuỗi M’ đã được giấu.
- Ghi các mẫu còn lại từ C vào C’ và kết thúc.
3.1.3. Quá trình giải tin và xác thực tin giấu
Thuật toán giải tin và xác thực tin giấu như sau: Đầu vào: - Tệp âm thanh chứa tin giấu C’;
- Độ dài chuỗi bit cần lấy.
Đầu ra: - Chuỗi bit M cần lấy, hoặc kết luận không lấy tin. Các bước thực hiện giải tin như sau:
Bước 1) Trích thơng tin
Dựa vào khóa k, kỹ thuật giấu và số bit giấu đã được biết trước, ta tiến hành trích chuỗi bit từ dữ liệu C’’, kết quả ta thu được M’.
Chia M’ thành các đoạn có độ dài 7, tiến hành nhân từng đoạn này với H. Trường hợp 1: Nếu như toàn bộ kết quả nhân các đoạn của M’ với H đều cho kết quả 0 thì kết luận là khơng có tấn cơng trên C’ và thực hiện trích các bit dữ liệu của M’ để nhận lại tin giấu M.
Trường hợp 2: Nếu như trong q trình nhân các đoạn của M’ với H có đoạn cho kết quả khác 0 thì kết luận là có tấn cơng hoặc do nhiễu và ghi nhận cách sửa lỗi. Trong trường hợp này cũng rút trích dữ liệu từ M’ sau khi thực hiện sửa lỗi và tạo lại tin giấu. Nếu như trong mỗi đoạn 7 bit có 2 bit lỗi thì hệ thống sẽ khơng tự sửa lỗi được. Trường hợp này yêu cầu gửi lại hoặc khơng sử dụng thơng tin rút trích trong dữ liệu mang tin ra.
3.1.4. Kết quả thử nghiệm và đánh giá
Để đánh giá kỹ thuật đề xuất, chúng tôi thực hiện giấu giấu các tệp dữ liệu vào tệp âm thanh gốc vào kiểm tra giá trị SNR. Kết quả thử nghiệm được thể hiện trong bảng 3.1 và cho thấy tỉ lệ này đáp ứng yêu cầu về chất lượng của tệp âm thanh mang tin so với tệp âm thanh gốc.
Bảng 3.1. Giá trị SNR khi thực hiện giấu kết hợp mã Hamming
Tên tệp chứa Dạng tệp âm
thanh Giá trị SNR dohoa.cpp (430 byte) DuyTanlogo.bmp (1694 byte) map.gif (14845 byte) jarre-in.wav Độc tấu 77.56 71.57 62.16
gazebo-in.wav Hòa tấu 78.04 72.19 62.77
brahms-in.wav Hòa tấu 76.33 70.47 60.70
speech-in.wav Thông báo 70.99 64.98 55.50
Kết quả thử nghiệm cho thấy chất lượng tệp mang tin tốt, không phân biệt được sự khác nhau khi nghe tệp âm thanh gốc và tệp mang tin. Kỹ thuật đề xuất cũng cho phép rút trích đúng tin mật từ tệp mang tin. Hình 3.3 là đoạn gồm 100 mẫu tệp âm thanh gốc speech-in.wav và tệp mang tin khi giấu tệp map.gif.
Hình 3.3. Dữ liệu âm thanh gớc và dữ liệu có chứa tin mật
Khi có tấn cơng trên tệp mang tin, giá trị một số mẫu dữ liệu âm thanh sẽ thay đổi. Nếu như khơng biết trước hoặc khơng có kỹ thuật nào kiểm sốt, người nhận tin có thể nhận tin sai. Mục đích chính của phương pháp giấu tin kết hợp với mã Hamming là kiểm tra xem thơng tin khi nhận có phải đúng là tin bên gửi đã gửi hay không. Nếu như chúng ta chỉ sử dụng mã hố thì chỉ có tác dụng làm cho người thám tin không biết thông tin ta giấu là gì chứ khơng giúp ta kiểm tra được trong q trình truyền thơng tin trên đường truyền cơng cộng, dữ liệu mang tin có bị thay đổi, làm sai hay khơng. Thuật tốn giấu vừa trình bày là một cách giúp chúng ta kiểm tra lại thơng tin rút trích trong dữ liệu mang tin trước khi quyết định sử dụng nó.
Bảng 3.2. Phát hiện thay đổi tin mật trên tệp mang tin
Số mẫu điều
chỉnh Phát hiện thay đổi Số bit sai phát hiện khi giải tin Số bit có thể sửa
5 Có 1 1
10 Có 3 2
40 Có 24 20
100 Có 38 14
500 Có 172 75
Để thử nghiệm khả năng phát hiện thay đổi trên tệp mang tin, làm sai khác tin nhận được khi giải tin, luận án thực hiện điều chỉnh ngẫu nhiên một số mẫu trên tệp mang tin. Tệp được chọn giấu là tệp map.gif và tệp âm thanh speech-in.wav được
chọn làm dữ liệu chứa. Sau khi giấu tin xong, tệp âm thanh mang tin sẽ được điều chỉnh ngẫu nhiên một số mẫu. Kết quả thử nghiệm thể hiện trong bảng 3.2.
Tính an tồn của lược đồ giấu này phụ thuộc vào việc giữ mật kỹ thuật. Có thể nâng cao tính an tồn cho kỹ thuật giấu bằng cách mã hóa (che thơng tin) chuỗi thơng tin mật trước, sau đó dùng mã Hamming mã hóa để phục vụ cho việc kiểm tra lỗi rồi mới thực hiện giấu.
Do phải thêm 3 bit kiểm tra (hoặc 4 bit nếu sử dụng mã Hamming mở rộng) vào 4 bit dữ liệu nên tỉ lệ dữ liệu xấp xỉ bằng ½ so với phương pháp giấu không sử dụng mã kiểm tra. Ngồi ra thuật tốn điều chỉnh dựa vào tính chẵn lẻ của 3 mẫu kề nhau để giấu nên tỉ lệ dữ liệu giấu xấp xỉ 1/6 số mẫu của dữ liệu chứa.
Chuỗi tin mật trước khi giấu cần được mã hóa bằng cách nhân với ma trận sinh G và khi trích tin ta cần nhân với ma trận H để kiểm tra nên tốc độ giấu có chậm hơn so với phương pháp dùng trực tiếp.
Kỹ thuật giấu này phù hợp với các ứng dụng gửi tin mật.
3.2. Thuật toán giấu điều chỉnh giá trị nhóm bit
Mục này của luận án trình bày một kỹ thuật giấu tin trong âm thanh dựa vào việc điều chỉnh LSB. Việc giấu tin được thực hiện bằng cách chọn các mẫu và vị trí bit trên mỗi mẫu dữ liệu để giấu tin. Kỹ thuật này cũng đề xuất cách điều chỉnh bit để làm giảm độ sai khác giữa mẫu dữ liệu gốc và mẫu dữ liệu mang tin giấu. Kỹ thuật giấu dùng chuỗi số ngẫu nhiên được sinh từ khố bí mật.
Quá trình giấu tin gồm 2 giai đoạn. Giai đoạn 1 sẽ dùng khoá mật K để sinh ra chuỗi ngẫu nhiên gồm L số, trong đó L là chiều dài chuỗi bit mật. Giai đoạn 2 sẽ giấu lần lượt từng bit của chuỗi tin mật vào trong tệp âm thanh dựa vào chuỗi ngẫu nhiên đã sinh. Việc giấu tin dựa vào chuỗi ngẫu nhiên nhằm mục đích tăng cường tính mật cho tin giấu.
3.2.1. Sinh chuỗi xác định mẫu dữ liệu và vị trí trên mẫu
Phương pháp đề xuất dưới đây sẽ dùng chuỗi giả ngẫu nhiên để xác định vị trí các mẫu dữ liệu chọn và vị trí bit sẽ dùng để giấu tin. Bộ sinh số ngẫu nhiên được
chọn là bộ sinh số đồng dư cải tiến đã được trình bày ở mục 2.1.3. Khoá K gồm ba số (x, y, N) sẽ được dùng như số mồi và hệ số trong công thức sinh chuỗi ngẫu nhiên SR gồm L số. Sau đó dựa vào chuỗi SR này, ta sẽ tính ra chuỗi S và chuỗi V, trong đó S[i] cho biết mẫu nào được chọn để giấu và V[i] cho biết vị trí bit trên mẫu được chọn lần thứ i để giấu bit mật thứ i. Công thức (3.3) dùng để sinh dãy SR như sau:
𝑆𝑅[𝑖] = (𝑥 ∗ 𝑆𝑅[𝑖 − 1] + 2 ∗ 𝑦)𝑚𝑜𝑑 𝑁 (3.3)
3.2.2. Điều chỉnh độ lệch bit
Đối với phương pháp chèn vào các bit ít quan trọng, ta có thể sử dụng các bit ở vị trí từ 1 đến 3 của mẫu dữ liệu gốc để chứa tin giấu. Trong trường hợp thay đổi bit ở vị trí 3, độ lệch giá trị giữa mẫu dữ liệu gốc và mẫu dữ liệu sau khi điều chỉnh để giấu tin là 4 như hình 3.4. Tương tự nếu điều chỉnh bit ở vị trí thứ 2 thì giữa dữ liệu gốc và dữ liệu mang tin sẽ sai khác nhau 2 đơn vị.
Hình 3.4. Đợ sai khác khi điều chỉnh bit thứ 3 của mẫu dữ liệu
Nếu bit tin mật được giấu vào vị trí bit 3 sẽ an tồn hơn (trước một số tấn cơng) so với giấu ở vị trí bit 1. Mặc dù 3 vị trí bit giấu là ít ảnh hưởng đến hệ thống tri giác của con người nhưng nếu giấu quá nhiều vị trí bit 3 sẽ làm cho người nghe dễ phát hiện ra hoặc nghi ngờ do ảnh hưởng đến tính “trong suốt” của dữ liệu chứa. Nguyên nhân là do giấu trên bit thứ 3 sẽ gây ra sự sai khác giữa tín hiệu âm thanh gốc và tín hiệu âm thanh chứa tin giấu nhiều hơn so với giấu trên bit 1. Để giảm độ lệch khi chèn vào bit cao ta tiến hành như sau:
Nếu đổi bit ở vị trí 3 từ 0 thành 1, ta sẽ đổi các bit ở vị trí 2 và ở vị trí 1 thành 0 và nếu đổi bit ở vị trí 3 từ 1 thành 0 ta sẽ đổi các bit ở vị trí 2 và ở vị trí 1 thành 1.
1 1 0 1 1 0 1 1 1 1 0 1 1 1 1 1 219 223 1 1 0 1 1 1 0 0 1 1 0 1 1 0 0 0 220 giá trị tương ứng chuỗi bit 216
Tương tự, nếu đổi bit ở vị trí 2 từ 0 thành 1, ta sẽ đổi bit ở vị trí 1 thành 0 và nếu đổi bit ở vị trí 2 từ 1 thành 0 ta sẽ đổi bit ở vị trí 1 thành 1.
Thủ tục điều chỉnh bit thứ i chứa giá trị k (k =0 hoặc k=1) như sau:
PROC DIEUCHINH(i,k) SET(i,k);
if(i>1) SET(1,1-k); if(i>2) SET(2,1-k); END PROC
Hình 3.5. Đợ sai khác khi sử dụng kỹ thuật điều chỉnh các bit thấp hơn
Nếu tiến hành điều chỉnh theo phương pháp đề xuất thì chênh lệch giá trị giữa mẫu dữ liệu âm thanh gốc và mẫu âm thanh mang tin chỉ là 1, thấp hơn so với trường hợp giữ nguyên như hình 3.4. Trong [78] đề xuất một thuật tốn điều chỉnh các mẫu bit nhằm làm giảm sai khác giá trị mẫu trước và sau khi giấu theo hướng tiếp cận gen. So với thuật tốn đề xuất thì thuật tốn trong [78] cho phép giấu các bit ở mức cao hơn và giải quyết được yêu cầu chống phá mã.
3.2.3. Thuật toán giấu tin theo phương pháp điều chỉnh giá trị nhóm bit
Đầu vào:
- Tệp âm thanh A, chuỗi bit M có độ dài L, khoá K gồm ba số (x, y, N). Đầu ra:
- Tệp âm thanh A’ có chứa chuỗi bit mật M. Bước 1) Chuẩn bị
Dựa vào khoá (x, y, N) sinh ra chuỗi ngẫu nhiên SR theo cơng thức (3.3), từ đó tính mảng S[] cho biết mẫu dữ liệu được chọn để giấu tin và mảng V[] cho biết vị
1 1 0 1 1 0 1 1 1 1 0 1 1 1 0 0 219 220 1 1 0 1 1 1 0 0 1 1 0 1 1 0 1 1 220 219
Bước 2) Giấu tin: Giấu lần lượt từng bit mật Mi cho đến khi giấu xong. - Đọc tệp dữ liệu âm thanh, dựa vào mảng S[] để chọn mẫu cần giấu. - Dựa vào mảng V[] để biết vị trị bit giấu.
- Nếu bit thứ Vi của mẫu chọn thứ i khác với Mi thì thực hiện DIEUCHINH(Vi, Mi)
Bước 3) Ghi các mẫu đã được điều chỉnh ra tệp âm thanh A’.
3.2.3.1. Sinh mảng S[]
Mỗi một phần tử trong mảng S[] được dùng trong thuật tốn có giá trị trong khoảng [1..4]. Giá trị S[i] = p có nghĩa là mẫu được chọn để giấu bit Mi sẽ cách mẫu được chọn để giấu bit Mi-1 p mẫu, vì vậy S[i] ln lớn hơn 0 để tránh trường hợp hai