Bài báo cáo bài tập lớn phương pháp hoán vị giả ngẫu nhiên

32 71 0
Bài báo cáo bài tập lớn phương pháp hoán vị giả ngẫu nhiên

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

HỌC VIỆN CƠNG NGHỆ BƯU CHÍNH VIỄN THƠNG KHOA CƠNG NGHỆ THÔNG TIN Học phần: Các kỹ thuật giấu tin Bài báo cáo tập lớn: Phương pháp hoán vị giả ngẫu nhiên Giảng viên hướng dẫn: Sinh viên thực hiện: Nguyễn Hoàng Đức Trần Quốc Định Bùi Trần Quốc Cường Phạm Tuấn Nam Phạm Hoàng Thịnh Đỗ Tuấn Sơn TS Đỗ Xuân Chợ B17DCAT046 B17DCAT038 B17DCAT026 B17DCAT134 B17DCAT174 B17DCAT154 Hà Nội 2021 Mục lục DANH MỤC HÌNH ẢNH Chương 1: Phương pháp LSB 1.1 Tổng quan phương pháp thay LSB 1.2 Phương pháp giấu tin tách tin k bit LSB 1.2.1 Phương pháp giấu tin 1.2.2 Phương pháp tách tin 1.3 Phương pháp giấu tin tách tin k bit LSB nâng cao .7 1.3.1 Phương pháp giấu tin 1.3.2 Phương pháp tách tin 1.4 Đánh giá phương pháp LSB 10 Chương 2: Tạo số giả ngẫu nghiên 11 2.1 Giới thiệu .11 2.2 Thuật toán tạo số giả ngẫu nhiên .11 2.2.1 Phương pháp .11 2.2.2 Phương pháp dựa mật mã học nguyên thuỷ .18 2.2.3 Phương pháp dựa lý thuyết số học 18 2.2.4 Phương pháp đặc biệt .19 Chương 3: Phương pháp hoán vị giả ngẫu nhiên Demo 22 3.1 Ý tưởng thực 22 3.2 Quá trình giấu tin 23 3.3 Quá trình giải tin 24 3.4 Đánh giá .24 3.5 Demo 25 Thuật toán giấu tin 25 Thuật toán tách tin 30 Tài liệu tham khảo 32 DANH MỤC HÌNH ẢNH Y Hình 1: Bit có trọng số thấp LSB .4 Hình 2: Quá trình giấu tin Hình 3: Quá trình lấy thông tin khỏi ảnh .5 Hình 4: Sơ đồ nhúng tách tin phương pháp hoán vị giả ngẫu nhiên 23 Chương 1: Phương pháp LSB 1.1 Tổng quan phương pháp thay LSB Ý tưởng kỹ thuật tiến hành giấu tin vào vị trí bit quan trọng LSB phần tử bảng màu Đây phương pháp giấu tin đơn giản nhất, thông điệp dạng nhị phân giấu (nhúng) vào bit LSB – bit có ảnh hưởng tới việc định tới màu sắc điểm ảnh Vì ta thay đổi bit quan trọng điểm ảnh màu sắc điểm ảnh tương đối gần với điểm ảnh cũ Ví dụ ảnh 16 bit 15 bit biểu diễn màu RGB điểm ảnh bit cuối khơng dùng đến ta tách bit điểm ảnh để giấu tin… Ví dụ: Tách bit cuối bit biểu diễn điểm ảnh ảnh 256 Hình : Bit có trọng số thấp LSB Trong phép tách ta coi bit cuối bit quan trọng nhất, thay đổi giá trị bit thay đổi giá trị điểm ảnh lên xuống đơn vị, với thay đổi nhỏ ta hi vọng cấp độ màu điểm ảnh khơng bị thay đổi nhỉều Hình : Q trình giấu tin Hình : Q trình lấy thơng tin khỏi ảnh 1.2 Phương pháp giấu tin tách tin k bit LSB 1.2.1 Phương pháp giấu tin Đầu vào phương pháp bao gồm:  Ảnh gốc C làm mơi trường để giấu  Thơng tin bí mật M Đầu ra: Ảnh giấu thông tin mật Quá trình giấu tin vào ảnh sử dụng k bit LSB sau: - Với C ảnh ngun 8-bit màu xám, kích thước 𝑀𝑐 × 𝑁𝑐 điểm ảnh Người giấu tin thực biểu diễn ma trận điểm ảnh dạng số thập phân Công thức biến đổi tổng quát sau: C = {𝑥𝑖𝑗 | ≤ i ≤ 𝑀𝑐, ≤ j ≤ 𝑁𝑐, 𝑥𝑖𝑗 = {0, 1, 2, …, 255}} - Sau ảnh C chuyển thành ma trận điểm ảnh tiếp tục chuyển ma trận điểm ảnh mảng chiều I với i phần tử, sau chuyển điểm ảnh dạng nhị phân - thông điệp M chiều dài n bit chuyển dạng nhị phân: M = {𝑚𝑖 | ≤ I < 𝑛, 𝑚𝑖{0,1}} - Cứ bit ảnh tách bỏ số bit LSB bên phải ghép phần cịn lại với k bit nhị phân đầu thơng điệp (k bit), kết thu đưa dạng thập phân gán ngược lại vào I(i) Cuối chuyển đổi ảnh giá trị nhị phân mảng I từ mảng chiều mảng chiều 𝑀𝑐× 𝑁𝑐 phần tử, ta ảnh giấu tin Ví dụ minh họa quy trình giấu tin: Giả sử có điểm ảnh là: 12 98 150 200 Chuyển điểm ảnh dạng nhị phân thu kết sau: 00001100 01100010 10010110 11001000 Thơng điệp bí mật M chữ ‘b’ có mã ASCII 98, biểu diễn dạng nhị phân sau: 01100010 Quy trình giấu thông tin: Cứ bit ảnh, lấy bit đầu điểm ảnh (từ vị trí I0 đến I5) ghép với bit thơng điệp (từ vị trí a0 đến a1) được: 00001101 01100010 10010100 11001010 Như vậy, ảnh sau giấu thơng điệp M có điểm ảnh dạng nhị phân sau: 00001101 01100010 10010100 11001010 1.2.2 Phương pháp tách tin Cũng tương tự trình giấu tin ảnh, trình tách tin ảnh thực theo giai đoạn tương tự  Đầu vào: Ảnh mang tin  Đầu ra: Ảnh tách tin thơng tin bí mật Q trình thực sau: - Biểu diễn ma trận điểm ảnh dạng số thập phân với 𝑀𝑐 × 𝑁𝑐 phần tử Chuyển đổi ma trận ảnh 𝑀𝑐 × 𝑁𝑐 phần tử mảng chiều I với i phần tử - Chuyển bit ảnh dạng nhị phân, bit ảnh tách lấy k bit (k bit) bên phải ghép kết lại với - Kết thu sử dụng hàm chuyển đổi từ chuỗi số nhị phân chuỗi kí tự Sau lặp lại trình số lần số lần duyệt, thu nội dung thơng điệp Ví dụ minh họa quy trình tách tin: Lấy bit ngồi bên phải điểm ảnh mới: 00001101 01100010 10010100 11001010 Ghép lại với chuỗi nhị phân thông điệp, chữ ‘b’: 01100010 1.3 Phương pháp giấu tin tách tin k bit LSB nâng cao 1.3.1 Phương pháp giấu tin Đầu vào: - Ảnh gốc cấp xám - Thơng điệp bí mật - Khóa (8 bit) - Số bit LSB cần mã hóa điểm ảnh (2 bit) Đầu ra: - Ảnh mang tin - Khóa - Số bit thơng điệp cần mã hóa Các bước thực hiện: - Biểu diễn ma trận điểm ảnh dạng số thập phân với m x n phần tử Chuyển đổi ma trận ảnh m x n phần tử mảng chiều I với i phần tử - Biểu diễn thông tin giấu dạng chuỗi nhị phân - Sử dụng khóa bit (khóa kí tự, chuyển khóa dạng mảng với thơng điệp) đem mã hóa với chuỗi thơng điệp bí mật phép XOR: bit khóa đem XOR với bit đầu vào thông điệp Thực lại bước nội dung thơng điệp mã hóa hết - Thơng điệp mã hóa đem giấu vào ảnh tương tự phương pháp thay k bit LSB cổ điển: Là tách lấy bit đầu bit ảnh đem ghép với bit đầu thông điệp chuyển dạng thập phân gán ngược lại vào ảnh - Thực lấy hết bit chuỗi nhị phân thông điệp để ghép với bit ảnh Chuyển đổi ảnh I từ mảng chiều mảng chiều m x n phần tử, ta ảnh giấu tin Ví dụ minh họa: Giả sử có điểm ảnh là: 12 98 150 200 Chuyển điểm ảnh dạng nhị phân thu kết sau: 00001100 01100010 10010110 11001000 Thơng điệp bí mật M chữ ‘c’ có mã ASCII 97, biểu diễn dạng nhị phân sau: 01100011 Nhập khóa, kí tự bit, giả sử chữ ‘b’, có dạng nhị phân sau: 01100010 Mã hóa thơng điệp dùng phép XOR(a, b) được: 00000001 Cứ bit ảnh, ta lấy bit đầu điểm ảnh ghép với bit thơng điệp mã hóa được: 00001100 01100000 10010100 11001001 1.3.2 Phương pháp tách tin Đầu vào: - Ảnh giấu tin - Khóa (8 bit) - Số lần duyệt - Số bit thông điệp cần mã hóa Đầu ra: - Ảnh tách tin - Thông điệp Các bước thực hiện: - Biểu diễn ma trận điểm ảnh dạng số thập phân với m x n phần tử Chuyển đổi ma trận ảnh m x n phần tử mảng chiều I với i phần tử - Chuyển bit ảnh dạng nhị phân, bit ảnh tách lấy bit bên phải Đem ghép kết lại với - Kết thu sử dụng hàm chuyển đổi từ chuỗi số nhị phân chuỗi kí tự Sau lặp lại q trình số lần số lần duyệt, ta thu nội dung thơng điệp mã hóa - Sử dụng hàm giải mã thực giải mã thơng điệp khóa bit, ta thu kết nội dung gốc thông điệp - Trường hợp chuyển đổi thông điệp bảng mã quy ước sẵn: Tương tự trường hợp chuyển đổi kí tự mã nhị phân nó, giấu tin ta sử dụng bảng quy đổi kí tự chữ số theo chuẩn người lập trình tự định nghĩa Đến bước tách ta lại quy đổi ngược lại dạng kí tự số ban đầu Ví dụ minh họa: Quy trình tách tin: Lấy bit bên phải điểm ảnh mới: 00001100 01100000 10010100 11001001 Ghép lại với chuỗi nhị phân thơng điệp bị mã hóa: 00000001 Sử dụng hàm mã hóa để lấy lại thơng điệp gốc M, cách XOR(M, b) ta nhị phân chữ ‘c’: 01100011 1.4 Đánh giá phương pháp LSB Ưu điểm:  Chất lượng hình ảnh sau giấu tin không bị ảnh hưởng  Kỹ thuật LSB đơn giản, dễ cài đặt phát huy hiệu tốt nhiều ứng dụng  Kỹ thuật LSB tảng cho nhiều kỹ thuật phức tạp sau Nhược điểm:  Tính bền vững thấp; thơng tin mật dễ bị thay đổi tác động vào hình ảnh  Phát thơng tin dễ dàng thuật tốn đơn giản Để giải nhược điểm q trình giấu tin thường sử dụng khóa bí mật để mã hóa thơng tin cần giấu trước sử dụng kỹ thuật LSB áp dụng phương thức Seed Phương thức Seed thông qua phép logarithm rời rạc để chọn dãy pixel ngẫu nhiên thay việc ánh xạ mà LSB sử dụng Điều giúp thơng tin giấu an tồn để có thơng điệp, kẻ cơng cần nắm rõ thuật toán sử dụng phương thức Seed 10 > print(x) Từ ta có kết sau: [1] 7 8 9 [33] 9 9 [65] 9 4 8 [97] 8 9 9 [129] 9 6 9 [161] 4 8 7 8 2.2.2 Phương pháp dựa mật mã học nguyên thuỷ a Dựa mật mã khối Một mật mã khối an tồn chuyển đổi thành CSPRNG cách chạy chế độ đếm Điều thực cách chọn khóa ngẫu nhiên mã hóa số 0, sau mã hóa số 1, sau mã hóa số 2, v.v Bộ đếm bắt đầu số tùy ý khác Tuy nhiên, sử dụng mình, khơng đáp ứng tất tiêu chí CSPRNG (như nêu trên) không mạnh chống lại "các phần mở rộng thỏa hiệp trạng thái": với kiến thức trạng thái (trong trường hợp đếm chìa khóa), bạn dự đoán tất số khứ b Dựa hàm băm Một mã băm bảo mật mã hóa đếm hoạt động CSPRNG tốt số trường hợp Trong trường hợp này, cần thiết giá trị ban đầu đếm ngẫu nhiên bí mật Tuy nhiên, có nghiên cứu thuật toán để sử dụng theo cách này, số tác giả cảnh báo chống lại việc sử dụng 2.2.3 Phương pháp dựa lý thuyết số học a Blum Blum Shub Blum Blum Shub (B.B.S.) tạo số giả ngẫu nhiên đề xuất vào năm 1986 Lenore Blum, Manuel Blum Michael Shub có nguồn gốc từ hàm chiều Michael O Rabin Công thức tạo số ngẫu nhiên: x n+1=x 2n mod M Trong M tích số nguyên tố lớn p q 18 b Blum–Micali algorithm Thuật toán Blum – Micali trình tạo số giả ngẫu nhiên an tồn mặt mật mã Thuật tốn có đảm bảo tính bảo mật độ khó tốn logarit rời rạc Công thức tạo số ngẫu nhiên: x n+1=g x mod p i Trong p số nguyên tố lẻ, g p số chọn trước Thuật tốn đảm bảo khơng thể bị suy ngược nhờ độ phức tạp thuật toán logarit rời rạc 2.2.4 Phương pháp đặc biệt a Yarrow algorithm Thuật toán Yarrow họ tạo số giả mật mã (CPRNG) phát minh John Kelsey, Bruce Schneier Niels Ferguson xuất vào năm 1999 Thuật tốn Yarrow rõ ràng khơng có ký hiệu, miễn phí quyền mã nguồn mở; khơng cần giấy phép để sử dụng Một thiết kế cải tiến từ Ferguson Schneier, Fortuna, mô tả sách họ, Mật mã thực tế Yarrow sử dụng FreeBSD, thay Fortuna Yarrow tích hợp iOS macOS cho lập trình viên, Apple chuyển sang Fortuna kể từ năm 2020 Yarrow-160 sử dụng Triple DES khoá chế độ đếm để tạo đầu C giá trị đếm n-bit; K khóa Để tạo khối đầu tiếp theo, Yarrow thực theo chức hiển thị C=( C+ ) mod 2n R=Ek (C) K=k bit đầu số sinhra b ChaCha20 algorithm ChaCha20 có liên quan chặt chẽ mật mã dòng phát triển Daniel J Bernstein ChaCha20 thiết kế vào năm 2005, sau Bernstein đệ trình lên eSTREAM ChaCha sửa đổi Salsa20 xuất vào năm 2008 Nó sử dụng chức vòng giúp tăng độ khuếch tán tăng hiệu suất số kiến trúc ChaCha20 gồm có đầu vào coi khố a,b,c,d 19 Cơng thức tạo số ngẫu nhiên a+ ¿ b ; d∗¿ a ; d ≪16 ; c +¿ d ; b∗¿ c ; b ≪ 12; a+ ¿ b ; d∗¿ a ; d ≪ 8; c +¿ d ; b∗¿ c ; b ≪ ; c Fortuna algorithm Fortuna công cụ tạo số giả ngẫu nhiên an toàn mật mã (PRNG) Bruce Schneier Niels Ferguson phát minh xuất vào năm 2003 Nó đặt theo tên Fortuna, nữ thần may mắn La Mã FreeBSD sử dụng Fortuna cho lập trình viên từ FreeBSD 11 Hệ điều hành Apple chuyển sang Fortuna kể từ năm 2020 Bộ tạo dựa mật mã khối tốt Mật mã thực tế gợi ý AES, Serpent Twofish Ý tưởng chạy mật mã chế độ đếm, mã hóa giá trị liên tiếp đếm tăng dần Khóa thay đổi sau lần yêu cầu liệu (tuy nhiên nhỏ), để xâm phạm khóa tương lai không gây nguy hiểm cho đầu trình tạo trước Thuộc tính mơ tả " Fast Key Erasure" Forward secrecy 20 d CryptGenRandom CryptGenRandom hàm tạo số giả ngẫu nhiên an tồn mật mã khơng dùng Microsoft CryptoAPI Trong chương trình Win32, Microsoft khuyến nghị sử dụng nơi cần tạo số ngẫu nhiên Một báo năm 2007 từ Đại học Hebrew đề xuất vấn đề bảo mật việc triển khai CryptGenRandom Windows 2000 (giả sử kẻ cơng có quyền kiểm sốt máy) Microsoft sau thừa nhận vấn đề tương tự tồn Windows XP, Vista Microsoft phát hành sửa lỗi cho Windows XP Gói Dịch vụ vào năm 2008 21 Chương 3: Phương pháp hoán vị giả ngẫu nhiên Demo 3.1 Ý tưởng thực Trong kỹ thuật LSB, thông tin mật giấu theo cách vào bit cố định khối (các điểm ảnh) liên trật tự định Kỹ thuật đơn giản với người giấu tin, dễ bị công vét cạn nhận dạng tự động Ý tưởng giải pháp hoán vị ngẫu nhiên việc giấu thơng tin vào vị trí ngẫu nhiên, Bên cạnh đó, mục đích thuật toán mong muốn tất bit ảnh chứa tin tham gia trình nhúng tin, bit thơng điệp phân bố ngẫu nhiên tồn miền khơng gian ảnh chứa không tuân theo thứ tự Tuy nhiên, thực theo ý tưởng người giấu tin người tách tin khơng biết vị trí mà bit thơng được giấu Chính vậy, phương pháp hốn vị ngẫu nhiên khó thực Để giải vấn đề này, chuyên gia đề xuất giải pháp hốn vị giả ngẫu nhiên Theo đó, hốn vị giả ngẫu nhiên dựa giải pháp hoán vị ngẫu nhiên vị trí bit lựa chọn để nhúng thông điệp ngẫu nhiên mà giả ngẫu nhiên Có nghĩa áp dụng kỹ thuật thuật toán để sinh chuỗi ngẫu nhiên chuỗi ngẫu nhiên khác sau lần giấu tin Hình mơ tả mơ hình giấu tin tách tin ảnh sử dụng phương pháp hoán vị giả ngẫu nhiên Trong nét đứt hình mũi tên thể quy trình sử dụng khơng sử dụng quy trình giấu tin tách tin tùy theo người dùng lựa chọn Bộ sinh số giả ngẫu nhiên (pseudorandom number generator - PRNG), gọi sinh bit ngẫu nhiên tất định (DRBG), thuật toán sinh chuỗi số có thuộc tính gần thuộc tính chuỗi số ngẫu nhiên [11, 12] Chuỗi sinh từ sinh số giả ngẫu nhiên không thực ngẫu nhiên, hồn tồn xác định từ giá trị khởi đầu, gọi nguồn (seed) (mà giá trị hồn toàn ngẫu nhiên) Mặc dù chuỗi gần ngẫu nhiên gần giống với chuỗi sinh sinh số ngẫu nhiên từ phần cứng, sinh số giả ngẫu nhiên có vai trị quan trọng thực tế tốc độ trình tạo số khả tái sử dụng 22 Hình : Sơ đồ nhúng tách tin phương pháp hốn vị giả ngẫu nhiên 3.2 Q trình giấu tin Theo sơ đồ tổng quan trình giấu tách tin, để thực giấu tin giải mã, bên nhận bên gửi cần thống với việc sử dụng thuật toán sinh số giả ngẫu nhiên giá trị khởi tạo ban đầu gửi giá trị khởi tạo qua kênh truyền an toàn Ngồi thơng điệp mã hóa hai bên cần thống thuật tốn mã hóa, giải mã gửi khóa qua kênh truyền an tồn Thuật tốn giấu tin:  Bước 1: Thơng điệp mã hóa (nếu cần) sau chuyển sang thành dãy nhị phân Gọi 𝑙𝑚 độ dài thông điệp (ở dạng nhị phân) tương ứng 𝑚𝑖 bit thứ i thơng điệp sau mã hóa chuyển dạng nhị phân  Bước 2: Trích xuất ma trận điểm ảnh ảnh, biến đổi điểm ảnh dạng nhị phân chuyển ma trận thành dãy nhị phân Gọi 𝑙𝑐 độ dài ảnh sau chuyển dãy nhị phân tương ứng 𝑐𝑖 bit thứ i ảnh  Bước 3: Sử dụng sinh số giả ngẫu nhiên giá trị khởi tạo chọn trước, sinh dãy số 𝑟1 , 𝑟2 , … , 𝑟𝑙𝑚  Bước 4: Thay bit 𝑐𝑟𝑖 ảnh bit 𝑚𝑖 thông điệp 23 3.3 Q trình giải tin Thuật tốn tách tin:  Bước 1: Trích xuất ma trận điểm ảnh ảnh, biến đổi điểm ảnh dạng nhị phân chuyển ma trận thành dãy nhị phân Gọi 𝑙𝑐 độ dài ảnh sau chuyển dãy nhị phân tương ứng 𝑐𝑖 bit thứ i ảnh  Bước 2: Sử dụng sinh số giả ngẫu nhiên giá trị khởi tạo chọn trước, sinh dãy số 𝑟1 , 𝑟2 , … , 𝑟𝑙𝑚  Bước 3: Lần lượt lấy bit bit 𝑐𝑟𝑖 ảnh ghép lại để dãy nhị phân Đây dãy nhị phân thơng điệp 3.4 Đánh giá Ưu điểm  Độ an toàn cao: kỹ thuật sử dụng sinh số giả ngẫu nhiên nên kẻ cơng khó tìm quy luật giấu tin LSB bit thông điệp giấu vào bit ngẫu nhiên ảnh Nhược điểm:  Dễ xảy việc xung đột trình nhúng chu kì sinh số giả ngẫu nhiên không đủ lớn (nhỏ 𝑙𝑚) dẫn đến tính trạng có nhiều bit giấu vào vị trí  Ảnh bị thay đổi giá trị nhiều bit thông điểm giấu vào bit khơng phải bit LSB Điều dẫn đến kẻ công dễ dàng phát ảnh chứa tin cần nhìn qua mắt thường Để giải nhược điểm này, thực tế chuyên gia thường kết hợp kỹ thuật LSB với kỹ thuật hốn vị giả ngẫu nhiên Theo đó, phương pháp hoán vị giả ngẫu nhiên sinh số ngẫu nhiên số ngẫu nhiên coi điểm ảnh Sau áp dụng kỹ thuật LSB vào để nhúng thông tin vị trí vừa tìm 24 3.5 Demo Thuật tốn giấu tin Bước 1: Thông điệp thêm “$end” vào cuối mã hóa (nếu cần) sau chuyển sang thành dãy nhị phân Gọi l m độ dài thông điệp (ở dạng nhị phân) tương ứng m i bit thứ i thông điệp sau mã hóa chuyển dạng nhị phân message += "$end" b_message = ''.join([format(ord(i), "08b") for i in message]) req_pixels = len(b_message) Ví dụ: ta có thơng điệp đầu vào “xinchao123” thông điệp thêm chuỗi “$end” vào cuối trở thành “xinchao123$end” mã hoá thành dạng nhị phân có dạng (x) 120 = 0111 1000 (i) 105 = 0110 1001 (n) 110 = 0110 1110 (c) 099 = 0110 0011 (h) 104 = 0110 1000 (a) 097 = 0110 0001 (0) 111 = 0110 1111 (1) 049 = 0011 0001 (2) 050 = 0011 0010 (3) 051 = 0011 0011 ($) 036 = 0010 0100 (e) 101 = 0110 0101 (n) 110 = 0110 1110 (d) 100 = 0110 0100 Ta thu chuỗi: 25 “01111000011010010110111001100011011010000110000101101111001100010011001 00011001100100100011001010110111001100100” Bước 2: Trích xuất ma trận điểm ảnh ảnh, biến đổi điểm ảnh dạng nhị phân chuyển ma trận thành dãy nhị phân Gọi 𝑙𝑐 độ dài ảnh sau chuyển dãy nhị phân tương ứng 𝑐𝑖 bit thứ i ảnh img = Image.open(src, 'r') width, height = img.size array = np.array(list(img.getdata())) Ví dụ: ta có file ảnh có kích thước 512x512 px Ta thu ma trận điểm ảnh gồm 512x512 = 262144 điểm ảnh Mỗi điểm anh gồm bit màu RGB nên ta thu ma trận gồm 262144x3 phần tử Bước 3: Sử dụng sinh số giả ngẫu nhiên giá trị khởi tạo chọn trước, sinh dãy số r , r , … , r lm Với phương pháp sinh số giả ngẫu nhiên khác ta thu số giả ngẫu nhiên khác nhau: a) Hoán vị giả ngẫu nhiên sử dụng phương pháp nửa bình phương (Middle-square method): def PRNG0(seed, total_pixels): # phương pháp # Phương pháp nửa bình phương (Middle-square method) return int(str(int(seed) ** 2).zfill(8)[2:6]) % total_pixels Ví dụ: với seed ban đầu x 0=1234 tổng điểm ảnh p=262144 Ta có cơng thức tạo số giả ngẫu nhiên x n+1=x 2n [ 2:6 ] mod p Ta sinh chuỗi số giả ngẫu nhiên: [5227, 3215, 3362, 3030, 1809, 2724, 4201, 6484, 422, 1780, 1684, 8358, 8561, 2907, 4506, 3040, 2416, 8370, 569, 3237, 4781, 8579, 5992, 9040, 7216, 706, 4984, 8402, 5936, 2360, 5696, 4444, 7491, 1150, 3225, 4006, 480, 2304] 26 b) Hoán vị giả ngẫu nhiên sử dụng phương pháp đồng dư bậc 2: def PRNG0(seed, total_pixels): # phương pháp # phương pháp đồng dư bậc với n = 10 return int(int(seed) * (int(seed) + 1) % 2**10) % total_pixels Ví dụ: với seed ban đầu x 0=1234 (thoả mãn x mod 4=2), n=10 tổng điểm ảnh p=262144 Ta có cơng thức tạo số giả ngẫu nhiên: x n +1=( ( x n ( x n +1 ) ) mod n ) mod p , với n , x o mod 4=2 , n=2k Ta sinh chuỗi số giả ngẫu nhiên: [278, 762, 798, 674, 294, 714, 558, 626, 310, 154, 318, 66, 326, 106, 78, 18, 342, 570, 862, 482, 358, 522, 622, 434, 374, 986, 382, 898, 390, 938, 142, 850, 406, 378, 926, 290, 422, 330] Vì chọn n = 10 nên số giả ngẫu nhiên khơng vượt q 210=1024 c) Hốn vị giả ngẫu nhiên sử dụng phương pháp đồng dư tuyến tính: def PRNG0(seed, total_pixels): # phương pháp # phương pháp đồng dư tuyến tính (Linear congruence algorithm) # với c = 13, a = 17 m = 10091 return int(17 * int(seed) + 13) % 10091 % total_pixels Ví dụ: với seed ban đầu x 0=1234 , a=17 , c=13 , m=10091 tổng điểm ảnh p=262144 Ta có công thức tạo số giả ngẫu nhiên: x n+1=( ( a x n +c ) mod m ) mod p Trong a số nhân (0 a m) c gia số (0 c m) m modul (m>0) m số nguyên tố đủ lớn Ta sinh chuỗi số giả ngẫu nhiên: [809, 3675, 1942, 2754, 6467, 9042, 2362, 9894, 6755, 3847, 4866, 2007, 3859, 5070, 5475, 2269, 8313, 60, 1033, 7483, 6132, 3347, 6457, 8872, 9563, 1128, 9098, 3314, 5896, 9426, 8890, 9869, 6330, 6713, 3133, 2819, 7572, 7645] 27 d) Hoán vị giả ngẫu nhiên sử dụng phương pháp Blum Blum Shub: def PRNG0(seed, total_pixels): # phương pháp dựa lý thuyết số học # Blum Blum Shub algorithm với p = 21169 q = 22189 return int(int(seed) ** % (21169 * 22189)) % total_pixels Ví dụ: với seed ban đầu x 0=1234 , p=21169 , q=22189 tổng điểm ảnh p=262144 Ta có cơng thức tạo số giả ngẫu nhiên: x n+1=( x ¿ ¿ n2 mod M ) mod p ¿ Trong M tích số nguyên tố lớn p q Ta sinh chuỗi số giả ngẫu nhiên [212036, 159437, 21771, 63196, 53288, 63634, 30300, 104819, 248462, 168301, 8093, 222793, 86380, 222045, 227329, 215691, 247234, 108874, 211727, 26526, 77287, 60181, 10862, 18244, 182800, 259189, 216262, 214893, 6735, 9313, 224449, 248546, 236077, 117131, 42160, 258601, 61819, 136241] Các số giả ngẫu nhiên sinh lớn khó tìm quy luật e) Hoán vị giả ngẫu nhiên sử dụng phương pháp Blum–Micali: def PRNG0(seed, total_pixels): # phương pháp dựa lý thuyết số học # Blum–Micali algorithm với g = 173 p = 20173 return int(173 ** int(seed) % 20173) % total_pixels Ví dụ: với seed ban đầu x 0=1234 , g=173 , p=20173 tổng điểm ảnh p=262144 Ta có cơng thức tạo số giả ngẫu nhiên: x n+1=g x mod p i Trong p số nguyên tố lẻ, g p số chọn trước Ta sinh chuỗi số giả ngẫu nhiên: [9423, 11801, 4538, 14001, 11699, 18853, 18975, 5654, 2598, 13726, 14698, 4452, 6276, 6867, 10729, 11754, 19778, 18453, 13377, 11041, 2248, 14232, 6614, 4113, 13947, 14996, 11081, 17001, 8642, 4907, 6376, 14172, 17252, 18626, 11785, 3651, 10658, 3005] 28 Các số giả ngẫu nhiên đảm bảo không bị suy ngược nhờ độ phức tạp thuật toán logarit rời rạc f) Hoán vị giả ngẫu nhiên sử dụng hàm băm SHA-256 def PRNG0(seed, total_pixels): # phương pháp dựa mật mã học nguyên thuỷ # phương pháp sử dụng hàm băm SHA-256 return int.from_bytes(hashlib.sha256(str(seed).encode()).digest(), "little") % total_pixels Ví dụ: với seed ban đầu x 0=1234 tổng điểm ảnh p=262144 Ta sinh chuỗi số giả ngẫu nhiên: [240643, 200651, 198388, 236782, 42214, 241223, 90407, 176037, 77272, 135002, 156638, 137593, 155992, 210886, 232588, 160102, 51987, 255003, 107611, 105326, 46577, 35091, 225885, 134914, 84470, 73777, 141160, 50811, 187919, 86072, 155519, 6803, 89714, 4682, 234435, 8576, 70037, 38238] g) Hoán vị giả ngẫu nhiên sử dụng phương pháp ChaCha20 algorithm def PRNG0(seed, total_pixels): # phương pháp đặc biệt # ChaCha20 algorithm key = 55528940176513310056720497386431866891917161321970637298210495689590489365111 cipher = ChaCha20.new(key=key.to_bytes(32, "little"), nonce=int(seed).to_bytes(8, "little")) ciphertext = cipher.encrypt(int(123).to_bytes(32,"little")) return int.from_bytes(ciphertext, "little") % total_pixels Ví dụ: với seed ban đầu x 0=1234 tổng điểm ảnh p=262144 Ta cần biết thêm khố bí mật 256 bit để sinh sinh số giả ngẫu nhiên Giả sử bên gửi bên nhận thống khố bí mật Ta sử dụng seed để thay cho nonce sinh số Nếu nonce thuật toán khác sinh sinh số khác Ta sinh chuỗi số giả ngẫu nhiên: [237468, 11764, 213735, 195031, 174641, 246614, 115117, 139541, 118712, 151109, 28205, 198598, 224109, 256496, 124127, 193299, 131077, 30894, 247803, 74571, 29 27630, 174312, 132494, 179632, 192509, 208457, 131028, 65463, 152140, 97760, 143613, 44140, 135539, 56799, 75974, 201161, 7715, 230191] Bước 4: Thay bit c r ảnh bit m i thông điệp i Ta kiểm tra độ dài thông điệp lớn số điểm ảnh chuỗi số từ thuật toán sinh số giả ngẫu nhiên không đủ ta thông báo lỗi để người nhập thay đổi đầu vào thuật toán if req_pixels > total_pixels: print("ERROR: Need larger file size") else: index=0 already_seen = list() while index < req_pixels: seed = PRNG0(seed, total_pixels) if seed not in already_seen: already_seen.append(seed) for i in range(0, 3): if index < req_pixels: array[seed][i] = int(bin(array[seed][i])[2:9] + b_message[index], 2) index += else: print("ERROR: Need another key") break Bước 5: Từ ma trận điểm ảnh sau giấu thơng điệp ta chuyển dạng hình ảnh xuất kết quả: array = array.reshape(height, width, n) enc_img = Image.fromarray(array.astype('uint8'), img.mode) enc_img.save(dest) Thuật tốn tách tin Bước 1: Trích xuất ma trận điểm ảnh ảnh, biến đổi điểm ảnh dạng nhị phân chuyển ma trận thành dãy nhị phân Gọi 𝑙𝑐 độ dài ảnh sau chuyển dãy nhị phân tương ứng 𝑐𝑖 bit thứ i ảnh img = Image.open(src, 'r') array = np.array(list(img.getdata())) Bước thuật toán tách tin giống với bước thuật toán giấu tin 30 Bước 2: Sử dụng sinh số giả ngẫu nhiên giá trị khởi tạo chọn trước, sinh dãy số r , r , …và lấy bit c r ảnh i while 1: hidden_bits = "" temp_seed = seed for p in range(start): temp_seed = PRNG0(temp_seed, total_pixels) for q in range(0, 3): hidden_bits += (bin(array[temp_seed][q])[2:][-1]) hidden_bits = [hidden_bits[i:i+8] for i in range(0, len(hidden_bits), 8)] Bước 3: ghép ký tự thu gặp chuỗi “$end” dừng Bỏ chuỗi “$end” cuối chuỗi ký tự thu ta nhận thông điệp ban đầu for i in range(len(hidden_bits)): if message[-4:] == "$end": break else: message += chr(int(hidden_bits[i], 2)) if "$end" in message: print("Hidden Message:", message[:-4]) break 31 Tài liệu tham khảo [1] Đ X Chợ, Bài Giảng Các Kỹ Thuật Giấu Tin, Hà Nội: Học viện Công nghệ Bưu Viễn thơng, 2018 [2] N T Liệu, "Tiểu luận học phần Mô giả ngẫu nhiên," Đại học Huế Trường Đại học Khoa học, Huế, 2009 32 ... nhiên khó thực Để giải vấn đề này, chuyên gia đề xuất giải pháp hốn vị giả ngẫu nhiên Theo đó, hốn vị giả ngẫu nhiên dựa giải pháp hoán vị ngẫu nhiên vị trí bit lựa chọn để nhúng thông điệp ngẫu. .. số giả ngẫu nhiên giá trị khởi tạo chọn trước, sinh dãy số r , r , … , r lm Với phương pháp sinh số giả ngẫu nhiên khác ta thu số giả ngẫu nhiên khác nhau: a) Hoán vị giả ngẫu nhiên sử dụng phương. .. LSB với kỹ thuật hốn vị giả ngẫu nhiên Theo đó, phương pháp hốn vị giả ngẫu nhiên sinh số ngẫu nhiên số ngẫu nhiên coi điểm ảnh Sau áp dụng kỹ thuật LSB vào để nhúng thông tin vị trí vừa tìm 24

