Thuật toán giấu tin DH24

Một phần của tài liệu Nghiên cứu một số kỹ thuật giấu tin trong môi trường Multimedia (Trang 64)

Theo kết quả nghiên cứu của một số tài liệu, khả năng phân biệt của mắt người về sự thay đổi giá trị bit thấp nhất trong thành phần màu Blue kém hơn so với các thành phần Red và Green. Tuy nhiên, qua quá trình thực nghiệm đã nhận thấy rằng; với ảnh 24 bit màu nếu chúng ta thực hiện thay đổi giá trị của bit thấp nhất trong bất kỳ thành phần màu nào thì mắt người đều không thể phát hiện được. Vì vậy, chúng ta nên sử dụng cả ba thành phần màu để thực hiện giấu tin, khi đó lượng thông tin có thể giấu được trên cùng một tệp ảnh sẽ tăng gấp ba lần so với các trường hợp chỉ dùng thành phần Blue để giấu tin.

Đối với ảnh bitmap 24 bit màu, một điểm ảnh được biểu diễn bởi ba thành phần màu: Red, Green, Blue. Mỗi thành phần màu có giá trị từ 0 đến 255 và được lữu trữ bởi một byte. Vì vậy, khi thay đổi giá trị bit thấp nhất của một thành phần màu sẽ làm cho

giá trị của màu đó được tăng giảm một đơn vị trong khoảng từ 0 đến 255. Để tiện việc theo dõi, luận văn coi việc giấu tin trong ma trận thành phần màu F tương đương với việc giấu tin trong ma trận số nguyên F mà giá trị của mỗi phần tử trong ma trận F là một số nguyên từ 0 đến 255. Và nội dung thuật toán HD24 được trình bày cho một ma trận F. Tuy nhiên, chúng ta có thể thực hiện thuật toán này trên toàn bộ không gian ảnh bằng cách chia các byte trong vùng dữ liệu ảnh thành nhiều ma trận cùng kích thước và áp dụng thuật toán đối với từng ma trận Fi.

Tóm tắt thuật toán

Input:

- Ma trận F kích thước m×n (ký hiệu Fmxn) với 0<= Fi,j <= 255 |i = 1,2..m, j=1,2..n

- Dẫy gồm r bit cần giấu là b1b2…br (với 2r ≤ m×n) - K là ma trận nhị kích thước mxn và là khoá bí mật - W là ma trận trong số cẩp r và có kích thước mxn

Output:

Gọi b là giá trị thập phân của dãy bít b1b2…br, G là ma thu được sau khi biến đổi tối đa hai phần tử từ ma trận F. Khi đó G sẽ phải thoả mãn bất biến sau:

SUM((MOD(G)K)W) mod 2r = b

Nội dung thuật toán

Bước 1: Tính T = MOD(F)K Bước 2: Tính S = SUM(TW)

Zα = {(i,j) | (Wi,j =α và Ti,j =0) hoặc (Wi,j=2r-α và Ti,j =1)} Bước 4:

Đặt d = b – S (mod 2r

)

Trường hợp 1: nếu d=0

G = F // Khi đó b = S (mod 2r) do đó giấu mà không cần biến đổi F

Trường hợp 2: nếu d0

- Trường hợp 2.1: nếu ZdØ

Chọn phần tử (i,j)  Zd và thực hiện Fi,j = INC (Fi,j)

G = F

- Trường hợp 2.2: nếu Zd=Ø Thực hiện như sau:

 Chọn h là số tự nhiên đầu tiên thoả mãn ZhdØ và Z(h-1)d=Ø.

 Chọn (i,j) Zhd và (u,v)  Zd-hd

 Fi,j = INC (Fi,j)

 Fu,v = INC(Fu,v)

Thí dụ minh hoạ thuật toán HD24

Giả sử cần giấu dãy bit 1011 vào ma trận số nguyên F có kích thước 4x4 với các tham số đầu vào như hình 3.5

