Thiết kế các module

Một phần của tài liệu lsb (Trang 56 - 67)

a. Module tính toán khoá

Biểu đồ tiến trình module tính toán khoá:

Đầu vào: tê ̣p WAVE chứa, tê ̣p tin khoá, mâ ̣t khẩu, chế đô ̣ giấu. Đầu ra: mảng khoá, mảng các vi ̣ trí mẫu dùng để giấu tin. Diễn giải:

Khoá được sử du ̣ng trong quá trình nhúng và trích xuất thông tin để ngăn chă ̣n những người không được phép truy câ ̣p vào thông tin mô ̣t cách đầy đủ và dễ dàng. Khoá được ta ̣o bằng cách lấy giá tri ̣ MD5 (đô ̣ dài 32 bytes) của tê ̣p tin khoá do người dùng cho ̣n và mâ ̣t khẩu do người dùng nhâ ̣p vào, sau đó tiến hành XOR hai đoa ̣n mã MD5 này với nhau sẽ được mô ̣t khoá cuối cùng có đô ̣ lớn là 32 bytes. Khoá này được sử du ̣ng để mã hoá thông tin mâ ̣t được thực hiê ̣n trong module nhúng thông tin mâ ̣t. Thêm vào đó, không thực hiê ̣n nhúng các bít tin sau khi đươ ̣c mã hoá mô ̣t cách lần lượt trong mảng dữ liê ̣u mẫu mà sẽ giấu vào các vi ̣ trí khác nhau. Các vi ̣ trí này được xác đi ̣nh bằng cách chia lấy giá tri ̣ dư của các phần tử khoá cho 8 sau đó cô ̣ng thêm với 1 để loa ̣i bỏ trường hợp giá tri ̣ bằng 0, vì bít giấu tin kế tiếp sẽ có vi ̣ trí bằng vi ̣ trí hiê ̣n ta ̣i cô ̣ng với số dư này. Kết quả thu được bô ̣ 32 giá tri ̣ nằm trong tâ ̣p các giá tri ̣ {1, 2, 3, 4, 5, 6, 7, 8}, đây chính là các bước nhảy của vi ̣ trí mẫu. Tuỳ vào chế đô ̣ giấu mà thực hiê ̣n duyê ̣t tìm trên mảng dữ liê ̣u mẫu của tê ̣p WAVE chứa để tìm ra các vi ̣ trí mẫu dùng để giấu tin phù hợp với các bước nhảy được quy đi ̣nh bởi khoá. Nếu chế đô ̣ giấu là 6 thì tiến hành loa ̣i bỏ các vi ̣ trí mẫu có giá tri ̣ <128 hoă ̣c >= -128, với các chế đô ̣ thấp hơn thì giá tri ̣ loa ̣i bỏ là <64 hoă ̣c >= -64. Các giá tri ̣ thoả mãn ta ̣o thành mảng các vi ̣ trí mẫu dùng để giấu tin.

Như vâ ̣y sau khi kết thúc quá trình ta ̣o khoá, kết quả thu được gồm mô ̣t mảng khoá số nguyên bao gồm 32 phần tử và mô ̣t mảng các vi ̣ trí các mẫu phu ̣c vu ̣ cho giấu thông tin mâ ̣t. Kích thước tối đa của thông tin mâ ̣t là bằng đô ̣ dài của mảng này chia 8 (với ký tự 1 byte) hoă ̣c 16 (với ký tự 2 bytes unicode).

b. Module nhúng thông tin mâ ̣t

Sơ đồ giải thuâ ̣t:

Đầu vào: thông tin tê ̣p WAVE gốc, thông tin mâ ̣t, khoá bí mâ ̣t, mảng các vi ̣ trí giấu tin, chế đô ̣ giấu.

Đầu ra: tê ̣p tin WAVE chứa thông tin mâ ̣t. Diễn giải:

Thông tin mâ ̣t đươ ̣c nhâ ̣p từ tê ̣p hoă ̣c từ bàn phím hiển thi ̣ ở da ̣ng chuỗi văn bản được đo ̣c theo kiểu byte nhi ̣ phân. Mảng các bytes thông tin mâ ̣t này đươ ̣c mã hoá bởi khoá bí mâ ̣t bằng cách XOR lần lượt từng byte thông tin mâ ̣t với từng phần tử trong khoá bí mâ ̣t, được lă ̣p la ̣i cho đến khi hết các byte thông tin mâ ̣t. Thông tin sau khi đươ ̣c mã hoá sẽ được nhúng lần lượt từng bít mô ̣t vào trong mảng dữ liê ̣u mẫu tê ̣p WAVE chứa, vi ̣ trí của mẫu nhúng được quy đi ̣nh bởi các giá tri ̣ trong mảng các vi ̣ trí mẫu phu ̣c vu ̣ giấu tin có được từ quá trình ta ̣o khoá. Vi ̣ trí của mẫu giấu bít tin này bằng vi ̣ trí của mẫu giấu bít tin trước cô ̣ng với giá của bước nhảy lấy lần lượt trong mảng bước nhảy được tính trong quá trình lấy khoá.

Do tê ̣p WAVE ở da ̣ng có đô ̣ lớn mỗi mẫu là 16 bít, các bước nhảy thuô ̣c trong tâ ̣p hơ ̣p {1, 2, 3, 4, 5, 6, 7, 8} nên trường hợp nhảy mẫu với các bước nhảy lẻ thì vi ̣ trí giấu tin rơi vào byte cao của mẫu. Nên trong trường hợp vi ̣ trí giấu là lẻ thì thực hiê ̣n cô ̣ng thêm 1 vào giá tri ̣ đó để có được vi ̣ trí của byte thấp của mẫu đó. Vì dữ liê ̣u được lưu trữ trong hê ̣ thống Intel thuô ̣c kiểu LE nên nếu thực hiê ̣n giấu vào vi ̣ trí lẻ nghĩa là giấu vào byte cao của mẫu, giá tri ̣ tác đô ̣ng lúc đó (với tro ̣ng số là 6) sẽ là ±16384 đơn vi ̣, dẫn tới giá tri ̣ của mẫu tăng lên hay giảm đi mô ̣t giá tri ̣ rất lớn hoă ̣c có thể bi ̣ phá huỷ hoàn toàn.

Tuỳ vào chế đô ̣ giấu mà thực hiê ̣n phương pháp giấu tin phù hợp, nhìn chung là tương đối giống nhau về cơ chế giữa các chế đô ̣ giấu. Ví du ̣ viê ̣c thực hiê ̣n nhúng thông tin mâ ̣t vào bít có tro ̣ng số là 6 sử du ̣ng phương pháp điều chỉnh bít được thực hiê ̣n như sau:

- Nếu giá tri ̣ bít giấu tin bằng 1 thì chuyển về 0, đê ̣m thêm mô ̣t bít có giá tri ̣ bằng 0 ngay sau bít giấu tin, các bít còn la ̣i thay đổi hết về giá tri ̣ 1. Ví du ̣: byte chứa có da ̣ng x1xx xxxx với x là 1 hoă ̣c 0 thì ta có x1xx xxxx => x001 1111

- Nếu giá tri ̣ bít giấu tin bằng 0 thì chuyển về 1, đê ̣m thêm mô ̣t bít có giá tri ̣ bằng 1 ngay sau bít giấu tin, các bít còn la ̣i thay đổi hết về giá tri ̣ 0. Ví du ̣: byte chứa có da ̣ng x0xx xxxx với x là 1 hoă ̣c 0 thì ta có x0xx xxxx => x110 0000

Nếu giá tri ̣ bít giấu tin giống giá tri ̣ của bít thông tin mâ ̣t thì giá tri ̣ này giữ nguyên, các bít sau thay đổi giống với trường hợp trên. Ví du ̣:

- Byte chứa có da ̣ng x1xx xxxx => x110 0000 - Byte chứa có da ̣ng x0xx xxxx => x001 1111

Với phương pháp không điều chỉnh thì chỉ thực hiê ̣n thay đổi giá tri ̣ ta ̣i bít giấu nếu giá tri ̣ đó khác với giá tri ̣ của bít tin mâ ̣t, còn với trường hợp giống thì không thực hiê ̣n thay đổi, coi như đã thực hiê ̣n giấu bít tin vào đó và thực hiê ̣n giấu bít tin tiếp theo ở vi ̣ trí mẫu tiếp theo.

