Chƣơng trình giấu tin trong ảnh Bitmap

Một phần của tài liệu Đề Tài Giấu Tin Trong Ảnh (Trang 34 - 52)

3.3.1. kĩ thuật giấu thông tin trong ảnh Bitmap

Chúng ta sử dụng kỹ thụât “Thay thế” (substitution) để ẩn thông tin trong một file. Với công nghệ này, bạn thay thế những bit ít quan trọng nhất của file gốc với dữ liệu mà bạn muốn ẩn. Để sử dụng công nghệ này ta thực hiện các bƣớc sau:

Nhóm: Mai Văn Thủ - Trần Thanh Tâm Trang 35

Khi sử dụng kĩ thuật thay thế sẽ có một số ƣu nhƣợc điểm sau:

+Ƣu điểm: Kích thƣớc của file sẽ không bị thay đổi sau khi thực hiện việc ẩn thông tin.

+ Nhƣợc điểm: Có thể giảm chất lƣợng ảnh sau khi ẩn thông tin; giới hạn kích thƣớc thông tin muốn ẩn.

Trong kỹ thuật “Thay thế”, phƣơng thức rất phổ biến là mã hóa LSB (Least Significant Bit).Phƣơng thức mã hóa này thay thế bit ít quan trọng nhất trong một vài byte của file để ẩn tuần tự những byte dữ liệu chứa thông tin muốn ẩn. Cách này có hiệu quả trong trƣờng hợp mà thay thế LSB không ảnh hƣởng đến chất lƣợng ảnh. Ví dụ nhƣ đối với ảnh Bitmap 24 bit.

* Tại sao giấu thông tin trong ảnh Bitmap 24 bit lại có hiệu quả hơn:

- Ảnh Bitmap 24 bit: tức là sẽ có 24 bit biểu diễn cho 1 pixel và ảnh này có 2^24 màu. Thông tin màu cho mỗi pixel đƣợc chứa trong 3 byte liên tiếp của dữ liệu với mỗi byte tƣơng ứng với 3 màu Blue, Green, Red.

- 24 bit màu là dữ liệu đơn giản để đọc. Dữ liệu hình ảnh đi theo ngay trực tiếp sau đầu mục thông tin và ở đó không có bảng màu nào.

- Các điểm ảnh đƣợc lƣu theo chiều từ trái sáng phải trên một dòng và các dòng lại đƣợc lƣu theo thứ tự từ dƣới lên trên .

- Mỗi byte trong vùng BimapData biểu diễn 1 hoặc nhiều điểm ảnh theo số Bít cho một pixel

- 8 bit dữ liệu cần 8 byte dữ liệu nguồn.

Nhƣ vậy, với mỗi Pixel sẽ có 8 bit biểu diễn cho mỗi giá trị màu. Giả sử, ta chỉ xem xét với màu Blue, sẽ có 28 giá trị khác nhau. Sự khác nhau giữa các giá trị

Nhóm: Mai Văn Thủ - Trần Thanh Tâm Trang 36

hay gọi cách khác là cƣờng độ của Blue nhƣ 11111111 và 11111110 sẽ không bị phát hiện bởi thị giác của con ngƣời.

- Đối với ảnh 24 bit, ta có thể nhúng 3 bit dữ liệu muốn ẩn trong 1 pixel. Trong khi đó với ảnh 8 bit ta chi có thể nhúng 1 bit dữ liệu cho mỗi pixel. Nhƣ vậy, ảnh 24 bit cung cấp nhiều khoảng trống hơn so với ảnh 8 bit.

Ví dụ: muốn ẩn 1 ký tƣ A vào trong 1 file ảnh. Giá trị nhị phân của A là 10000001 Lúc này kí tự A đƣợc ẩn trong 3 pixel.

+ Giả sử dữ liệu của 3 pixel có thể là (00100111 11101001 11001000) (00100111 11001000 11101001) (11001000 00100111 11101001)

+ Sau khi ẩn kí tự A, giá trị của 3 pixel là: (00100111 11101000 11001000)

(00100110 11001000 11101000) (11001000 00100111 11101001)

Nhƣ vậy, chỉ có 3 bit bị thay đổi trong 3 byte. Và sẽ không bị phát hiện bởi thị giác của con ngƣời.

