6. Bố cục của luận văn
3.1.1. Tính tổng xor của khối ảnh B
Cho khối ảnh B có kích thước 16*16. Tổng xor lẻ của khối ảnh được tính bằng cách xor vị trí các ô chứa giá trị lẻ trong khối ảnh. Vị trí các điểm ảnh sẽ được quét tuần tự theo từng dòng, dòng 1 từ vị trí 0 đến 15, dòng 2 từ vị trí 16 đến 31 và tương tự như vậy, dòng 16 sẽ từ vị trí 239 đến 255. Các vị trí được đánh số từ 0 đến 255 (tương ứng với giá trị của 1 byte). Dựa vào giá trị tổng xor của khối, thuật toán sẽ điều chỉnh giá trị một điểm ảnh tương ứng trong khối để giấu 1 byte dữ liệu. Để giấu 1 byte dữ liệu trong trong một khối, ta tính tổng xor của khối, sau đó sẽ so sánh giá trị byte cần giấu với tổng xor của đoạn, điều chỉnh và giấu tin.
Dưới đây là thuật toán tính tổng xor giá trị của khối. Đầu vào: Khối ảnh B có kích thước 16*16.
Đầu ra: Một số nguyên được gọi là X_sum của khối ảnh B.
Buớc 1. h=0;
Bước 2. Lặp i từ 0 đến 255: Nếu (B[i/16+1][i%16+1]!=0) thì h = XOR(h,i);
Bước 3. Trả về h;
3.1.2. Thuật toán giấu một byte dữ liệu vào trong khối ảnh 16*16.
Đầu ra: Block ảnh 16*16 có mang tin
Bước 1. Tính X_sum của khối ảnh B: h=X_sum(B);
Bước 2. Tìm vị trí của mẫu cần thay đổi để giấu tin: pos= XOR (h, p);
Bước 3. Lật một bit của mẫu tại vị trí pos để giấu byte p:
Nếu giá pos =0 thì không cần phải điều chỉnh mẫu nào trong khối ảnh B. Nếu giá trị pos > 0, ta cần điều chỉnh mẫu tại vị trí pos theo cách sau:
k=getbit(B[pos/16+1][ pos%16+1],8); setbit(B[pos/16+1][ pos%16+1],1-k);
Ví dụ, ta cần giấu 1 byte có giá trị 240 vào trong khối ảnh khối ảnh như hình dưới đây: 104 102 100 96 93 94 101 108 109 110 112 111 113 113 113 113 82 79 79 78 74 77 82 87 93 94 96 96 99 99 99 99 69 63 63 65 65 66 70 73 74 77 80 82 82 82 83 83 67 64 66 67 70 70 71 70 71 71 74 74 77 77 78 78 65 66 68 69 72 72 71 71 71 70 72 73 76 77 78 78 62 66 69 69 72 72 72 71 72 71 74 75 78 79 81 81 64 67 70 70 73 73 75 75 77 77 75 77 79 79 79 79 65 67 70 72 73 73 76 76 78 78 78 78 79 79 79 79 65 67 70 72 75 77 78 78 78 78 79 79 80 80 80 80 64 67 72 74 75 79 80 80 80 80 81 81 80 82 82 82 66 70 75 77 79 82 83 83 83 83 83 83 82 84 84 84 67 72 77 79 83 84 85 85 85 85 85 85 86 86 86 86 70 74 79 85 86 87 88 88 88 88 88 90 89 89 89 89 73 78 83 87 90 91 92 92 92 92 92 92 93 93 93 93 78 83 87 91 92 93 94 94 93 93 93 95 95 95 95 95 83 86 89 91 94 95 96 96 95 95 95 95 97 97 97 97
Hình 3.1. Giá trị khối ảnh làm dữ liệu chứa byte 240
Ta tính SUM XOR của block ảnh =45
Do byte cần giấu là 240, ta có giá trị pos = 45 XOR 240 = 221
Giá trị pos khác 0 nên ta cần điều chỉnh giá trị tại ô tại hàng (221/16) = 13, tại cột (221%16)= 13.
Ta sẽ đảo bit cuối cùng tại ô (13,13) để giấu tin. Giá trị trước khi điều chỉnh là 93, ta sẽ điều chỉnh bit cuối là 1 thành 0 nên giá trị mới của điểm ảnh là 92. Trong khối ảnh này, chỉ có 1 giá trị điểm ảnh thay đổi. Kết quả như hình 3.2.
104 102 100 96 93 94 101 108 109 110 112 111 113 113 113 113 82 79 79 78 74 77 82 87 93 94 96 96 99 99 99 99 69 63 63 65 65 66 70 73 74 77 80 82 82 82 83 83 67 64 66 67 70 70 71 70 71 71 74 74 77 77 78 78 65 66 68 69 72 72 71 71 71 70 72 73 76 77 78 78 62 66 69 69 72 72 72 71 72 71 74 75 78 79 81 81 64 67 70 70 73 73 75 75 77 77 75 77 79 79 79 79 65 67 70 72 73 73 76 76 78 78 78 78 79 79 79 79 65 67 70 72 75 77 78 78 78 78 79 79 80 80 80 80 64 67 72 74 75 79 80 80 80 80 81 81 80 82 82 82 66 70 75 77 79 82 83 83 83 83 83 83 82 84 84 84 67 72 77 79 83 84 85 85 85 85 85 85 86 86 86 86 70 74 79 85 86 87 88 88 88 88 88 90 89 89 89 89 73 78 83 87 90 91 92 92 92 92 92 92 93 92 93 93 78 83 87 91 92 93 94 94 93 93 93 95 95 95 95 95 83 86 89 91 94 95 96 96 95 95 95 95 97 97 97 97
Hình 3. 2. Khối ảnh mang tin
Hoặc khi cần giấu byte có giá trị 224 và khối ảnh như hình 3.3.
110 110 109 109 111 110 109 109 110 110 108 105 104 102 102 102 110 110 109 109 111 110 109 106 108 108 105 102 103 101 101 101 111 111 110 110 112 110 109 108 106 105 103 102 99 101 101 99 110 109 109 109 111 110 109 106 105 104 102 101 99 99 101 101
109 109 109 109 111 110 109 108 106 105 104 102 102 101 102 102 107 107 108 108 110 110 109 108 108 106 106 104 105 102 102 102 107 107 108 108 110 110 110 109 108 106 106 105 106 105 101 98 106 106 107 108 110 110 110 108 106 105 105 105 106 104 99 97 104 106 107 107 109 109 109 108 106 105 105 104 103 102 99 98 104 104 107 107 109 108 108 105 104 103 103 104 102 102 102 102 106 106 107 107 109 108 106 105 104 103 103 103 104 104 104 104 106 106 107 107 108 106 106 105 104 103 104 104 104 104 105 105 106 107 107 107 109 108 106 106 105 103 104 104 106 105 105 105 106 107 107 107 110 108 106 105 104 102 102 103 104 104 104 104 107 108 108 109 109 106 106 104 103 101 101 101 104 104 104 104 107 108 108 111 110 108 106 103 102 99 99 101 104 104 104 104
Hình 3.3. Khối ảnh cần giấu byte có giá trị 224
Khi tính SumXOR khối ảnh, ta cần điều chỉnh giá trị điểm ảnh để giấu như hình 3.4. 110 110 109 109 111 110 109 109 110 110 108 105 104 102 102 102 110 110 109 109 111 110 109 106 108 108 105 102 103 101 101 101 111 111 110 110 112 110 109 108 106 105 103 102 99 101 101 99 110 109 109 109 111 110 109 106 105 104 102 101 99 99 101 101 109 109 109 109 111 110 109 108 106 105 104 102 102 101 102 102 107 107 108 108 110 110 109 108 108 106 106 104 105 102 102 102 107 107 108 108 110 110 110 109 108 106 106 105 106 105 101 98 106 106 107 108 110 110 110 108 106 105 105 105 106 104 99 97 104 106 107 107 109 109 109 108 106 105 105 104 103 102 99 98 104 104 107 107 109 108 108 105 104 103 103 104 102 102 102 102 106 106 107 107 109 108 106 105 104 103 103 103 104 104 104 104 106 106 107 107 108 106 106 105 104 103 104 104 104 104 105 105 106 107 107 107 109 108 106 106 105 103 104 104 106 105 105 105 106 107 107 107 110 108 106 105 104 103 102 103 104 104 104 104 107 108 108 109 109 106 106 104 103 101 101 101 104 104 104 104 107 108 108 111 110 108 106 103 102 99 99 101 104 104 104 104
Hình 3. 4. Khối ảnh mang tin byte 224
3.1.3. Thuật toán giấu tin
Đầu vào: - Ảnh 24 bit F và thông điệp mật cần giấu M. Đầu ra: - Ảnh 24 bit F’ mang tin mật.
Bước 1. Đọc file ảnh F, tách thành phần màu Blue (B) từ ảnh F
Bước 3. Lấy lần lượt từng byte của M giấu vào trong khối ảnh Bi theo thuật toán giấu một byte trên khối 16*16.
Bước 4. Kết hợp khối ảnh B với các thành phần Red và Green và ghi ra file F’.
3.1.4. Thuật toán giải tin
Thuật toán giải tin tương tự như thuật toán giấu nhưng thực hiện theo chiều ngược lại. Trong thuật toán giải tin ta cần xác định số byte cần lấy.
Đầu vào: - Ảnh chứa tin mật F, k là số byte thông điệp mật cần lấy. Đầu ra: - Thông điệp mật M.
Bước 1. Đọc file ảnh F, tách lấy thành phần màu Blue (B).
Bước 2. Chia ảnh B thành các khối ảnh Bi có kích thước 16*16
Bước 3. Lặp i từ 1 đến k M(i) = sumXOR(Bi).
3.1.5. Đánh giá thuật toán
Về tỉ lệ dữ liệu, phương pháp LSB điều chỉnh 8 điểm ảnh, mỗi điểm 1 bit để giấu 1 byte dữ liệu. Phương pháp trong luận văn chỉ giấu được 1 byte trong 256 mẫu điểm ảnh, do đó có tỉ lệ dữ liệu thấp hơn. Tuy nhiên phương pháp này ít làm thay đổi dữ liệu gốc hơn so với phương pháp LSB chuẩn nếu so sánh theo tiêu chí cùng giấu 1 byte dữ liệu.
Kỹ thuật này cơ bản dựa trên việc điều chỉnh các bit LSB nên chỉ phù hợp với các ứng dụng giấu tin mật mà không dùng cho ứng dụng đánh dấu bản quyền, do tính không bền vững trước các tấn công.
Do tỉ lệ điều chỉnh bit thấp nên có thể vận dụng giấu vào các bit ở mức cao hơn nhằm mục đích tăng tính bền vững cho các bit giấu, hoặc có thể kết hợp giấu trên nhiều mức bit khác nhau để tăng tỉ lệ giấu.
Thực nghiệm thuật toán được thực hiện trên ảnh màu 24 bit. Kết quả thử nghiệm cho thấy thuật toán có thể giấu và tách tin chính xác. Dưới đây là hình minh hoạ khi thử nghiệm giấu 1694 byte dữ liệu, là logo Đại học Duy Tân, vào ảnh màu có kích thước m= 683 n= 1024 được thể hiện qua chương trình thực thi giấu tin
như hình (hình 3.5 đến 3.8). Hình 3.9 là thông tin mật sẽ được giấu, hình 3.10 là thông tin mật sau khi được trích ra từ ảnh mang tin, hình 3.11 Căn phòng trước khi giấu tin (ảnh gốc) và hình 3.12 Căn phòng sau khi giấu tin (ảnh mang tin). Với mắt thường của con người, ta không thể phân biệt được sự khác nhau giữa ảnh có chứa tin và không chứa tin.
Một số hình ảnh thể hiện việc thực thi chương trình giấu tin (Giấu logo Đại học Duy Tân vào ảnh một căn phòng) qua các hình dưới đây.
Hình 3.6. Kết quả thực thi chương trình 1
Hình 3.8. Kết quả thực thi chương trình 1
Hình 3.9 thể hiện thông tin mật sẽ được giấu và hình 3.10 thể hiện thông tin mật được trích ra. Kết quả không có sự khác nhau giữa tập tin mật trươc khi giấu và sau khi giấu.
Hình 3.9. Thông tin mật sẽ được giấu (logo Đại học duy tân)
Hình 3.11 thể hiện ảnh trước khi giấu tin (ảnh gốc) và hình 3.12 thể hiện ảnh sau khi được giấu tin (ảnh mang tin) sau khi giấu file. Kết quả không phân biệt được sự khác nhau giữa anh mang tin và ảnh gốc.
Hình 3.11. Căn phòng trước khi giấu tin (ảnh gốc)
Hình 3.12. Căn phòng sau khi giấu tin (ảnh mang tin)
3.2. PHƯƠNG PHÁP GIẤU BẰNG CÁCH ĐIỀU CHỈNH CÁC HỆ SỐ PHÉP BIẾN ĐỔI DCT
Mục này trình bày kỹ thuật giấu tin trong ảnh dựa vào việc điều chỉnh giá trị các hệ số trong một khối ảnh sau khi thực hiện biến đổi DCT. Phép biến đổi DCT sẽ thực hiện biến đổi khối ảnh từ miền không gian sang miền tần số. Thay vì xử lý các điểm ảnh rời rạc ở miền không gian, các điểm ảnh trong khối ảnh này sẽ biến đổi sang miền tần số (có thể hiện mối liên hệ giữa các điểm ảnh trong cùng 1 khối), xử lý và sau đó sẽ biến đổi ngược lại miền không gian ảnh.
3.2.1. Thuật toán giấu tin
Đầu vào: Ảnh A, chuỗi bit M có độ dài L. Đầu ra: Ảnh A’ có chứa chuỗi bit mật M. Các bước của thuật toán như sau:
Bước 1. Đọc file ảnh, chia file ảnh thành các khối Bi có kích thước 8*8
Bước 2. Giấu tin: Giấu lần lượt từng bit mật Mi vào trong các khối cho đến khi giấu xong
- Biến đổi khối ảnh Bi sang miền tần số dùng phép biến đổi DCT - Điều chỉnh giá trị Bi(1,1) để giấu bit Mi
- Biến đổi ngược DCT khối ảnh và ghi vào file ảnh A’
3.2.2. Thuật toán trích tin theo phương pháp điều chỉnh giá trị nhóm bit
Đầu vào: Ảnh I’ chứa tin giấu, độ dài L của chuỗi bit cần lấy. Đầu ra: Chuỗi bit M được giấu.
Bước 1. Đọc ảnh I’ thành các khối 8*8.
Bước 2. Giải tin
Với mỗi khối ảnh Bi ta biến đổi DCT và dựa vào giá trị B’i (1,1) để trích xuất giá trị bit tương ứng.
Thực hiện liên tục cho đến khi L bit đã được lấy.
3.2.3 Đánh giá phương pháp giấu tin
Giả sử ta có khối ảnh Bi như sau:
Hình 3.13. Giá trị khối ảnh 1 (8*8) dùng giấu tin
Hình 3.14. Biến đổi DCT của khối ảnh 1
Ta sẽ giấu bit 0 bằng cách điều chỉnh giá trị (736.7500). Sau khi điều chỉnh, ta có giá trị khối mới như hình 3.16:
Hình 3.15. Điều chình hệ số DCT của khối ảnh 1
Ta thực hiện biến đổi ngược IDCT cho khối ảnh, ta được giá trị mới của khối ảnh có chứa tin giấu như sau:
Hình 3.16. Khối ảnh 1 mang tin
Hoặc ví dụ 2, ta có giá trị khối ảnh:
Ta biến đổi DCT cho khối ảnh, ta được các giá trị sau:
Hình 3.18. Giá trị DCT khối ảnh 2 (8*8) dùng giấu tin
Ta cần giấu bit 1 và điều chỉnh giá trị (450.2500) để giấu. Sau khi điều chỉnh ta có giá trị của khối là:
Biến đổi iDCT ngược ta có giá trị khối ảnh như sau:
Hình 3.20. Giá trị khối ảnh 2 (8*8) chứa bit 1
Thực nghiệm thuật toán được thực hiện trên ảnh màu. Kết quả thử nghiệm cho thấy thuật toán có thể giấu và tách tin có độ sai lệch chấp nhận được. Dưới đây là hình minh hoạ khi thử nghiệm giấu 15 byte dữ liệu, là tập tin “PacBo.txt”, vào ảnh màu có kích thước m= 183 n= 275 được thể hiện qua chương trình thực thi giấu tin như hình (hình 3.21 đến hình 3.29). Hình 3.30 là thông tin mật sẽ được giấu, hình 3.31 là thông tin mật sau khi được trích ra từ ảnh mang tin, hình 3.32 ảnh trước khi giấu tin (ảnh gốc) và hình 3.33 ảnh sau khi giấu tin (ảnh mang tin). Với mắt thường của con người, ta không thể phân biệt được sự khác nhau giữa ảnh có chứa tin và không chứa tin.
Một số hình ảnh thể hiện việc thực thi chương trình giấu tin (Giấu tập tin PacBo.txt vào ảnh Parrots) qua các hình dưới đây.
Hình 3.21. Kết quả thực thi chương trình 2
Hình 3.23. Kết quả thực thi chương trình 2
Hình 3.25. Kết quả thực thi chương trình 2
Hình 3.27. Kết quả thực thi chương trình 2
Hình 3.29. Kết quả thực thi chương trình 2
Hình 3.31 thể hiện nội dung thông tin mật và hình 3.32 thể hiện nội dung thông tin mật được trích ra. Kết quả không có sự khác nhau giữa tập tin mật trươc khi giấu và sau khi giấu.
Hình 3.30. Nội dung thông tin mật