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 vị trí mẫu dùng để giấu tin. Diễn giải:
Khoá được sử dụ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 tạo bằng cách lấy giá trị MD5 (độ dài 32 bytes) của tệp tin khoá do người dùng chọn và mật khẩu do người dùng nhập vào, sau đó tiến hành XOR hai đoạ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ử dụ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 vị trí khác nhau. Các vị trí này được xác định bằng cách chia lấy giá trị dư của các phần tử khoá cho 8 sau đó cộng thêm với 1 để loại bỏ trường hợp giá trị bằng 0, vì bít giấu tin kế tiếp sẽ có vị trí bằng vị trí hiện tại cộng với số dư này. Kết quả thu được bộ 32 giá trị nằm trong tập các giá trị {1, 2, 3, 4, 5, 6, 7, 8}, đây chính là các bước nhảy của vị 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 vị trí mẫu dùng để giấu tin phù hợp với các bước nhảy được quy định bởi khoá. Nếu chế độ giấu là 6 thì tiến hành loại bỏ các vị trí mẫu có giá trị <128 hoặc >= -128, với các chế độ thấp hơn thì giá trị loại bỏ là <64 hoặc >= -64. Các giá trị thoả mãn tạo thành mảng các vị trí mẫu dùng để giấu tin.
Như vậy sau khi kết thúc quá trình tạ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 vị trí các mẫu phục vụ 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 vị 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 thị ở dạng chuỗi văn bản được đọc theo kiểu byte nhị 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 lạ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, vị trí của mẫu nhúng được quy định bởi các giá trị trong mảng các vị trí mẫu phục vụ giấu tin có được từ quá trình tạo khoá. Vị trí của mẫu giấu bít tin này bằng vị 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 ở dạ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ì vị trí giấu tin rơi vào byte cao của mẫu. Nên trong trường hợp vị trí giấu là lẻ thì thực hiện cộng thêm 1 vào giá trị đó để có được vị 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 vị trí lẻ nghĩa là giấu vào byte cao của mẫu, giá trị tác động lúc đó (với trọng số là 6) sẽ là ±16384 đơn vị, dẫn tới giá trị của mẫu tăng lên hay giảm đi một giá trị rất lớn hoặc có thể bị 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í dụ việc thực hiện nhúng thông tin mật vào bít có trọng số là 6 sử dụng phương pháp điều chỉnh bít được thực hiện như sau:
- Nếu giá trị bít giấu tin bằng 1 thì chuyển về 0, đệm thêm một bít có giá trị bằng 0 ngay sau bít giấu tin, các bít còn lại thay đổi hết về giá trị 1. Ví dụ: byte chứa có dạng x1xx xxxx với x là 1 hoặc 0 thì ta có x1xx xxxx => x001 1111
- Nếu giá trị bít giấu tin bằng 0 thì chuyển về 1, đệm thêm một bít có giá trị bằng 1 ngay sau bít giấu tin, các bít còn lại thay đổi hết về giá trị 0. Ví dụ: byte chứa có dạng x0xx xxxx với x là 1 hoặc 0 thì ta có x0xx xxxx => x110 0000
Nếu giá trị bít giấu tin giống giá trị của bít thông tin mật thì giá trị này giữ nguyên, các bít sau thay đổi giống với trường hợp trên. Ví dụ:
- Byte chứa có dạng x1xx xxxx => x110 0000 - Byte chứa có dạ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á trị tại bít giấu nếu giá trị đó khác với giá trị 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 ở vị 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 vị trí giấu, vị trí giấu bít có trọ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 lạ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á trị 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 mọi byte mẫu có chứa thông tin mật đều có dạng x001 1111 hoặc x110 0000 với x là giá trị 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 đọc thông tin từng byte và diễn giải ra dạng nhị 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ó dạng tương tự như vậy. Tuy nhiên, đây là một khả năng chịu may rủi cao nên vấn đề đặt ra là phải tạo các byte giả thông tin. Nghĩa là tạo các byte bên cạnh byte chứa thông tin mật với dạ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 tạo byte “mặt nạ” trên mẫu ngay sau mẫu đó. Và phải hạ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á trị bít thông tin giấu giống với giá trị 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ó dạng x1xx xxxx => x110 0000 - Byte chứa có dạ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á trị của các bít phía sau bít giấu tin và khi đó khả năng chịu tác động từ bên ngoài phụ thuộc vào may rủi. Ví dụ:
Byte có dạng 1100 0000 khi trừ 1 thì sẽ được 1011 1111. Byte có dạng 1011 1111 khi cộng 1 thì sẽ được 1100 0000.
Nghĩa là giá trị bít tin mật bị 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ó dạng x001 1111 hoặc x110 0000, việc ta tạo bít đệm là để chống lại tác động từ bên ngoài vào ở một mức độ nào đó. Ở đây giá trị tối đa mà bít đệm có thể chịu được là + 31 và -32 với trường hợp giấu tin vào bít có trọng số là 6.
Cách thức hoạt động cụ thể của module nhúng thông tin mật trong trường hợp trọ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, tạ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ử dụng phép dịch trái bít “>>” các giá trị bít này sẽ lần lượt được so sánh với giá trị của bít có trọng số là 6 trong byte thuộc mảng dữ liệu mẫu dùng để giấu tin. Để lấy được giá trị bít này thực hiện phép AND “&” với byte có giá trị là 64 (thập phân) hay 0x40 (hexa).
Nếu giá trị của bít tin mật khác với giá trị của bít vị trí giấu tin mật thì thì thực hiện đổi giá trị của bít vị trí giấu tin mật bằng với giá trị của bít tin mật, thiết lập bít đệm có giá trị 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ử dụng phép XOR “^” và OR “|” với byte dạ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á trị của bít tin mật giống với giá trị của bít vị trí giấu tin mật thì thiết lập bít đệm có giá trị bằng bít tin mật và thực hiện đổi các giá trị các bít sau đó cho phù hợp với thuật toán. Thực hiện như sau, lưu ý sử dụng phép XOR “^” và OR “|” với byte dạ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ể bị tấn công gây nên sự sai lệch về nội dụ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 để tạ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 vị trí giấu tin tương đồng. Sau đó áp dụng khoá bí mật và mảng các vị 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 vị trí giấu tin mật, mỗi phần tử của mảng mang giá trị là vị 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ử dụng phép và “&” với byte có định dạng thích hợp trên mẫu chứa tin để lấy ra bít có trọ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 vị 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 đã bị 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ử dụ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 dạ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á trị SNR và số lượng các mẫu sử dụng, chế độ giấu. Đầu ra: đồ thị thể hiện SNR với chế độ giấu tương ứng.
Diễn giải:
Trong quá trình giấu tin, tại mỗi vị trí giấu tin sự thay đổi của bít chứa thông tin mật đó sẽ tác động đến giá trị tổng thể của mẫu đó. Nếu trọ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á trị tuyệt đối của hiệu số giữa tín hiệu gốc và tín hiệu sau khi bị thay đổi tại vị 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á trị SNR và giá trị 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 cụ tích hợp chuyên phục vụ vẽ biểu đồ một cách chuyên nghiệp và đẹp mắt. Với công trình chủ yếu mang tính nghiên cứu thì có thể áp dụng bộ cài công cụ này phục vụ cho mục đích đánh giá. Bộ công cụ được chọ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 mục thư viện là có thể sử dụng ngay. Chỉ cần xây dựng một module nhỏ để thao tác và sử dụ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 cụ 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 trích xấu thông tin mật. Trước khi rút trích thông tin mật, tệp WAVE sau khi đã nhúng thông tin mật phải trải qua nhiều kiểu tấn công khác nhau để đánh giá mức độ bền vững, cũng như phải kiểm tra được tính trong suốt. Độ bền vững và tính trong suốt chính là hai tiêu chí chính trong phần kiểm nghiệm và so sánh đánh giá. Do đây là ứng dụng về Steganography nên tiêu chí về kích thước thông tin nhúng là một vấn đề khá được coi trọng.