Vũ Văn Tâm và Đtg<br />
<br />
Tạp chí KHOA HỌC & CÔNG NGHỆ<br />
<br />
122(08): 53 - 58<br />
<br />
NHÚNG VĂN BẢN TIẾNG VIỆT TRONG DỮ LIỆU AUDIO<br />
DỰA VÀO ĐẶC ĐIỂM CỦA CHỮ VIẾT TIẾNG VIỆT<br />
Vũ Văn Tâm1*, Phan Trọng Hanh2<br />
1Đại<br />
<br />
học Kỹ thuật – Hậu cần CAND (Bộ Công an),<br />
2Học viện Kỹ thuật Quân sự (Bộ Quốc phòng)<br />
<br />
TÓM TẮT<br />
Các bài toán nhúng văn bản tiếng Việt trong dữ liệu audio đều phải giải quyết hai vấn đề liên quan,<br />
đó là tăng hiệu quả nhúng và bảo mật nội dung tin nhúng. Chúng tôi giải quyết bài toán này bằng<br />
cách phân tích đặc điểm của chữ viết tiếng Việt; từ đó xây dựng khóa mã, dùng để mã hóa và nén<br />
văn bản tiếng Việt trước khi thực hiện nhúng. Kết quả thử nghiệm với các văn bản tiếng Việt<br />
thông dụng, cho thấy số bit tin cần nhúng giảm đáng kể so với phương pháp nhúng thông thường;<br />
đồng thời nội dung văn bản nhúng được bảo mật.<br />
Từ khóa: Nhúng văn bản; nhúng dữ liệu; mã hóa văn bản; nén văn bản; nhúng audio<br />
<br />
ĐẶT VẤN ĐỀ*<br />
Nhúng văn bản tiếng Việt trong dữ liệu audio<br />
là một trong những bài toán cơ bản nhất của<br />
kỹ thuật giấu tín hiệu trong dữ liệu số. Hiện<br />
nay, đã có nhiều phương pháp tiếp cận khác<br />
nhau như: Phương pháp nhúng LSB (Least<br />
Significant Bit) [2], [4], [5]; Mã hóa Parity<br />
(Parity Coding) [2], [4]; Mã hóa Phase (Phase<br />
Coding) [2], [5]; Ứng dụng kỹ thuật trải phổ<br />
[1], [2]; Kỹ thuật mã hóa echo [2], [6]. Các<br />
phương pháp nêu trên tập trung chủ yếu vào<br />
xây dựng thuật toán nhúng tin nhằm bảo đảm<br />
tin nhúng được ổn định.<br />
Việc kết hợp giữa nhúng tin với nén và mã<br />
hóa tin có thể sẽ tăng được hiệu quả nhúng và<br />
bảo mật được tin cần nhúng. Trên cơ sở<br />
nghiên cứu về đặc điểm của chữ viết tiếng<br />
Việt, từ đó xây dựng các khóa mã dùng để<br />
nén và mã hóa chữ viết tiếng Việt trước khi<br />
thực hiện nhúng vào dữ liệu audio.<br />
Với cách tiếp cận như trên, bài báo được trình<br />
bày theo thứ tự sau: Đặc điểm chữ viết tiếng<br />
Việt; Xây dựng mô hình; Xây dựng các thuật<br />
toán; Thử nghiệm và đánh giá và cuối cùng là<br />
phần kết luận.<br />
ĐẶC ĐIỂM CHỮ VIẾT TIẾNG VIỆT<br />
Bộ chữ viết tiếng Việt được chia làm 2 loại:<br />
Chữ số (từ 0 đến 9), là loại không có dấu,<br />
*<br />
<br />
Tel: 0168975888;, Email: tamt36bca@gmail.com<br />
<br />
chúng có thể kết hợp với nhau để tạo thành các<br />
giá trị số lớn hơn; Chữ cái bao gồm 3 thành<br />
phần chính, đó là: Thành phần phụ âm (b c t v<br />
d s w x đ g r f z y j h q p n m l k tr qu ch th kh<br />
nh gi ng ngh gh ph); Thành phần nguyên âm (a<br />
ă â an ăn ân am ăm âm au âu ai ao ac ăc âc at<br />
ăt ât ach anh ang ăng âng ap ăp âp ay ây o ô ơ<br />
on ôn ơn om ôm ơm oc ôc owc ot ôt ơt op ôp<br />
ơp oat oăt oen oam oan oăn oanh oap oăc oa<br />
oet oac oai oi ôi ơi oe oach ông ôc oang ong<br />
ông oay u ư ut ưt uc ưc ươn uây ua ưa uyêt<br />
uêch uênh ương uông um ưm un ưn ưng uya<br />
ươm uôm uen uôn uyên uyt ươn ui ưi ươu e ê<br />
en ên em êm et êt ep êp ec êc êu eo eng êng<br />
ênh êch i it in im ip iu ia inh ing iêng iêp iêc iêt<br />
iên iêm iêu ich yêt yêu yên ; / . = ? % ~ ! @ # $<br />
^ & * ( ) - + “ | \ [ ] { }) và thành phần dấu<br />
(không dấu, nặng, huyền, sắc, hỏi và ngã).<br />
Nếu coi chữ số là phụ âm thì tổng số phụ âm<br />
là 10 + 33 = 43, tổng số nguyên âm là 185 và<br />
tổng số dấu là 6. Do vậy, số phụ âm, nguyên<br />
âm và dấu là hữu hạn và chúng ta hoàn toàn<br />
có thể biết trước.<br />
Với phương pháp nhúng văn bản tiếng Việt<br />
thông thường, mỗi ký tự sẽ được mã hóa<br />
thành 8 bit, ví dụ chữ “Nguyễn” gồm 6 ký tự<br />
sẽ được mã hóa thành 6 8 48 [bit]. Nếu<br />
chúng ta thực hiện tách riêng phụ âm, nguyên<br />
âm và dấu; sau đó mã hóa thì số bit sẽ là: Phụ<br />
âm “Ng” = a [bit], nguyên âm “uyên” =<br />
b [bit] và dấu “ ” = c [bit], khi đó tổng số<br />
53<br />
<br />
Vũ Văn Tâm và Đtg<br />
<br />
Tạp chí KHOA HỌC & CÔNG NGHỆ<br />
<br />
bit sẽ là d a b c [bit]. Nếu d 48 thì số<br />
bit giảm được so với trường hợp nhúng thông<br />
thường là 48 d e [bit]. Ngoài ra, với việc<br />
mã hóa như trên thì nội dung văn bản cần<br />
nhúng đã được bảo mật (bên nhận phải có các<br />
tham số của bộ mã mới giải mã được nội<br />
dung tín hiệu nhúng).<br />
<br />
122(08): 53 - 58<br />
<br />
lưu khóa mã dưới dạng file text có tên là<br />
phu_am.txt (Hình 2b).<br />
+ Thuật toán mã hóa: β là phụ âm cần mã<br />
hóa, £[i] là các thành phần của file<br />
phu_am.txt, µ là 6 bít sau khi mã hóa.<br />
<br />
XÂY DỰNG MÔ HÌNH<br />
Sơ đồ mô hình<br />
<br />
Text<br />
<br />
Giải mã<br />
phụ âm Text<br />
<br />
Mã hóa<br />
phụ âm<br />
<br />
(a) Ma trận khóa mã phần phụ âm<br />
<br />
(b) Cấu trúc file<br />
Tách Khóa<br />
chữ mã<br />
<br />
Ghép<br />
bit<br />
<br />
Nhúng<br />
<br />
Giải Tách Khóa Ghép<br />
nhúng bit<br />
chữ<br />
mã<br />
<br />
phu_am.txt <br />
<br />
000000 b<br />
000001 c<br />
000010 t<br />
101001 ngh<br />
........<br />
111001 8<br />
<br />
Hình 2. Khóa mã phần phụ âm<br />
Mã hóa<br />
nguyên<br />
âm<br />
<br />
Giải mã<br />
nguyên<br />
âm<br />
<br />
Hình 1. Mô hình nhúng tiếng Việt trong dữ liệu Audio<br />
<br />
Các chữ của văn bản tiếng Việt được đưa vào<br />
bộ tách chữ, thành phần phụ âm sẽ được mã<br />
hóa thành a [bit] bởi bộ mã hóa phụ âm,<br />
thành phần nguyên âm và dấu được mã hóa<br />
thành ( b c ) [bit] bởi bộ mã hóa nguyên âm.<br />
Sau bộ ghép bit chúng ta có d [bit] (với<br />
d a b c . Sử dụng phương pháp nhúng<br />
LSB để nhúng và giải nhúng các bit tin với dữ<br />
liệu gốc audio. Phía bên nhận sẽ thực hiện<br />
ngược lại với bên phát để nhận được nội dung<br />
văn bản đã nhúng.<br />
Xây dựng thuật toán<br />
- Thành phần phụ âm:<br />
+ Khóa mã: Sử dụng phương pháp ma trận,<br />
các ô thuộc hàng 1 và các ô thuộc cột 1 của<br />
ma trận dùng để ghi các tổ hợp bit khóa mã<br />
(Hình 2a).<br />
Các ô còn trống trên ma trận được dùng mã<br />
hóa các giãn cách hoặc dự phòng. Để mã hóa<br />
cho một phụ âm chúng ta lấy tổ hợp bit của<br />
hàng và cột tương ứng với ô chứa phụ âm, ví<br />
dụ phụ âm “gh” sẽ được mã là = 110000.<br />
+ Cài đặt trên máy tính: Để đơn giản hóa<br />
việc cài đặt trên máy tính, chúng ta thực hiện<br />
54<br />
<br />
For i ∈ 1,...,length(β) do<br />
β [i] ← β [i] + 32<br />
end for<br />
Open file phu_am.txt<br />
For i ∈ 1,2,...,48 do<br />
£[i] ← line[i] of phu_am.txt<br />
α ← copy(£[i],7,4)<br />
For j ∈ 1,...,length(α) do<br />
α [j] ← α [j] + 32<br />
end for<br />
if α == β then<br />
µ ← copy(£[i],1,6)<br />
exit for<br />
end if<br />
end for<br />
close phu_am.txt<br />
+ Thuật toán giải mã: Thực hiện ngược lại<br />
quá trình mã hóa.<br />
Open file phu_am.txt<br />
For i ∈ 1,2,...,48 do<br />
£[i] ← line[i] of phu_am.txt<br />
α ← copy(£[i],1,6)<br />
if α == µ then<br />
β ← copy(£[i],7,4)<br />
exit for<br />
end if<br />
end for<br />
close phu_am.txt<br />
- Thành phần nguyên âm và dấu:<br />
<br />
Vũ Văn Tâm và Đtg<br />
<br />
Tạp chí KHOA HỌC & CÔNG NGHỆ<br />
<br />
+ Khóa mã: Tương tự như phần phụ âm, khóa<br />
mã phần nguyên âm và dấu được xây dựng<br />
như sau (Hình 3a).<br />
+ Cài đặt trên máy tính: Các nguyên âm liên<br />
quan đến dấu, do vậy mỗi một nguyên âm sẽ<br />
được lưu trên file thành 6 dòng tương ứng với<br />
6 trường hợp: Không có dấu, có dấu nặng, có<br />
dấu huyền, có dấu sắc, có dấu hỏi và có dấu<br />
ngã (Hình 3b).<br />
+ Thuật toán mã hóa: ξ là nguyên âm cần mã<br />
hóa, ψ[i] là các thành phần của file<br />
nguyen_am.txt, ω là 11 bít sau khi mã hóa.<br />
For i ∈ 1,...,length(ξ) do<br />
ξ[i] ← ξ[i] + 32<br />
end for<br />
Open file nguyen_am.txt<br />
For i ∈ 1,2,...,992 do<br />
ψ[i] ← line[i] of nguyen_am.txt<br />
α ← copy (ψ[i],12,4)<br />
For j ∈ 1,...,length(α) do<br />
α [j] ← α [j] + 32<br />
end for<br />
if α == ξ then<br />
ω ← copy(ψ[i],1,11)<br />
exit for<br />
end if<br />
end for<br />
close nguyen_am.txt<br />
<br />
(a) Ma trận khóa mã phần<br />
nguyên âm và dấu<br />
(b) Cấu trúc file<br />
Nguyen_am.txt<br />
<br />
<br />
00000000000 a<br />
00000000001 ạ<br />
00000000010 à<br />
......................<br />
11111001000 yên<br />
11111001001 yện<br />
.......................<br />
10001011000 }<br />
<br />
Hình 3. Khóa mã phần nguyên âm và dấu<br />
<br />
122(08): 53 - 58<br />
<br />
+ Thuật toán giải mã:<br />
Open file nguyen_am.txt<br />
For i ∈ 1,2,...,992 do<br />
ψ[i] ← line[i] of nguyen_am.txt<br />
α ← copy (ψ[i],1,11)<br />
if α == ω then<br />
ξ ← copy(ψ[i],12,4)<br />
exit for<br />
end if<br />
end for<br />
close nguyen_am.txt<br />
- Nhúng và giải nhúng:<br />
+ Thuật toán nhúng: δ là chuỗi tin cần<br />
nhúng dạng nhị phân, δ được chia ra thành<br />
các đoạn 4 bit để thay thế 4 bit thấp của các<br />
mẫu dữ liệu audio.<br />
δ ← "bit start" + δ + "bit end"<br />
Open file audio1<br />
Open file audio2<br />
For i ∈ 1,2,...,44 do<br />
Β ← data[i] for file audio1<br />
data[i] to file audio2 ← B<br />
end for<br />
C ← data[41..44] for file audio1<br />
C ← C/2<br />
For j ∈ 1,2,...,C do<br />
i ← j + 44<br />
B ← data[i] for file audio1<br />
selected Dau ← 1<br />
If B < 0 Then selected Dau ← -1<br />
B ← |B|<br />
selected ST ← ""<br />
For K ∈ 1,2,...,20 do<br />
ST ← Str(B mod 2) + ST<br />
B←B\2<br />
If B == 0 Then Exit For<br />
end for<br />
If Length(ST) < 16 Then<br />
For K ∈ 1,2,...,(16 - Length(ST)) do<br />
ST = "0"+ ST<br />
end for<br />
End If<br />
ST ← copy(ST, 1, 12)<br />
Tin ← copy(δ, ((i - 1) * 4) + 1, 4)<br />
ST ← ST + Tin<br />
selected B ← 0<br />
selected H ← 1<br />
For M ∈ 16,15,...,1 do<br />
Tin ← copy(ST, M, 1)<br />
G ← Val(Tin)<br />
B ← B + (H * G)<br />
55<br />
<br />
Vũ Văn Tâm và Đtg<br />
<br />
Tạp chí KHOA HỌC & CÔNG NGHỆ<br />
<br />
H←H+H<br />
end for<br />
B ← B * Dau<br />
data[i] to file audio2 ← B<br />
end for<br />
Close file audio1<br />
Close file audio2<br />
+ Thuật toán giải nhúng: Chuỗi bit tin (δ)<br />
được hình thành từ việc lấy 4 bit thấp của các<br />
mẫu audio liên tiếp nhau cho đến khi gặp<br />
chuỗi bit đánh dấu kết thúc nhúng.<br />
Open file audio2<br />
C ← data[41..44] for file audio2<br />
C ← C/2<br />
selected Giai ← 0<br />
For j ∈ 1,2,...,C do<br />
i ← j + 44<br />
B ← data[i] for file audio2<br />
B ← |B|<br />
selected ST ← ""<br />
For K ∈ 1,2,...,20 do<br />
ST ← (B Mod 2) + ST<br />
B←B\2<br />
If B == 0 Then Exit For<br />
end for<br />
If Length(ST) < 16 Then<br />
For K ∈ 1,2,..., (16 - Length(ST)) do<br />
ST ← "0" + ST<br />
end for<br />
End If<br />
ST ← copy(ST, 13, 4)<br />
If Giai == 0 Then<br />
Chuoi ← Chuoi + ST<br />
Else<br />
δ ← δ + ST<br />
End If<br />
If Length(Chuoi) >= 8 Then<br />
ST ← copy(Chuoi, Length(Chuoi) - 7, 8)<br />
If ST == "00110011" Then Giai ← 1<br />
End If<br />
If Length(δ) >= 8 Then<br />
ST ← copy(δ, Length(δ ) - 7, 8)<br />
If ST == "11001100" Then Giai ← 2<br />
δ ← copy(δ, 1, Length(δ) - 8)<br />
End If<br />
End If<br />
If Giai == 2 Then Exit For<br />
End for<br />
Close file audio2<br />
56<br />
<br />
122(08): 53 - 58<br />
<br />
THỰC NGHIỆM VÀ ĐÁNH GIÁ<br />
Dữ liệu audio được sử dụng thử nghiệm là<br />
file âm thanh chimes.wav trong Windows có<br />
kích thước phần data là Sa = 35380 [byte] và<br />
các tham số khác như hình 4. Tin cần nhúng<br />
là các đoạn văn bản tiếng Việt có độ dài (số<br />
ký tự) khác nhau. Ngoài ra, sử dụng phương<br />
pháp nhúng LSB không nén [2], [4], [5] để so<br />
sánh hiệu quả nhúng, độ bảo mật của tin<br />
nhúng. Tỷ lệ nhúng (B) sẽ đạt 100% khi số bit<br />
tin nhúng = Sa / 4 . Giao diện thử nghiệm<br />
được lập trình bằng ngôn ngữ Visual Basic<br />
(Hình 4). Lần thử 1, tin cần nhúng là 1 đoạn<br />
văn bảng tiếng Việt thông dụng bao gồm chữ<br />
cái (phụ âm và nguyên âm) và chữ số; Lần<br />
thử 2, văn bản cần nhúng hoàn toàn là các<br />
phụ âm; Lần thử 3, văn bản cần nhúng hoàn<br />
toàn là 160 nguyên âm và các giãn cách giữa<br />
chúng. Kết quả thử nghiệm và so sánh được<br />
trình bày trong bảng 1a, 1b.<br />
Bảng 1a. Kết quả thử nghiệm nhúng thông thường<br />
Lần<br />
thử<br />
1<br />
2<br />
3<br />
TB<br />
<br />
Độ<br />
dài<br />
văn<br />
bản<br />
(Te)<br />
8.000<br />
ký tự<br />
7.700<br />
ký tự<br />
554<br />
ký tự<br />
5.418<br />
ký tự<br />
<br />
Không mã hóa, không nén<br />
Dung<br />
lượng<br />
tin (M2)<br />
<br />
Tỷ lệ<br />
nhúng<br />
(B2)<br />
<br />
Bảo mật<br />
<br />
64.000<br />
bit<br />
61.600<br />
bit<br />
18.240<br />
bit<br />
47.95<br />
bit<br />
<br />
90,45 %<br />
<br />
Không<br />
<br />
87,055<br />
%<br />
25,78 %<br />
<br />
Không<br />
<br />
67,76 %<br />
<br />
Không<br />
<br />
Không<br />
<br />
Bảng 1b. Kết quả thử nghiệm nhúng<br />
theo mô hình đề xuất<br />
Lần<br />
thử<br />
1<br />
2<br />
3<br />
TB<br />
<br />
Độ<br />
dài<br />
văn<br />
bản<br />
(Te)<br />
8.000<br />
ký tự<br />
7.700<br />
ký tự<br />
554<br />
ký tự<br />
5.418<br />
ký tự<br />
<br />
Có mã hóa, có nén<br />
Dung<br />
lượng<br />
tin (M1)<br />
<br />
Tỷ lệ<br />
nhúng<br />
(B1)<br />
<br />
Bảo mật<br />
<br />
38.400<br />
bit<br />
56.462<br />
bit<br />
2.720<br />
bit<br />
32.527<br />
bit<br />
<br />
54,27 %<br />
<br />
Có<br />
<br />
79,79 %<br />
<br />
Có<br />
<br />
3,84 %<br />
<br />
Có<br />
<br />
45,97 %<br />
<br />
Có<br />
<br />
Vũ Văn Tâm và Đtg<br />
<br />
Tạp chí KHOA HỌC & CÔNG NGHỆ<br />
<br />
122(08): 53 - 58<br />
<br />
nhúng giảm từ đó giảm mức độ ảnh hưởng<br />
đến chất lượng của dữ liệu audio gốc (Hình<br />
5); thì thuật toán còn cho phép bảo mật được<br />
nội dung văn bản cần nhúng (bên nhận phải<br />
có khóa mã giống bên phát mới giải mã được<br />
tin nhúng). Đặc biệt, khi nhúng các văn bản<br />
thông thường (có nhiều thành phần nguyên<br />
âm) thì dung lượng tin cần nhúng giảm đáng<br />
kể và độ bảo mật càng cao.<br />
<br />
Hình 4. Giao diện thử nghiệm theo mô hình<br />
<br />
Từ cấu trúc của hai ma trận khóa mã, chúng<br />
ta có thể đánh giá độ bảo mật như sau:<br />
- Độ bảo mật của khóa mã phụ âm:<br />
KA = 16! 4 !<br />
<br />
- Độ bảo mật của khóa mã nguyên âm:<br />
K Ng = 16! 16!<br />
<br />
(a) Dữ liệu audio trước khi nhúng<br />
<br />
- Độ bảo mật của hệ thống:<br />
K HT = K A<br />
<br />
(b) Dữ liệu audio sau nhúng theo mô hình<br />
<br />
K Ng = (16!<br />
<br />
4 !) (16! 16!)<br />
<br />
Như vậy, giá trị của K HT là rất lớn; Ngoài ra,<br />
việc sắp xếp lại các tổ hợp bit ở hàng 1 và cột<br />
1 của các ma trận khóa mã trên sẽ tạo ra một<br />
khóa mã mới.<br />
KẾT LUẬN<br />
<br />
(c) Dữ liệu audio sau nhúng thông thường<br />
Hình 5. Dạng sóng dữ liệu audio thực nghiệm<br />
<br />
Dung lượng tin cần nhúng (M) và tỷ lệ nhúng<br />
(B) được tính theo công thức sau:<br />
- Trường hợp nhúng thông thường:<br />
M2 = Te<br />
B2 = (M2<br />
<br />
8 [bit];<br />
100) / (Sa / 4) [%];<br />
<br />
- Trường hợp có mã hóa, nén:<br />
M1 = (Pa<br />
<br />
6)<br />
<br />
Nga<br />
<br />
B1 = (M1<br />
<br />
100) / (Sa / 4) [%];<br />
<br />
11 [bit];<br />
<br />
Trong đó, Pa , Nga là số phụ âm và nguyên<br />
âm của văn bản cần nhúng.<br />
Kết quả thử nghiệm với 3 dạng văn bản khác<br />
nhau (Bảng 1) đều cho kết quả tốt hơn so với<br />
phương pháp nhúng thông thường. Ngoài việc<br />
giảm dung lượng tin cần nhúng dẫn tới tỷ lệ<br />
<br />
Việc kết hợp mã hóa, nén văn bản tiếng Việt<br />
khi thực hiện nhúng vào dữ liệu audio là một<br />
hướng tiếp cận mới trong xử lý tín hiệu số.<br />
Qua phân tích đặc điểm của chữ viết tiếng<br />
Việt, chúng tôi đã đưa ra mô hình, xây dựng<br />
các thuật toán để thực hiện nội dung trên. Qua<br />
thử nghiệm mô hình với các loại văn bản khác<br />
nhau cho thấy dung lượng tin cần nhúng M1 ,<br />
tỷ lệ nhúng B1 được giảm đáng kể so với<br />
phương pháp nhúng thông thường; đồng thời<br />
bảo mật được nội dung văn bản tiếng Việt cần<br />
nhúng. Kết quả nghiên cứu này rất có ý nghĩa<br />
cho hướng nghiên cứu về nhúng văn bản tiếng<br />
Việt trong các dữ liệu số khác.<br />
TÀI LIỆU THAM KHẢO<br />
1. Vũ Đình Ba, “Giấu thông tin trong cơ sở dữ<br />
liệu không gian,” Tạp chí Nghiên cứu khoa học kỹ<br />
thuật và công nghệ Quân sự, số 4, 30-37.<br />
2. Nguyễn Xuân Huy, Huỳnh Bá Diệu, “Nghiên<br />
cứu kỹ thuật giấu tin trong audio hỗ trợ xác thực,”<br />
Tạp chí Khoa học ĐHQGHN, Khoa học T.nhiên<br />
và Công nghệ, số 1 (25), 69-74.<br />
<br />
57<br />
<br />