3.4. Các bƣớc giải quyết vấn đề 3.4.1. Giấu thông tin trong ảnh: 3.4.1. Giấu thông tin trong ảnh:

a. Trình tự thực hiện:

- Mã hoá thông tin trƣớc khi ẩn bằng cách thông qua mật khẩu và ta mã hoá thông tin muốn giấu với mật khẩu tạo ra một mảng byte kí tự mã hoá.

Nhóm: Mai Văn Thủ - Trần Thanh Tâm Trang 37

b. Chương trình “Giấu tin trong file ảnh (.BMP)”

Có 3 chức năng chính:

Chức năng “Giấu một đoạn văn bản trong file ảnh”. Chức năng “Giấu file văn bản(.doc, .txt) trong file ảnh”. Chức năng “Giấu file ảnh(.bmp) trong file ảnh”.

Hình 3.3. Sơ đồ giấu tin trong ảnh bitmap(.bmp)

Mục đích: Là để giấu những thông tin trong một file ảnh.

Xây dựng phƣơng thức CreateStegoFile với 3 tham số: tên file ảnh mới, nội dung message và password.

- Chỉ làm việc với ảnh bitmap : Phải kiểm tra file ảnh muốn giấu phải là ảnh Bitmap. dựa vào 2 byte đầu tiên để xác định file ảnh Bitmap.

Giấu cả thông tin về chiều dài của đoạn Message vào 4 byte đầu tiên trong phần Data Pixel. Tức là bắt đầu từ byte thứ 54 của file ảnh sẽ lƣu trữ chiều dài của message.

Giấu tin trong ảnh

Giấu 1 đoạn văn bản

Giấu file ảnh Giấu file văn bản

Nhóm: Mai Văn Thủ - Trần Thanh Tâm Trang 38

Vậy ta xây dựng 1 hàm đƣa chiều dài của mess vào 4 byte đầu tiên , sau đó là nội dung của mess dƣới dạng byte. Kết quả trả về là một mảng byte. Lúc này ta giấu cả mảng byte này vào trong file ảnh.

Một thủ tục ẩn thông tin vào file ảnh: thay thế LSB với đầu vào là 1 luồng để dọc các byte ảnh và mảng byte của HiddenMessage. Đầu ra sẽ là luồng output mới chứa HiddenMessage trong file ảnh.Trong thủ tục này ta chỉ thao tác với các bit dữ liệu của thông điệp với các bit của phần Data Pixel trong file ảnh

Vậy có thể sử dụng kỹ thuật này cho phép giấu một byte file ẩn vào 8 byte file chứa gốc(file ảnh chứa gốc). Từ trên có thể thấy đƣợc lợi thế khi sử dụng cách này là gì? đó chính là lúc nào cũng có nhiều nhất 50% số bít trùng nhau giữa tin cần giấu và file chứa gốc(file ảnh chứa gốc) do đó file chứa gốc ít bị ảnh hƣởng lớn khi có tin giấu thêm vào trong file chứa gốc(file ảnh chứa gốc) đó.

3.5. Thuật toán CPT

Đây là thuật toán giấu tin trong khối bit do Yu-Yuan Chen, Hsiang-Kuang Pan, Yu-Chee Tseng của đại học Đài loan đề xuất cho ảnh đentrắng.

Thuật toán CPT(Chen-Pan-Tseng) thực hiện nhƣ sau:

* Input (Dữ liệu vào): Một ảnh gốc F dùng để giấu thông tin, F đƣợc chia thành các khồi nhỏ Fi, mỗi ma trận điểm ảnh Fi có kích thƣớc m*n, r là số bít để giấu trong mỗi khối Fi (r thỏa mãn điều kiện 2r-1<m*n). Ma trận nhị phân K(ma trận khóa) cùng kích thƣớc với khối Fi, ma trận trọng số W(các phần tử là số nguyên, các giá trị từ 1 đến 2r-1 xuất hiện ít nhất một lần trong W) cùng kích thƣớc của K. Lƣợng thông tin cần giấu B B=b1b2…..bz mỗi bi có r bít), độ chênh lệch trọng số d.

* OutPut (Dữ liệu ra): Một ảnh F‟ đã có thông tin giấu, trong đó F‟ đƣợc tạo bởi các khối Fi‟ do giấu tin vào khối Fi tạo thành. Thuật toán sẽ thực hiện giấu r

