Đề tài Tìm hiểu các kỹ thuật giấu tin trong ảnh,xây dựng ứng dụng tích hợp mật mã vào giấu tin trong ảnh

Tài liệu Đề tài Tìm hiểu các kỹ thuật giấu tin trong ảnh,xây dựng ứng dụng tích hợp mật mã vào giấu tin trong ảnh: MỤC LỤC Trang DANH MỤC HÌNH VẼ Trang Hình 1.1: Hệ thống mã hóa đối xứng 11 Hình 1.2: Hệ thống mã hóa khóa công khai 11 Hình 3.1. Một ảnh thẻ chứng minh đã được giấu tin sử dụng trong công tác nhận dạng 22 Hình 3.2. Ảnh màu sau khi giấu tin rất khó phát hiện sự thay đổi 26 Hình 3.3. Ảnh đen trắng sau khi giấu cùng một lượng thông tin như ảnh màu nhưng chất lượng kém hơn (rất nhiều chấm đen lạ). 26 Hình 4.1: Mô hình hoạt động của chương trình 50 Hình 4.2: Mô hình mã hóa dữ liệu 51 Hình 4.3: Mô hình giải mã dữ liệu 51 Hình 4.4: Phép giấu thông tin vào ảnh 52 Hình 4.5: Mô hình tách thông tin từ ảnh kết quả 53 Hình 4.6: Giao diện chính của chương trình 54 Hình 4.7: Giao diện chọn file ảnh 54 Hình 4.8: Giao diện chọn file văn bản cần giấu 55 Hình 4.9: Giao diện chọn các thuật toán mã hóa 55 Hình 4.10: Chọn nơi lưu ảnh kết quả 56 Hình 4.11: Ảnh trước và sau khi giấu tin 56 Hình 4.12: Thuộc tính không đổi của ảnh t...