Quá trình nhúng thông tin hoàn tất, thực hiê ̣n ghi tê ̣p WAVE mới có chứa thông tin mâ ̣t, có kích thước giống hê ̣t với tê ̣p WAVE gốc. Chất lượng giảm so với tê ̣p WAVE gốc tuỳ vào vi ̣ trí giấu, vi ̣ trí giấu bít có tro ̣ng số càng cao thì chất lươ ̣ng càng giảm.

Tuy nhiên, nếu xét ở cả 2 phương pháp giấu có điều chỉnh và không có điều chỉnh thì có nhưng vấn đề sau cần giải quyết là khả năng trong suốt và khả năng chống la ̣i tác đô ̣ng bên ngoài.

Về khả năng trong suốt:

Với phương pháp giấu tin không điều chỉnh thì viê ̣c thay đổi giá tri ̣ mô ̣t bít trong byte sẽ không làm ảnh hưởng gì đến cảm quan bên ngoài về byte đó.

Với phương pháp điều chỉnh mo ̣i byte mẫu có chứa thông tin mâ ̣t đều có da ̣ng x001 1111 hoă ̣c x110 0000 với x là giá tri ̣ bất kì 0 hoă ̣c 1. Điều này là

không thực sự trong suốt với những người cố tình đo ̣c thông tin từng byte và diễn giải ra da ̣ng nhi ̣ phân. Lúc này người đó sẽ tìm cách trích xuất thông tin lấy thông tin mâ ̣t, có khả năng có những bít không giấu tin mâ ̣t cũng có da ̣ng tương tự như vâ ̣y. Tuy nhiên, đây là mô ̣t khả năng chi ̣u may rủi cao nên vấn đề đă ̣t ra là phải ta ̣o các byte giả thông tin. Nghĩa là ta ̣o các byte bên ca ̣nh byte chứa thông tin mâ ̣t với da ̣ng tương tự như byte giấu tin, mă ̣t trái của vấn đề này là sẽ làm ảnh hưởng đến chất lượng tín hiê ̣u khá nhiều cũng như mất thông tin nếu như không có phương pháp hợp lý. Có mô ̣t hướng giải pháp là với những bước nhảy lớn hơn 4 (như là 5, 6, 7 và 8) thì thực hiê ̣n ta ̣o byte “mă ̣t na ̣” trên mẫu ngay sau mẫu đó. Và phải ha ̣n chế tối đa mức đô ̣ ảnh hưởng lên tín hiê ̣u gốc bằng cách coi như giá tri ̣ bít thông tin giấu giống với giá tri ̣ bít giấu tin, lúc này mức đô ̣ thay đổi cao nhất cũng chỉ là ±32. Có thể hiểu như sau:

- Byte chứa có da ̣ng x1xx xxxx => x110 0000 - Byte chứa có da ̣ng x0xx xxxx => x001 1111

Về khả năng chống lại tác động bên ngoài:

Với phương pháp giấu tin không điều chỉnh thì sẽ không thể kiểm soát đươ ̣c đươ ̣c giá tri ̣ của các bít phía sau bít giấu tin và khi đó khả năng chi ̣u tác đô ̣ng từ bên ngoài phu ̣ thuô ̣c vào may rủi. Ví du ̣:

Byte có da ̣ng 1100 0000 khi trừ 1 thì sẽ được 1011 1111. Byte có da ̣ng 1011 1111 khi cô ̣ng 1 thì sẽ được 1100 0000.

Nghĩa là giá tri ̣ bít tin mâ ̣t bi ̣ mất mă ̣c dù mức đô ̣ tác đô ̣ng là cực kì nhỏ, dẫn tới sự mất thông tin mà ta không thể quản lý. Viê ̣c sai lê ̣ch thông tin mô ̣t bít sẽ dẫn tới sai lê ̣ch của mô ̣t byte hay nhiều bytes (ký tự unicode).

Với phương pháp giấu tin có điều chỉnh thì byte chứa thông tin có da ̣ng x001 1111 hoă ̣c x110 0000, viê ̣c ta ta ̣o bít đê ̣m là để chống la ̣i tác đô ̣ng từ bên ngoài vào ở mô ̣t mức đô ̣ nào đó. Ở đây giá tri ̣ tối đa mà bít đê ̣m có thể chi ̣u được là + 31 và -32 với trường hợp giấu tin vào bít có tro ̣ng số là 6.