1 0 1 0 1 3 2 6 1 0 1 0 7 8 5 4 K = 0 1 1 0 W = 12 11 9 10 1 0 1 1 12 14 15 3 31 80 19 100 0 0 0 0 51 71 220 231 0 1 1 1 F = 172 131 232 149 MOD(F)K= 0 0 1 1 182 108 255 252 1 0 0 1 T 0 0 0 0 F 31 80 19 100 0 8 5 4 1011 51 72 220 231 TW = 0 0 9 10 G = 172 131 232 149 12 0 0 3 182 108 255 252

Hình 3.5 Thí dụ minh hoạ thuật toán HD24 Thật vậy:

- Tính s = SUM(TW ) = 51 - Đặt d = b - s (mod 2r (adsbygoogle = window.adsbygoogle || []).push({});

) = 11 - 41 (mod 16) = 8 Vì d = 8 0, nên ta xây dựng tập

Với α = d = 8, xét ma trận W ta thấy phần tử (2,2) thoả mãn điều kiện

(W2,2=2r - d và T2,2 = 1), suy ra Zd Ø.

Do Zd Ø, theo thuật toán HD24 ta sẽ Fi,j = INC(Fi,j)|(i,j) thuộc Zd. Chọn i =2 và j = 2 thực hiện phép INC phần tử F2,2 ta sẽ được ma trận kết quả G như trong Hình 3.5

3.3.2. Phân tích thuật toán HD24

Theo định nghĩa 3.1, phép toán MOD thực chất là chuyển một ma trận số nguyên về ma trận nhị phân và giá trị của các phần tử trong ma trận nhị phân cũng chính là giá trị của bit thấp nhất trong thành phần màu của các điểm ảnh tương ứng. Do vậy, Bước 1, Bước 2 và Bước 3 của thuật toán HD24 là tương đương với Bước 1, Bước 2 và Bước 3 trong thuật toán CPT

Trong thuật toán sử dụng phép toán INC để thay đổi giá trị của một phần tử trong ma trận F. Gọi (i,j) là phần tử cần thay đổi, theo định nghĩa 3.3, khi thực hiện Fi,j = INC(Fi,j) thì tính chẵn lẻ của Fi,j bị thay đổi. Do Fi,j thay đổi tính chẵn lẻ nên MOD(Fi,j) sẽ thay đổi từ 1 thành 0 hoặc từ 0 thành 1. Do tính chất của phép toán , khi Fi,j thay đổi tính chẵn lẻ thì Ti,j cũng sẽ thay đổi (từ 1 thành 0 hoặc từ 0 thành 1) và sẽ dẫn đến giá trị của S trong bước 2 sẽ tăng thêm lượng là Wi,j. Do vậy, Bước 4 trong thuật toán HD24 tương đương với Bước 4 của thuật toán CPT vậy thuật toán HD24 hoàn toàn đúng đắn.

3.3.3. Kết quả thử nghiệm thuật toán HD24

Thuật toán HD24 được thử nghiệm trên ảnh bitmap 24 bit màu có kích thước 290x331, và thông tin cần giấu là đoạn văn bản “Do ảnh hưởng của bão số 5, mưa lớn gió to, một chiếc xe tải khi đi qua đèo Phước Tượng (xã Lộc Thủy, Phú Lộc, Thừa Thiên-Huế) đã tự lật nhào, khi bị một xe đi ngược chiều lấn đường” với kết quả giấu tin được thể hiện như Hình 3.6.

a) Ảnh trước khi giấu b) Ảnh sau khi giấu tin Hình 3.6 Thử nghiệm thuật toán HD24 trên ảnh bitmap 24 bit màu

3.4. Giấu tin trong dữ liệu âm thanh

Tín hiệu âm thanh được số hoá và lưu trữ trên máy tính với nhiều định dang và tiêu chuẩn khác nhau. Tuy nhiên, những phương pháp lưu trữ này có thể được chia thành hai dạng cơ bản là: Lưu trữ dữ liệu âm thanh ở dạng nén và lưu trữ dữ liệu âm thanh thực.

Đối với kiểu không nén, sau khi số hoá tín hiệu âm thanh bằng phương pháp lấy mẫu theo một tần số nào đó, giá trị của các mẫu được