doc124 trang | Chia sẻ: hunglv | Lượt xem: 1357 | Lượt tải: 2download
Bạn đang xem trước 20 trang mẫu tài liệu Đề tài Tìm hiểu các kỹ thuật giấu tin trong ảnh,xây dựng ứng dụng tích hợp mật mã vào giấu tin trong ảnh, để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên
MỤC LỤC Trang DANH MỤC HÌNH VẼ Trang Hình 1.1: Hệ thống mã hóa đối xứng 11 Hình 1.2: Hệ thống mã hóa khóa công khai 11 Hình 3.1. Một ảnh thẻ chứng minh đã được giấu tin sử dụng trong công tác nhận dạng 22 Hình 3.2. Ảnh màu sau khi giấu tin rất khó phát hiện sự thay đổi 26 Hình 3.3. Ảnh đen trắng sau khi giấu cùng một lượng thông tin như ảnh màu nhưng chất lượng kém hơn (rất nhiều chấm đen lạ). 26 Hình 4.1: Mô hình hoạt động của chương trình 50 Hình 4.2: Mô hình mã hóa dữ liệu 51 Hình 4.3: Mô hình giải mã dữ liệu 51 Hình 4.4: Phép giấu thông tin vào ảnh 52 Hình 4.5: Mô hình tách thông tin từ ảnh kết quả 53 Hình 4.6: Giao diện chính của chương trình 54 Hình 4.7: Giao diện chọn file ảnh 54 Hình 4.8: Giao diện chọn file văn bản cần giấu 55 Hình 4.9: Giao diện chọn các thuật toán mã hóa 55 Hình 4.10: Chọn nơi lưu ảnh kết quả 56 Hình 4.11: Ảnh trước và sau khi giấu tin 56 Hình 4.12: Thuộc tính không đổi của ảnh trước và sau giấu tin 57 Hình 4.13: Giao diện khi hoàn tất quá trình giấu tin vào trong ảnh 57 Hình 4.14: Giao diện đọc thông tin từ ảnh 58 Hình 4.15: Chương trình đang đọc dữ liệu từ ảnh file 58 Hình 4.16: Chương trình phát hiện ra thông tin giấu trong bức ảnh 59 Hình 4.17: Chọn nơi lưu giữ dữ liệu được lấy ra 59 Hình 4.18: Giao diện khi chương trình hoàn thành 60 DANH MỤC CÁC KÝ TỰ VIẾT TẮT C: Cipher text (bản mã) D: Decryption (giải mã) E: Encryption (mã hóa) P: Plaint text (bản rõ) RC2: R SHA: Secure Hash Algorithm (thuật toán băm an toàn) MD2: Message Digest 2 MD4: Message Digest 4 MD5: Message Digest 5 DES: Data Encryption Standard (chuẩn mã hóa dữ liệu) AES: Advanced Encryption Standard (chuẩn mã hóa tiên tiến) LỜI CẢM ƠN Qua hai tháng nghiên cứu và học hỏi, đồng thời được sự giúp đỡ, chỉ bảo tận tình của thầy giáo Thạc sỹ Bùi Đức Trình đồ án tốt nghiệp của tôi đã hoàn thành. Nội dung đồ án là những gì tôi đã nghiên cứu suốt thời gian qua. Mặc dù tôi đã hết sức cố gắng, nhưng vì khối lượng công việc khá lớn, kiến thức và thời gian còn nhiều mặt hạn chế nên đồ án của tôi không tránh khỏi thiếu sót, có những thuật toán, kỹ thuật chưa được đề cập đến hoặc là chỉ tóm tắt, hy vọng chúng sẽ được hoàn thiện hơn trong tương lai. Để hoàn thành tốt đồ án này, tôi xin bày tỏ lòng biết ơn sâu sắc tới thầy giáo Thạc sỹ Bùi Đức Trình người đã giúp đỡ tôi rất nhiều trong quá trình tìm hiểu, xây dựng và phát triển bài toán. Tôi xin chân thành cảm ơn các thầy cô giáo trong và ngoài trường đã trang bị cho tôi những kiến thức cơ bản để tôi có thể hoàn thành đồ án như ngày hôm nay. Hà Nội ngày 01 tháng 6 năm 2009 Sinh viên thực hiện Nguyễn Văn Mạnh MỞ ĐẦU Ngày nay, cùng với sự phát triển mạnh mẽ của ngành khoa học công nghệ thông tin, internet đã trở thành một nhu cầu, phương tiện không thể thiếu đối với mọi người, việc truyền tin qua mạng ngày càng lớn. Tuy nhiên, với lượng thông tin được truyền qua mạng nhiều hơn thì nguy cơ dữ liệu bị truy cập trái phép cũng tăng lên vì vậy vấn đề bảo đảm an toàn và bảo mật thông tin cho dữ liệu truyền trên mạng là rất cần thiết. Để đảm bảo an toàn và bí mật cho một thông điệp truyền đi người ta thường dùng phương pháp truyền thống là mã hóa thông điệp theo một qui tắc nào đó đã được thỏa thuận trước giữa người gửi và người nhận. Tuy nhiên, phương thức này thường gây sự chú ý của đối phương về tầm quan trọng của thông điệp. Thời gian gần đây đã xuất hiện một cách tiếp cận mới để truyền các thông điệp bí mật, đó là giấu các thông tin quan trọng trong những bức ảnh thông thường. Nhìn bề ngoài các bức ảnh có chứa thông tin cũng không có gì khác với các bức ảnh khác nên hạn chế được tầm kiểm soát của đối phương. Mặt khác, dù các bức ảnh đó bị phát hiện ra là có chứa thông tin trong đó thì với các khóa có độ bảo mật cao thì việc tìm được nội dung của thông tin đó cũng rất khó có thể thực hiện được. Xét theo khía cạnh tổng quát thì giấu thông tin cũng là một hệ mã mật nhằm bảo đảm tính an toàn thông tin, nhưng phương pháp này ưu điểm là ở chỗ giảm được khả năng phát hiện được sự tồn tại của thông tin trong nguồn mang. Không giống như mã hóa thông tin là chống sự truy cập và sửa chữa một cách trái phép thông tin, mục tiêu của giấu thông tin là làm cho thông tin trộn lẫn với các điểm ảnh. Điều này sẽ đánh lừa được sự phát hiện của các tin tặc và do đó làm giảm khả năng bị giải mã. Kết hợp các kỹ thuật giấu tin với các kỹ thuật mã hóa ta có thể nâng cao độ an toàn cho việc truyền tin. NỘI DUNG BÁO CÁO CHƯƠNG I: TỔNG QUAN VỀ AN TOÀN THÔNG TIN Một số khái niệm cơ bản Khái niệm thông tin Trong cuộc sống con người luôn có nhu cầu trao đổi thông tin với nhau. Những thông tin được trao đổi rất phong phú và được truyền trên nhiều dạng khác nhau ví dụ như dùng thư tay, sóng điện từ, hay internet,… Vậy, thông tin là gì? Theo lý thuyết thông tin thì thông tin được định nghĩa là vật liệu đầu tiên được gia công trong hệ thống truyền tin. Thực ra thông tin là toàn bộ những gì con người cảm nhận về thế giới xung quanh thông qua các giác quan của mình. Khái niệm an toàn, bảo mật thông tin Ngày nay, khi mà nhu cầu trao đổi thông tin dữ liệu ngày càng lớn và đa dạng, các tiến bộ về điện tử viễn thông và công nghệ thông tin không ngừng được phát triển để nâng cao chất lượng cũng như lưu lượng truyền tin thì biện pháp bảo vệ thông tin ngày càng được đổi mới. An toàn, bảo mật thông tin là một chủ đề rộng lớn, có liên quan đến nhiều lĩnh vực khác nhau trong cuộc sống. Vậy, an toàn, bảo mật thông tin là gì? Đó là việc đảm bảo an toàn cho thông tin gửi cũng như thông tin nhận, giúp xác nhận đúng thông tin khi nhận và đảm bảo không bị tấn công hay thay đổi thông tin khi truyền đi. Các hệ thống an toàn là những hệ thống có những dịch vụ có khả năng chống lại những tai họa, lỗi và sự tác động không mong đợi, các thay đổi tác động đến độ an toàn của hệ thống là nhỏ nhất. Có ba đặc tính cơ bản của an toàn thông tin đó là tính bí mật, tính toàn vẹn và tính sẵn sàng phục vụ. Như vậy, ta có thể hiểu, an toàn thông tin là việc đảm bảo các thuộc tính này. Tuy nhiên, tùy vào mục đích sử dụng thông tin, mà người ta có thể chú trọng đến thuộc tính này hơn thuộc tính kia, hoặc tập trung đảm bảo thật tốt cho thuộc tính này mà không cần đảm bảo thuộc tính kia. Ví dụ, để công bố một văn bản nào đó thì người ta chú trọng đến việc làm sao để tài liệu này không bị sửa đổi, còn đảm bảo bí mật thì không cần thiết. Vai trò của an toàn thông tin An toàn thông tin đang là vấn đề đang rất được quan tâm hiện nay, bởi xã hội phát triển không ngừng dẫn đến nhu cầu trao đổi thông tin không ngừng tăng lên, các thông tin đòi hỏi được đảm bảo an toàn ở mức tốt nhất có thể trước sự tấn công để đánh cắp, cũng như sửa đổi thông tin. Ví dụ như, muốn trao đổi tiền với ngân hàng phải sử dụng thẻ tín dụng và hệ thống mạng để thực hiện giao dịch, bây giờ giả sử giao dịch không an toàn, người dùng bị mất số tài khoản và mã PIN thì tác hại là rất lớn. Hay một ví dụ khác như khi truyền một thông tin tối mật từ chính phủ đến cơ quan chỉ huy quân sự, chẳng hạn thông tin này không được đảm bảo tốt, để xảy ra tình trạng thông tin lọt vào tay kẻ khác hoặc bị sửa đổi trước khi đến nơi nhận thì hậu quả cũng thật khôn lường. Từ đó, ta có thể thấy vai trò của an toàn thông tin là vô cùng quan trọng trong tất cả các lĩnh vực trong cuộc sống chứ không riêng gì lĩnh vực công nghệ thông tin. Các phương pháp bảo vệ thông tin Phương pháp bảo vệ thông thường Đây là phương pháp hành chính để bảo vệ thông tin, thông tin được đăng ký và được bảo vệ bởi các cơ quan hành chính nhưng thông tin chỉ được bảo vệ hạn hẹp trong một số lĩnh vực nhất định. Chẳng hạn, thông tin về hồ sơ của cán bộ tình báo sẽ được đảm bảo chỉ cấp trên quản lý anh ta mới được biết, và đảm bảo thông tin được bí mật tuyệt đối và không được truyền đến bất kỳ ai. Phương pháp bảo vệ vật lý Đây là phương pháp bảo vệ thông tin dùng các biện pháp kỹ thuật vật lý nhằm đảm bảo thông tin bí mật, chống xem trộm và không bị sửa đổi. Chẳng hạn dùng thư có niêm phong khi niêm phong bị gỡ ra thì nó đã bị xem trộm. Hoặc dùng khóa bảo vệ tủ tài liệu. Hoặc dùng hộp mật mã bên trong có thông tin viết trên giấy mềm bọc quanh chai dấm. Nếu một người không biết mật mã mà cố tình mở ra, chai dấm sẽ vỡ và phá hủy toàn bộ thông tin bên trong…. Phương pháp bảo vệ dùng phần mềm Đây là phương pháp được quan tâm nhất bởi môi trường truyền tin hiện nay là môi trường mạng, đây là môi trường dễ xâm nhập nhất, đồng thời dữ liệu dễ xảy ra sự cố nhất. Biện pháp bảo vệ dùng phần mềm vừa đáp ứng được các nhu cầu của an toàn thông tin, vừa tỏ ra rất có hiệu quả đặc biệt trong môi trường mạng. Biện pháp bảo vệ thông tin sử dụng phần mềm thực ra là dùng các thuật toán mã hóa, hay dùng một thông tin khác làm vỏ bảo vệ hoặc kết hợp cả hai. Trong đó phương pháp thứ hai dùng một thông tin khác làm vỏ bảo vệ chính là sử dụng dữ liệu đa phương tiện như hình ảnh, audio, video,… để làm lớp vỏ bọc cho thông tin giấu trong đó, đồng thời kết hợp với những phương pháp mã hóa để thông tin được bảo vệ an toàn hơn. Đây cũng là vấn đề được chú trọng trình bày trong báo cáo này. Đánh giá độ an toàn và bảo vệ thông tin dữ liệu Tổng quan Bảo vệ an toàn thông tin dữ liệu là một chủ đề khó đánh giá được như thế nào là tối ưu, nó căn cứ vào rất nhiều yếu tố như kinh tế, độ phức tạp của hệ thống, mục đích sử dụng thông tin,… Một hệ thống được chấp nhận là đảm bảo an toàn nếu như nhu cầu an toàn thông tin dữ liệu bên nhận và bên gửi được thỏa mãn. Phải dự kiến được trước các tình huống xảy ra, để có thể có những biện pháp khắc phục nhanh chóng kịp thời, hạn chế tối đa những tác hại khi sự cố xảy ra. Các phương pháp bảo vệ phụ thuộc vào chính chủ sở hữu thông tin đó và hệ thống bảo vệ đó cũng chỉ có tính tương đối. Không có một phương pháp bảo vệ nào hiệu quả tuyệt đối với mọi trường hợp, tùy theo mục đích sử dụng, mức độ quan trọng của thông tin mà ta có những biện pháp bảo vệ tương ứng, phù hợp. An toàn phần mềm Phần mềm là yếu tố đảm bảo an toàn dữ liệu đầu tiên, phần mềm quy định phần cứng hỗ trợ cho nó để có khả năng bảo vệ hiệu quả nhất thông tin dữ liệu người dùng Ảnh hưởng của sự phát triển công nghệ đến việc bảo vệ thông tin. Công nghệ thông tin đang ngày càng phát triển chóng, đồng thời cũng gia tăng các nguy cơ xâm nhập thông tin dữ liệu vào các hệ thống thông tin. Với kẻ tấn công, tùy theo mục đích mà có những cách thức xâm nhập ngày càng tinh vi hơn, đòi hỏi yêu cầu bảo vệ cần được cải tiến và phải hiệu quả hơn. Các công nghệ bảo mật mới cần được nghiên cứu và ứng dụng vào trong thực tế để kịp đáp ứng nhu cầu bảo vệ an toàn thông tin. Mật mã và ứng dụng của mật mã Khái niệm Mã hóa là quá trình biến đổi thông tin từ định dạng bình thường sang một dạng thông tin khác sao cho nghĩa của nó không bị lộ ra nếu không có phương tiện để giải mã. Giải mã là quá trình đưa thông tin đã được mã hóa thành dạng thông tin ban đầu. Định dạng ban đầu của thông tin được gọi là bản rõ (Plain text), còn dạng đã mã được gọi là bản mã (Cipher text). Một hệ thống mã hóa bao gồm các thành phần thông tin trước khi mã hóa (P – Plain text), thông tin sau khi mã hóa (C -Cipher text), khóa để mã (K – Keys), các hàm để mã (E - Encryption), và các hàm giải mã (D - Decryption). Một cách hình thức, các phép biến đổi giữa bản rõ và bản mã được ký hiệu là C = E(P), và P = D(C) => P = D(E(P)).. Hệ thống mã hóa có thể chia thành hai loại là hệ thống mã hóa đối xứng và hệ thống mã hóa phi đối xứng. Hai loại này khác nhau ở số lượng khóa. Mã hóa đối xứng sử dụng cùng một khóa để tiến hành mã và giải mã. Trong khi đó, mã hóa phi đối xứng sử dụng hai khóa khác nhau để mã và giải mã thông tin. Mỗi loại hệ thống mã hóa có những ưu, nhược điểm riêng chẳng hạn, mật mã đối xứng thì xử lý nhanh nhưng độ an toàn không cao, ngược lại mã hóa phi đối xứng có độ an toàn và tính thuận tiện trong quản lý khóa cao hơn nhưng xử lý mất thời gian nhiều hơn. Trong các ứng dụng mã hóa hiện tại người ta thường kết hợp các ưu điểm của hai hệ thống mã hóa này chẳng hạn dùng mật mã bất đối xứng để mã những thông tin quan trọng nhưng nhỏ, còn đối với những thông tin lớn thì dùng mã khóa đối xứng. Các hệ mật mã cổ điển Mật mã cổ điển là một dạng mật mã đã được sử dụng trong lịch sử phát triển của loài người, hệ mật này hoạt động trên cơ sở bảng chữ cái và được thực hiện bằng tay hoặc một số máy móc đơn giản. Ngày nay, các hệ mật mã cổ điển đã trở nên lạc hậu do các phương thức mã hóa này quá đơn giản và những kẻ tấn công dễ dàng bẻ khóa qua nhiều phương thức tấn công như vét cạn, hay thống kê,… Các hệ mật mã cổ điển gồm: Hệ mật mã dịch vòng Hệ mật mã Affine Hệ mật mã hoán vị Hệ mật mã Viginere Hệ mật mã cổ điển chính là hệ mật mã đối xứng, việc mã hóa và giải mã thông tin sử dụng cùng chung một khóa. Mã hóa Giải mã Khóa Bản rõ Bản rõ ban đầu Hình 1.1: Hệ thống mã hóa đối xứng Các hệ mật mã khóa công khai. Mật mã khóa công khai là một dạng mật mã cho phép người sử dụng trao đổi các thông tin mật mà không cần trao đổi các khóa chung bí mật. Điều này được thực hiện bằng cách sử dụng một cặp khóa có quan hệ toán học với nhau là khóa công khai (Public key), và khóa bí mật (Private key). Trong mật mã khóa công khai, khóa bí mật phải được giữ bí mật trong khi khóa công khai được công bố trên toàn bộ hệ thống mạng, trong hai khóa này một dùng để mã hóa, một dùng để giải mã thông tin. Điều quan trọng của hệ thống là không thể tìm được khóa bí mật nếu chỉ biết khóa công khai và bản mã. Mã hóa Giải mã Khóa K(E) Bản rõ Bản rõ ban đầu Khóa K(D) Hình 1.2: Hệ thống mã hóa khóa công khai Một số hệ mật mã khóa công khai như: Hệ mật Revest Sharmir Aleman (RSA) Hệ mật Diffe Hellman Hệ mật Elgamal Các hệ thống mật mã khóa công khai chính là hệ mật mã khóa phi đối xứng. Các hệ mật này có độ an toàn (độ phức tạp tính toán) phụ thuộc vào bài toán khó. Chẳng hạn, hệ mật RSA phụ thuộc vào bài toán phân tích một số nguyên dương thành tích các thừa số nguyên tố, còn hệ mật Engamal thì dựa vào bài toán logarit rời rạc,… Mật mã khối và mã hóa dòng Mật mã khối là những thuật toán mã hóa đối xứng hoạt động trên những khối thông tin có độ dài xác định (block) với những chuyển đổi xác định. Ví dụ, việc mã có thể xử lý khối 128 bít đầu vào và biến nó thành 128 bit đầu ra, quá trình chuyển đổi còn sử dụng thêm một tham số nữa là khóa bí mật để đảm bảo an toàn cho dữ liệu, quá trình giải mã tiến hành ngược lại với khối 128 bit mã để trả về 128 bit ban đầu. Thuật toán mã hóa khối đã được sử dụng như: DES (Data Encryption Standard) do IBM phát triển, tiêu chuẩn thay thế DES là AES (Advanved Encryption Standard). Mã dòng là loại mật mã làm việc trên từng bit của dòng dữ liệu và quá trình này biến đổi theo sự biến đổi của quá trình mã hóa. Ứng dụng thực tế của mật mã Mật mã có vai trò rất quan trọng trong nhiều lĩnh vực đặc biệt là trong giao dịch điện tử, thương mại điện tử và truyền tin liên lạc. Nó giúp đảm bảo tính bí mật, toàn vẹn của thông tin khi chúng được truyền trên mạng. Đây là nền tảng của kỹ thuật chữ ký số, chữ ký điện tử trong hệ thống các thẻ tín dụng và tài khoản ngân hàng,… Mật mã khóa công khai sử dụng trong kỹ thuật mạng riêng ảo giúp liên lạc an toàn. Như vậy, cùng với nhu cầu trao đổi thông tin ngày càng lớn của con người, thì việc đảm bảo an toàn cho thông tin đó càng trở nên cấp thiết. Với việc sử dụng các hệ mật mã đối xứng hay phi đối xứng không những giúp đảm bảo thông tin được truyền đi một cách an toàn, mà còn trở thành tiền đề để xây dựng các tiện ích hiện đại giúp con người ngày càng phát triển. CHƯƠNG II : TỔNG QUAN VỀ GIẤU TIN TRONG ẢNH Giới thiệu chung về giấu thông tin Giấu thông tin (steganography) là một kỹ thuật nhúng dữ liệu vào một nguồn đa phương tiện gọi là môi trường, ví dụ như file âm thanh, ảnh động, ảnh tĩnh . . . Mục đích của che giấu thông tin là làm cho dữ liệu trở lên không thể nghe thấy hay nhìn thấy. Điều đó có nghĩa là đối phương không nhận thấy sự tồn tại của dữ liệu đã được nhúng dù có lắng nghe hay cố gắng nhìn thật cẩn thận vào môi trường có giấu dữ liệu. Mỗi kỹ thuật giấu tin gồm : Thuật toán giấu tin. Bộ giải mã thông tin. Thuật toán giấu tin được dùng để giấu thông tin vào một phương tiện mang bằng cách sử dụng một khóa bí mật được dùng chung bởi người mã và người giải mã, việc giải mã thông tin chỉ có thể thực hiện được khi có khoá. Bộ giải mã trên phương tiện mang đã chứa dữ liệu và trả lại thông điệp ẩn trong nó. Thông tin giấu Phương tiện mang Nhúng thông tin vào phương tiện chứa Phân phối trên mạng Bộ giải mã Khoá Thông tin giấu Khoá Hình 2.1. Lược đồ chung cho giấu thông tin Hình vẽ trên biểu diễn quá trình giấu tin cơ bản. Phương tiện chứa bao gồm các đối tượng được dùng làm môi trường để giấu tin như text, audio, video, ảnh …, thông tin giấu là mục đích của người sử dụng. Thông tin giấu là một lượng thông tin mang một ý nghĩa nào đó như ảnh, logo, đoạn văn bản… tùy thuộc vào mục đích của người sử dụng. Thông tin sẽ được giấu vào trong phương tiện chứa nhờ một bộ nhúng, bộ nhúng là những chương trình, triển khai các thuật toán để giấu tin và được thực hiện với một khóa bí mật giống như các hệ mã cổ điển. Sau khi giấu tin ta thu được phương tiện chứa phương tiện chứa bản tin đã giấu và phân phối sử dụng trên mạng. Sau khi nhận được đối tượng phương tiện có giấu thông tin, quá trình giải mã được thực hiện thông qua một bộ giải mã tương ứng với bộ nhúng thông tin cùng với khóa của quá trình nhúng. Kết quả thu được gồm phương tiện chứa gốc và thông tin đã giấu. Bước tiếp theo thông tin giấu sẽ được xử lý kiểm định so sánh với thông tin giấu ban đầu. Tóm lại, giấu thông tin là nghệ thuật và khoa học của truyền thông bên trong một truyền thông, mục đích của steganography là che giấu những thông báo bên trong những thông báo khác mà không làm ảnh hưởng đáng kể đến thông báo này; và bằng một cách thức nào đó sao cho người không có thẩm quyền không thể phát hiện hoặc không thể phá huỷ chúng. Vài nét về lịch sử của giấu tin Kỹ thuật giấu thông tin nhằm mục đích đảm bảo an toàn và bảo mật thông tin rõ ràng ở hai khía cạnh. Một là bảo mật cho giữ liệu được đem giấu, hai là bảo mật cho chính đối tượng được dùng để giấu tin. Hai khía cạnh khác nhau này dẫn đến hai khuynh hướng kỹ thuật chủ yếu của giấu tin. Khuynh hướng thứ nhất là giấu tin mật (steganography). Khuynh hướng này tập trung vào các kỹ thuật giấu tin sao cho thông tin giấu được nhiều và quan trọng là người khác khó phát hiện được một đối tượng có bị giấu tin bên trong hay không. Khuynh hướng thứ hai là thuỷ vân số (watermarking). Khuynh hướng thuỷ vân số đánh dấu vào đối tượng nhằm khẳng định bản quyền sở hữu hay phát hiện xuyên tạc thông tin. Thuỷ vân số có miền ứng dụng lớn hơn nên được quan tâm nghiên cứu nhiều hơn và thực tế đã có nhiều những kỹ thuật dành cho khuynh hướng này. Từ Steganography bắt nguồn từ Hi Lạp và được sử dụng cho tới ngày nay, nó có nghĩa là tài liệu được phủ (covered writing). Các câu chuyện kể về kỹ thuật giấu thông tin được truyền qua nhiều thế hệ. Có lẽ những ghi chép sớm nhất về kỹ thuật giấu thông tin (thông tin được hiểu theo nghĩa nguyên thủy của nó) thuộc về sử gia Hy-Lạp Herodotus. Khi bạo chúa Hy-Lạp Histiaeus bị vua Darius bắt giữ ở Susa vào thế kỷ thứ năm trước Công nguyên, ông ta đã gửi một thông báo bí mật cho con rể của mình là Aristagoras ở Miletus. Histiaeus đã cạo trọc đầu của một nô lệ tin cậy và xăm một thông báo trên da đầu của người nô lệ ấy. Khi tóc của người nô lệ này mọc đủ dài người nô lệ được gửi tới Miletus. Một câu chuyện khác về thời Hy-Lạp cổ đại cũng do Herodotus ghi lại. Môi trường để ghi văn bản chính là các viên thuốc được bọc trong sáp ong. Demeratus, một người Hy-Lạp, cần thông báo cho Sparta rằng Xerxes định xâm chiếm Hy-Lạp. Để tránh bị phát hiện, anh ta đã bóc lớp sáp ra khỏi các viên thuốc và khắc thông báo lên bề mặt các viên thuốc này, sau đó bọc lại các viên thuốc bằng một lớp sáp mới. Những viên thuốc được để ngỏ và lọt qua mọi sự kiểm tra một cách dễ dàng. Mực không màu là phương tiện hữu hiệu cho bảo mật thông tin trong một thời gian dài. Người Romans cổ đã biết sử dụng những chất sẵn có như nước quả, nước tiểu và sữa để viết các thông báo bí mật giữa những hàng văn tự thông thường. Khi bị hơ nóng, những thứ mực không nhìn thấy này trở nên sẫm màu và có thể đọc dễ dàng. Mực không màu cũng được sử dụng rất gần đây như trong thời gian chiến tranh Thế giới II. Ý tưởng về che giấu thông tin đã có từ hàng nghìn năm về trước nhưng kỹ thuật này được dùng chủ yếu trong quân đội và trong các cơ quan tình báo. Mãi cho tới vài thập niên gần đây, giấu thông tin mới nhận được sự quan tâm của các nhà nghiên cứu và các viện công nghệ thông tin với hàng loạt công trình nghiên cứu giá trị. Cuộc cách mạng số hoá thông tin và sự phát triển nhanh chóng của mạng truyền thông là nguyên nhân chính dẫn đến sự thay đổi này. Những phiên bản sao chép hoàn hảo, các kỹ thuật thay thế, sửa đổi tinh vi, cộng với sự lưu thông phân phối trên mạng của các dữ liệu đa phương tiện đã sinh ra nhiều vấn đề nhức nhối về nạn ăn cắp bản quyền, phân phối bất hợp pháp, xuyên tạc trái phép... Các khái niệm về giấu thông tin trong ảnh số Giấu dữ liệu là quá trình ẩn một dữ liệu vào một tệp dữ liệu khác. Dữ liệu trước khi giấu có thể được nén và mã hoá, trong các ứng dụng đòi hỏi độ mật cao, giấu dữ liệu chính là một phương pháp bảo mật thông tin hiệu quả. Giấu dữ liệu được ứng dụng trong nhiều lĩnh vực khác nhau như bảo vệ bản quyền, ngăn ngừa sao chép trái phép, truyền thông bí mật v.v.. Giấu thông tin trong ảnh số là một phần của khái niệm giấu thông tin với việc sử dụng ảnh số làm phương tiện mang. Giấu thông tin trong ảnh số có nhiều ứng dụng trong thực tế như trong việc xác định quyền sở hữu, chống xuyên tạc thông tin và chuyển giao dữ liệu một cách an toàn. Ảnh mà ta đem nhúng thông tin vào được gọi là ảnh môi trường hay ảnh gốc (host image). Ảnh thu được sau khi đã giấu thông tin gọi là ảnh kết quả (result image). Ảnh kết quả sẽ có những điểm khác so với ảnh gốc gọi là nhiễu. Ảnh kết quả càng ít nhiễu càng khó gây ra nghi ngờ về sự tồn tại của thông tin trong ảnh. Ảnh môi trường: là ảnh gốc được dùng để nhúng thông tin. Trong giấu thông tin trong ảnh thì nó mang tên ảnh môi trường, còn trong audio là audio môi trường v.v.. Thông tin nhúng: Là lượng thông tin được nhúng vào trong ảnh môi trường Phương tiện nhúng: Là một đối tượng đa phương tiện như ảnh, audio hay video đã có thông tin nhúng Tính không nhìn thấy: là một trong ba yêu cầu của bất kỳ một hệ giấu tin nào. Tính không nhìn thấy là tính chất vô hình của thông tin nhúng trong phương tiện nhúng. Tính mạnh mẽ: Là yêu cầu thứ hai của một hệ giấu tin. Tính mạnh mẽ là nói đến khả năng chịu được các thao tác biến đổi nào đó trên phương tiện nhúng và các cuộc tấn công có chủ đích. Khả năng nhúng: Là yêu cầu thứ ba của một hệ giấu tin. Khả năng nhúng chính là số lượng thông tin nhúng được nhúng trong phương tiện chứa. Nhiễu: Là phương tiện nhúng xuất hiện những đặc điểm lạ so với phương tiện chứa ban đầu. Thuỷ vân số: Là một kỹ thuật giấu các thuỷ vân vào trong phương tiện chứa, kỹ thuật không yêu cầu về tính không nhìn thấy của thông tin nhúng. Có nhiều cách để phân loại các kỹ thuật giấu thông tin trong ảnh số, dựa trên lĩnh vực áp dụng các kỹ thuật người ta chia kỹ thuật giấu tin trong ảnh thành hai loại: watermarking và image hiding. Watermarking : là kỹ thuật nhúng một biểu tượng, còn gọi là thuỷ vân (watermark) vào trong ảnh môi trường để xác định quyền sở hữu ảnh môi trường. Kích thước của biểu tượng thường nhỏ ( từ vài bit đến vài nghìn bit ). Kỹ thuật này cho phép đảm bảo nguyên vẹn biểu tượng khi ảnh môi trường bị biến đổi bởi các phép thao tác như lọc (filtering), nén mất dữ liệu (lossy compression), hay các biến đổi hình học, ... Tuy nhiên, việc đảm bảo nguyên vẹn biểu tượng không kể đến khi có sự tấn công dựa trên việc hiểu rõ thuật toán và có bộ giải mã trong tay. Image hiding : là kỹ thuật dùng một ảnh môi trường để lưu trữ và chuyển giao các dữ liệu quan trọng với kích thước tương đối lớn một cách an toàn. Mục đích của ảnh image hiding là làm cho dữ liệu trở nên không quan sát được đối với thị giác của con người. Một số đặc điểm của việc giấu thông tin trên ảnh số Hiện nay giấu thông tin trong ảnh là kỹ thuật còn tương đối mới và đang có xu hướng phát triển rất nhanh. Một kỹ thuật giấu tin trong ảnh được đánh giá dựa trên một số đặc điểm sau: Tính vô hình của thông tin được giấu trong ảnh. Số lượng thông tin được giấu. Tính an toàn và bảo mật của thông tin. Chất lượng của ảnh sau khi giấu thông tin bên trong. Tính vô hình của thông tin Khái niệm này dựa trên đặc điểm của hệ thống thị giác của con người. Thông tin nhúng là không tri giác được nếu một người với thị giác là bình thường không phân biệt được ảnh môi trường và ảnh kết quả. Trong khi image hiding yêu cầu tính vô hình của thông tin giấu ở mức độ cao thì watermarking lại chỉ yêu cầu ở một cấp độ nhất định. Chẳng hạn như người ta áp dụng watermarking cho việc gắn một biểu tượng mờ vào một chương trình truyền hình để bảo vệ bản quyền. Tính bảo mật Thuật toán nhúng tin được coi là có tính bảo mật nếu thông tin được nhúng không bị tìm ra khi bị tấn công một cách có chủ đích trên cơ sở những hiểu biết đầy đủ về thuật toán nhúng tin và có bộ giải mã (trừ khoá bí mật), hơn nữa còn có được ảnh có mang thông tin (ảnh kết quả). Đối với ảnh image hiding đây là một yêu cầu rất quan trọng. Chẳng hạn đối với thuật toán dò tin trong ảnh đen trắng kích thước m*n, độ phức tạp vẫn còn lên tới 2m*n phép tính (O(2m*n)) khi đã biết ma trận trọng số dùng trong quá trình giấu tin. Tỷ lệ giấu tin Lượng thông tin giấu so với kích thước ảnh môi trường cũng là một vấn đề cần quan tâm trong một thuật toán giấu tin. Rõ ràng là có thể chỉ giấu một bit thông tin vào mỗi ảnh mà không cần lo lắng về độ nhiễu của ảnh nhưng như vậy sẽ rất kém hiệu quả khi mà thông tin cần giấu có kích thước được tính bằng KB. Các thuật toán đều cố gắng đạt được mục đích làm thế nào giấu được nhiều thông tin nhất mà không gây ra nhiễu đáng kể. Ảnh môi trường đối với quá trình giải mã Yêu cầu cuối cùng là thuật toán phải cho phép lấy lại được thông tin đã giấu trong ảnh mà không có ảnh môi trường. Điều này là một thuận lợi khi ảnh môi trường là duy nhất nhưng lại làm giới hạn khả năng ứng dụng của kỹ thuật giấu tin. Để thực hiện việc giấu tin trong ảnh, trước hết ta phải xử lý được ảnh tức là phải số hoá ảnh. Quá trình số hoá các dạng ảnh khác nhau thì không như nhau. Có nhiều loại ảnh đã được chuẩn hoá như: JPEG, PCX, BMP,. . . Trong đồ án nay chỉ sử dụng ảnh *.BMP. Ảnh BMP (Bitmap) được phát triển bởi Microsoft Corporation, được lưu trữ dưới dạng độc lập thiết bị cho phép Windows hiển thị dữ liệu không phụ thuộc vào khung chỉ định màu trên bất kì phần cứng nào. Tên file mở rộng mặc định của một file ảnh Bitmap là .BMP. Ảnh BMP được sử dụng trên Microsoft Windows và các ứng dụng chạy trên Windows từ version 3.0 trở lên. Mỗi file ảnh Bitmap gồm 3 phần: Bitmap Header Palette màu BitmapData Các cấu trúc cụ thể của ảnh Bitmap Bitmap Header Byte thứ Ý nghĩa Giá trị 1-2 Nhận dạng file ‘BM’ hay 19778 3-6 Kích thước file Kiểu long trong Turbo C 7-10 Dự trữ Thường mang giá trị 0 11-14 Byte bắt đầu vùng dữ liệu Offset của byte bắt đầu vùng dữ liệu 15-18 Số byte cho vùng info 4 byte 19-22 Chiều rộng ảnh BMP Tính bằng pixel 23-26 Chiều cao ảnh BMP Tính bằng pixel 27-28 Số Planes màu Cố định là 1 29-30 Số bit cho một pixel Có thể là1, 4, 8, 16, 24 tuỳ theo loại ảnh 31-34 Kiểu nén dữ liệu 0: Không nén 1: Nén runlength 8bits/pixel 2: Nén runlength 4bits/pixel 35-38 Kích thước ảnh Tính bằng byte 39-42 Độ phân giải ngang Tính bằng pixel / metter 43-46 Độ phân giải dọc Tính bằng pixel / metter 47-50 Số màu sử dụng trong ảnh 51-54 Số màu được sử dụng khi hiển thị ảnh Palette màu: Bảng màu của ảnh, chỉ những ảnh nhỏ hơn hoặc bằng 8 bit màu mới có palette màu. BitmapData: Phần này nằm ngay sau phần palette màu của ảnh BMP. Đây là phần chứa giá trị màu của điểm ảnh trong BMP. Các dòng ảnh được lưu từ dưới lên trên, các điểm ảnh được lưu trữ từ dưới lên trên từ trái sang phải. Giá trị của mỗi điểm ảnh là một chỉ số trỏ tới phần tử màu tương ứng của Palette màu. Thành phần BitCount của cấu trúc BitmapHeader cho biết số bit dành cho mỗi điểm ảnh và số lượng màu lớn nhất của ảnh. BitCount có thể nhận các giá trị sau: Giá trị 1: Bimap là ảnh đen trắng, mỗi bit biểu diễn một điểm ảnh. Nếu bit mang giá trị 0 thì điểm ảnh là điểm đen, bit mang giá trị 1 điểm ảnh là điểm ảnh trắng. Giá trị 4: Bitmap là ảnh 16 màu, mỗi điểm ảnh được biểu diễn bởi 4 bit. Giá trị 8: là ảnh Bitmap 256 màu, mỗi điểm ảnh dược biểu diễn bởi 1 byte. Giá trị 16: là ảnh Bitmap high color, mỗi dãy 2 byte liên tiếp trong bitmap biểu diễn cường độ tương đối của màu đỏ, xanh lá cây, xanh lơ của một điểm ảnh. Giá trị 24: Bitmap là ảnh true color (24 bit màu), mỗi dãy 3 byte liên tiếp trong bitmap biểu diễn cường độ tương đối của màu đỏ, xanh lá cây, xanh lơ (RGB) của một điểm ảnh. Thành phần ColorUsed của cấu trúc BitmapHeader xác định số lượng màu của palette màu thực sự được sử dụng để hiển thị bitmap. Nếu thành phần này được đặt là 0, bitmap sử dụng số màu lớn nhất tương ứng với giá trị của BitCount. CHƯƠNG III: CÁC THUẬT TOÁN GIẤU TIN TRONG ẢNH Giới thiệu chung Hiện nay, giấu thông tin trong ảnh là một bộ phận chiếm tỷ lệ lớn nhất trong các chương trình ứng dụng, các phần mềm, hệ thống giấu tin trong đa phương tiện bởi lượng thông tin được trao đổi bằng ảnh là rất lớn và hơn nữa giấu thông tin trong ảnh cũng đóng vai trò hết sức quan trọng trong các hầu hết các ứng dụng bảo vệ an toàn thông tin như: nhận thực thông tin, xác định xuyên tạc thông tin, bảo vệ bản quyền tác giả, điều khiển truy cập, giấu thông tin mật...Chính vì thế mà vấn đề này đã nhận được sự quan tâm rất lớn của các cá nhân, tổ chức, trường đại học, và viện nghiên cứu trên thế giới. Thông tin sẽ được giấu cùng với dữ liệu ảnh nhưng chất lượng ảnh ít thay đổi và chẳng ai biết được đằng sau ảnh đó mang những thông tin có ý nghĩa. Và ngày nay, khi ảnh số đã được sử dụng rất phổ biến, thì giấu thông tin trong ảnh đã đem lại nhiều những ứng dụng quan trọng trên các lĩnh vực trong đời sống xã hội. Ví dụ như đối với các nước phát triển, chữ kí tay đã được số hoá và lưu trữ sử dụng như là hồ sơ cá nhân của các dịch vụ ngân hàng và tài chính. Nó được dùng để nhận thực trong các thẻ tín dụng của người tiêu dùng. Hay trong một số những ứng dụng về nhận diện như thẻ chứng minh, thẻ căn cước, hộ chiếu…người ta có thể giấu thông tin trên các ảnh thẻ để xác định thông tin thực. Ví dụ như hình vẽ bên dưới là một thẻ chứng minh đã được giấu tin trong ảnh. Thông tin giấu là số thẻ ‘123456789’ trùng với số đã được in rõ ở trên thẻ ngay phía dưới ảnh. Hình 3.1. Một ảnh thẻ chứng minh đã được giấu tin sử dụng trong công tác nhận dạng Phần mềm WinWord của MicroSoft cũng cho phép người dùng lưu trữ chữ kí trong ảnh nhị phân rồi gắn vào vị trí nào đó trong file văn bản để đảm bảo tính an toàn của thông tin. Tài liệu sau đó được truyền trực tiếp qua máy fax hoặc lưu truyền trên mạng. Theo đó, việc nhận thực chữ kí, xác thực thông tin đã trở thành một vấn đề cực kì quan trọng khi mà việc ăn cắp thông tin hay xuyên tạc thông tin bởi các tin tặc đang trở thành một vấn nạn đối với bất kì quốc gia nào, tổ chức nào. Thêm vào đó, lại có rất nhiều loại thông tin quan trọng cần được bảo mật như những thông tin về an ninh, thông tin về bảo hiểm hay các thông tin về tài chính. Các thông tin này được số hoá và lưu trữ trong hệ thống máy tính hay trên mạng. Chúng rất dễ bị lấy cắp và bị thay đổi bởi các phần mềm chuyên dụng. Việc nhận thức cũng như phát hiện thông tin xuyên tạc đã trở nên vô cùng quan trọng, cấp thiết. Một đặc điểm của giấu thông tin trong ảnh nữa đó là thông tin được giấu một cách vô hình. Nó như là cách truyền thông tin mật cho nhau mà người khác không thể biết được, bởi sau khi giấu thông tin thì chất lượng ảnh gần như không thay đổi đặc biệt đối với ảnh mầu hay ảnh đa cấp xám. Gần đây báo chí đã đưa tin vụ việc ngày 11-9 gây chấn động nước Mĩ và toàn thế giới: chính tên trùm khủng bố quốc tế Osama BinLaDen đã dùng cách thức giấu thông tin trong ảnh để liên lạc với đồng bọn, và hắn đã qua mặt được cục tình báo trung ương Mỹ CIA và các cơ quan an ninh quốc tế. Chắc chắn sau vụ việc này, thì việc nghiên cứu các vấn đề liên quan đến giấu thông tin trong ảnh sẽ rất được quan tâm. Từ năm học 1995-1996, Bộ giáo dục và Đào tạo đã bắt đầu ứng dụng công nghệ thông tin vào công tác bảo mật đề thi tốt nghiệp trung học phổ thông thay cho việc niêm phong, đóng dấu đề thi để chuyển qua theo đường bưu điện. Trong mục này đề cập tới một kỹ thuật đơn giản đáng tin cậy để giấu những thông tin quan trọng nào một ảnh đen trắng (ảnh nhị phân) bằng cách sử dụng khoá bí mật và một ma trận trọng số. Phương pháp này được chứng minh là có độ an toàn cao, đảm bảo chất lượng ảnh gốc và có tỉ lệ giữa kích thước thông tin giấu được với kích thước ảnh môi trường tương đối so với các phương pháp khác và cho phép giấu được tới [(m*n+1)] bit dữ liệu vào trong mỗi khối ảnh kích thước m*n mà chỉ cần thay đổi nhiều nhất 2 bit trong khối ảnh đó. Các đặc trưng của giấu thông tin trong ảnh Như đã nói ở trên nhúng thông tin trong ảnh có hai khái niệm khác nhau đó là thuỷ vân số (digital watermarking) và giấu thông tin trong ảnh (data hiding). Trong khi thuỷ phân số không yêu cầu thông tin giấu phải vô hình và chịu được các thao tác biến đổi trên ảnh thì giấu thông tin trong ảnh yêu cầu các thông tin giấu phải ẩn không bị phát hiện và không thực hiện được phép thao tác nào trên ảnh. Hai phương pháp này có những đặc điểm khác nhau, cách thực hiện khác nhau nhưng trong báo cáo này là giấu tin trong ảnh nên chỉ đề cập tới các đặc trưng chính của giấu thông tin trong ảnh. Phương tiện chứa có dữ liệu tri giác tĩnh Dữ liệu gốc ở đây là dữ liệu của ảnh tĩnh, dù đã giấu thông tin vào trong ảnh hay chưa thì khi ta xem ảnh bằng thị giác dữ liệu ảnh được tri giác tĩnh nghĩa là ảnh không thay đổi theo thời gian khi tri giác, điều này khác với đa phương tiện audio hay video vì khi ta tri giác các dữ liệu phương tiện chứa gốc là hình ảnh hay âm thanh thì dữ liệu gốc sẽ thay đổi liên tục với tri giác của con người theo các đoạn hay các bài, các cảnh . . . Sự khác biệt này ảnh hưởng lớn đối với các kỹ thuật giấu tin trong audio hay video. Đối với giấu thông tin trong ảnh phương pháp giấu và kỹ thuật giấu phụ thuộc vào đặc điểm thị giác của con người ví dụ như độ sáng tối, hay yếu tố khoảng cách to nhỏ. . . Giấu tin trong ảnh tác động lên dữ liệu ảnh nhưng không thay đổi kích thước ảnh. Các phép toán thực hiện công việc giấu tin sẽ được thực hiện trên dữ liệu của trên ảnh. Dữ liệu ảnh bao gồm các phần header, bảng phân màu và dữ liệu ảnh. Khi giấu thông tin, các phương pháp đều biến đổi giá trị của các bit trong dữ liệu ảnh chứ không chứ không thêm vào hay bớt đi dữ liệu ảnh. Do vậy mà kích thước ảnh trước hay sau khi giấu thông tin là như nhau. Đảm bảo yêu cầu chất lượng ảnh sau khi giấu thông tin. Đây là một yêu cầu quan trọng đối với giấu thông tin trong ảnh. Sau khi giấu thông tin bên trong, ảnh phải đảm bảo được yêu cầu không bị biến đổi để có thể bị phát hiện dễ dàng so với ảnh gốc. Yêu cầu này giường như quá đơn giản đối với ảnh màu và ảnh xám bởi mỗi pixel ảnh được biểu diễn bởi nhiều bit, nhiều giá trị và khi ta thay đổi một giá trị nhỏ nào đó chất lượng ảnh không thay đổi, thông tin giấu khó bị phát hiện, nhưng đối với ảnh đen trắng thì việc giấu thông tin phức tạp hơn nhiều, vì ảnh đen trắng mỗi pixel ảnh chỉ có hai giá trị đen hoặc trắng, và nếu ta biến đổi một bit từ đen thành trắng mà không khéo thì sẽ rất bị phát hiện. Do đó yêu cầu với các kỹ thuật giấu tin trong ảnh màu hay ảnh xám và giấu thông tin trong ảnh đen trắng là khác nhau. Trong khi đối với ảnh màu thì các thuật toán chú trọng vào việc làm sao cho giấu dược càng nhiều thông tin càng tốt thì các thuật toán áp dụng cho ảnh đen trắng lại tập trung vào làm thế nào để thông tin giấu khó bị phát hiện. Thông tin trong ảnh sẽ bị biến đổi nếu có bất kỳ một biến đổi nào trên ảnh. Vì phương pháp giấu ảnh dựa trên việc điều chỉnh các giá trị của các khối bit theo một quy tắc nào đó và khi giải mã sẽ theo các giá trị đó để tìm được thông tin giấu. Theo đó, nếu một phép biến đổi nào đó trên ảnh sẽ làm thay đổi giá trị của các bit thì sẽ làm thông tin sai lệch. Chính đặc điểm này mà giấu thông tin trong ảnh có tác dụng nhận thực và phát hiện xuyên tạc thông tin. Không cần ảnh gốc khi giải mã ảnh Thông tin được giấu trong ảnh sẽ được mang cùng dữ liệu ảnh, khi giải mã chỉ cần ảnh đã mang thông tin mà không cần dùng đến ảnh gốc để so sánh đối chiếu. Sự khác nhau giữa giấu tin trong ảnh đen trắng với ảnh màu Khởi nguồn của giấu thông tin trong ảnh là thông tin được giấu trong các ảnh màu hoặc ảnh xám, trong đó mỗi pixel ảnh mang nhiều giá trị, được biểu diễn bằng nhiều bit. Với ảnh đó thì việc thay đổi một giá trị nhỏ ở một pixel thì chất lượng ảnh gần như không thay đổi, và khả năng bị phát hiện rất thấp dưới con mắt người bình thường. Do đó hệ thống thị giác của con người cũng đóng một vai trò quan trọng trong việc bảo đảm tính không nhìn thấy thông tin được giấu trên ảnh. Với những ảnh mà mỗi điểm ảnh chỉ mang một giới hạn nhỏ các giá trị thì việc giấu thông tin trong ảnh đảm bảo tính vô hình của thông tin che giấu là một công việc khó khăn hơn nhiều. Đặc biệt với ảnh đen trắng, mỗi điểm ảnh chỉ mang một trong hai giá trị trắng hoặc đen. Vậy thì khi thay đổi giá trị một pixel từ đen thành trắng hoặc ngược lại thì rất dễ bị phát hiện. Một số thuật toán khác thì giấu chất lượng ảnh tốt hơn nhưng lượng thông tin giấu được bít và quá đơn giản không đảm bảo được độ an toàn thông tin. Bảng sau sẽ liệt kê những khác nhau cơ bản giữa giấu thông tin trong ảnh đen trắng và ảnh mầu. Sự khác nhau giữa giấu thông tin trong ảnh đen trắng và ảnh màu Giấu thông tin trong ảnh đen trắng Giấu thông tin trong ảnh màu hoặc ảnh xám Thông tin giấu ít hơn đối ảnh Thông tin giấu nhiều hơn Có cùng kích cỡ với ảnh Khả năng bị phát hiện phương tiện có giấu thông tin cao hơn ảnh màu Khả năng bị phát hiện thấp Độ an toàn thông tin thấp do dễ bị phát hiện có thông tin chứa thông tin bên trong Độ an toàn cao Các thuật toán giấu ít, phức tạp Nhiều thuật toán và có nhiều hướng mở rộng phát triển. Như áp dụng giải thuật di truyền. Hình 3.2. Ảnh màu sau khi giấu tin rất khó phát hiện sự thay đổi Hình 3.3. Ảnh đen trắng sau khi giấu cùng một lượng thông tin như ảnh màu nhưng chất lượng kém hơn (rất nhiều chấm đen lạ). Các thuật toán giấu tin trong ảnh Giấu tin trong ảnh thứ cấp Đặt bài toán Trong mục này đề cập tới các kỹ thuật đơn giản và đáng tin cậy để giấu những thông tin quan trọng vào một ảnh thứ cấp (đen trắng ) bằng cách: Sử dụng khoá bí mật K cố định. Sử dụng khoá bí mật K cố định với chiều dài thay đổi. Sử dụng khoá bí mật K cố định là một ma trận ảnh. Sử dụng khoá K (ma trận khoá kích thước m*n (ma trận 0/1) dùng chung bởi người nhận và người gửi), và ma trận trọng số cấp r, kích thước m*n cũng được dùng chung bởi người gửi và người nhận. Bài toán: Giả sử ta có dữ liệu quan trọng B cần gửi qua mạng. Người ta dùng một ảnh môi trường F đủ lớn để giấu dữ liệu, sau đó gửi đi bức ảnh đã chứa thông tin dữ liệu mà không sợ bị nghi ngờ về sự tồn tại thông tin trong đó. Sử dụng một kỹ thuật giấu tin trong ảnh (chọn khoá bí mật K và có thể kết hợp với ma trận trọng số) ta biến đổi ảnh F thành ảnh F’ có mang lượng tin trên mà không làm cho F’ sai khác nhiều so với F. Để thu được thông tin B đã giấu, chỉ cần có ảnh kết quả và các khoá mà không cần đến ảnh môi trường. Kí hiệu: F: Ảnh môi trường được dùng để mang dữ liệu B, được chia thành từng khối Fi kích thước m*n. K: Dùng chung bởi người gửi và người nhận (nếu K là ma trận khoá thì có kích thước m*n là ma trận chỉ gồm 0 và 1). W: Ma trận trọng số cấp r, kích thước m*n cũng được dùng chung bởi người gửi và người nhận. r: Số lượng bit được giấu trong mỗi khối ảnh kích thước m*n của F, r phải thoả mãn bất đẳng thức: 2r-1£ m*n. B: k*r bít dữ liệu cần giấu, được tách thành k chuỗi r bit . Các khái niệm cơ bản Ảnh thứ cấp và ma trận nhị phân Trước hết ta quan tâm đến các đối tượng chính là các ảnh thứ cấp hay ảnh một bit màu. Đó là những bức ảnh mà mỗi điểm ảnh chỉ là đen hoặc trắng, được qui định bởi 1 bit. Nếu bit mang giá trị 0 thì điểm ảnh là điểm đen, nếu là 1 thì điểm ảnh là điểm trắng. Do đó, để biểu diễn một điểm ảnh đen trắng ta có thể dùng một ma trận nhị phân, là ma trận mà mỗi phần tử chỉ nhận một trong hai gía trị là 0 hoặc 1. Khoá bí mật Khoá bí mật K có thể: Có độ dài không thay đổi. Có độ dài biến thiên. Khoá bí mật là một ma trận ảnh. Khoá bí mật là một ma trận nhị phân có cùng kích thước khối ảnh được dùng chung bởi người giấu tin và người giải mã thông tin. Ma trận trọng số cấp r Ma trận trọng số cũng là một ma trận số có cùng kích thước với khoá và được sử dụng bởi người giấu tin và người giải mã thông tin. Tuy nhiên, ma trận trọng số cần phải thoả mãn số yêu cầu xác định. Một ma trận w kích thước m*n được gọi là ma trận cấp r nếu mỗi phần tử của tập hợp { 1,2,...,2r-1} xuất hiện trong w ít nhất một lần và các phần tử của w chỉ nhận giá trị trong tập hợp {1,2,...,2r-1} với n, m, r là các số tự nhiên thoả mãn 2r-1£ m*n. Từ những định nghĩa ta nhận thấy với mỗi m,n,r thoả mãn 2r-1£ m*n sẽ có biểu thức: khả năng chọn w. Ví dụ: Với m = n = 2, r = 2 ta sẽ có 128 khả năng chọn w. Với m = n = 4, r = 4 ta sẽ có 2.326.692.130.963.200 khả năng lựa chọn w. Con số này đủ lớn để làm giảm nguy cơ thông tin bị giải mã bởi những kẻ phá hoại. Phép đảo bit Phép đảo bit là một phép biến đổi trên các bit nhị phân. Đảo bit b tương đương với phép biến đổi thay b bởi (1 – b)mod2, tức là nếu ban đầu b nhận giá trị 0 thì sau khi đảo thì nó nhận giá trị 1 và ngược lại, nếu ban đầu b có giá trị 1 thì sau khi đảo nó sẽ mang giá trị 0. Các phép toán trên ma trận Trước hết, ta coi một bitmap như là một ma trận số nguyên, vì vậy thuật ngữ bitmap và ma trận đôi khi được dùng với nghĩa tương đương. Giả sử có ma trận B, kí hiệu: + B[i,j] là phần tử nằm ở hàng thứ i, cột thứ j của ma trận B. + SUM(B) là tổng tất cả các phần tử của ma trận B. Cho hai ma trận A và B có cùng kích thước ta định nghĩa hai phép toán ma trận: Định nghĩa 1: Phép hoặc loại trừ : : là phép toán trên hai ma trận nhị phân xác định như sau: AB =C C[i,j]=A[i,j] B[i,j] Trong đó: A B A B 0 0 0 0 1 1 1 0 1 1 1 0 Ví dụ 1: Giả sử có hai ma trận Fi và K sau: Fi = K = Khi đó phép hoặc loại trừ giữa hai ma trận này cho ta kết quả: Fi K = Định nghĩa 2: Phép nhân : Kí hiệu: A B là phép toán xác định như sau AB=C Trong đó: C[i,j] = A[i,j] * B[i,j] Ví dụ 2: Giả sử có Fi , K, W như sau: Fi = K= W= Thực hiện phép toán Fi K ta được: Fi K== Tiếp theo thực hiện phép với W. (Fi K) W == Và cuối cùng tính tổng SUM ((Fi K)W) =1+3+2+1+3=10. Các kỹ thuật giấu tin trong ảnh thứ cấp Sử dụng khoá bí mật K cố định - Thuật toán: Mã hoá: Giả sử chung ta cần giấu bit b vào trong ảnh. Cắt một đoạn gồm có k điểm ảnh và giấu b vào trong ảnh. Trong đó k là khoá (k lẻ). d= F/k = số đoạn. Giải thuật dựa vào tính chẵn lẻ: Bước 1: Đọc liên tiếp k điểm ảnh. Gọi là f. Ký hiệu Sum(f): là tổng số bit 1 có trong k. Đặt t= Sum(f) mod 2. Bước 2: So sánh t và b: Nếu b và t cùng tính chẵn lẻ: thì không làm gì. Nếu t và b khác tính chẵn lẻ: thì ta tìm cách sửa đúng 1 bit trong f: Khi đó ff’: sao cho f’ và b là cùng tính chẵn lẻ. Bước 3: Việc sửa bit được tiến hành như sau: Ta chọn chính sách: Nếu có nhiều điểm đen và có điểm trắng thì sửa điểm trắng thành điểm đen. Nếu có nhiều điểm trắng và có điểm đen thì sửa điểm đen thành điểm trắng. Nếu số điểm đen và điểm trắng xấp xỉ bằng nhau thì chọn ngẫu nhiên 1 bit để sửa. Nếu bit không quan trọng, bit nằm ở những đoạn cùng màu thì việc sửa tập trung vào bit không quan trọng của những đoạn cùng màu lớn nhất. Giải mã : Chỉ cần có ảnh f’ và khoá k. Bước 1: Đọc k điểm ảnh liên tiếp. Gọi là f. Bước 2: Tính Sum(f) : Nếu Sum(f) : chẵn. Suy ra : bít b = 0 Nếu Sum(f) : lẻ. Suy ra : bit b=1 Bước 3: Chuyển đổi bít thành kí tự - Đặc điểm của thuật toán: Giải mã nhanh. Nhưng vì khoá cố định nên dễ bị phát hiện. Có thể cải tiến thuật toán bằng cách nén trước khi mã hoá. - Tính đúng của thuật toán Người ta chứng minh tính đúng đắn của thuật toán bằng cách dưa trên chính văn bản của thuật toán đã trình bày. Sử dụng khoá bí mật K cố định với chiều dài thay đổi - Thuật toán: Mã hóa: Giả sử chúng ta cần giấu bit b vào trong ảnh. Cắt một đoạn gồm có (i=1, 2 ,.., n) điểm ảnh và giấu b vào trong ảnh. Trong đó k là khóa, là số tự nhiên ngẫu nhiên. K= (,,...,) d = (n x m) sum (,,...,) x 1 = số đoạn Giải thuật dựa vào tính chẵn lẻ: Bước 1: Đọc liên tiếp điểm ảnh. Gọi là fi. Ký hiệu sum(): Là tổng số bit 1 có trong . Đặt t = Sum() mod 2. Bước 2: So sánh t và b : Nếu t và b có cùng tính chẵn lẻ : thì không làm gì. Nếu t và b khác tính chẵn lẻ: thì ta tìm cách sửa đúng 1 bit trong f : Khi đó f : sao cho và b là cùng tính chẵn lẻ. Bước 3 : Việc sửa bit được tiến hành như sau : Ta chọn chính sách : Nếu có nhiều điểm đen và có điểm trắng thì sửa điểm trắng thành điểm đen. Nếu có nhiều điểm trắng và có điểm đen thì sửa điểm đen thành điểm trắng. Nếu số điểm đen và điểm trắng xấp xỉ bằng nhau thì chọn ngẫu nhiên 1 bit để sửa. Nếu bit không quan trọng, bit nằm ở nhữngđoạn cùng màu thì việc sửa tập trung vào bit không quan trọng của những đoạn cùng màu lớn nhất. Giải mã : Chỉ cần có ảnh và khóa . Bước 1: Đọc ki điểm ảnh liên tiếp. Gọi là fi Bước 2: tính Sum(): Nếu Sum(): Chẵn Suy ra bit b = 0 Nếu Sum() : Lẻ suy ra bit b = 1 Bước 3 : Chuyển đổi bit thành kí tự. - Đặc điểm của thuật toán: Như vậy, khi chọn các bit thay đổi trong từng đoạn phù hợp thì bức ảnh sau khi giấu sẽ ít thay đổi so với bức ảnh ban đầu. - Ưu điểm thuật toán: Một bit dữ liệu được ẩn trong bức ảnh có thể không làm thay đổi hình ảnh ban đầu bức ảnh. Do đó độ an toàn sẽ cao hơn. Vì khóa thay đổi nên việc tìm cách giải mã của đối phương sẽ gặp nhiều khó khăn. Khóa k chỉ được trao đổi giữa người nhận và người gửi. Sử dụng khoá bí mật K là một ma trận ảnh (WL) - Thuật toán: Ta xem một bức ảnh nhị phân F, khoá K là một ma trận ảnh kích thước m x n và một số bit cần giấu. Để đơn giản ta xem kích thước của ảnh F là bội số của m x n. Việc giấu bằng cách thay đổi một số bit của F. Mã hoá: Bước 1: Chia F thành những khối, mỗi khối có kích thước m x n. Tính S = Sum( K), = SUM(K) Bước 2: Với mỗi khối , kiểm tra điều kiện 0 < S < thì cho phép giấu tin . Nếu không thoả mãn điều kiện thì giữ nguyên , không thay đổi bit nào. Bước 3: Xem bit muốn giấu vào khối là b, sau đó thực hiện các bước sau để thay đổi : Nếu (S mod 2=b) thì giữ nguyên . Nếu S =1 thì chọn ngẫu nhiên một bít [j,k]=0 mà K[j,k] = 1 thì đổi [j,k] về 1; Nếu S=Sk-1 thì chọn ngẫu nhiên 1 bit[j,k] =1 mà K [j,k] = 0 thì đổi [j,k] về 0; Nếu 1<S<Sk thì chọn ngẫu nhiên 1 bit [j,k] mà K [j,k]=1 rồi đảo [j,k]; Giải mã: Phương pháp trên cho phép giấu nhiều nhất 1 dữ liệu trong một khối. Giả sử được biến đổi thành ’ thì ta có bất biến sau: 0 sum(K)= b mod 2 Khi người thu xác định được 0 < sum(Fi K) <sum(K) thì họ sẽ tìm ra được bit đã giấu b: b= sum(’K) mod 2. Ví dụ : Chuỗi các bit cần giấu là: 010 F1 F2 1 1 0 1 1 1 1 1 1 1 1 0 0 1 011 0 0 0 0 0 1 0 0 0 1 1 0 1 1 1 01 1 1 0 1 0 F3 F4 1 1 0 1 1 1 1 1 1 1 1 1 0 1 0 01 0 0 0 0 1 0 0 0 1 1 0 0 1 1 0 1 1 0 1 0 F3 F4 Khoá K 0 1 0 1 1 1 0 1 0 F là một khối ảnh có kích thước 6x6 và K là một ảnh có kích thước 3x3. Trước tiên ta chia F thành 4 khối , , , có kích thước 3x3. Vì Sum(K) = Sum(K) = 5. Do đó khối không giấu dữ liệu. Vì Sum (K )= 3 < Sum(K)= 5, một bít dữ liệu sẽ được giấu vào trong F. Vì bit đầu tiên cần giấu là bit 0, đổi thành ’ để đảm bảo thoả mãn biểu thức trên. Vì Sum (K )=3 < Sum(K) = 5, một bít dữ liệu sẽ được giấu vào trong F. Vì bit tiếp theo cần giấu là bit 1, được giữ nguyên. Tương tự bị thay đổi để giấu bit 1. - Đặc điểm của thuật toán: Giải mã nhanh. Độ phức tạp được nâng cao hơn so với hai thuật toán trên. - Tính đúng đắn của thuật toán: Người ta chứng minh tính đúng đắn của thuật toán bằng cách dựa trên chính văn bản của thuật toán. Sử dụng khoá K là ma trận khoá kích thước m*n (ma trận nhị phân) dùng chung bởi người gửi và người nhận và ma trận trọng số cấp r, kích thước m*n cũng được dùng chung bởi người gửi và người nhận. - Thuật toán: Với khối ảnh như , ma trận trọng số W, khoá K, ta cần giấu r bit thông tin . . . vào bằng cách đảo nhiều lần 2 bit của . Mục đích của chúng ta là biến đổi thành ’ sao cho nó thoả mãn yêu cầu sau: SUM(’K) W . . . (mod 2). Mã hoá: Quá trình biến đổi gồm 4 bước sau: Bước 1: Tính ma trận T = K. Bước 2: Tính tổng Sum = SUM(( K) W). Bước 3: Với ma trận T và với mọi w= 1, 2, 3,..., 2r-1 ta xác định tập hợp như sau: = {(j, k)| ( W[j, k] =w Ù T[j, k] =0) ÚW[j, k]=2r- w Ù T[j, k] =1))}. Dễ nhận thấy là tập hợp các toạ độ (j, k) của ma trận ([j,k]) sao cho khi đảo bit [j, k] thì Sum ở bước 2 tăng lên w. Thực vậy, ta có: Trường hợp 1: Nếu W[j, k]=w và T[j, k] =0 khi đó đảo bit [j, k] sẽ làm cho T[j,k]=1, do đó Sum tăng lên w. Trường hợp 2: Nếu W[i, k]= 2r- w và T[j, k]=1. Khi đó đảo bit Fi[j,k] sẽ làm T[j, k] =0 do đó Sum sẽ giảm đi 2r-w, tức tăng lên w theo mod 2r. Qui ước rằng với mọi w’w(mod 2r) trong đó w=1,2,3,. . .,2r-1, ta có ’ = . Bước 4: Kí hiệu d=(. . . ) - SUM(FiÅK)Ä W(mod 2r). Ta cần thực hiện việc đảo bit trên để được ’ sao cho tổng Sum tính được ở bước 2 khi thay bởi ’ sẽ tăng lên d. Nếu d = 0, không cần thay đổi Nếu d 0. Chọn h bất kỳ thuộc tập {0, 1, 2,..., 2r-1} sao cho ¹Æ và ¹Æ. Chọn (j,k) bất kì thuộc và đảo bit [j,k] (nếu là 0 thì đổi thành 1 và ngược lai đổi 1 thành 0). Chọn (j,k) bất kì thuộc và đảo bit (j,k). Rõ ràng là để tăng Sum lên d, ta có thể chọn 2 tập khác trống và . Thật vậy, hai tập này chứa các vị trí chứa các bit trong khối mà ta có thể đảo để tăng Sum lên h.d và (-(h-1).d) một cách tương ứng, kết quả cuối cùng là Sum sẽ tăng lên h.d + (-(h-1).d)=d. Tương tự như các tập ta cũng có thể coi tập là tập chứa các vị trí mà khi dảo các bit có vị trí này trên thì ta tăng Sum lên 0. Kết quả này cũng đạt được nếu ta không đảo bất kì bit nào trên Fi . Vì vậy ta có thể coi là tập trống và khi nói “đảo một bit có vị trí thuộc tập ” có nghĩa là không cần làm gì cả. Ví dụ: Cho F, K, W như sau: 01 10 0 1 0 1 1 0 1 0 0 01 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 1 10 0 1 0 0 0 0 0 1 1 1 0 1 0 1 1 0 1 0 1 1 1 1 0 1 1 0 1 1 1 F1 F2 F3 F4 0 0 1 0 1 1 1 0 0 1 0 0 1 1 0 0 K= 6 7 1 2 22 3 4 5 5 6 7 1 1 2 3 4 W= F= Giả sử ta cần giấu 12 bit thông tin B=001010000001 vào F thành 4 khối kích thước 4*4 , , , mỗi khối ta sẽ giấu r=3 bit của B. 1 0 0 1 1 0 1 0 1 1 0 0 1 0 1 1 0 1 1 0 1 1 1 0 0 0 1 0 0 0 0 1 0 0 1 0 0 1 0 0 0 1 1 1 1 1 1 0 0 0 1 1 1 0 0 1 1 0 0 1 0 1 0 1 0 1 0 1 0 1 1 0 1 0 0 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 1 1 0 1 0 0 1 0 0 1 1 1 0 1 0 1 1 0 1 0 1 1 1 1 0 1 0 0 1 1 1 Thực hiện phép hoặc loại trừ với K thu được , nhân với W rồi tính tổng các phần tử ma trận kết quả: Với ta có Sum((K) W) 0 (mod 8), để giấu 3 bit đầu tiên của B là 001 vào ta cần biến đổi sao cho Sum tăng lên 1. Nhận thấy [2,4] = 0 và W[2,4 ] = 1 nên ta có thể đảo giá trị bit 2,4] để được . Với F2 ta có Sum((F2K) W) 2(mod 8)) và 3 bit tiếp theo của B là 010 do đó không cần phải thực hiện biến đổi trên F2 . Để giấu 3 bit 000 vào F3 có Sum ((F3K) W) 2(mod 8) ta cần biến đổi sao cho Sum tăng lên 6 bằng cách đảo bit F3 [4,4]. Với F4 ta có Sum((F4K) W) 4(mod 8) trong khi 3 bit cần giấu là 001 nên ta cần tăng Sum lên 5, việc này không thể thực hiện được bằng cách đảo một bit trong F4 mà phải cần tới hai bit. Ta chọn S10 = S2={(2,2)} và S-5 = S3={(1,3), (2,1), (3,2), (3,4)} và đảo hai bit F4 [2,2] và F4 [3,2]. Kết quả nhận được như hình vẽ trên. Giải mã: Khi nhận được bức ảnh kết quả, người nhận chỉ cần tách các bít ít đặc trưng nhất của từng điểm ảnh và chia thành từng khối Fi’ kích thước m*n. Quá trình biến đổi gồm 4 bước sau: Bước 1: Tính ma trận T= Fi’ K. Bước 2: Tính tổng Sum= SUM((Fi’K) W). Bước 3: Sử dụng ma trận khoá và ma trận trọng số để tính giá trị của r bit thông tin được giấu trong mỗi khối ảnh bằng công thức sau: (. . ., ) = SUM((Fi’K) W) (mod 2). Bước 4: Chuyển đổi bit thành kí tự. - Tính đúng của thuật toán: Để chứng minh tính đúng của thuật toán trên ta sử dụng các bổ đề sau: Bổ đề 1: Với mọi w=1,2….,2r – 1 thoả mãn w ¹ 2r-1 ta có: (Sw = Æ ) Þ ( ) Chứng minh: Với w ¹ 2r-1 giả sử Sw=Æ. Từ định nghĩa của ma trận trọng số ta suy ra tồn tại ít nhất một phần tử W[j,k]=w, do đó ta phải có Fi[j,k]^K[j,k]=1 vì nếu không khi ta đảo Fj[j,k] sẽ được giá trị 1 dẫn đến tổng Sum((FiÅK)ÅW) sẽ tăng lên w và do đó Sw không rỗng (trái với giả thiết). Do đó Fi[j,k]^K[j,k]=1. Nếu ta đảo giá trị của Fi[j,k] thì Sum sẽ giảm đi w hay tăng lên 2r-w (mod 2r), suy ra tập khác rỗng. Bổ đề được chứng minh. Bổ đề 2: Tập hợp khác rỗng. Chứng minh: Từ định nghĩa 1 ta suy ra tồn tại ít nhất một phần tử W[j,k] của ma trận W nhận giá trị 2r-1. Mặt khác ta có 2r-1º-2r-1(mod 2r) nên nếu ta đảo giá trị của Fi[j,k] thì Sum sẽ tăng lên hoặc giảm đi 2r-1. Bổ đề được chứng minh. Bổ đề 3: Bước 4 luôn luôn thực hiện được và nhiều nhất hai bit của Fi bị đảo để giấu được r bit dữ liệu. Tức là luôn luôn tìm được h sao cho Shd và S-(h-1)d khác rỗng với mọi d nhận giá trị từ 0 tới 2r-1. Chứng minh: Áp dụng định lý số học với mọi cặp số nguyên tố cùng nhau d1, d2, mọi x=1, 2,..d2-1 luôn tồn tại m, n sao cho nd1=md2+x hay md1ºx(mod d2) ta suy ra tập hợp { d mod 2r, 2d mod 2r,…} chứa tất cả và chỉ chứa các bội nhỏ hơn 2r của ước số chung lớn nhất của d và 2r nên tồn tại một số nguyên k sao cho kdº2r-1(mod 2r) giả sử k là số nguyên nhỏ nhất thoả mãn điều này. Ta đi tìm h thoả mãn Shd¹Æ và S-(h-1)d¹Æ. Với h=1, nếu S-d¹Æ (theo bổ đề 1). Với h=2, nếu S2d¹Æ thì h=2 là lời giải, nếu không thì S-d¹Æ theo bổ đề 1. Vậy bổ đề được chứng minh. Giấu tin trong ảnh màu và ảnh đa cấp xám Kết quả thực nghiệm cho thấy việc sử dụng ảnh đen trắng làm ảnh môi trường đem lại hiệu quả rất thấp vì việc biến đổi điểm ảnh từ đen sang trắng hay trắng sang đen rất dễ tạo ra các nhiễu trên ảnh và dễ bị phát hiện bởi hệ thống thị giác của con người. Hơn nữa ảnh đen trắng cung cấp lượng dữ liệu tương đối nhỏ để thực hiện các thao tác giấu tin. Ví dụ như một bức ảnh đen trắng kích thước 300*300 pixel chỉ cung cấp cho ta một lượng dữ liệu vào khoảng 90 kilobytes (kB) trong khi một bức ảnh 24 màu kích thước tương ứng có thể cho tới 2000 kB. Hạn chế này được khắc phục bằng cách sử dụng ảnh màu và ảnh đa cấp xám làm ảnh môi trường. Đối với việc chọn ảnh màu và ảnh đa cấp xám làm ảnh môi trường ta cần thực hiện thêm một bước xử lý nữa. Trước hết ta quan tâm tới khái niệm bit ít đặc trưng nhất (Least Significant Bit hay - LSB). LSB là bit có ảnh hưởng ít nhất tới việc quyết định màu sắc của mỗi điểm ảnh, vì vậy khi ta thay đổi bit ít đặc trưng nhất của một điểm ảnh thì màu sắc của điểm ảnh mới sẽ tương đối gần với điểm ảnh cũ. LSB của một điểm ảnh cũng tương tự như chữ số hàng đơn vị của một số tự nhiên, khi ta thay đổi giá trị của chữ số này thì chênh lệch giữa số cũ và số mới sẽ ít hơn khi ta thay đổi giá trị của chữ số hàng chục hoặc hàng trăm. Việc xác định LSB của mỗi điểm ảnh trong một bức ảnh phụ thuộc vào định dạng của ảnh và số bit màu dành cho mỗi điểm của ảnh đó. Quá trình giấu tin vào ảnh màu và đa cấp xám cũng tương tự như với ảnh đen trắng nhưng trước hết ta chọn từ mỗi điểm ảnh ra từ ít đặc trưng nhất để tạo thành một ảnh nhị phân gọi là ảnh thứ cấp. Sử dụng ảnh thứ cấp này như là ảnh môi trường để giấu tin, sau khi biến đổi ảnh thứ cấp ta trả nó lại ảnh ban đầu để thu được ảnh kết quả. Ảnh màu và ảnh đa cấp xám cho hiệu quả cao hơn ảnh đen trắng vì việc thay đổi bit ít đặc trưng nhất trong những ảnh này dường như không làm thay đổi màu sắc của điểm ảnh trong việc thay đổi mỗi bit trong ảnh đen trắng làm cho điểm ảnh chuyển màu từ đen sang trắng hoặc ngược lại từ trắng sang đen do đó rất dễ bị phát hiện. Đối với ảnh 16 bit màu hoặc 24 bit màu việc xác định LSB tương đối đơn giản, tuy nhiên đối với ảnh nhỏ hơn hoặc bằng 8 bit màu (những ảnh có sử dụng bảng màu) thì rất phức tạp. Khó khăn này có thể khắc phục nếu ta sắp lại bảng màu cuả ảnh hoặc sử dụng những màu không dùng đến trong bảng màu của ảnh nhỏ hơn bằng 8 bit màu. Ảnh đa cấp xám Đối với ảnh đa cấp xám, bảng màu của nó đã được sắp, tức là những cặp màu trong bảng màu có chỉ số chênh lệch càng ít thì càng giống nhau. Vì vậy đối với ảnh đa cấp xám bit LSB của mỗi điểm ảnh là bit cuối cùng của mỗi điểm ảnh. Quá trình tách bit LSB của ảnh đa cấp xám và thay đổi các bit này bằng thuật toán giấu tin trong ảnh đen trắng sẽ làm chỉ số màu của điểm ảnh màu bị thay đổi tăng hoặc giảm 1 đơn vị, do đó điểm ảnh mới sẽ có độ sáng tối của ô màu liền trước hoặc liền sau ô màu của điểm ảnh cũ. Bằng mắt thường rất khó có thể nhận thấy sự thay đổi về độ sáng tối này.Thực nghiệm cho thấy ngay cả khi ta đảo toàn bộ các bit cuối của điểm ảnh trong một ảnh 8 bit cấp xám cũng không gây ra sự khác nhau nhiều. Vì vậy việc trong mỗi khối ảnh ta chỉ thay đổi nhiều nhất 2 điểm ảnh sẽ khiến khả năng phân biệt ảnh gốc và ảnh kết quả là rất khó khăn. Ảnh nhỏ hơn hoặc bằng 8 bit màu: Những ảnh thuộc loại này gồm có ảnh 16 bit màu (4 bit màu) và ảnh 256 màu (8 bit màu ). Khác với ảnh đa cấp xám, ảnh màu với số bit màu nhỏ hơn hoặc bằng 8 không phải luôn luôn được sắp bảng màu. Những màu ở liền kề nhau trong bảng màu có thể rất khác nhau chẳng hạn như màu đen với màu trắng vẫn có thể được xếp cạnh nhau. Vì vậy việc xác định bit LSB của ảnh loại này rất khó. Nếu ta chỉ làm như đối với ảnh xám, tức là lấy bit cuối cùng của mỗi điểm ảnh để tạo thành ảnh thứ cấp thì mỗi thay đổi 0®1 hoặc 1®0 trên ảnh thứ cấp có thể làm cho màu của điểm ảnh cũ và mới tương ứng thay đổi rất nhiều dù chỉ số màu của chúng cũng chỉ tăng hoặc giảm mà thôi. Để khắc phục khó khăn này, ta có thể sắp lại bảng màu của ảnh môi trường sao cho 2 màu liên tiếp khác nhau ít nhất bằng cách so sánh thành phần màu của từng cặp điểm màu với nhau. Tuy nhiên màu của điểm ảnh là một vecto 3 thành phần không sắp thứ tự nên việc so sánh chỉ mang tính chất tương đối . Quá trình sắp lại bảng màu tiến hành như sau : B1: Chọn một màu bất kỳ trong bảng màu, giả sử là màu A(x,y,z) để đưa vào vị trí đầu tiên trong bảng màu trong đó x là thành phần Red, y là thành phần Green, z là thành phần Blue. B2: Duyệt tất cả các màu còn lại trong bảng màu, với mỗi màu B(m,n,p) chưa được sắp ta tính đại lượng s(A,B) = sqrt[(x-m)2 + (y-n)2 + (z-p)2 ] B3: Chọn màu B có s(A,B) nhỏ nhất để xếp cạnh màu A trong bảng màu, quay lại bước 2 để tiếp tục tìm màu chưa được sắp gần với B nhất. B4: Quá trình kết thúc khi mọi màu của bảng màu đã được sắp. Sau khi sắp bảng màu ta lại thay đổi lại chỉ số của mỗi điểm màu trong ảnh màu của điểm không bị thay đổi. Chẳng hạn nếu sau khi sắp lại bảng màu, màu có chỉ số 15 trong bảng màu cũ mang chỉ số mới là 80 trong bảng màu mới thì mọi điểm ảnh có giá trị là 15 phải được đổi thành 80. So với ảnh 16 bit màu hoặc 24 bit màu, ảnh 8 bit màu cũng như ảnh 4 bit màu có vẻ khó giấu thông tin hơn vì việc thay đổi dù chỉ một bit trên một điểm ảnh cũng có thể dẫn đến sự thay đổi nhận thấy được về màu sắc cuả điểm ảnh, cho dù bảng màu của điểm ảnh đã được sắp. Tuy nhiên dựa vào đặc điểm không phải ảnh nào cũng sử dụng tất cả các màu trong bảng màu để hiện thị ảnh ta có thể sử dụng những màu không dùng đến kết hợp với việc sắp bảng màu để làm mịn ảnh kết quả. Để biết những màu nào được dùng, màu nào không dùng đến trong bảng màu ta duyệt toàn bộ các màu trong bảng và đánh dấu những màu có chỉ số xuất hiện trong dữ liệu ảnh. Giả sử trong bảng màu có một màu C không dùng đến với mỗi điểm màu A khi tìm thấy được màu B có sử dụng trong bảng màu để sắp cạnh A mà giá trị s(A,B) vẫn còn lớn hơn một ngưỡng nào đó ta sẽ chèn ô màu C vào ô màu A và B đồng thời đổi lại màu của ô C sao cho giống A và B nhất có thể. Trường hợp số màu được sử dụng nhỏ hơn hoặc bằng 86 màu (đối với ảnh 256 màu) hay nhỏ hơn hoặc bằng 6 (đối với ảnh 16 màu) thì việc sắp lại bảng màu cho ta kết quả giấu tin rất đẹp. Khi đó quá trình sắp lại bảng màu tiến hành theo các bước sau: B1: Duyệt bảng màu để xác định màu nào có được sử dụng, màu nào không được sử dụng. B2: Sắp các màu có sử dụng vào các vị trí thứ 3*k của bảng màu với k=0,1,2,……(vị trí đầu tiên trong bảng màu là vị trí thứ 0). Chèn các ô màu không dùng đến vào các vị trí còn lại của bảng màu. B3: Với mỗi màu A(x,y,z) có sử dụng đến nằm ở vị trí 3*k của bảng màu mới, ta copy màu A vào ô màu nằm ở vị trí 3*k+1 và vào ô màu nằm ở vị trí 3*k-1. B4: Chỉnh lại chỉ số màu của mỗi điểm ảnh để thu được ảnh mới giống hệt ảnh cũ hiển thị. B5: Quá trình sắp lại bảng màu sẽ cho ta một ảnh mới không hề khác ảnh cũ khi hiển thị, tuy nhiên cần có sự khác nhau về mặt giá trị. Tiến hành giấu tin trên ảnh thứ cấp của ảnh vừa thu được bằng cách tách bit cuối cùng trong mỗi điểm ảnh. Việc đảo bit trên ảnh thứ cấp làm cho giá trị của điểm ảnh tăng hoặc giảm 1, tức là điểm ảnh mới sẽ mang màu của ô có chỉ số 3*k+1 hoặc 3*k-1 (giá trị cũ là 3*k), nhưng cả hai ô này đều có màu của ô 3*k nên điểm ảnh mới không hề có sự thay đổi về màu sắc so với điểm ảnh cũ. Như vậy ảnh có kết quả không có nhiễu, tức là ảnh sẽ giống hệt nhau. Một hướng khác đối với giấu tin trong ảnh nhỏ hơn 8 bit màu là ta giấu thông tin vào bảng màu. Tức là thay vì tách các bit LSB của các điểm ảnh ta tách các bit LSB của bảng màu và thực hiện quá trình giấu tin trên các bit vừa thu được. Quá trình này cũng tương tự như khi ta giấu tin trong ảnh 24 bit màu với kích thước ảnh là 256 điểm ảnh (ảnh 8 bit màu), do đó lượng thông tin giấu được sẽ rất ít bị giới hạn bởi kích thước bảng màu. Chẳng hạn đối với ảnh 8 bit màu, chọn kích thước khối là 10*10, r=4, lấy từ mỗi ô màu ra bit ta sẽ chỉ giấu được một lượng thông tin cực đại là 28 bit bằng thuật toán trên. Tuy nhiên giải pháp này cũng có những hạn chế vì ảnh kết quả có bảng màu đặc biệt, dễ gây ra nghi ngờ bởi sự giống nhau của 3 ô màu liên tiếp trong bảng màu. Hơn nữa, bảng màu có thể bị sắp xếp lại hoặc điều chỉnh lại bởi phần mềm xử lý ảnh trong quá trình hiển thị hay lưu lại ảnh dẫn đến thông tin đã được giấu có thể sẽ bị mất đi không khôi phục lại được. Giấu tin trong ảnh hi - color (16 bit màu) Ảnh 16 bit màu thực tế chỉ có thể sử dụng 15 bit cho mỗi điểm ảnh trong đó 5 bit biểu diễn cường độ tương đối của màu đỏ, 5 bit biểu diễn cường độ tương đối của màu xanh lam, 5 bit biểu diễn cường độ tương đối của màu xanh lơ. Còn lại một bit không dùng đến là bit cao nhất của byte thứ hai trong mỗi cặp hai byte biểu diễn một điểm ảnh, đó chính là bit LSB của ảnh 16 bit màu. Việc thay đổi giá trị của những bit này sẽ không hề ảnh hưởng tới màu sắc của từng điểm ảnh trong ảnh môi trường. Do đó ta sẽ chọn những bit này để tạo thành ảnh thứ cấp và sau biến đổi thu được ảnh kết quả không hề có nhiễu. Nếu chỉ lấy những bit này để tạo thành ảnh thứ cấp thì lượng thông tin sẽ bị hạn chế. Chẳng hạn một ảnh 256 màu kích thước 200*200 pixel có số màu được sử dụng nhỏ hơn bằng 86 màu sẽ giấu được lượng thông tin bằng lượng thông tin mà một ảnh 16 bit màu cùng kích thước giấu được, trong khi kích thước tính bằng byte của ảnh 256 màu chỉ bằng một nửa của ảnh 16 bit màu. Hơn nữa cả hai ảnh môi trường này đề cho ảnh kết quả không có nhiễu. Để tăng lượng thông tin giấu được trong ảnh 16 bit màu ta có thể lấy nhiều hơn 1 bit từ mỗi điểm ảnh. Nếu đánh số 16 bit của mỗi cặp hai byte biểu diễn một điểm ảnh lần lượt từ bit thấp của byte thứ nhất là 1 tới bit cao nhất của byte này là 8, kế tiếp là bit thấp nhất của byte thứ hai được đánh số 9 cho tới bit cao nhất của byte này là 16, trước hết ta sẽ lấy bit thứ 16, sau đó có thể lấy các bit được đánh số 1,6 và 11 để tạo thành ảnh thứ cấp. Khi trả ảnh thứ cấp cho ảnh môi trường ta cũng theo đúng thứ tự này để trả bit đúng vị trí. Ảnh true color (24 bit màu) Ảnh true color sử dụng 3 byte cho mỗi điểm ảnh, mỗi byte biểu diễn mộ thành phần trong cấu trúc RGB. Trong mỗi byte các bit thấp càng ít ảnh hưởng tới màu của điểm ảnh. Vì vậy các bit cuối cùng của mỗi byte trong phần dữ liệu ảnh là các LSB của ảnh true color. Để tăng lượng thông tin giấu được vào ảnh môi trường, từ mỗi byte của ảnh true color ta sẽ lấy nhiều hơn 1 bit để tạo thành ảnh thứ cấp.Thông thường cũng chỉ nên lấy nhiều nhất là 4 bit cuối cùng của mỗi byte để ảnh không bị nhiễu đáng kể, khi đó lượng thông tin tối đa có thể giấu trong ảnh cũng tăng gấp 4 lần so với lượng thông tin tối đa giấu được trong ảnh đó nếu chỉ lấy 1 bit cuối cùng của từng byte. Nhờ vậy, lượng thông tin giấu được trong ảnh màu tương đối lớn. Chẳng hạn một bức ảnh Kodak Photo CD với độ phân giải 2048*3072 điểm ảnh 24 màu theo định dạng RGB có thể giấu được 180.000 byte dữ liệu nếu tách từ mỗi byte biểu diễn một thành phần màu của một điểm ảnh ra 2 bit. Bằng kết quả thực nghiệm ta thấy rằng việc thay toàn bộ các bit cuối của mỗi byte trong phần dữ liệu của ảnh true color cũng không gây ra sự khác biệt nhiều so với ảnh gốc. Điều này làm ta nghĩ tới việc thay toàn bộ các bit này bởi các bit dữ liệu của thông tin cần giấu và khi đó lượng thông tin giấu được là rất lớn, có thể đạt tới một phần tám kích thước ảnh môi trường. Tuy nhiên, phương pháp thay thế đơn giản này cho độ an toàn không bằng vì để có được thông tin đã giấu chỉ cần tách các bit cuối cùng của mỗi byte ảnh kết quả. Mặc dù vậy, hướng đi này có thể sẽ đem lại nhiều kết quả khả quan nếu khắc phục được yếu điểm về độ an toàn. Một trong những cách giải quyết là sử dụng thêm một khóa thay thế để biến đổi thông tin trước khi giấu và áp dụng giải thuật di truyền (Ran-zan Wang, Chi-Fang Lin, ja-Chen Lin Đại học quốc gia Chiao Tung, Đài loan) . Kết quả thực nghiệm và đánh giá. Thuật toán giấu thông tin trong ảnh trình bày ở trên cho phép giấu nhiều nhất [log2(mmn+1)] bit dữ liệu vào trong một khối ảnh kích thước m*n, tức là với m*n bit môi trường có thể giấu được [log2(mmn+1)] bit dữ liệu. Do đó với kích thước khối cố định thì tỷ lệ giấu dữ liệu lớn nhất có thể là: Nhận thấy đây là một hàm đơn điệu giảm theo m*n, vì vậy muốn có tỉ lệ giấu tin càng lớn thì m*n càng nhỏ. Tuy nhiên, ta cần lưu ý rằng độ an toàn của thông tin lại phụ thuộc tỉ lệ thuận vào kích thước mà ta dùng: kích thước khối càng lớn độ an toàn càng cao. Do đó tỉ lệ giấu tin sẽ tỉ lệ nghịch với độ an toàn và ngược lại, kích thước khối nhỏ sẽ làm tăng tỉ lệ giấu tin nhưng lại làm giảm độ an toàn vì có thể gây ra những thay đổi dễ nhận biết được ở ảnh đã giấu thông tin. Thông thường ta nên chọn kích thước khối sao cho [log2(mn+1)] = 8 hoặc bằng 4, tức là giấu được 8 hay 4 bit dữ liệu vào mỗi khối ảnh kích thước m*n. Dưới đây là một số kết quả thu được đến khi tiến hành giấu tin vào các bức ảnh đen trắng, ảnh màu và ảnh đa cấp xám với kích thước khối bit giấu tin là 16*16, r=8: Đối với một bức ảnh 8 bit màu kích thước 200*200, mỗi điểm ảnh lấy ra một bit để giấu thông tin vào sẽ cho ta giấu khoảng 240 bytes. Chất lượng ảnh sau khi giấu có sự thay đổi nhỏ nhưng với thị giác của người thì không thể phân biệt được sự thay đổi đó. Còn với ảnh 16 bit màu có kích thước 200*200, mỗi điểm ảnh là 2 byte nhưng ta chỉ lấy bit có trọng số cao nhất về phía bên trái của byte thứ 2 để giấu tin. Ảnh cho ta giấu một thông tin với dung lượng khoảng 240 bytes giống như trong ảnh 8 bit màu, nhưng chất lượng ảnh sau khi giấu không có sự thay đổi nào. Ảnh 24 bit màu cũng có kích trên, mỗi điểm ảnh được chứa trong 3 byte. Mỗi byte tách ra k bit thì dung lượng ảnh sau khi giấu khoảng 3k*140 bit và chất lượng sau khi giấu có sự thay đổi rất nhỏ. CHƯƠNG IV: XÂY DỰNG ỨNG DỤNG TÍCH HỢP MẬT Mà VÀO GIẤU TIN TRONG ẢNH Môi trường làm việc. Môi trường làm việc của chương trình là window 2Kx, XP Ngôn ngữ thực hiện thuật toán. Việc chọn ngôn ngữ lập trình cho một bài toán cũng là một vấn đề rất quan trọng để giải quyết bài toán vì mỗi ngôn ngữ lập trình có những ưu điểm và nhược điểm nhất định . Chương trình tuy sử dụng đối tượng là các ảnh nhưng việc hiển thị ảnh không phải là vấn đề chính, các thao tác nói chung đều dựa trên các bit dữ liệu ảnh với số lượng tương đối lớn. Vì vậy vấn đề thời gian và bộ nhớ cần được lưu ý. Việc lựa chọn ngôn ngữ lập trình Visual Basic làm việc trên môi trường windows là tương đối phù hợp với phạm vi của đồ án này. Tổ chức và thực hiện chương trình Mô hình hoạt động của hệ thống bao gồm: Bên gửi có thông tin gốc, cho qua bộ mã hóa với khóa bí mật của mình tạo thành bản mã, giấu thông tin đã được mã hóa bằng thuật toán giấu tin vào trong ảnh và gửi đến cho bên nhận. Tại bên nhận, nhận được ảnh đã có chứa thông tin mã hóa, sẽ sử dụng thuật toán tách thông tin trong ảnh để nhận được thông tin mã hóa, đưa thông tin này qua bộ giải mã với khóa bí mật đã được trao đổi với bên gửi sẽ nhận được thông tin gốc ban đầu. Như vậy, có hai vấn đề cần quan tâm, đó là thiết kế bộ mã hóa và giải mã, và thiết kế chương trình giấu tin vào trong ảnh và tách tin từ ảnh đã chứa thông tin. Nơi gửi Nơi nhận Ảnh đã dấu tin Bộ mã hóa Thông tin gốc Khoá Bản mã Phân phối trên mạng Nhúng thông tin vào ảnh ảnh chứa thông tin dấu Tách thông tin từ ảnh Bản mã Bộ giải mã Thông tin gốc Khoá Hình 4.1: Mô hình hoạt động của chương trình Thiết kế bộ mã hóa và giải mã. Để đảm bảo tính bí mật cho thông tin ta sử dụng một trong các thuật toán mã hóa như RC2, RC4, DES, Triple DES,… với khóa bí mật được tạo ra bằng cách sử dụng một mật khẩu (password), sau đó cho mật khẩu này đi qua một thuật toán Hash tạo ra giá trị khóa có số bit tùy thuộc vào việc ta lựa chọn thuật toán Hash, chẳng hạn với MD2, MD4, MD5 sẽ tạo ra 128 bít khóa, còn với SHA sẽ tạo ra 160 bit khóa. Để đảm bảo tính toàn vẹn của thông tin, ta sử dụng một trong các thuật toán Hash với đầu vào là dữ liệu và password, đầu ra của thuật toán này sẽ được gắn với dữ liệu làm đầu vào cho thuật toán mã hóa. Như vậy, dữ liệu trước khi giấu vào trong ảnh sẽ được mã hóa hai lớp vừa đảm bảo tính bí mật, chống lại các tấn công xem trộm, vừa đảm bảo tính toàn vẹn, chống lại các tấn công giả mạo hay sửa đổi dữ liệu. Ở đây, ta cần cung cấp một mật khẩu (password) để tạo khóa cho quá trình mã hóa và giải mã dữ liệu. Password này sẽ được bên gửi và bên nhận trao đổi riêng với nhau. Thông tin gốc Thông tin gốc Password H Thông tin gốc Giá trị Hash + H Khóa K Mã hóa X Bản mã Hình 4.2: Mô hình mã hóa dữ liệu Sai Bản mã Giải mã X Password H Khóa K Thông tin gốc Giá trị Hash H = ? Đúng Lấy thông tin Yêu cầu gửi lại Hình 4.3: Mô hình giải mã dữ liệu Thiết kế chương trình giấu tin vào ảnh và tách tin từ ảnh. Để thực hiện việc giấu thông tin vào trong ảnh, trước hết ta cần tách ảnh thứ cấp (là việc tách các bit ít đặc trưng nhất) của ảnh môi trường, sau đó giấu thông tin cần giấu vào trong ảnh thứ cấp này bằng thuật toán giấu tin trong khối bit đen trắng thay các bit của ảnh thứ cấp bằng các bit của thông tin cần giấu, sau đó trả ảnh thứ cấp về ảnh môi trường theo đúng thứ tự các bit được lấy ra. Quá trình lấy tin từ ảnh kết quả được thực hiện tương tự, đầu tiên cũng tách ảnh thứ cấp từ ảnh kết quả, sau đó lấy thông tin được giấu từ ảnh thứ cấp này bằng thuật toán đã dùng. Giấu thông tin vào ảnh Phép giấu thông tin vào ảnh được chọn theo các bước sau: - Tách ảnh thứ cấp từ ảnh môi trường. - Giấu tin từ file văn bản vào ảnh thứ cấp. - Trả ảnh thứ cấp vào ảnh môi trường. Ảnh môi trường Ảnh thứ cấp 1 Tách bit ít đặc trưng nhất Thay bằng các bit của thông tin cần giấu Ảnh thứ cấp 2 Hình 4.4: Phép giấu thông tin vào ảnh Phép tách ảnh thứ cấp từ ảnh môi trường. Phép tách ảnh thứ cấp từ ảnh môi trường thực hiện việc tách các bit ít đặc trưng nhất của ảnh được chọn lưu vào một file dạng “*.tmp”. Với các bit ảnh 148 bit màu mỗi điểm ảnh chỉ tách ra một bit, với ảnh 16 bit màu, mỗi điểm ảnh cũng chỉ tách ra 1 bit là bit cao nhất của byte thứ 2 trong 2 byte biểu diễn một điểm ảnh. Với ảnh 24 bit màu số bit tách ra từ mỗi byte biểu diễn điểm ảnh được xác định bởi một số nguyên xác định. Giấu tin file dữ liệu vào ảnh thứ cấp: Giấu tin vào ảnh thứ cấp sử dụng thuật toán giấu tin trong khối bit của ảnh đen trắng tức là thay các bit của ảnh thứ cấp bằng các bit của thông tin cần giấu. Trả ảnh thứ cấp vào ảnh môi trường. Trả lại các bit từ ảnh thứ cấp sau khi giấu tin vào mỗi điểm ảnh của ảnh môi trường theo đúng trật tự khi lấy ra. Lấy thông tin từ ảnh kết quả. Lấy thông tin từ ảnh kết quả sẽ được thực hiện tương tự như quá trình giấu tin. - Tách ảnh thứ cấp từ ảnh sau khi giấu. - Lấy tin từ ảnh thứ cấp và giải mã ra thành file văn bản Thông tin giấu Tách bit ít đặc trưng nhất Ảnh thứ cấp 2 Ảnh kết quả Hình 4.5: Mô hình tách thông tin từ ảnh kết quả Chương trình ứng dụng tích hợp mật mã vào giấu tin trong ảnh. Giao diện chính của chương trình Hình 4.6: Giao diện chính của chương trình Chương trình được thiết kế với hai chức năng cơ bản, một là ứng dụng giấu tin (Nen File), một là ứng dụng lấy tin từ trong ảnh sau khi giấu tin (Bung File). Các chức năng chính của chương trình Chức năng nén file của chương trình: Là khả năng giấu thông tin vào trong ảnh, với các thuật toán mã hóa dữ liệu, kết hợp với thuật toán giấu tin. Đầu tiên sẽ là chọn file ảnh để giấu tin. Hình 4.7: Giao diện chọn file ảnh Hình 4.8: Giao diện chọn file văn bản cần giấu Hình 4.9: Giao diện chọn các thuật toán mã hóa Sau cùng là chọn nơi lưu ảnh đã chứa thông tin. Hình 4.10: Chọn nơi lưu ảnh kết quả Bây giờ ta so sánh giữa ảnh trước khi giấu tin và ảnh sau khi giấu tin. Hình 4.11: Ảnh trước và sau khi giấu tin Như vậy, ảnh trước và sau khi giấu tin không có sự thay đổi nào đáng kể, không thể phân biệt được bằng mắt thường. Hình 4.12: Thuộc tính không đổi của ảnh trước và sau giấu tin Hình 4.13: Giao diện khi hoàn tất quá trình giấu tin vào trong ảnh Chức năng lấy tin đã giấu trong ảnh: Là khả năng lấy thông tin đã giấu trong bức ảnh và khôi phục nó về hiện trạng ban đầu (thông tin gốc). Bằng các thuật toán lấy tin và giải mã tương tự như quá trình giấu tin. Hình 4.14: Giao diện đọc thông tin từ ảnh Hình 4.15: Chương trình đang đọc dữ liệu từ ảnh file Hình 4.16: Chương trình phát hiện ra thông tin giấu trong bức ảnh Khôi phục lại file dữ liệu bằng cách chọn file cần bung, gõ password để giải mã file đã được mã hóa, chọn đường dẫn và lưu tên file dữ liệu. Hình 4.17: Chọn nơi lưu giữ dữ liệu được lấy ra Hình 4.18: Giao diện khi chương trình hoàn thành Thông tin sau khi lấy ra từ bức ảnh, hoàn toàn trùng khớp với thông tin gốc ban đầu. KẾT LUẬN Cùng với giấu thông tin trong audio và giấu thông tin trong video, kỹ thuật giấu thông tin trong ảnh là những hướng nghiên cứu chính của thuật toán giấu thông tin hiện nay và đã đạt được những kết quả khả quan. Mặc dù so với hai kỹ thuật trước, kỹ thuật giấu thông tin trong ảnh bị hạn chế về mặt kích thước của ảnh do đó ảnh hưởng đến lượng thông tin có thể giấu trong đó, tuy nhiên điều này có thể được khắc phục bằng cách tăng số lượng ảnh giấu. Đồ án đã trình bày một số khái niệm liên quan tới việc che giấu thông tin nói chung, cụ thể hơn là giấu thông tin trong ảnh số và cũng trình bày một thuật toán giấu tin trong ảnh đen trắng, trên cơ sở đó phát triển thuật toán cho việc giấu tin trong ảnh màu và ảnh đa cấp xám. Với thuật toán giấu tin trong ảnh mầu thì tính vô hình của thông tin sau khi giấu được đảm bảo, thông qua việc chọn m, n đủ lớn những biến đổi không gây ra sự chú ý đáng kể nào. Ảnh sau khi giấu tin sẽ ít xuất hiện những điểm ảnh có màu sắc khác so với các điểm ảnh xung quanh và với thị giác của con người thì không thể phân biệt được sự khác nhau đó. Độ an toàn của chương trình, phụ thuộc vào độ an toàn của thuật toán giấu tin và thuật toán mã hóa. Với thuật toán giấu tin, độ an toàn phụ thuộc rất lớn vào vấn đề có thể phát hiện được những thay đổi trong ảnh đã giấu tin với ảnh gốc hay không, do đó khi chọn ảnh gốc thì nên chọn những ảnh bình thường, ít quen thuộc,… và quá trình truyền ảnh giấu tin nên được ngụy trang bằng những việc bình thường, gửi kèm theo nhiều ảnh không chứa thông tin,… khi đó kẻ tấn công sẽ rất khó để có thể nhận biết trong ảnh có chứa thông tin hay không và nếu có thì ảnh nào mới chứa thông tin,… Ngoài ra kết hợp với những thuật toán băm, thuật toán mã hóa dữ liệu, sẽ làm tăng thêm độ an toàn cho thông tin truyền đi. Độ an toàn của chương trình phụ thuộc vào việc lựa chọn thuật toán băm và thuật toán mã hóa. Tuy nhiên, mỗi một thuật toán sẽ có những ưu, nhược điểm riêng, do đó tùy vào độ quan trọng của thông tin, mục đích của công việc mà ta lựa chọn thuật toán thích hợp. Nói cách khác, khi ứng dụng việc tích hợp mật mã vào giấu thông tin trong ảnh, độ an toàn của dữ liệu khi được gửi đi sẽ tăng lên rất nhiều so với kỹ thuật chỉ giấu thông tin thông thường, hoặc chỉ sử dụng các thuật toán mã hóa. Không một phương pháp bảo vệ dữ liệu nào được gọi là an toàn tuyệt đối, do đó, tùy vào mức độ quan trọng của thông tin, mục đích sử dụng và điều kiện thực tế để ta lựa chọn phương pháp tối ưu nhất. Do thời gian và kiến thức còn hạn chế nên đồ án này của em không tránh khỏi những thiếu sót, vì vậy rất mong nhận được sự góp ý của các thầy, cô giáo và các bạn. Hà Nội, ngày...tháng...năm 2009 SINH VIÊN Nguyễn Văn Mạnh TÀI LIỆU THAM KHẢO An toàn tính toán – Học viện kỹ thuật Mật mã – Trung tâm thông tin thư viện TL – TV, năm 2001. Kỹ thuật giấu tin trong ảnh sử dụng các bit LSB – Thạc sỹ Dương Đức Hải – Nhà xuất bản thông tin năm 2004. Giấu tin trong dữ liệu đa phương tiện một công nghệ mới trong bảo mật thông tin – Trần Quốc Dũng – Nhà xuất bản Bưu điện, năm 2004. An Overview of Image Steganography – T.Morkel, J.H.P.Elloft, M.S.Oliver – Sandton, South Africa, June/July 2005. Techniques for Data Hiding – W.Bender – D.Gruhl – N.Morimoto – A.lu. PHỤ LỤC Các thủ tục chính của chương trình Mô đun mã hóa: ‘Khai báo các thuật toán mã hóa Public Enum EC_HASH_ALG_ID MD2 MD4 MD5 SHA End Enum Public Enum EC_HASH_DATAFORMAT EC_HF_HEXADECIMAL EC_HF_NUMERIC EC_HF_ASCII End Enum Private Enum EC_HASH_STATUS EC_HASH_NONE EC_HASH_BUSY EC_HASH_READY End Enum Private Enum EC_CRYPT_STATUS EC_CRYPT_NONE EC_CRYPT_BUSY EC_CRYPT_READY End Enum Private Enum EC_PROVIDER [No Providers] [Microsoft Base Cryptographic Provider v.1] [Microsoft Enhanced Cryptographic Provider] End Enum Public Enum EC_CRYPT_ALGO_ID RC2 RC4 DES [Triple DES] [Triple DES 112] End Enum Public Enum EC_CRYPT_SPEED [1KB] [2KB] [4KB] [8KB] [16KB] [30KB] [40KB] [50KB] [60KB] [80KB] [100KB] End Enum ‘Khai báo các đối tượng Private m_Hash_Object As Long Private m_Hash_Data(20) As Byte 'This value will usually be 16 or 20, depending on the hash algorithm. Private m_Hash_DataLen As Long Private m_Hash_Algo_Id As EC_HASH_ALG_ID Private m_Hash_Algorithm As Long Private m_Hash_Status As EC_HASH_STATUS Private m_Hash_DataReady As Boolean ‘Khai báo các thuộc tính mã hóa và giải mã Private m_EncDec_Password As String Private m_EncDec_InBuffer As String Private m_EncDec_Algo_Id As EC_CRYPT_ALGO_ID Private m_EncDec_Status As EC_CRYPT_STATUS Private m_EncDec_Algorithm As Long ' Khai báo thuộc tính kích thước khối Private HP_FILE_RW_BLOCKSIZE As Long Private m_Speed As EC_CRYPT_SPEED ‘Các tiến trình khi thực hiện mã hóa và giải mã ‘ Event EncryptionFileStart() Event EncryptionFileStatus(ByVal lBytesProcessed As Long, ByVal lTotalBytes As Long) Event EncryptionFileComplete() Event DecryptionFileStart() Event DecryptionFileStatus(ByVal lBytesProcessed As Long, ByVal lTotalBytes As Long) Event DecryptionFileComplete() Event HashFileStart() Event HashFileStatus(ByVal lBytesProcessed As Long, ByVal lTotalBytes As Long) Event HashFileComplete() Event EncryptionDataStart() Event EncryptionDataComplete() Event DecryptionDataStart() Event DecryptionDataComplete() Event HashDataStart() Event HashDataComplete() ‘ Để trả lại giá trị thực nếu giá trị Hash được tính toán chính xác và được lấy ra Public Property Get IsHashDataReady() As Boolean IsHashDataReady = m_Hash_DataReady End Property ‘Speed property: Tạo block size cho quá trình mã hóa / giải mã Public Property Get Speed() As EC_CRYPT_SPEED Speed = m_Speed End Property Public Property Let Speed(ByVal newSpeed As EC_CRYPT_SPEED) If newSpeed [100KB] Then ' If running then raise an error 'If Ambient.UserMode = True Then ' Err.Raise vbObjectError + ERROR_ILLEGAL_PROPERTY, "EzCryptoApi", "Illegal property value" 'Else ' Show a message box MsgBox "Illegal property value", vbCritical, "Error" 'End If Exit Property End If m_Speed = newSpeed Select Case m_Speed Case [1KB]: HP_FILE_RW_BLOCKSIZE = HP_FILE_RW_BLOCKSIZE_1k Case [2KB]: HP_FILE_RW_BLOCKSIZE = HP_FILE_RW_BLOCKSIZE_2k Case [4KB]: HP_FILE_RW_BLOCKSIZE = HP_FILE_RW_BLOCKSIZE_4k Case [8KB]: HP_FILE_RW_BLOCKSIZE = HP_FILE_RW_BLOCKSIZE_8k Case [16KB]: HP_FILE_RW_BLOCKSIZE = HP_FILE_RW_BLOCKSIZE_16k Case [30KB]: HP_FILE_RW_BLOCKSIZE = HP_FILE_RW_BLOCKSIZE_30k Case [40KB]: HP_FILE_RW_BLOCKSIZE = HP_FILE_RW_BLOCKSIZE_40k Case [50KB]: HP_FILE_RW_BLOCKSIZE = HP_FILE_RW_BLOCKSIZE_50k Case [60KB]: HP_FILE_RW_BLOCKSIZE = HP_FILE_RW_BLOCKSIZE_60k Case [80KB]: HP_FILE_RW_BLOCKSIZE = HP_FILE_RW_BLOCKSIZE_80k Case [100KB]: HP_FILE_RW_BLOCKSIZE = HP_FILE_RW_BLOCKSIZE_100k End Select End Property ‘HashAlgorithm property: Lựa chọn thuật toán để băm dữ liệu Public Property Let HashAlgorithm(ByVal hAlgoId As EC_HASH_ALG_ID) If hAlgoId 3 Then Exit Property End If ' Lựa chọn thuật toán m_Hash_Algo_Id = hAlgoId Select Case m_Hash_Algo_Id Case MD2: m_Hash_Algorithm = CALG_MD2 Case MD4: m_Hash_Algorithm = CALG_MD4 Case MD5: m_Hash_Algorithm = CALG_MD5 Case SHA: m_Hash_Algorithm = CALG_SHA End Select End Property Public Property Get HashAlgorithm() As EC_HASH_ALG_ID HashAlgorithm = m_Hash_Algo_Id End Property ‘Password property: Tạo Password sử dụng cho quá trình mã hóa, giải mã: Public Property Get Password() As String Password = m_EncDec_Password End Property Public Property Let Password(ByVal sPassword As String) m_EncDec_Password = sPassword End Property ‘EncryptionAlgorithm property: Lựa chọn thuật toán mã hóa, giải mã dữ liệu Public Property Get EncryptionAlgorithm() As EC_CRYPT_ALGO_ID EncryptionAlgorithm = m_EncDec_Algo_Id End Property Public Property Let EncryptionAlgorithm(ByVal ecEncryptID As EC_CRYPT_ALGO_ID) If ecEncryptID [Triple DES 112] Then Err.Raise vbObjectError + ERROR_ILLEGAL_PROPERTY, , "Illegal property value" Exit Property End If If m_Provider_Name = [No Providers] Then Exit Property End If If m_Provider_Name = [Microsoft Base Cryptographic Provider v.1] And _(ecEncryptID = [Triple DES] Or ecEncryptID = [Triple DES 112]) Then Exit Property End If m_EncDec_Algo_Id = ecEncryptID Select Case m_EncDec_Algo_Id Case RC2: m_EncDec_Algorithm = CALG_RC2 Case RC4: m_EncDec_Algorithm = CALG_RC4 Case DES: m_EncDec_Algorithm = CALG_DES Case [Triple DES]: m_EncDec_Algorithm = CALG_3DES Case [Triple DES 112]: m_EncDec_Algorithm = CALG_3DES_112 End Select End Property ‘ Các thủ tục: ' CreateHash Sub procedure: Tạo đối tượng băm ban đầu Public Sub CreateHash() Dim lError As Long On Error GoTo ErrCreateHash Dim lReturn As Long If m_Hash_Status = EC_HASH_READY Then Call DestroyHash End If lReturn = InitProvider() If lReturn = 0 Then lError = ERROR_NO_KEY_CONTAINER Err.Raise vbObjectError ' Fire error handler End If If Not CBool(CryptCreateHash(m_CSP_Provider, m_Hash_Algorithm, 0, 0, m_Hash_Object)) Then lError = ERROR_NO_HASH_CREATE Err.Raise vbObjectError ' Fire error handler End If m_Hash_Status = EC_HASH_READY Exit Sub ErrCreateHash: Dim sMsg As String Select Case lError Case ERROR_NO_KEY_CONTAINER: sMsg = "Error getting a handle to key containers" Case ERROR_NO_HASH_CREATE: sMsg = "Unable to initialize Hash object" Case Else: Err.Raise Err.Number, "EzCryptoApi", Err.Description End Select Err.Raise Number:=(vbObjectError + lError), Source:="EzCryptoApi", Description:=sMsg End Sub ‘HashDigestData Sub procedure 'Tạo một 'Digest' của dữ liệu với đầu vào là chuỗi dữ liệu sData Public Sub HashDigestData(ByVal sData As String) Dim lError As Long On Error GoTo ErrDigest If m_Hash_Status = EC_HASH_BUSY Then Exit Sub m_Hash_DataReady = False ' Data not ready yet m_Hash_DataLen = NO_DATASET If m_Hash_Status EC_HASH_READY Then lError = ERROR_NO_HASH_CREATED GoTo ErrNoCreated End If RaiseEvent HashDataStart m_Hash_Status = EC_HASH_BUSY Dim lDataLen As Long ' Holds the length of the data lDataLen = Len(sData) 'Digest dữ liệu If Not CBool(CryptHashData(m_Hash_Object, sData, lDataLen, 0)) Then lError = ERROR_NO_DIGEST Err.Raise vbObjectError ' Fire error handler End If Call SetHashData If m_Hash_DataLen = NO_DATASET Then lError = ERROR_NO_HASH_DATA Err.Raise vbObjectError ' Fire error handler End If m_Hash_DataReady = True ' Yep! Data ready m_Hash_Status = EC_HASH_READY ' And we are ready to work again RaiseEvent HashDataComplete Exit Sub ErrNoCreated: Err.Raise vbObjectError + lError, "EzCryptoApi", "Hash Object has not been created yet" ErrDigest: Dim sMsg As String m_Hash_Status = EC_HASH_READY Select Case lError Case ERROR_NO_DIGEST: sMsg = "Error 'digesting' data" Case ERROR_NO_HASH_DATA: sMsg = "Error setting/getting digested data" Case Else: Err.Raise Err.Number, "EzCryptoApi", Err.Description End Select Err.Raise vbObjectError + Error, "EzCryptoApi", sMsg End Sub ‘HashDigestFile Sub procedure: ' Với đầu vào là đường dẫn và tên file của file sẽ băm: Public Sub HashDigestFile(ByVal sSourceFile As String) Dim lError As Long On Error GoTo ErrDigestFile If m_Hash_Status = EC_HASH_BUSY Then Exit Sub m_Hash_DataReady = False ' Data not ready yet m_Hash_DataLen = NO_DATASET If m_Hash_Status EC_HASH_READY Then lError = ERROR_NO_HASH_CREATE GoTo ErrNoCreated End If RaiseEvent HashFileStart m_Hash_Status = EC_HASH_BUSY Dim fNum As Long ' Holds the handle of the file to open Dim fLen As Long ' Length of the file Dim fBlockBytes As Long ' How many blocks of 160 bytes? Dim fLostBytes As Long ' How many bytes remaining? Dim fDat() As Byte ' Holds the bytes read from the file Dim icounter As Integer, jCounter As Integer ' Counters Dim lResult As Long ' Holds the return value of InitProvider() Dim lBytesProcessed ' Holds the total number of bytes processed ‘ Đầu tiên ta kiểm tra nếu file tồn tại If Trim(Dir(sSourceFile)) = "" Then lError = ERROR_FILE_NOT_FOUND Err.Raise vbObjectError ' Fire error handler “Không tìm thấy file” End If If GetFileAttributes(sSourceFile) And FILE_ATTRIBUTE_DIRECTORY Then lError = ERROR_IS_DIR Err.Raise vbObjectError ' Fire error handler End If fNum = CreateFile(sSourceFile, GENERIC_READ, FILE_SHARE_READ Or FILE_SHARE_WRITE, ByVal 0&, OPEN_EXISTING, 0, 0) If fNum = INVALID_HANDLE_VALUE Then lError = ERROR_NO_FILE_OPEN Err.Raise vbObjectError ' Fire error handler End If lBytesProcessed = 0 fLen = GetFileSize(fNum, 0) SetFilePointer fNum, 0, 0, FILE_BEGIN RaiseEvent HashFileStatus(lBytesProcessed, fLen) If fLen < HP_FILE_RW_BLOCKSIZE Then ReDim fDat(1 To fLen) ReadFile fNum, fDat(1), fLen, lResult, ByVal 0& If lResult fLen Then lError = ERROR_NO_READ Err.Raise vbObjectError ' Fire error handler End If ‘Hoàn thành digest data If Not CBool(CryptBinHashData(m_Hash_Object, fDat(1), fLen, 0)) Then lError = ERROR_NO_DIGEST Err.Raise vbObjectError ' Fire error handler End If RaiseEvent HashFileStatus(fLen, fLen) Else fBlockBytes = fLen \ HP_FILE_RW_BLOCKSIZE fLostBytes = fLen Mod HP_FILE_RW_BLOCKSIZE ReDim fDat(1 To HP_FILE_RW_BLOCKSIZE) For icounter = 1 To fBlockBytes ReadFile fNum, fDat(1), HP_FILE_RW_BLOCKSIZE, lResult, ByVal 0& If lResult HP_FILE_RW_BLOCKSIZE Then lError = ERROR_NO_READ Err.Raise vbObjectError ' Fire error handler End If If Not CBool(CryptBinHashData(m_Hash_Object, fDat(1), HP_FILE_RW_BLOCKSIZE, 0)) Then lError = ERROR_NO_DIGEST Err.Raise vbObjectError ' Fire error handler End If lBytesProcessed = lBytesProcessed + HP_FILE_RW_BLOCKSIZE RaiseEvent HashFileStatus(lBytesProcessed, fLen) Next If fLostBytes 0 Then ReDim fDat(1 To fLostBytes) ReadFile fNum, fDat(1), fLostBytes, lResult, ByVal 0& If lResult fLostBytes Then lError = ERROR_NO_READ Err.Raise vbObjectError ' Fire error handler End If If Not CBool(CryptBinHashData(m_Hash_Object, fDat(1), fLostBytes, 0)) Then lError = ERROR_NO_DIGEST Err.Raise vbObjectError ' Fire error handler End If lBytesProcessed = lBytesProcessed + fLostBytes RaiseEvent HashFileStatus(lBytesProcessed, fLen) End If End If CloseHandle fNum Erase fDat() ' Free up resources Call SetHashData If m_Hash_DataLen = NO_DATASET Then lError = ERROR_NO_HASH_DATA Err.Raise vbObjectError ' Fire error handler End If m_Hash_DataReady = True m_Hash_Status = EC_HASH_READY ' Ready to work again! RaiseEvent HashFileComplete Exit Sub ErrNoCreated: Err.Raise vbObject + lError, "EzCryptoApi", "Hash Object has not been created yet" Exit Sub ' I don't need it but... ErrDigestFile: m_Hash_Status = EC_HASH_READY Dim sMsg As String If (fNum) Then CloseHandle fNum Select Case lError Case ERROR_NO_DIGEST: sMsg = "Error digesting data" Case ERROR_FILE_NOT_FOUND: sMsg = "File not found" Case ERROR_NO_READ: sMsg = "Error reading data" Case ERROR_NO_HASH_DATA: sMsg = "Error getting/setting digested data" Case ERROR_IS_DIR: sMsg = "EzCryptApi does not digest directories" Case Else: Err.Raise Err.Number, "EzCryptoApi", Err.Description End Select Err.Raise vbObject + lError, "EzCryptoApi", sMsg End Sub ‘GetDigestedData Function procedure ' Trả lại giá trị đã digested của dữ liệu với đầu vào là sFilepath ' 1] sFilePath: The path and filename of the file to hash Public Function GetDigestedData(ByVal echfFormat As EC_HASH_DATAFORMAT) As String Dim lError As Long On Error GoTo errHandler If echfFormat EC_HF_ASCII Then lError = ERROR_ILLEGAL_PROPERTY Err.Raise vbObjectError ' Fire error handler 'Err.Raise vbObjectError + 1001, , "Illegal property value" End If 'GetDigestedData = m_Hash_Prov.GetHashData(hFormat) Dim sData As String, sHex As String Dim icounter As Integer If m_Hash_Status = EC_HASH_NONE Then lError = ERROR_NO_HASH_CREATE Err.Raise vbObjectError ' Fire error handler 'Err.Raise vbObjectError + 1004, , _ "The Hash object has not been created yet." End If If m_Hash_DataLen = NO_DATASET Or m_Hash_DataReady = False Then lError = ERROR_NOTHING_DIGESTED Err.Raise vbObjectError ' Fire error handler End If ' Format the data as specified Select Case echfFormat Case EC_HF_HEXADECIMAL For icounter = 0 To m_Hash_DataLen - 1 sHex = Hex(m_Hash_Data(icounter)) If Len(sHex) > 1 Then sData = sData & sHex & vbTab Else sData = sData & "0" & sHex & vbTab End If sHex = "" Next Case EC_HF_NUMERIC For icounter = 0 To m_Hash_DataLen - 1 sData = sData & CStr(m_Hash_Data(icounter)) Next Case EC_HF_ASCII For icounter = 0 To m_Hash_DataLen - 1 sData = sData & Chr(m_Hash_Data(icounter)) Next End Select GetDigestedData = sData Exit Function errHandler: Dim sMsg As String Select Case lError Case ERROR_NO_HASH_CREATE: sMsg = "Hash object has not been created yet" Case ERROR_NOTHING_DIGESTED: sMsg = "Nothing has been digested yet" Case Else: Err.Raise Err.Number, "EzCryptoApi", Err.Description End Select Err.Raise vbObjectError + lError, "EzCryptoApi", sMsg End Function ' SetHashData Sub procedure ' Khởi tạo mảng m_Hash_Data với giá trị hash của dữ liệu đã digest Private Sub SetHashData() Dim lLength As Long lLength = 20& ' This will hold the actual length of the digested data If Not CBool(CryptGetHashParam(m_Hash_Object, HP_HASHVAL, m_Hash_Data(0), _ lLength, 0)) Then m_Hash_DataLen = 0 Exit Sub End If ' Set the module variable to the actual length of the hash value m_Hash_DataLen = lLength End Sub ' EncryptFile Sub procedure: ‘ Mã hóa toàn bộ file nguồn: kỹ thuật này có ích đối với những file nhỏ ' Đầu vào: ' 1] sSourceFile: Đường dẫn và tên file cần mã hóa ' 2] ReadWriteOffset: Byte offset là nơi ta bắt đầu mã hóa và ghi kết ' quả vào file. Public Sub EncryptFile(ByVal sSourceFile As String, Optional ReadWriteOffset As Long = 0) ' Before anything starts to rock' and roll ' check if we are busy doing something If m_EncDec_Status = EC_CRYPT_BUSY Then Exit Sub ' Get out of here! End If Dim lKey As Long ' Encryption Key Dim lBuffLen As Long ' Length of Buffer Dim lFileLen As Long ' Length of File to encrypt Dim lFileNum As Long ' File number Dim lBlockBytes As Long ' How many blocks? Dim lLostBytes As Long ' How many bytes remaining? Dim icounter As Long ' Counter Dim lBytesProcessed As Long ' Bytes processed Dim bFileData() As Byte ' Buffer of bytes to encrypt Dim btempFileData() As Byte ' Temp buffer Dim lLength As Long ' Length of data bytes read/encrypt/write Dim lResult As Long ' Length of data bytes read/write Dim lFileAttrib As Long ' File Attributes Dim lError As Long ' Error values m_EncDec_Status = EC_CRYPT_BUSY ' working... 'm_EncDec_FileEnc = False ' Start On Error GoTo ErrEncrypt ' Check if the file exists If Trim(Dir$(sSourceFile)) = "" Then lError = ERROR_FILE_NOT_FOUND Err.Raise vbObjectError ' Fire error handler 'Err.Raise vbObjectError + 1007, , "File not found" End If ' Proceed... ' Find out which attributes the source file has ' and store it for further setting If GetFileAttributes(sSourceFile) And FILE_ATTRIBUTE_NORMAL Then lFileAttrib = FILE_ATTRIBUTE_NORMAL ElseIf GetFileAttributes(sSourceFile) And FILE_ATTRIBUTE_SYSTEM Then lFileAttrib = FILE_ATTRIBUTE_SYSTEM ElseIf GetFileAttributes(sSourceFile) And FILE_ATTRIBUTE_HIDDEN Then lFileAttrib = FILE_ATTRIBUTE_SYSTEM ElseIf GetFileAttributes(sSourceFile) And FILE_ATTRIBUTE_READONLY Then lFileAttrib = FILE_ATTRIBUTE_READONLY ElseIf GetFileAttributes(sSourceFile) And FILE_ATTRIBUTE_TEMPORARY Then lFileAttrib = FILE_ATTRIBUTE_TEMPORARY ElseIf GetFileAttributes(sSourceFile) And FILE_ATTRIBUTE_DIRECTORY Then lError = ERROR_IS_DIR Err.Raise vbObjectError ' Fire error handler End If ' Now set its attributes to normal, so we can ' work with it If Not lFileAttrib = FILE_ATTRIBUTE_NORMAL Then SetFileAttributes sSourceFile, FILE_ATTRIBUTE_NORMAL End If ' Initialize encryption key lKey = InitKey If lKey = 0 Then lError = ERROR_NO_KEY_DERIVED Err.Raise vbObjectError ' Fire error handler End If ' Open the file again now using API functions (real fast) ' Source file for reading and writing lFileNum = CreateFile(sSourceFile, GENERIC_READ Or GENERIC_WRITE, FILE_SHARE_READ Or FILE_SHARE_WRITE, ByVal 0&, OPEN_EXISTING, 0, 0) If lFileNum = INVALID_HANDLE_VALUE Then lError = ERROR_NO_FILE_OPEN Err.Raise vbObjectError ' Fire error handler End If ' Set the file pointer at ReadFromOffset point SetFilePointer lFileNum, ReadWriteOffset, 0, FILE_BEGIN ' Get the source file length lFileLen = GetFileSize(lFileNum, 0) - ReadWriteOffset ' Get everything in one shot an write it in one shot ' Prepare buffer space ReDim bFileData(1 To (lFileLen * 2)) ' Read the file in one shot ReadFile lFileNum, bFileData(1), lFileLen, lResult, ByVal 0& If lResult lFileLen Then lError = ERROR_NO_READ Err.Raise vbObjectError ' Fire error handler End If ' Put pointer at ReadWriteOffset to write back the encrypted data without corrupting headers SetFilePointer lFileNum, ReadWriteOffset, 0, FILE_BEGIN ' Raise event EncryptFileStart RaiseEvent EncryptionFileStart If lFileLen <= HP_FILE_RW_BLOCKSIZE Then ' If less than encryption blocksize encrypt in one shot ' Let's encrypt the block ' Prepare variables for encryption) lLength = lFileLen lBuffLen = UBound(bFileData) If Not CBool(CryptEncrypt(lKey, 0, 1, 0, bFileData(1), lLength, lBuffLen)) Then lError = ERROR_NO_ENCRYPT Err.Raise vbObjectError ' Fire error handler End If ' Write the results back to the file WriteFile lFileNum, bFileData(1), lLength, lResult, ByVal 0& If lResult lLength Then lError = ERROR_NO_WRITE Err.Raise vbObjectError ' Fire error handler End If ' Raise event RaiseEvent EncryptionFileStatus(lFileLen, lFileLen) Else ' Find out how many HP_FILE_BLOCKSIZE blocks are lBlockBytes = lFileLen \ HP_FILE_RW_BLOCKSIZE ' And lost bytes lLostBytes = lFileLen Mod HP_FILE_RW_BLOCKSIZE ' Allocate space ' Now loop through the blocks and keep encrypting and writing data back to the file ReDim btempFileData(1 To (HP_FILE_RW_BLOCKSIZE * 2)) Dim Offset As Currency ' just to be sure Offset = 1 ' offset to read from file data array lLength = HP_FILE_RW_BLOCKSIZE For icounter = 1 To lBlockBytes ' Read from source array to temp CopyMem btempFileData(1), bFileData(Offset), HP_FILE_RW_BLOCKSIZE ' Prepare buffer lBuffLen = UBound(btempFileData) ' Encrypt data! If Not CBool(CryptEncrypt(lKey, 0, 0, 0, btempFileData(1), lLength, lBuffLen)) Then lError = ERROR_NO_ENCRYPT Err.Raise vbObjectError ' Fire error handler End If ' Write to file WriteFile lFileNum, btempFileData(1), lLength, lResult, ByVal 0& If lResult lLength Then lError = ERROR_NO_WRITE Err.Raise vbObjectError ' Fire error handler End If ' Update offset Offset = Offset + HP_FILE_RW_BLOCKSIZE DoEvents ' Raise event lBytesProcessed = (lBytesProcessed + HP_FILE_RW_BLOCKSIZE) RaiseEvent EncryptionFileStatus(lBytesProcessed, lFileLen) Next ' ' Now get the lost bytes [if any] If lLostBytes 0 Then ' Get them in one shot ReDim btempFileData(1 To (lLostBytes * 2)) CopyMem btempFileData(1), bFileData(Offset), lLostBytes ' prepare for encryption lLength = lLostBytes lBuffLen = UBound(btempFileData) 'Encrypt data! If Not CBool(CryptEncrypt(lKey, 0, 1, 0, btempFileData(1), lLength, lBuffLen)) Then lError = ERROR_NO_ENCRYPT Err.Raise vbObjectError ' Fire error handler End If ' Write results to file WriteFile lFileNum, btem

Các file đính kèm theo tài liệu này:

  • docdoantotnghiep_8513.doc