Cách thức hoa ̣t đô ̣ng cu ̣ thể của module nhúng thông tin mâ ̣t trong trường hơ ̣p tro ̣ng số của bít giấu tin là 6 với phương pháp giấu tin có điều chỉnh:

Thực hiê ̣n vòng lă ̣p duyê ̣t từ byte đầu tới byte cuối của thông tin mâ ̣t, ta ̣i mỗi byte thông tin mâ ̣t thực hiê ̣n mô ̣t vòng lă ̣p 8 lần để lấy ra từng bít của byte thông tin mâ ̣t đó.

Để làm được điều này sử du ̣ng phép di ̣ch trái bít “>>” các giá tri ̣ bít này sẽ lần lượt được so sánh với giá tri ̣ của bít có tro ̣ng số là 6 trong byte thuô ̣c mảng dữ liê ̣u mẫu dùng để giấu tin. Để lấy được giá tri ̣ bít này thực hiê ̣n phép AND “&” với byte có giá tri ̣ là 64 (thâ ̣p phân) hay 0x40 (hexa).

Nếu giá tri ̣ của bít tin mâ ̣t khác với giá tri ̣ của bít vi ̣ trí giấu tin mâ ̣t thì thì thực hiê ̣n đổi giá tri ̣ của bít vi ̣ trí giấu tin mâ ̣t bằng với giá tri ̣ của bít tin mâ ̣t, thiết lâ ̣p bít đê ̣m có giá tri ̣ bằng bít tin mâ ̣t và điều chỉnh các bít sau đó phù hợp với thuâ ̣t toán. Thực hiê ̣n như sau, lưu ý sử du ̣ng phép XOR “^” và OR “|” với byte da ̣ng thích hợp để giải quyết yêu cầu:

x1xx xxxx ^ 0x40 => x0xx xxxx | 0x3f => x011 1111 ^ 0x20 => x001 1111 x0xx xxxx | 0x7f => x111 1111 ^ 0x3f => x100 0000 ^ 0x20 => x110 0000

Nếu giá tri ̣ của bít tin mâ ̣t giống với giá tri ̣ của bít vi ̣ trí giấu tin mâ ̣t thì thiết lâ ̣p bít đê ̣m có giá tri ̣ bằng bít tin mâ ̣t và thực hiê ̣n đổi các giá tri ̣ các bít sau đó cho phù hợp với thuâ ̣t toán. Thực hiê ̣n như sau, lưu ý sử du ̣ng phép XOR “^” và OR “|” với byte da ̣ng thích hợp để giải quyết yêu cầu:

x1xx xxxx | 0x3f => x111 1111 ^ 0x1f => x110 0000 x0xx xxxx | 0x3f => x011 1111 ^ 0x20 => x001 1111

c. Module trích xuất thông tin mâ ̣t

Sơ đồ giải thuâ ̣t:

Đầu vào: tê ̣p WAVE gốc, tê ̣p WAVE chứa thông tin mâ ̣t, khoá bí mâ ̣t, chế đô ̣ giấu.

Đầu ra: nô ̣i dung thông tin mâ ̣t. Diễn giải:

Tê ̣p WAVE chứa thông tin mâ ̣t được truyền tải qua các phương tiê ̣n truyền thông có thể bi ̣ tấn công gây nên sự sai lê ̣ch về nô ̣i du ̣ng. Thực hiê ̣n tính toán khoá bí mâ ̣t dựa trên tê ̣p WAVE gốc và mâ ̣t khẩu dùng để ta ̣o khoá bí mâ ̣t lúc thực hiê ̣n giấu tin mâ ̣t để lấy ra được khoá bí mâ ̣t và mảng các vi ̣ trí giấu tin tương đồng. Sau đó áp du ̣ng khoá bí mâ ̣t và mảng các vi ̣ trí giấu tin vào mảng dữ liê ̣u tê ̣p WAVE chứa thông tin mâ ̣t.

Duyê ̣t lần lươ ̣t từ đầu tới cuối mảng vi ̣ trí giấu tin mâ ̣t, mỗi phần tử của mảng mang giá tri ̣ là vi ̣ trí của mẫu dữ liê ̣u chứa thông tin mâ ̣t trong mảng dữ liê ̣u mẫu chứa tin mâ ̣t. Tuỳ vào chế đô ̣ giấu mà ta sử du ̣ng phép và “&” với byte có đi ̣nh da ̣ng thích hợp trên mẫu chứa tin để lấy ra bít có tro ̣ng số tương ứng, khi trích xuất đủ 8 bít tin mâ ̣t thì thực hiê ̣n đưa vào 1 byte thông tin. Quá trình được thực hiê ̣n cho đến khi duyê ̣t hết mảng vi ̣ trí giấu tin.