lưu trữ trực tiếp vào bộ nhớ. Khi cần tái tạo lại tín hiệu âm thanh, các chương trình chỉ cần đọc và phát lại tuần tự từng mẫu với tần số phát bằng tần số lấy mẫu. Khi đó tín hiệu âm thanh tái tạo sẽ giống với tin hiệu âm thanh thực. Với phương pháp này, chất lượng âm thanh phụ thuộc vào tần số lấy mẫu, tần số lấy mẫu cao sẽ cho chất lượng âm thanh tốt. Tuy nhiên, khi tần số lấy mẫu cao sẽ dẫn đến tốn bộ nhớ lưu trữ.

Với phương pháp nén, sau khi có dữ liệu âm thanh ở dạng số hoá, các chương trình sẽ dùng phép biến đổi Wavelet hoặc cosin rời rạc để chuyển dữ liệu đó về dạng miền tần số. Khi có dữ liệu ở dạng miền tần số, sử dụng các phép lượng tử, nén trước khi lưu trữ. Với phương pháp này, sẽ cần rất ít bộ nhớ để lưu trữ. Tuy nhiên, chất lượng âm thanh khi tái tạo lại không cao như phương kia.

3.4.1. Định dạng tệp wav

Tệp wav là định dạng chuẩn của Microsoft dùng để lưu trữ và truyền tải dữ liệu trên máy tính. Dữ liệu trong tệp wav là dữ liệu thực sự của các mẫu âm thanh. Do vậy, âm thanh phát lại từ tệp wav sẽ giống với tín hiệu hiệu âm thanh thực, và điều này cũng đồng nghĩa với kích thước của file wav sẽ lớn hơn nhiều so với kích thước tệp mp3. Phần tiếp theo trong Hình 9 sẽ trình bày chi tiết về các trường trong tệp wav.

Offset Field Name Field Size Value

0 ChunkID 4 “RIFF”

4 ChunkSize 4 Unsigned long

8 Format 4 “WAVE”

12 frmChunkID 4 “frm “

16 frmChunkSize 4 Unsigned long

20 AudioFormat 2 Word

24 SampleRate 4 Unsigned long

28 ByteRate 4 Unsigned long

32 BlockAlign 2 Unsigned int

34 BitsPerSample 2 8; 16; 24

36 dataChunkID 4 “data” (adsbygoogle = window.adsbygoogle || []).push({});

40 dataChunkSize 4 Unsigned long

44 DATA

Hình 3.7 Định dạng tệp wav

3.4.2 Ý nghĩa các trường trong tệp wav

ChunkID: lưu trữ xâu ký tự “RIFF” và là một chuẩn trao đổi tài nguyên giữa các thiết bị điện tử.

ChunkSize: xác định kích thước còn lại của tệp. Do đó kích thước tệp sẽ bằng ChunkSize+8

Format: chứa xâu ký tự “WAVE”, xác định file có phần mở rộng wav và lưu trữ dữ liệu âm thanh.

fmtChunkID: lưu trữ xâu ký tự “fmt ”, trường này dùng để báo hiệu bắt đầu phần mô tả thông tin về âm thanh.

frmChunkSize: xác định kích thước còn lại vùng thông tin mô tả về âm thanh.

AudioFormat: Nếu bằng 1 có nghĩa dữ liệu không được nén, nếu khác 1 thì có nghĩa đó là hệ số nén.

NumChannels: số kênh âm thanh, nếu số kệnh bằng 1 thì tín hiệu âm thanh là tín hiệu mono, bằng 2 là tín hiệu stereo

SampleRate: Tốc độ lấy mẫu, thường 8000,44100. Giá trị của trường này chính lá số mẫu được lấy trong một giây. Và đây cũng là tốc độ để phát âm thanh.

ByteRate: lưu trữ tốc độ lấy mẫu nhưng tình theo byte cho tất cả các kệnh. Giá trị của trường này có thể được xác định thông qua công thức sau:

ByteRate = NumChannels * SampleRate * BitsPerSample / 8

BlockAlign: xác định số lượng byte trên một mẫu âm thanh đôi với tất cả các kênh.

BitsPersample: Số bit dùng để mã hoá cho một mẫu tín hiệu. Nếu dùng 8 bit để mã hoá thì giá trị của các mẫu sẽ từ 0 đến 255, giá trị của các mẫu từ -32768 đến + 32767 nếu số lượng bit để mã hoá tín hiệu là 16 bít.

