Hình 3.9. (a) Histogram của các hệ số IWH trên các băng tần cao ảnh, (b) histogram sau khi giấu các bit thông điệp với ngưỡng T=2, (c) histogram sau khi giấu thông điệp với ngưỡng T= 4, (d)
histogram sau khi giấu thông điệp với ngưỡng T=6.
3.3.3.3. Kỹ thuật giấu thuận nghịch NSAS
Vào năm 2006, Ni và các đồng nghiệp đã đề xuất lược đồ giấu tin thuật nghịch NSAS trên ảnh dựa trên dịch chuyển histogram của ảnh [11]. Theo kỹ thuật của Ni, quá trình giấu tin gồm các bước sau đây:
a) Thuật toán giấu thuật nghịch NSAS
Bước 1. Tìm một điểm zero (điểm không) và một điểm peak (điểm đỉnh) trên
histogram của ảnh. Điểm zero và điểm peak là điểm có giá trị cấp xám của pixel trong lược đồ histogram của ảnh nhỏ nhất và bằng cực đại. Hình 3.10 là ví dụ minh hoạ cho kỹ thuật này (a) histogram của ảnh lena trước khi giấu tin. Để đơn giản ví dụ điểm zero ở vị trí 255 (h(255)=0) và điểm peak ở 154 (h(154)=2859).
Bước 2. Quét toàn bộ ảnh theo thứ tự: trái sang phải, từ trên xuống. Các pixel có giá trị xám nằm trong khoảng [155 254] được tăng lên một giá trị. Nó sẽ làm cho tần số của 155 bằng 0.
Bước 3. Nhúng bit thông điệp “0” và “1” lần lượt vào các giá trị xám 154 và 155
theo nguyên tắc sau: Giả sử pixel đang xét là 154 kiểm tra bit cần nhúng, nếu là bit “1” thì pixel 154 sẽ tăng lên 1, ngược lại nếu là bit “0” thì pixel 154 vẫn giữ nguyên. Hình 3.10. (b) là histogram của ảnh sau khi nhúng thông điệp.
(a)
(b)
Hình 3.10. (a) Histogram ảnh gốc, (b) Histogram ảnh giấu tin
b) Quá trình tách thông điệp
Quá trình tách thông điệp và khôi phục ảnh gốc ban đầu bao gồm các bước dưới đây. Ở đây giả sử giá trị điểm zero là nhỏ hơn điểm peak
Bước 1. Quét hình ảnh đã giấu thông điệp tuần tự như đã sử dụng trong thủ tục giấu.
Nếu một điểm ảnh với giá trị xám của nó là Peak +1 thì bit "1" được lấy ra. Nếu một điểm ảnh với giá trị của nó là a thì bit "0" được lấy ra ta được thông điệp giấu là các bit nhị phân 0 và 1.
Bước 2. Tiếp tục quét ảnh sau khi lấy ra bit thông điệp ta phải thay đổi giá trị pixel
đó (lấy bit 1, điểm ảnh với giá trị xám Peak+1 ở trên thay đổi thành Peak)
Bước 3. Quét ảnh một lần nữa, đối với giá trị pixel bất kỳ x (zero, peak), giá trị
pixel đó được tăng lên 1. Bằng cách này, hình ảnh ban đầu có thể được phục hồi mà không không bị sai lệch nhiều so với ảnh gốc ban đầu.
3.3.3.4. Kỹ thuật giấu thuận nghịch HKC
Trong kỹ thuật NSAS, chúng ta thấy khả năng giấu thông điệp phụ thuộc vào độ lớn của điểm peak, như với ví dụ trên khả năng giấu lượng thông điệp không quá 2859 bit trong ảnh. Tuy nhiên làm thế nào để truyền thông tin về điểm zero và điểm peak hay thông tin bổ sung thông điệp giấu từ người gửi đến người nhận là không được đề cập trong tài liệu này. Để cải tiến vấn đề này, Hwang và các đồng nghiệp của ông đề xuất kỹ thuật giấu thuật nghịch HKC
Thuật toán giấu thuật nghịch HKC
Bước 1. Tìm ra một điểm peak và hai điểm min1, min 2 (min1 nằm bên trái điểm
peak, min2 nằm bên phải điểm peak). Điểm peak và các điểm min tương ứng với số pixel của chúng là lớn nhất và nhỏ nhất trong ảnh. Ví dụ trong hình 2.7 peak = 154 là điểm có histogram lớn nhất, min1=0 là điểm có histogram là zero, min2=255 là điểm bên phải Peak có histogram là zero
Bước 2. Nhằm để khôi phục chính xác ảnh gốc, một bản đồ định vị được đề xuất dùng
để lưu trữ thông tin vị trí của các pixel (như là điểm peak, điểm min 1, luợng pixel ban đầu của điểm min 1, điểm min 2, lượng pixel ban đầu của điểm min 2) trong lược đồ HKC.
Bước 3. Khởi tạo không gian để nhúng tin. Các pixel được định vị trong histogram
nằm ở bên trái giữa điểm peak và điểm min 1 sẽ dịch sang trái một pixel. Tương tự, các pixel được định vị nằm ở bên phải giữa điểm peak và điểm min 2 sẽ dịch sang phải một pixel.
Bước 4. Nhúng thông tin mật vào trong ảnh. Nếu pixel đang xét có giá trị bằng peak-
là 1 thì pixel có giá trị là peak-2 sẽ tăng lên 1, pixel có giá trị là peak+2 sẽ giảm đi 1, còn nếu bit thông điệp là 0 thì vẫn duy trì như cũ.
Hình 3.11 là các histogram của ảnh lena trước và sau khi giấu tin sử dụng kỹ thuật giấu HKC.
Thuật toán tách thông điệp và khôi phục ảnh gốc.
Quá trình tách thông điệp được mô tả tóm tắt qua các bước sau:
Bước 1. Xác định điểm Peak trên biểu đồ histogram của ảnh đã giấu thông điệp.
Thông điệp sẽ được tách ra dựa vào điểm peak này.
Bước 2. Quét toàn bộ ảnh nếu một pixel có giá trị bằng Peak – 2 hoặc Peak+2 thì bit
0 được tách ra, ngược lại nếu một pixel có giá trị bằng Peak – 1 hoặc Peak + 1 thì bit 1 được tách ra, sau đó các Peak-1 giảm xuống 1 và Peak+1 tăng lên 1 thành Peak-2 và Peak+2.
Bước 3. Sau khi tách thông điệp chúng ta sẽ khôi phục lại ảnh gốc. Dựa vào bản đồ
định vị chúng ta biết được min1, min2 tần số pixel ban đầu của min1 và min2. Chúng ta dịch chuyển toàn bộ các pixel có giá trị trong khoảng [min1, peak-2] tăng lên 1 đơn vị, các pixel có giá trị trong khoảng [peak+2, min2] giảm xuống 1 đơn vị. Cuối cùng khôi phục số pixel ban đầu của điểm min1, min2 ta dựa vào số pixel ban đầu của min1, min2 (giả sử là nmin1, nmin2) lưu trong bản đồ định vị để chuyển nmin1 từ các pixel có giá trị min1+1 thành min1, nmin2 từ các pixel có giá trị min2-1 thành min2.
-50 0 50 100 150 200 250 300 0 500 1000 1500 2000 2500 3000
Histogram cua anh
(a)
62 peak
-50 0 50 100 150 200 250 300 0 500 1000 1500 2000 2500 3000 thong ke tan suat cua anh sau khi giau thong diep (b)
Hình 3.11 (a) Histogram ảnh gốc (b) Histogram ảnh giấu tin
3.4. MỘT SỐ PHƯƠNG PHÁP PHÒNG TRÁNH KHẢ NĂNG TẤN CÔNG TIN GIẤU
3.4.1. Mã hóa đối xứng (mã hóa không công khai-symmetric-key algorithms)
Là lớp thuật toán các mã hóa trong đó việc mã hóa và giải mã đều dùng chung cho 1 khóa (secret key)
3.4.1.1. Các loại thuật toán khóa đối xứng
Thuật toán đối xứng có thể được chia ra làm hai thể loại, mật mã luồng (stream ciphers) và mật mã khối (block ciphers). Mật mã luồng mã hóa từng bit của thông điệp trong khi mật mã khối gộp một số bit lại và mật mã hóa chúng như một đơn vị. Cỡ khối được dùng thường là các khối 64 bit. Thuật toán tiêu chuẩn mã hóa tân tiến (Advanced Encryption Standard), được NIST công nhận tháng 12 năm 2001, sử dụng các khối gồm 128 bit.
Các thuật toán đối xứng thường không được sử dụng độc lập. Trong thiết kế của các hệ thống mật mã hiện đại, cả hai thuật toán bất đối xứng (asymmetric) (dùng chìa khóa công khai) và thuật toán đối xứng được sử dụng phối hợp để tận dụng các ưu điểm của cả hai. Những hệ thống sử dụng cả hai thuật toán bao gồm những cái như SSL (Secure Sockets Layer), PGP (Pretty Good Privacy) và GPG (GNU Privacy Guard) v.v. Các thuật toán
chìa khóa bất đối xứng được sử dụng để phân phối chìa khóa mật cho thuật toán đối xứng có tốc độ cao hơn.
Một số ví dụ các thuật toán đối xứng nổi tiếng và khá được tôn trọng bao gồm Twofish, Serpent, AES (còn được gọi là Rijndael), Blowfish, CAST5, RC4, Tam phần DES (Triple DES), và IDEA (International Data Encryption Algorithm – Thuật toán mật mã hóa dữ liệu quốc tế).
3.4.1.2. Tốc độ
Các thuật toán đối xứng nói chung đòi hỏi công suất tính toán ít hơn các thuật toán khóa bất đối xứng (asymmetric key algorithms). Trên thực tế, một thuật toán khóa bất đối xứng có khối lượng tính toán nhiều hơn gấp hằng trăm, hằng ngàn lần một thuật toán khóa đối xứng (symmetric key algorithm) có chất lượng tương đương.
3.4.1.3. Hạn chế
Hạn chế của các thuật toán khóa đối xứng bắt nguồn từ yêu cầu về sự phân hưởng chìa khóa bí mật, mỗi bên phải có một bản sao của chìa. Do khả năng các chìa khóa có thể bị phát hiện bởi đối thủ mật mã, chúng thường phải được bảo an trong khi phân phối và trong khi dùng. Hậu quả của yêu cầu về việc lựa chọn, phân phối và lưu trữ các chìa khóa một cách không có lỗi, không bị mất mát là một việc làm khó khăn, khó có thể đạt được một cách đáng tin cậy.
Để đảm bảo giao thông liên lạc an toàn cho tất cả mọi người trong một nhóm gồm n người, tổng số lượng chìa khóa cần phải có là
Hiện nay người ta phổ biến dùng các thuật toán bất đối xứng có tốc độ chậm hơn để phân phối chìa khóa đối xứng khi một phiên giao dịch bắt đầu, sau đó các thuật toán khóa đối xứng tiếp quản phần còn lại . Vấn đề về bảo quản sự phân phối chìa khóa một cách đáng tin cậy cũng tồn tại ở tầng đối xứng, song ở một điểm nào đấy, người ta có thể kiểm soát chúng dễ dàng hơn. Tuy thế, các khóa đối xứng hầu như đều được sinh tạo tại chỗ.
Các thuật toán khóa đối xứng không thể dùng cho mục đích xác thực (authentication) hay mục đích chống thoái thác (non-repudiation) được.
3.4.2. Mã hóa bất đối xứng (Mã hóa công khai )
Là thuật toán trong đó việc mã hóa và giãi mã dùng hai khóa khác nhau là pulic key(khóa công khai hay khóa công cộng) và private key (khóa riêng ).
Nếu dùng public key để mã hóa thì private key sẽ dùng để giải mã và ngược lại 3.4.2.1. An toàn
Về khía cạnh an toàn, các thuật toán mật mã hóa bất đối xứng cũng không khác nhiều với các thuật toán mã hóa đối xứng. Có những thuật toán được dùng rộng rãi, có thuật toán chủ yếu trên lý thuyết; có thuật toán vẫn được xem là an toàn, có thuật toán đã bị phá vỡ… Cũng cần lưu ý là những thuật toán được dùng rộng rãi không phải lúc nào cũng đảm bảo an toàn. Một số thuật toán có những chứng minh về độ an toàn với những tiêu chuẩn khác nhau. Nhiều chứng minh gắn việc phá vỡ thuật toán với những bài toán nổi tiếng vẫn được cho là không có lời giải trong thời gian đa thức . Nhìn chung, chưa có thuật toán nào được chứng minh là an toàn tuyệt đối (như hệ thống mật mã sử dụng một lần). Vì vậy, cũng giống như tất cả các thuật toán mật mã nói chung, các thuật toán mã hóa khóa công khai cần phải được sử dụng một cách thận trọng.
3.4.2.2. Ứng dụng
Ứng dụng rõ ràng nhất của mật mã hóa khóa công khai là bảo mật: một văn bản được mã hóa bằng khóa công khai của một người sử dụng thì chỉ có thể giải mã với khóa bí mật của người đó.
Các thuật toán tạo chữ ký số khóa công khai có thể dùng để nhận thực. Một người sử dụng có thể mã hóa văn bản với khóa bí mật của mình. Nếu một người khác có thể giải mãvới khóa công khai của người gửi thì có thể tin rằng văn bản thực sự xuất phát từ người gắn với khóa công khai đó.
Các đặc điểm trên còn có ích cho nhiều ứng dụng khác như: tiền điện tử, thỏa thuận khóa…
3.4.2.3. Điểm yếu
Tồn tại khả năng một người nào đó có thể tìm ra được khóa bí mật. Không giống với hệ thống mật mã sử dụng một lần (one-time pad) hoặc tương đương, chưa có thuật toán mã hóa khóa bất đối xứng nào được chứng minh là an toàn trước các tấn công dựa trên bản chất toán học của thuật toán. Khả năng một mối quan hệ nào đó giữa 2 khóa hay điểm yếu của thuật toán dẫn tới cho phép giải mã không cần tới khóa hay chỉ cần khóa mã hóa vẫn chưa được loại trừ. An toàn của các thuật toán này đều dựa trên các ước lượng vềkhối lượng tính toán để giải các bài toán gắn với chúng. Các ước lượng này lại luôn thay đổi tùy thuộc khả năng của máy tính và các phát hiện toán học mới.
Khả năng bị tấn công dạng kẻ tấn công đứng giữa (man in the middle attack): kẻ tấn công lợi dụng việc phân phối khóa công khai để thay đổi khóa công khai. Sau khi đã giả mạo được khóa công khai, kẻ tấn công đứng ở giữa 2 bên để nhận các gói tin, giải mã rồi lại mã hóa với khóa đúng và gửi đến nơi nhận để tránh bị phát hiện. Dạng tấn công kiểu này có thể phòng ngừa bằng các phương pháp trao đổi khóa an toàn nhằm đảm bảo nhận thực người gửi vàtoàn vẹn thông tin. Một điều cần lưu ý là khi các chính phủ quan tâm đến dạng tấn công này: họ có thể thuyết phục (hay bắt buộc) nhà cung cấp chứng thực số xác nhận một khóa giả mạo và có thể đọc các thông tin mã hóa.
3.4.2.4. Khối lượng tính toán
Để đạt được độ an toàn tương đương đòi hỏi khối lượng tính toán nhiều hơn đáng kể so với thuật toán mật mã hóa đối xứng. Vì thế trong thực tế hai dạng thuật toán này
thường được dùng bổ sung cho nhau để đạt hiệu quả cao. Trong mô hình này, một bên tham gia trao đổi thông tin tạo ra một khóa đối xứng dùng cho phiên giao dịch. Khóa này sẽ được trao đổi an toàn thông qua hệ thống mã hóa khóa bất đối xứng. Sau đó 2 bên trao đổi thông tin bí mật bằng hệ thống mã hóa đối xứng trong suốt phiên giao dịch.
3.5. CHƯƠNG TRÌNH GIẤU TIN TRONG ẢNH BITMAP 3.5.1. Kỹ thuật giấu 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, chúng ta thay thế những bit ít quan trọng nhất của file gốc với dữ liệu muốn ẩ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ị 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.5.2. Các bước giải quyết vấn đề
4.2.1. Giấu thông tin trong ảnh:
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á.
- Ẩn thông tin đã bị mã hoá vào file ảnh.
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.12. 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.
68 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
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.
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