Quá trình trích xuất hoàn tất thu được mô ̣t mảng bytes chứa nô ̣i dung thông tin mâ ̣t đã bi ̣ mã hoá. Tiến hành giải mã nô ̣i dung này bằng khoá bí mâ ̣t thu đươ ̣c nô ̣i dung thông tin mâ ̣t. Có thể sử du ̣ng chức năng Lưu Tê ̣p Thông Tin Mâ ̣t để thực hiê ̣n lưu thông tin mâ ̣t ra da ̣ng tê ̣p văn bản.

d. Module tính toán SNR

Sơ đồ giải thuâ ̣t:

Hình 4.9. Biểu đồ tiến trình module tính toán SNR

Đầu vào: mảng các giá tri ̣ SNR và số lượng các mẫu sử du ̣ng, chế đô ̣ giấu. Đầu ra: đồ thi ̣ thể hiê ̣n SNR với chế đô ̣ giấu tương ứng.

Diễn giải:

Trong quá trình giấu tin, ta ̣i mỗi vi ̣ trí giấu tin sự thay đổi của bít chứa thông tin mâ ̣t đó sẽ tác đô ̣ng đến giá tri ̣ tổng thể của mẫu đó. Nếu tro ̣ng số của bít này càng cao thì sự tác đô ̣ng càng nhiều, mức đô ̣ thay được được tính bằng công thức ±2n.

Thông số SNR đươ ̣c tính bằng công thức 20*log10 (Signal/Noise) thể hiê ̣n mức đô ̣ ảnh hưởng của tín hiê ̣u nhiễu tới chất lượng của tín hiê ̣u gốc. Với Signal là năng lượng của tín hiê ̣u gốc và Noise là năng lượng tín hiê ̣u nhiễu, được tính bằng các lấy giá tri ̣ tuyê ̣t đối của hiê ̣u số giữa tín hiê ̣u gốc và tín hiê ̣u sau khi bi ̣ thay đổi ta ̣i vi ̣ trí mẫu có chứa thông tin mâ ̣t. Thông thường chỉ số này ở mức 30 là có thể chấp nhâ ̣n được, chỉ số này càng cao càng tốt.

Thông tin về giá tri ̣ SNR và giá tri ̣ SNR xét trên số lượng mẫu được đưa vào chức năng Tính Toán SNR để thực hiê ̣n vẽ biểu đồ SNR. Có thể xây dựng hoàn toàn module này nhưng hiê ̣n nay có khá nhiều công cu ̣ tích hợp chuyên phu ̣c vu ̣ vẽ biểu đồ mô ̣t cách chuyên nghiê ̣p và đe ̣p mắt. Với công trình chủ yếu mang tính nghiên cứu thì có thể áp du ̣ng bô ̣ cài công cu ̣ này phu ̣c vu ̣ cho mu ̣c đích đánh giá. Bô ̣ công cu ̣ được cho ̣n là jfreechart, chỉ cần tải tê ̣p thư viê ̣n

jfreechart–1.0.13.jar và tê ̣p thư viê ̣n hỗ trợ jcommon–1.0.16.jar sau đó thực hiê ̣n thêm vào mu ̣c thư viê ̣n là có thể sử du ̣ng ngay. Chỉ cần xây dựng mô ̣t module nhỏ để thao tác và sử du ̣ng tới các chức năng được xây dựng sẵn trong bô ̣ thư viê ̣n này.

CHƯƠNG 5 KẾT QUẢ THỰC NGHIỆM VÀ SO SÁNH ĐÁNH GIÁ 5.1. Giới thiê ̣u

Chương trình ẩn giấu thông tin bằng phương pháp LSB cải tiến được phát triển trên môi trường công nghê ̣ Java với công cu ̣ lâ ̣p trình NetBean IDE 6.9.1. Thuâ ̣t toán gồm có hai module chính là module nhúng thông tin mâ ̣t và module

Một phần của tài liệu lsb (Trang 56 - 67)

Tải bản đầy đủ (DOC)

(86 trang)
w