dataChunkID: chứa xâu “data” để xác nhận bắt đầu đến vùng dữ liệu âm thanh thực sự.

dataChunkSize: xác định kích thước còn lại của file

DATA: Lưu trữ tuần tự giá trị các mẫu âm thanh trên các kênh.

3.4.3. Kỹ thuật toán giấu tin trong tệp wav

Giấu tin trong tệp Wav thực chất là giấu thông tin vào các mẫu âm thanh trong vùng Data. Theo một số tài liệu nghiên cứu, hệ thống thính giác của người có thể cảm nhận được tín hiệu âm thanh với băng tần rộng và công suất lớn. Tuy nhiên, đối với sự thay đổi nhỏ về công suất hoặc tần số thấp thì tai người khó có thể phát hiện được.

Với hai yếu điểm của hệ thống thính giác, xuất hiện hai hướng kỹ thuật giấu tin trong dữ liệu âm thanh: hướng thứ nhất, thực hiện giấu tin

trên phổ của tín hiệu bằng việc biến đổi các tần số, hướng thứ hai sẽ thay đổi giá trị công suất.

Tín hiệu âm thanh sau khi được số hoá bằng phương pháp lấy mẫu, mỗi mẫu tín hiệu được mã hoá bởi một số bit nhưng thường là 8 bit hoặc 16 bit. Với cùng số lượng bit mã hoá, mối quan hệ giữa giá trị của các mẫu và công suất của tin hiệu là tỉ lệ thuận. Do vậy, khi thay đổi giá trị của bit thấp trong các mẫu âm thanh sẽ làm thay đổi nhỏ về công suất của tín hiệu.

Tư tưởng của thuật toán

Chia vùng dữ liệu của âm thanh thành các ma trận Fi có cùng kich thước mxn, giá trị của mỗi phần tử trong ma trận là giá trị của một mẫu âm thanh. Áp dụng thuật toán HD8 để giấu tin vào các bit thấp của mẫu âm thanh.