Nhóm: Mai Văn Thủ - Trần Thanh Tâm Trang 39

bít thông tin vào mỗi khối Fi bằng cách thay đổi nhiều nhất 2 bit của Fi và Fi biến đổi thành Fi‟ sao cho luôn thỏa mãn điều kiên:

SUM(Fi‟ K) W mod 2r=b1b2…br. * Quá trình thực hiện gồm 4 bƣớc:

- Bƣớc 1. Tính T=Fi K - Bƣớc 2. Tính SUM(T W)

- Bƣớc 3. Xác định tập Sw={(x,y)|(W[x,y]=w ^ T[x,y]=0)V (W[x,y]=2r – w ^ T[x,y]=1)} trong đó w lấy các giá trị từ 1,2,…,2 r-1.

- Bƣớc 4. Kí hiệu d=(b1b2…bz) - SUM((Fi K) W) mod 2r. Thực hiện việc đảo bít trên Fi để đƣợc Fi‟ sao cho tổng SUM tính đƣợc ở bƣớc 2 khi thay Fi bởi Fi‟ sẽ tăng lên d.

(trong đó là phép XOR và là phép nhân các phần tử tại các vị trí tƣơng ứng của 2 ma trận cùng kích thƣớc. Ma trận K và W đƣợc sử dụng bí mật giữa ngƣời gửi và ngƣời nhận tin)

* Đánh giá thuật toán:

độ an toàn của thuật toán phụ thuộc vào hai ma trận K và W. Để xác định đƣợc cả K và W cần kiểm tra (tổ hợp chập 2r-1của m*n)*(2r-1)!*(2r- 1)m*n-2^r- 1* 2m*n điều này không thể thực hiện đƣợc nếu m và n đủ lớn. Và khối bít tối đa có thể giấu trong khối Fi là Log2(m*n+1) và vì vậy lƣợng tin giấu phụ thuộc vào kích thƣớc các khối Fi

3.6. Ứng dụng thuật toán cho ảnh màu

Để ứng thuật toán CPT cho ảnh màu và ảnh đa cấp xám để tạo thành ma trận nhị phân F. Thực hiện việc giấu tin vào F theo thuật toán CPT với ma trận K và W

Nhóm: Mai Văn Thủ - Trần Thanh Tâm Trang 40

đƣợc sinh ngẫu nhiên. Sau đó trả các bít LSB trở về ảnh gốc để tạo thành ảnh mới đã giấu tin quá trình đó nhƣ sau:

Hình 3.4. Sơ đồ ứng dụng thuật toán của ảnh màu Bƣớc tiền xử lý gồm các thao tác chính:

Số hóa thông tin giấu và nén để tăng dung lƣợng.

Trích các bít LSB từ ảnh gốc một cách ngẫu nhiên bằng một hàm băm để tạo thành ma trận F và chia thành các khối Fi.

Sinh ngẫu nhiên ma trận khóa K và ma trận trọng số W. Tạo ảnh đã giấu tin Sinh file khóa Giấu tin vào khối bits LSB Tiền xữ lý Ảnh gốc để giấu tin Thông tin giấu

Nhóm: Mai Văn Thủ - Trần Thanh Tâm Trang 41

File khóa chứa các thông tin cơ bản để giải mã thông tin: chiến lƣợc trích các bít LSB, số khối và kích thƣớc các khối Fi, ma trận khóa K và ma trận trọng số W. Tính bảo mật trong thuật toán với việc sử dụng LSB đã tăng thêm độ bảo mật đó là ngoài phụ thuộc vào ma trận K, W còn phụ thuộc vào chiến lƣợc trích các bít LSB và kỹ thuật nén thông tin.

Vì sử dụng các bit LSB để tạo thành ma trận F nên chất lƣợng của ảnh sau khi đã giấu tin rất tốt.

Để tăng dung lƣợng giấu tin, thay vì sử dụng thuật toán CPT giấu thông tin trong khối bít. Có thể thay đổi trực tiếp các bit của ma trận F để giấu thông tin. Nhƣợc điểm của giải pháp này là tính bảo mật của thuật toán chỉ phụ thuộc vào chiến lƣợc trích các bit LSB. Tuy nhiên có thể khắc phục nhƣợc điểm này bằng cách mã hóa thông tin cần giấu bằng một hệ mật mã nào đó trƣớc khi tiến hành giấu tin trong ảnh. Đây cũng là phƣơng pháp em tìm hiểu quá trình giấu tin trong ảnh.

