Giấu tin là kĩ thuật giấu một lượng thông tin số vào trong một đối tượng số khác ( đối tượng vỏ ) đảm bảo tính vô hình của thông tin được giấu và khi nhìn vào đối tượng vỏ sẽ khó xác định được thông tin có giấu trong đó hay không.Có nhiều cách thức tiến hành giấu thông tin trong ảnh bảo mật thông tin và có tính hiệu quả cao, tuy nhiên không phải phương pháp nào cũng áp dụng tốt, đảm bảo tính toàn vẹn của thông tin được giấu cũng như không làm thay đổi ảnh gốc khi có một sô tác động trong việc thay đổi định dạng ảnh, nén ảnh …Áp dụng thuật toán CPT ( Chen Pan Tseng) giấu tin trong khối bít áp dụng cho ảnh đen trắng. Bài viết trình bày hướng phát triển đề xuất thuật toán cho ảnh màu và ảnh đa cấp xám bằng cách sử dụng các bít ít quan trọng LSB (Least Significant Bit) của ảnh.
Trang 1THUYẾT MINH CHỦ ĐỀ : GIẤU TIN TRONG ẢNH MÀU HƯỚNG CẢI TIẾN THUẬT TOÁN CPT
1 Giới thiệu
Với sự phát triển ngày càng cao của Công nghệ thông tin, phát sinh nhiều mối
đe dọa Do đó, yêu cầu của vấn đề bảo mật được đặt lên hàng đầu Có rất nhiều phương pháp mã hóa ra đời và đã chứng minh được hiệu quả của nó Và một trong phương pháp bảo mật mới nhất là giấu tin
Giấu tin là kĩ thuật giấu một lượng thông tin số vào trong một đối tượng số khác ( đối tượng vỏ ) đảm bảo tính vô hình của thông tin được giấu và khi nhìn vào đối tượng vỏ sẽ khó xác định được thông tin có giấu trong đó hay không
Có nhiều cách thức tiến hành giấu thông tin trong ảnh bảo mật thông tin và có tính hiệu quả cao, tuy nhiên không phải phương pháp nào cũng áp dụng tốt, đảm bảo tính toàn vẹn của thông tin được giấu cũng như không làm thay đổi ảnh gốc khi có một sô tác động trong việc thay đổi định dạng ảnh, nén ảnh …
Áp dụng thuật toán CPT ( Chen- Pan- Tseng) giấu tin trong khối bít áp dụng cho ảnh đen trắng Bài viết trình bày hướng phát triển đề xuất thuật toán cho ảnh màu và ảnh đa cấp xám bằng cách sử dụng các bít ít quan trọng LSB (Least Significant Bit) của ảnh
2 Quy trình thực hiện
- Với mỗi byte của điểm ảnh ( có thể là ảnh xám hoặc các loại ảnh màu) trích
ra bít ít có giá trị nhất, hay còn gọi là bit LSB là các bít khi bị thay đổi giá trị hầu như không làm ảnh hưởng tới chất lượng của ảnh gốc Trong bài này sử dụng bít thứ 7
- Chuyển đổi tất cả thông tin cần giấu vào ảnh thành chuỗi dạng bít.
- Tạo thành các khối ma trận nhị phân ( Fi ) từ tập hợp bit LSB với kích
thước 4x4 (mặc định sẵn )
- Sinh ngẫu nhiên các ma trận khóa W, K (các ma trận K là khác nhau trong
mỗi lần giấu ) , có kích thước bằng kích thước của Fi
- Thực hiện giấu tin vào từng khối Fi theo thuật toán CPT.
- Trả các bit LSB về ảnh gốc để tạo thành ảnh mới đã giấu tin.
Trang 23 Thuật toán CPT
- Input :
Ma trận điểm ảnh Fi có kích thước 4x4,
r là số bít có thể giấu vào Fi ( r thỏa mãn điều kiện 2r < 4x4 -1, hay r=3)
Ma trận nhị phân K (ma trận khóa) có cùng kích thước với Fi (4x4) được sinh ngẫu nhiên trong mỗi lần giấu tin
Ma trận trọng số W chứa các phần tử là số nguyên, có giá trị từ 1…2r – 1 xuất hiện ít nhất một lần trong W W mặc định trong
Lượng thông tin cần dấu bi = b1b2b3
Độ chênh lệch trọng số d
- Out put :
Ma trận ảnh Fi’ đã chứa thông tin giấu vào Thuật toán sẽ thực hiện giấu r bít thông tin vào khối ma trận ảnh Fi bằng cách thay đổi nhiều nhất 2 bít của Fi và Fi được biến đổi thành Fi’ sao cho luôn thõa mãn điều kiện :
SUM ((Fi K) W) mod 2r = b1b2b3
- Algorithm :
Bước 1 : Tính array3 = (Fi K)
Bước 2 : Tính array4 = SUM ((Fi K) W)
Bước 3 : Xác định các tập vị trí
Sw = {(x,y)| (W(x,y) = w ^ (Fi K)=0) V (W(x,y) = 2r - w ^ (Fi K)=1)}
Trong đó : w lấy các giá trị 1,2…,2r – 1
Bước 4 : d= b1b2b3 - SUM ((Fi K) W) mod 2r
- Nếu d = 0 ta coi như đã giấu được lượng thông tin bi và khối Fi Do đó,
không cần thay đổi gì trong ma trận Fi Muốn lấy lại bi từ Fi đã chứa bi ta
Trang 3bi= SUM ((Fi K) W) mod 2r
- Nếu d>0 :
Th1 : Nếu chọn được (Fi K)[i,j]=0 mà W[i,j]=d , cần thay đổi bít tại
[i,j] trong Fi , Fi[i,j] = 1 để “ SUM ((Fi K) W) mod 2r “ tăng lên một lượng d Dừng thuật toán
Ngoài ra, nếu không xảy ra Th1 mà chọn được (Fi K)[i,j]=1 và
W[i,j] = h sao cho h = 2r – d Tiến hành cần thay đổi bít tại [i,j] trong
Fi Fi[i,j] = 0 để “ SUM ((Fi K) W) mod 2r “ giảm đi một lượng h Dừng thuật toán
Khi 2 trường hợp trên không xảy ra ta xét tới việc cần thay đổi 2 bít trong ma trận ảnh Fi :
Nếu (Fi K)[i,j] = 0, W[i,j] = t & (Fi K)[n,m] = 1 , W[n,m] = h sao cho h = t - d Tiến hành đổi Fi [i,j] = 1, Fi [n,m] = 0 Fi’ tạo ra sau khi đổi các bít trên Fi Dừng thuật toán
Nếu (Fi K)[i,j] = 1, W[i,j] = t & (Fi K)[n,m] = 1 , W[n,m] = h sao cho h + t = 2r – d Tiến hành đổi Fi [i,j] = 0,
Fi [n,m] = 0 Fi’ tạo ra sau khi đổi các bít trên Fi Dừng thuật toán
Nếu (Fi K)[i,j] = 0, W[i,j] = t & (Fi K)[n,m] = 0 , W[n,m] = h sao cho h + t = d Tiến hành đổi Fi [i,j]=1, Fi[n,m]=1 Fi’ tạo ra sau khi đổi các bít trên Fi Dừng thuật toán
- Tương tự : Nếu d<0 :
Th1 : Nếu chọn được (Fi K)[i,j] = 1 mà W[i,j] = |d| , cần thay đổi bít
tại [i,j] trong Fi , Fi[i,j] = 0 để “ SUM ((Fi K) W) mod 2r “ giảm đi một lượng h= - d (h>0) Dừng thuật toán
Ngoài ra, nếu không xảy ra Th1 mà chọn được (Fi K)[i,j] = 0 và
W[i,j] = h sao cho h = 2r – |d| Tiến hành cần thay đổi bít tại [i,j] trong
Fi Fi[i,j] = 1 để “ SUM ((Fi K) W) mod 2r “ tăng lên một lượng h Dừng thuật toán
Khi các điều kiện trên không thõa mãn ta xét tới việc cần thay đổi 2 bít trong ma trận ảnh Fi :
Trang 4 Nếu (Fi K)[i,j] = 0, W[i,j] = t & (Fi K)[n,m] = 1 , W[n,m] = h sao cho h = |d| + t Tiến hành đổi Fi [i,j] = 1, Fi[n,m] = 0 Fi’ tạo ra sau khi đổi các bít trên Fi Dừng thuật toán
Nếu (Fi K)[i,j] = 1, W[i,j] = t & (Fi K)[n,m] = 1 , W[n,m] = h sao cho h = |d| - t Tiến hành đổi Fi [i,j] = 0, Fi [n,m] = 0 Fi’ tạo ra sau khi đổi các bít trên Fi Dừng thuật toán
Nếu (Fi K)[i,j] = 0, W[i,j] = t & (Fi K)[n,m] = 0 , W[n,m] = h sao cho h + t = 2r –|d| Tiến hành đổi Fi [i,j] =1,
Fi [n,m] = 1 Fi’ tạo ra sau khi đổi các bít trên Fi Dừng thuật toán
4 Lấy thông tin ra khỏi ảnh.
- Lấy lại các bít LSB từ ImageResult, tạo thành từng ma trận Fi’
- Lấy các ma trận khóa K,W đã sử dụng giấu tin để giải mã.
- Thực hiện tính bi = SUM ((Fi’ K) W) mod 2r
- Lưu bi dạng mảng 3 bít.
- Copy tất cả bi vào mảng lớn, biến đổi thành dạng byte chứa giá trị ASCCI
của kí tự
- Hiển thị thông tin đã giấu.
5 Các phương thức và thuộc tính trong chương trình.
Lớp Class_Image : // thao tác với ảnh
public int getktString // đưa ra kích thước dạng byte
của thông tin.
public void Gray( Bitmap ImageInput)://tạo ảnh xám
public void LSB( Bitmap ImageInput, string xau): //giấu
ảnh vào bít LSB
public bool[] ChangeString(string xau): //đưa ra mảng chứa bít thông tin
BitArray Divide(int temp) ://trả về mảng nhị phân 8bit
byte UnchangeString( BitArray a)://trả về giá trị của
từng byte.
byte [] Alter(string beginString, byte[] value): //trả
về mảng byte đã giấu tin vào bít LSB.
int NumberByte( Bitmap ImageInput)://kiểm tra số byte
của ảnh.
Trang 5 int[] ArrayLSB( byte[] value)://tạo mảng chứa các bít
LSB của ảnh
int[,] CPT(int[,] matrix, int gtInformation)// thuật toán CPT.
int[,] matrixW(): //tạo ma trận W
int[,] matrixK(): //tạo ma trận K
public void hideCPT( Bitmap Input, string xau)://giấu ảnh theo CPT
public byte [] AppearCPT( Bitmap Input)://lấy thông tin
public int[] mang3bit(int b)://tạo mảng 3bit với đầu
vào là số nguyên.
6 Một số chú ý
- Ưu điểm :
Do sử dụng bít thông tin ít giá trị để giấu nên ảnh sau khi có thông tin không bị biến đổi nhiều
Tính bảo mật của thông tin giấu trong ảnh cao phụ thuộc vào hình thức lấy bít LSB và các ma trận khóa K, W
Với bất kì ảnh nào cũng thực hiện được mà không cần quan tâm tới cấu trúc của ảnh như thế nào
- Nhược điểm :
Số lượng thông tin giấu vào ảnh còn ít, trung bình 16 byte ảnh cho giấu 3 bít thông tin
Thông tin dễ bị mất hoặc không còn chính xác khi có bất kì tác động
gì vào ảnh như nén ảnh …
7 Hướng cải tiến trong đồ án
- Hoàn thiện hơn chương trình.
- Bít thông tin sử dụng nằm trong mặt phẳng cao.
- Giấu thông tin dạng file văn bản, dạng Image.
- Không sử dụng tới mặt phẳng bít, áp dụng thuật toán trên ngay từng điểm
ảnh
- Kiểm tra tính toàn vẹn của thông tin được giấu trong ảnh khi biến đổi ảnh đó
thành ảnh xám và biến đổi ngược trở lại