Khi đó phép toán INC trong thuật toán HD8 sẽ được định nghĩa lại như trong công thức (3.6) nếu số bit để mã hoá âm thanh là 16 bít.

         32767 1 32767 1 ) ( A if A A if A A INC B (3.6) Nhận xét:

Giấu tin trong dữ liệu âm thanh với kỹ thuật thay biến đổi giá trị các mẫu âm thanh được thực hiện tương tự với kỹ thuật giấu tin trong ảnh bitmap 24 bit màu, tuy nhiên với kích thước của tệp wav, lượng thông tin có thể giấu được lớn hơn rất nhiều so với tệp bitmap.

Do âm thanh là tin hiệu thay đổi theo thời gian, nên để phân biệt được sự khác biệt giữa tín hiệu âm thanh trước khi giấu và sau khi giấu tin là rất khó khăn. (adsbygoogle = window.adsbygoogle || []).push({});

KẾT LUẬN

1. Kết quả của luận văn

- Thông qua việc nghiên cứu một số kỹ thuật giấu tin mật trên ảnh, luận văn phân tích, đánh giá, và so sánh các kỹ thuật giấu tin, giúp cho người dùng có cách tình tổng quát và đầy đủ khi nghiên cứu và triển khai các hệ thống giấu tin trong thực tiễn.

- Luận văn đưa ra phương pháp chứng minh mới về tính đúng đắn của thuật toán CPT, với cách chứng minh này sẽ giúp quá trình nghiên cứu thuật toán này trở nên dễ dàng hơn.

- Xuất phát từ những nghiên cứu về kỹ thuật giấu tin theo khối bit, luận văn đã đề xuất hai thuật toán giấu tin trên ảnh màu được cải tiến từ hai thuật toán giấu tin của Wu-Lee và Chen – Pan – Tseng, và thực tế cho thấy hai thuật toán này đáp ứng khá tốt các yêu cầu đối với một hệ thống giấu tin.

2. Phƣơng hƣớng nghiên cứu

Tiếp tục nghiên cứu, phát triển kỹ thuật giấu tin và cấu trúc lưu trữ các tệp dữ liệu multimedia như JPEG, MPEG, MP3, MP4.

Nghiên cứu và phát triển một số kỹ thuật thuỷ vân số trên các dữ liệu multimedia để xác thực và bảo vệ các sản phẩm số.

PHỤ LỤC

Trong quá trình thực hiện luận văn, các phần mềm được xây dựng trên ngôn ngữ lập trình visual c++ 6.0. Và dưới đây là cấu trúc các lớp quan trọng. (Toàn bộ mã nguồn của chương trình có thể download tại

http://www.estih.edu.vn/files/Datahiding.zar)

Lớp CBitmap256 được kế thừa từ lớp CMyBitmap, lớp này thực hiện giấu tin trên ảnh bitmap 8 bit màu cài đặt theo thuật toán DH8

class CBitmap256 : public CMyBitmap {

private:

PalleteTable *Pallete; unsigned char *pData; unsigned char * pEditData; CString AppPath;

BYTE T[hang][cot]; BYTE K[hang][cot]; BYTE F[hang][cot]; CString sKeyFileName;

BYTE m,n; // so hang va so cot thuc su protected:

FILE *htFile; BOOL CanhBao;

unsigned int cColorNumber; CString sNeedHide;

BOOL ImageIs256(); // Kiểm tra có đúng là ảnh 8 bit màu không

void GetInformationImage(); // Lấy thông tin về ảnh

void CalculatorTMatrix(); // Tính giá trị ma trận T ứng với F và K BYTE SUM(BYTE Matrix[hang][cot]); // Phép toán SUM

BOOL HidingIntoBlock(BYTE b);// Thuật toán áp dụng cho 1 khối

void SetKeyFileName(CString sKeyFileName);// Thiết lập tên File

public:

void SetFileName(CString FileName);//Thiết lập tên file ảnh

CBitmap256();

virtual ~CBitmap256();

void GetImage(); // Đọc File ảnh vào bộ nhớ

void DrawImage(CDC * pdc); // Vẽ Ảnh (adsbygoogle = window.adsbygoogle || []).push({});

void DataHiding();// Giấu vào toàn bộ ảnh

void GetDataHided();// Giải mã thông tin

void SetsNeedHide(CString s); // Thông tin giấu

unsigned long GetWidth();

void SetPathCurrent(CString path); // Đường dẫn ngầm định

};

Lớp CBitmap24 thực hiện giấu tin trên anh bitmap 24 bit màu class CBitmap24 : public CMyBitmap

{

private:

CString xau;

unsigned long SUMTW(); void ReadKWMatrix(); void CalculatorT(); CString AppPath; CString KeyFile; CString WeightFile; MyColor *Color; BOOL ImageIs24();

int n,m;

unsigned char *pData,*pEditData; unsigned char K[hang][cot];

unsigned char W[hang][cot]; unsigned char F[hang][cot]; unsigned char T[hang][cot]; public:

void SetStringHide(CString s);

void SetFileName(CString FileName); void GetInformationImage();

unsigned long GetWidth(); void GetDataHided(); void DataHiding(); BOOL ReadFMatrix();

BOOL HidingInABlock(unsigned char data); CBitmap24();

virtual ~CBitmap24(); void DrawImage(CDC *pdc); void getImage();

};

Lớp CMyWave sử dụng thuật toán DH24 để giấu tin dữ liệu âm thanh class CMyWave

{

private:

BOOL HideDataInABlock(unsigned char data);// Giấu trong 1 khối BOOL ReadMatranF();// Xây dựng ma trận F từ các mẫu âm thanh void GetInformation();// Thông tin về file wav

unsigned long SUMTW(); //Available FILE *hFile; CString FilePlay; CString FileName; CString AppPath; CString ChunkID; CString Format; CString frmChunkID; CString dataChunkID; CString xau;

unsigned long ChunkSize; unsigned long FileSize; unsigned char *pWave;

unsigned long frmChunkSize; unsigned char AudioFormat; unsigned char NumberChannel; unsigned long SampleRate; unsigned long ByteRate;

Một phần của tài liệu Nghiên cứu một số kỹ thuật giấu tin trong môi trường Multimedia (Trang 64)