3.7. Lấy thông tin từ ảnh:

a.Trình tự thực hiện:

Lấy thông tin ẩn từ file ảnh. Muốn đọc đƣợc thông tin này phải giải mã với khoá chính là mật khẩu đã đƣợc dùng để mã hoá hay giấu thông tin.

b. Chƣơng trình “Lấy thông tin trong file ảnh(.BMP)”

Có 3 chức năng chính:

Chức năng “Lấy thông tin một đoạn văn bản từ file ảnh”. Chức năng “Lấy file văn bản(.doc, .txt) từ file ảnh”. Chức năng “Lấy file ảnh(.bmp) từ file ảnh”.

Nhóm: Mai Văn Thủ - Trần Thanh Tâm Trang 42

Hình 3.5. Sơ đồ lấy tin trong ảnh Bitmap(.bmp)

Mục đích: Là để lấy lại những thông tin đã giấu trong một file ảnh.

Xây dựng phƣơng thức ExtractHiddenMessage: Phƣơng thức này ngƣợc với phƣơng thức giấu thông tin CreateStegoFile ở trên

+ Đầu tiên sẽ phải đọc 4 byte đầu tiên trong phần Data Pixel để lấy về chiều dài của nội dung thông tin giấu trong ảnh.

+ Sau đó mới đọc tiếp nội dung của thông tin đã giấu. Lấy thông tin trong ảnh

Nhóm: Mai Văn Thủ - Trần Thanh Tâm Trang 43 j = 0, i= i+1 ByteĐoc=InputStream.ReadByte i =0, j=0 j = 7 Đệm=ẩn đoạn văn bản Reaplace(ẩn đoạn vb(i), j,

bit) Đệm =ClsCryptoHelper.giải mã(đệm, khóa) ẩn đoạn văn bản Kếtthúc Bắt đầu Bit=trích xuất(bytedoc,0)

Nhóm: Mai Văn Thủ - Trần Thanh Tâm Trang 44

Hình 3.6. Lƣu đồ thuật toán giải mã thông tin

C. Cách giải quyết vấn đề:

-Lớp LSBHelper :Có một hàm “ShowMess” lấy ra byte đƣợc thay thế trong từng byte ảnh

1. publicstatic void Encode(FileStream inStream,byte[] Message,FileStream outStream)

Phƣơng thức này nhận vào 3 tham số: file ảnh đầu vào,mảng các byte cần đƣa vào trong ảnh,và ảnh đầu ra.

2. publicstatic byte[] Decode(FileStream inStream,int length)

Phƣơng thức này nhận vào 1 file ảnh có chứa tin giấu, độ dài của thông điệp chứa trong đó. Kết quả trả về là 1 mảng các byte mà ta đã giấu trong thủ tục Encode ở trên.

- Lớp clsStegoFile: Với chức năng chính là lấy đƣợc thông tin ẩn trong file ảnh.

- Lớp ClsCryptoHelper: chứa 2 phƣơng thức

1. publicstatic byte[] Encrypt(byte[] message,string password)

Phƣơng thức này nhận vào 2 tham số gồm: thông điệp mà ta muốn mã hóa và mật khẩu để trao đổi tin giữa ngƣời gửi và ngƣời nhận. Phƣơng thức này sẽ biến đối mật khẩu thành 1 khóa có độ dài 128 byte thông qua lớp

PasswordDeriveBytes của Microsoft.NET nhằm tăng tính bảo mật. Sau đó

kết hợp trộn giữa thông điệp và khóa này bằng toán tử XOR để tạo ra mảng byte là cái ta thực sự đem giấu vào trong bức ảnh.

2. publicstatic byte[] Decrypt(byte[] message, string password)

Phƣơng thức này là quá trình giải mã ngƣợc của phƣơng thức trên,tham số thứ nhất là mảng byte sau khi đã trích ra đƣợc từ file ảnh cần giải

Nhóm: Mai Văn Thủ - Trần Thanh Tâm Trang 45

