Giấu tin trong ảnh số là kỹ thuật nhúng (embedding/hiding) dữ liệu mang thông tin vào một ảnh số nào đó. Ảnh chưa chứa thông tin ẩn được gọi là ảnh gốc hay là ảnh bao (cover image). Còn ảnh sau khi đã được giấu thông tin vào đó được gọi là ảnh chứa thông tin giấu (stego-image). Kỹ thuật này khác với kỹ thuật mã hóa dữ liệu ở chỗ, kỹ thuật mã hóa dữ liệu nhằm biến đổi một bản thông điệp có ý nghĩa thành một dãy ngẫu nhiên vô nghĩa, còn kỹ thuật giấu dữ liệu (data hiding) lại nhằm tìm cách đưa một bản thông điệp nào đó vào trong một tệp ảnh chọn trước, sao cho người ngoài cuộc dù có nhận tệp ảnh đó (tệp stego - image) cũng khó có thể phát hiện được sự hiện diện của bản thông điệp chứa trong ảnh đó. Để giấu một thông điệp cần có:
- Bản thông điệp cần giấu
- Ảnh bao
- Khóa
- Thuật toán giấu
- Kỹ thuật trao đổi khóa
Ngày nay, với sự phát triển nhanh chóng của Thương mại điện tử (TMĐT) thì một trong những vấn đề đáng lưu ý là bảo vệ bản quyền tác giả. Chẳng hạn, một hãng sản xuất nào đó chuyên cung cấp các hình ảnh, các bản nhạc thông qua mạng Internet phải làm cách nào để chứng tỏ tệp ảnh hay tệp các bản nhạc đó là từ hãng của họ. Hoặc một tình báo viên
phải làm cách nào để có thể gửi về cho Trung tâm những thông tin quan trọng qua Internet mà cơ quan phản gián không phát hiện ra. Nếu dùng kỹ thuật mật mã thì rất có thể bị phát hiện do có sự bất thường, mặc dù người ta không giải mã được nó.
Để giải quyết vấn đề trên một cách hiệu quả, một phương pháp độc đáo là giấu (hiding) các thông tin đó vào ảnh số rồi gửi đi qua mạng Internet thông thường hoặc đưa lên một website nào đó, từ đó người nhận tải về và khai thác.
2. Những yêu cầu cơ bản của kỹ thuật giấu tin trong ảnh BMP
Một trong những yêu cầu cơ bản của kỹ thuật giấu tin trong ảnh là phải đảm bảo không thể nhận biết được (imperceptibility) sự có mặt của thông tin ẩn bằng mắt thường. Ngoài ra, khả năng chứa được một lượng lớn dữ liệu vào ảnh cũng là một trong những yêu cầu quan trọng. Đối với phương pháp thuỷ vân số thì yêu cầu về tính bền vững là một đòi hỏi có tính nguyên tắc.
Hiện nay đã có một số thuật toán giấu tin được cải tiến có khả năng đối phó tốt với kỹ thuật phát hiện ảnh bằng phương pháp thống kê toán học hiện đại. Để đạt được các yêu cầu cơ bản nêu trên, hầu hết các thuật toán nhúng đã được công bố đều tận dụng độ dư thừa của các điểm ảnh (pixel) để giấu tin vào đó. Ở đây, chúng ta hiểu độ dư thừa của các pixel ảnh là bit có ít ý nghĩa nhất của chúng được ký hiệu là LSB (Least Significant Bit). Một ảnh số bất kỳ đều được tạo bởi các điểm ảnh mà ta gọi là các pixel ảnh. Mỗi pixel là một byte gồm 8 bit. Các pixel này biểu thị độ sáng, tối của ảnh: pixel càng nhỏ thì ảnh càng tối và ngược lại, pixel càng lớn ảnh càng sáng. Nếu đổi sang cơ số thập phân thì mỗi pixel là một con số từ 0 đến 255.
Trước khi thực hiện các kỹ thuật giấu tin vào LSB của một file ảnh Bitmap, chúng ta cần tính toán các tham số như độ dài tối đa của thông điệp (đổi ra dãy nhị phân) hoặc các file dữ liệu cần giấu là bao nhiêu; quy định khởi điểm đặt dữ liệu ẩn bắt đầu từ pixel nào của ảnh. Đó là những tham số cần thiết nhằm đảm bảo các yêu cầu đặt ra. Người ta đã khẳng định rằng các tham số cần tính toán khi áp dụng kỹ thuật chèn vào bit LSB là:
+ Kích cỡ dữ liệu ẩn (kích cỡ của thông điệp quy ra bit). Khi muốn giấu một đoạn văn bản hoặc một file dữ liệu ẩn nào đó vào một file ảnh Bitmap chúng ta phải được đảm bảo rằng chất lượng và kích cỡ của file ảnh bao đó không bị thay đổi. Như vậy, độ dài của bản thông điệp hoặc file dữ liệu ẩn tối đa là bao nhiêu? Với phương pháp LSB người ta đã tính được rằng, độ dài tối đa (quy ra bit) của dữ liệu cần giấu so với độ dài của một file dữ liệu ảnh bao là:
L(max) . 12,5% L(Bmp)
Trong đó, L(max) là độ dài tối đa quy ra bit của dữ liệu ẩn, còn L(Bmp) là độ dài của một file ảnh Bmp.
+ Để xác định vị trí đầu tiên đặt dữ liệu ẩn khi muốn giấu các bit thông tin vào một file ảnh Bmp, cần chọn khởi điểm để đặt dữ liệu giấu sao cho tốt nhất có thể được. Ta biết rằng, 32 byte (256 bit) đầu tiên của file ảnh Bitmap được dành cho cấu trúc Header. Tiếp theo cấu trúc header này là các thông tin về bảng màu của ảnh. Các phần này gọi chung là phần chứa thông tin về ảnh và không được chèn thông tin cần giấu vào đó.
Như vậy, dữ liệu cần giấu chỉ có thể được giấu vào phần dữ liệu ảnh của file ảnh Bmp. Tuy nhiên, nếu thông tin cần giấu được chèn vào vị trí từ byte đầu tiên của phần dữ liệu ảnh thì tính bảo mật không cao. Để tăng độ bảo mật thì dữ liệu cần giấu nên được bắt đầu chèn vào phần dữ liệu ảnh tại một vị trí ngẫu nhiên liên quan đến mật khẩu:
offset = f(c1,c2,...,cn)
Trong đó, c1,c2,...,cn là một dãy con của dãy các ký tự mật khẩu có độ dài N (n#N).
Ngày nay, do sự phát triển của môi trường truyền thông băng thông rộng thì việc dùng ảnh màu hoặc đa cấp xám làm ảnh bao là tốt nhất. Đến nay nhiều thuật toán được cải tiến có khả năng chống lại một số phương pháp phát hiện bằng kỹ thuật thống kê toán học. Ngoài kỹ thuật giấu tin sử dụng LSB trên miền không gian như vừa được trình bày ở trên (tức là giấu trực tiếp trên các pixel ảnh) người ta còn nghiên cứu kỹ thuật giấu tin trên miền tần số, tức là thông tin không được giấu trực tiếp trên các pixel của dữ liệu ảnh mà giấu trên các giá trị nhận được qua phép biến đổi cosine rời rạc hoặc phép biến đổi fourier rời rạc. Kỹ thuật này thường được dùng cho thủy vân số.
3. Phát hiện ảnh chứa thông tin ẩn
Giống như kỹ thuật mật mã,nếu cho rằng việc giấu tin trong đa phương tiện nói chung, trong ảnh số nói riêng là một vấn đề phức tạp thì việc phát hiện ảnh có chứa thông tin ẩn hay không còn khó khăn và phức tạp hơn nhiều. Tuy nhiên, dù thuật toán giấu tin có tinh xảo đến đâu cũng vẫn bộc lộ những điểm yếu. Những điểm yếu đó là cơ sở để xây dựng những thuật toán phát hiện. Thật vậy, khi một lượng thông tin nào đó được giấu vào trong ảnh thì chúng đều để lại những dấu vết nhất định. Những dấu vết này có thể mắt thường không cảm nhận được nhưng chúng có thể bị phát hiện bằng các kỹ thuật toán học hiện đại. Dựa trên các dấu vết đó, người ta sẽ kết luận là ảnh đó có hay không chứa dữ liệu ẩn. Những đấu vết đó chính là do sự thay đổi LSB của các pixel trong ảnh bao. Việc phát hiện sẽ thuận lợi bằng phương pháp kiểm định giả thuyết thống kê thông thường, nếu được cho trước một cặp ảnh gốc (ảnh bao) và ảnh có chứa thông tin ẩn tương ứng. Một trường hợp đặc biệt khác xảy ra là cho trước một ảnh bất kỳ và một thuật toán giấu tin nào đó và xác định xem ảnh đó có chứa thông tin ẩn hay không. Với những trường hợp như vậy đã có thuật toán phát hiện tương đối hiệu quả (với độ chính xác trên 85%). Trong thực tế, chúng ta thường gặp bài toán sau đây: Cho trước một ảnh, hãy xác định xem đó có phải là ảnh có chứa thông tin ẩn hay không? Hay suy rộng ra là: cho trước n ảnh tuỳ ý (n$1), hãy xác định xem trong đó có bao nhiêu ảnh có chứa thông tin ẩn? Như vậy, bài toán đặt ra là hãy xây dựng một thuật toán phân hoạch tập hợp n ảnh ra hai lớp: một lớp gồm các ảnh chứa thông tin ẩn, lớp còn lạigồm các ảnh gốc. Có nhiều phương pháp giải bài toán đó, nhưng phương pháp nào cũng sẽ gây ra hai sai lầm: thực tế một ảnh nào đó thuộc lớp thứ nhất nhưng ta lại gán cho nó thuộc lớp thứ hai và ngược lại, ảnh đó thuộc lớp thứ hai nhưng ta lại gán cho nó thuộc lớp thứ nhất. Không tồn tại một thuật toán có thể làm cực tiểu hoá cả hai sai sót nêu trên. Vấn đề đặt ra là ở chỗ: Hãy xây dựng một thuật toán sao cho sai sót trung bình của phân lớp đó là bé nhất. Để xây dựng được một thuật toán như vậy đòi hỏi phải tìm hiểu những đặc trưng khác nhau giữa ảnh gốc với ảnh chứa thông tin ẩn. Ta biết rằng một file dữ liệu ảnh bất kỳ có thể được coi như một mẫu thống kê được rút ra từ một nguồn Markov 256 trạng thái. Vì vậy, công cụ để phân biệt sự khác nhau giữa ảnh gốc (ảnh bao) và ảnh chứa thông tin ẩn chính là kỹ thuật thống kê toán học và lý thuyết của quá trình ngẫu nhiên dừng.
Để đảm bảo độ an toàn cao hơn, người ta có thể mã hóa thông điệp bằng mật mã truyền thống trước lúc giấu vào trong ảnh bao. Ở đây, có một câu hỏi được đặt ra như sau: Vậy việc trao đổi khóa mã được diễn ra như thế nào? Nói chung, có hai phương pháp chính để trao đổi khóa, đó là trao đổi khóa mã bằng quy ước thỏa thuận trước lúc thực hiện việc mã hóa và giải mã, hoặc khóa dùng để giải mã được nhúng (giấu) ngay vào trong ảnh bao. Nhưng phương pháp thứ hai khá nguy hiểm vì nếu đối phương phát hiện được ảnh có chứa thông tin ẩn và trích chọn ra được thì khóa mã có thể bị lộ và do đó việc mã hóa bức thông điệp lúc này không có ý nghĩa. Vấn đề trích chọn thông điệp ra từ ảnh chứa thông tin giấu và giải mã như thế nào lại không dễ dàng. Việc giấu tin trong miền tần số (miền biến đổi) không khác nhiều so với giấu tin trong miền không gian. Điều khác nhau cơ bản là trong miền không gian, người ta giấu trực tiếp vào LSB của các pixel dữ liệu ảnh, còn trong miền tần số người ta dùng kỹ thuật DCT (Dicrete Cosine Transformation) hoặc DFT biến đổi các pixel dữ liệu ảnh miền tần số sau đó mới dùng kỹ thuật LSB trên các giá trị của miền tần số để giấu dữ liệu thông điệp.
Tuy nhiên, trên miền tần số không được nhúng thông tin vào các tham số 0 và 1, vì nếu sử dụng chúng để giấu tin thì số 0 có thể chuyển sang số 1 hoặc số 1 có thể về số 0, như vậy tạo ra sự thay đổi một cách có ý nghĩa các dữ liệu ảnh cho ảnh bao bị biến đổi nhiều, dẫn đến sự khác biệt rõ rệt giữa ảnh bao và ảnh có chứa thông tin ẩn mà mắt thường có thể phát hiện được.
Trong kỹ thuật biến đổi DCT người ta thực hiện như sau: Giả sử miền dữ liệu ảnh JPEG là một ma trận C cấp mxn, mà mỗi phần tử của ma trận là một pixel (điểm ảnh) của ảnh. Người ta chia C thành nhiều khối, mỗi khối là một ma trận con với kích cỡ 8x8 pixel ảnh. Sau đó, các khối này được biến đổi bởi DCT để thành 8x8 = 64 hệ số DCT. Từ đó, người ta dùng kỹ thuật LSB trên các hệ số DCT này của ảnh để giấu thông điệp (trừ hệ số có giá trị 0 và 1 như đã nói ở trên).
4. Kết luận