Ngày đăng: 19/08/2021, 11:05

Từ khóa liên quan

Mục lục

  • DANH MỤC HÌNH ẢNH

  • Chương 1: Phương pháp LSB

    • 1.1. Tổng quan về phương pháp thay thế LSB

    • 1.2. Phương pháp giấu tin và tách tin trên k bit LSB

      • 1.2.1. Phương pháp giấu tin

      • 1.2.2. Phương pháp tách tin

      • 1.3. Phương pháp giấu tin và tách tin trên k bit LSB nâng cao

        • 1.3.1. Phương pháp giấu tin

        • 1.3.2. Phương pháp tách tin

        • 1.4. Đánh giá phương pháp LSB

        • Chương 2: Tạo số giả ngẫu nghiên

          • 2.1. Giới thiệu

          • 2.2. Thuật toán tạo ra các số giả ngẫu nhiên

            • 2.2.1 Phương pháp cơ bản

              • a. Phương pháp nửa bình phương (Middle-square method)

              • b. Phương pháp đồng dư bậc hai

              • c. Phương pháp đồng dư tuyến tính (Linear congruence algorithm)

              • d. Phương pháp đồng dư cộng

              • 2.2.2 Phương pháp dựa trên mật mã học nguyên thuỷ

                • a. Dựa trên mật mã khối

                • b. Dựa trên hàm băm

                • 2.2.3 Phương pháp dựa trên lý thuyết số học

                  • a. Blum Blum Shub

                  • b. Blum–Micali algorithm

                  • 2.2.4 Phương pháp đặc biệt

                    • a. Yarrow algorithm

                    • b. ChaCha20 algorithm

                    • c. Fortuna algorithm

                    • d. CryptGenRandom

Tài liệu cùng người dùng

Tài liệu liên quan