mật khẩu này,ta cũng dùng lớp PasswordDeriveBytes của Microsoft.NET để tạo ra 1 khóa 128byte (lƣu ý rằng nếu ngƣời dùng nhập đúng mật khẩu,thì nó cũng sẽ sinh ra cùng 1 khóa nhƣ lúc ta mã hóa). Dùng phép XOR giữa mảng byte và khóa này ta sẽ nhận đƣợc thông điệp gốc ban đầu.

- Lớp clsStegoFile:

Lớp này có nhiệm vụ lấy thông tin đã giấu trong file ảnh.

Đầu vào: Một file ảnh dạng bitmap(.bmp) đã chứa tin trong đó và cùng với mật

khẩu dùng để mã hoá dữ liệu.

Đầu ra: Thông tin đã bị giấu trong file ảnh và hiện thị nó lên.

CHƢƠNG IV: GIAO DIỆN CHƢƠNG TRÌNH 4.1. Thiết kế giao diện ngƣời dùng:

Nhóm: Mai Văn Thủ - Trần Thanh Tâm Trang 46

Hình 4.1. Giao diện giấu đoạn văn bản vào file ảnh

Sau khi chọn đƣợc file ảnh để nhúng thông tin, nhập thông tin muốn giấu vào “Thông điệp cần nhúng” sau đó thiết lập mật khẩu, chọn đƣờng dẫn lƣu file ảnh đã đƣợc nhúng và tiến hành nhúng bắng cách kích vào nút “Hide”. Khi đó thông tin sẽ đƣợc nhúng thành công.

4.1.2. Lấy thông tin từ một ảnh đã đƣợc nhúng thông tin trong đó:

Muốn lấy thông tin từ ảnh đã giấu, tiến hành chọn file ảnh giấu thông tin và nhập mật khẩu cho nó thông tin đƣợc giấu trƣớc đó sẽ hiển thị ngay dƣới phần “Nội dung thông điệp”.

Nhóm: Mai Văn Thủ - Trần Thanh Tâm Trang 47

Hình 4.2: Giao diện lấy thông tin từ một ảnh

Nhóm: Mai Văn Thủ - Trần Thanh Tâm Trang 48

KẾT LUẬN 1. Đánh giá:

Các kỹ thuật giấu và phát hiện thông tin ẩn giấu trên miền dữ liệu LSB của ảnh cấp xám, chúng ta có thể triển khai tƣơng tự cho ảnh màu, ảnh nén dạng GIF. Các kỹ thuật này có độ tin cậy rất cao.

Tuy thời gian nghiên cứu không dài nhƣng em đã làm việc rất tích cực, nghiêm túc tìm kiếm và tra cứu các tài liệu trong nƣớc, tài liệu nƣớc ngoài để nắm vững và hiểu rõ các vấn đề, chọn lọc các thông tin cần trình bày từ đó xây dựng và cài đặt chƣơng trình một cách chi tiết để đƣa ra kết quả đánh giá chính xác. Tuy chƣa đƣa ra đƣợc cải tiến cụ thể nhƣng đó cũng là kiến thức nền tảng cho vấn đề phát hiện thông tin ẩn giấu trong ảnh nói riêng và trong đa phƣơng tiện nói chung. Mong rằng sẽ trở thành một tài liệu quý báu cho các đối tƣợng cần quan tâm và phát triển mở rộng hơn trong lĩnh vực có liên quan.

2. Hạn chế và hƣớng phát triền đề tài:

Với phƣơng pháp iấu tin trong ảnh Bitmap bằng mã hóa LSB thì tin đƣợc giấu sẽ có thể bị mất trên đƣờng truyền nếu file ảnh giấu tin bị nén hay bị biến dạng, để khắc phục vấn đề này còn phải nghiên cứu thêm.

Hƣớng nghiên cứu tiếp theo sẽ đƣa ra vấn đề là viết một chƣơng trình giấu tin trong ảnh hỗ trợ một số định dạng ảnh trên web, và chƣơng trình sẽ chạy trực tiếp trên web, để tiện cho việc gửi thông tin bí mật cũng nhƣ đảm bảo an toàn thông tin cần thiết. Ngoài ra sẽ cải tiến cho trƣờng hợp ảnh giấu lƣợng thông điệp thấp và nghiên cứu tiếp một số kỹ thuật phát hiện khác cho ảnh có

Một phần của tài liệu Đề Tài Giấu Tin Trong Ảnh (Trang 34 - 52)

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

(52 trang)