Đây là phương pháp giấu tin đơn giản nhất, thông điệp dưới dạng nhị phân sẽ được giấu nhúng vào các bit LSB – là bit có ảnh hưởng ít nhất tới việc quyết định tới màu sắc của mỗi điểm ảnh
Phương pháp LSB
Tổng quan về phương pháp thay thế LSB
Kỹ thuật này dựa trên việc giấu tin vào vị trí các bit ít quan trọng (LSB) của mỗi phần tử trong bảng màu Đây là phương pháp giấu tin đơn giản nhất: thông điệp ở dạng nhị phân được nhúng vào các bit LSB, những bit này ảnh hưởng ít nhất tới quyết định màu sắc của mỗi điểm ảnh Vì vậy, khi ta thay đổi bit ít quan trọng của một điểm ảnh, màu sắc của điểm ảnh đó sẽ thay đổi rất nhẹ và vẫn gần với màu sắc ban đầu Ví dụ với ảnh 16 bit, 15 bit biểu diễn màu RGB của điểm ảnh và bit cuối cùng có thể được dùng để nhúng tin, sau đó bit này có thể được giải mã để lấy thông điệp ở mỗi điểm ảnh.
Ví dụ: Tách bit cuối cùng trong 8 bit biểu diễn mỗi điểm ảnh của ảnh 256
Hình 1: Bit có trọng số thấ́p LSB
Trong phép tách này, bit cuối cùng được coi là bit ít quan trọng nhất (LSB) Việc thay đổi giá trị của bit này sẽ khiến giá trị của điểm ảnh tăng hoặc giảm đúng một đơn vị, và với biến thiên nhỏ đó, mức độ màu của điểm ảnh được kỳ vọng sẽ không bị thay đổi nhiều.
Hình 2: Quá trình giấ́u tin
Hình 3: Quá trình lấ́y thông tin ra khỏi ảnh
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 Đầu vào của 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 đã được giấu thông tin mật. giấu tin sẽ thực hiện biểu diễn ma trận điểm ảnh về dạng số
Quá trình giấu tin vào trong ảnh sử dụng k bit LSB như sau:
- Với C là ảnh nguyên bản 8-bit màu xám, kích thước × điểm ảnh Người thập phân Công thức biến đổi tổng quát như sau:
Quá trình xử lý ảnh C bắt đầu bằng việc chuyển ảnh thành ma trận điểm ảnh Sau đó, ma trận này được chuyển đổi thành một mảng một chiều I có đúng i phần tử Cuối cùng, từng điểm ảnh trong mảng được biểu diễn ở dạng nhị phân, chuyển sang giá trị 0 hoặc 1 để phục vụ các bước xử lý nhị phân tiếp theo.
- Cứ 8 bit ảnh tách bỏ số bit
- thông điệp M chiều dài n bit sẽ chuyển về dạng nhị phân:
Quy trình giấu tin bằng kỹ thuật LSB cho ảnh bắt đầu bằng việc lấy LSB ở cạnh phải của phần tử và ghép phần còn lại của thông điệp với phần nhị phân đầu có độ dài k (k có thể là 2 hoặc 4) Kết quả ghép được chuyển sang hệ thập phân và gán lại cho I(i) Sau đó, ảnh nhị phân được lưu trong mảng I ở dạng 1 chiều sẽ được chuyển đổi sang mảng hai chiều theo số phần tử, cho ta ảnh giấu tin hoàn chỉnh.
Ví dụ minh họa quy trình giấu tin:
Giả sử có 4 điểm ảnh đầu tiên là:
Chuyển các điểm ảnh về dạng nhị phân thu được kết quả như sau:
00001100 01100010 10010110 11001000 Thông điệp bí mật M là chữ ‘b’ có mã ASCII là 98, biểu diễn dưới dạng nhị phân như sau: 01100010
Quy trình giấu thông tin: Cứ 8 bit ảnh, lấy 6 bit đầu của điểm ảnh (từ vị trí I0 đến
I5) ghép với 2 bit thông điệp (từ vị trí a0 đến a1) sẽ được:
00001101 01100010 10010100 11001010 Như vậy, ảnh sau khi giấu thông điệp M có điểm ảnh dạng nhị phân như sau:
Quá trình tách tin từ ảnh diễn ra tương tự như quá trình giấu tin trong ảnh, với mục tiêu hồi đáp thông tin ẩn từ một ảnh mang tin thay vì nhúng nó Đầu vào của quá trình là một ảnh mang tin, còn đầu ra là ảnh đã tách tin và thông tin bí mật được khôi phục đầy đủ Các giai đoạn của quá trình này thường bao gồm xử lý sơ bộ, phân tích cấu trúc tín hiệu và giải mã dữ liệu ẩn, đảm bảo tính toàn vẹn của ảnh gốc và tính toàn vẹn của thông tin được trích xuất Trong thực tiễn, các bước xử lý có thể bao gồm chuyển đổi ma trận ảnh và phần tử của nó thành một mảng một chiều để thuận tiện cho việc xử lý và trích xuất dữ liệu.
Quá trình thực hiện như sau:
- Biểu diễn ma trận điểm ảnh về dạng số thập phân với × phần tử Chuyển tử.
Chuyển các bit của ảnh sang dạng nhị phân; với mỗi khối 8 bit của ảnh, tiến hành tách lấy k bit ở phía bên phải (k có thể là 2 hoặc 4) Các phần tách được ghép lại với nhau thành một chuỗi nhị phân mới, phục vụ cho các bước xử lý hoặc nén tiếp theo.
Kết quả thu được là chuỗi ký tự được tạo ra từ hàm chuyển đổi từ chuỗi số nhị phân sang ký tự Quá trình này được lặp lại đúng bằng số lần duyệt, từ đó thu được nội dung của thông điệp.
Ví dụ minh họa quy trình tách tin:
Lấy 2 bit ngoài cùng bên phải trong mỗi điểm ảnh mới:
00001101 01100010 10010100 11001010Ghép lại với nhau được chuỗi nhị phân thông điệp, chính là chữ ‘b’: 01100010
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 Đầu vào:
- Số bit LSB cần mã hóa trên mỗi điểm ảnh (2 hoặc 4 bit). Đầu ra:
- Số bit thông điệp cần mã hóa.
- Biểu diễn ma trận điểm ảnh về 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ử về mảng 1 chiều I với i phần tử.
- Biểu diễn thông tin giấu dưới dạng chuỗi nhị phân.
Để mã hóa một chuỗi thông điệp bằng phương pháp XOR, ta dùng một khóa 8 bit bất kỳ và chuyển khóa này thành mảng ký tự như cách xử lý thông điệp Cứ mỗi khối 8 bit của khóa sẽ được XOR với 8 bit đầu vào của thông điệp, tạo ra phần tử mã hóa tương ứng Quá trình này được lặp lại cho các khối 8 bit tiếp theo cho đến khi toàn bộ nội dung thông điệp được mã hóa hết Đây là một cách mã hóa nhanh và đơn giản, nhưng độ an toàn của nó phụ thuộc vào tính ngẫu nhiên và độ dài của khóa cũng như cách triển khai để tránh các lỗ hổng phổ biến.
Thông điệp được mã hóa và giấu vào ảnh theo nguyên lý tương tự phương pháp thay thế từng bit LSB cổ điển: tách 6 bit đầu từ dữ liệu ảnh, ghép với 2 bit đầu của thông điệp, sau đó chuyển về dạng thập phân và ghi ngược lại vào ảnh.
Quá trình nhúng dữ liệu vào ảnh được thực hiện bằng cách lặp lại để lấy hết các bit của chuỗi nhị phân thông điệp và ghép chúng với các bit của ảnh, nhằm giấu tin một cách âm thầm Sau khi hoàn tất việc ghép, ảnh I được chuyển từ mảng một chiều sang mảng hai chiều có kích thước m x n, từ đó tạo ra một ảnh mới đã chứa thông tin được nhúng.
Ví dụ minh họa: Giả sử có 4 điểm ảnh đầu tiên là:
Chuyển các điểm ảnh về dạng nhị phân thu được kết quả như sau:
00001100 01100010 10010110 11001000 Thông điệp bí mật M là chữ ‘c’ có mã ASCII là 97, biểu diễn dưới dạng nhị phân như sau: 01100011
Nhập khóa, cũng là 1 kí tự 8 bit, giả sử là chữ ‘b’, có dạng nhị phân như sau:
Mã hóa thông điệp chính là dùng phép XOR(a, b) sẽ được: 00000001
Cứ 8 bit ảnh, ta lấy 6 bit đầu của điểm ảnh ghép với 2 bit thông điệp đã mã hóa sẽ được: 00001100 01100000 10010100 11001001
1.3.2 Phương pháp tách tin Đầu vào:
- Số bit thông điệp cần mã hóa. Đầu ra:
- Biểu diễn ma trận điểm ảnh về 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ử về mảng 1 chiều I với i phần tử.
- Chuyển các bit ảnh về dạng nhị phân, cứ 8 bit ảnh tách lấy 2 bit ngoài cùng bên phải Đem ghép các kết quả này lại với nhau.
Kết quả thu được được tạo ra bằng cách sử dụng một hàm chuyển đổi từ chuỗi số nhị phân sang chuỗi ký tự Quá trình này được lặp lại đúng bằng số lần duyệt tương ứng, và từ đó ta có thể thu được nội dung của thông điệp đã được mã hóa.
- Sử dụng hàm giải mã thực hiện giải mã thông điệp bằng khóa 8 bit, ta thu được kết quả là nội dung gốc của thông điệp.
Trường hợp chuyển đổi thông điệp sang bảng mã đã được quy ước sẵn diễn ra tương tự chuyển đổi ký tự thành mã nhị phân, nhưng ở bước giấu tin ta sử dụng một bảng quy đổi các ký tự và chữ số theo chuẩn do người lập trình tự định nghĩa Bảng mã này cho phép ẩn dữ liệu một cách có hệ thống và dễ quản lý, đồng thời đảm bảo khả năng tái hiện dữ liệu khi cần thiết Đến bước tách, dữ liệu được quy đổi ngược lại về dạng ký tự và số ban đầu để khôi phục thông điệp gốc Quá trình giải mã dựa trên nguyên tắc đảo ngược quy trình quy đổi, giúp đảm bảo tính toàn vẹn của dữ liệu sau khi tách.
Ví dụ minh họa: Quy trình tách tin: Lấy 2 bit ngoài cùng bên phải trong mỗi điểm ảnh mới: 00001100 01100000 10010100 11001001
Ghép lại với nhau được chuỗi nhị phân thông điệp nhưng đã bị mã hóa: 00000001
Sử dụng hàm mã hóa để lấy lại thông điệp gốc M, bằng cách XOR(M, b) ta được nhị phân của chữ ‘c’: 01100011
Đánh giá phương pháp LSB
Chất lượng hình ảnh sau giấu tin hầu như không bị ảnh hưởng.
Kỹ thuật LSB là phương pháp đơn giản, dễ cài đặt và phát huy hiệu quả tốt trong nhiều ứng dụng Nhờ tính trực quan và hiệu suất ổn định, LSB thường được triển khai nhanh chóng và mang lại kết quả đáng tin cậy Đồng thời, đây cũng là nền tảng cơ bản cho nhiều kỹ thuật phức tạp sau này, đóng vai trò khởi động cho các phương pháp nhúng dữ liệu và ẩn thông tin tiên tiến.
Tính bền vững thấp; thông tin mật dễ bị thay đổi do sự tác động vào hình ảnh.
Phát hiện thông tin dễ dàng vì thuật toán đơn giản khiến cho việc giấu tin gặp nhược điểm Để khắc phục nhược điểm này, trong quá 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 khi áp dụng kỹ thuật LSB hoặc phương thức Seed.
Phương pháp Seed dùng phép logarit rời rạc để chọn các dãy pixel ngẫu nhiên, thay cho cách ánh xạ tuần tự mà LSB thường dùng Việc này làm tăng tính ẩn danh và bảo vệ thông tin, vì để thu được thông điệp, kẻ tấn công phải nắm rõ thuật toán Seed được áp dụng trong phương thức này.
Tạo số giả ngẫu nghiên
Giới thiệu
Có khá nhiều phương pháp đáng tin cậy để sinh số ngẫu nhiên phục vụ cho các bài toán mô phỏng ngẫu nhiên, được triển khai thông qua các bộ sinh số ngẫu nhiên có cơ sở toán học vững chắc Các phương pháp này đảm bảo tính ngẫu nhiên và khả năng lặp lại của kết quả, đồng thời tối ưu hiệu suất cho các tập dữ liệu lớn và mô hình phức tạp Việc chọn phương pháp phù hợp phụ thuộc vào yêu cầu mô phỏng, độ chính xác và nguồn tài nguyên tính toán, và thường dựa trên các đánh giá chuẩn hóa để đảm bảo chất lượng số ngẫu nhiên Các bộ sinh số ngẫu nhiên phổ biến dựa trên các thuật toán có chu kỳ dài, phân phối mong muốn và khả năng kiểm chứng bằng các bài kiểm tra độc lập, nhằm đảm bảo độ tin cậy cho mô phỏng ngẫu nhiên Nói cách khác, sự kết hợp giữa lý thuyết toán học và thử nghiệm thực tế giúp tạo ra các giải pháp sinh số ngẫu nhiên an toàn và hiệu quả cho các mô hình mô phỏng phức tạp.
Chúng ta sẽ xem xét một số phương pháp tạo số ngẫu nhiên quan trọng.
Một phương pháp chấp nhận được để tạo số giả ngẫu nhiên phải đạt được các yêu cầu sau:
1 Các số được tạo ra phải tuân theo phân phối đều, bởi vì thực sự các sự kiện ngẫu nhiên đều tuân theo phân phối này Vì vậy, bất cứ một sự mô phỏng các sự kiện ngẫu nhiên nào cũng tuân theo quy luật này hay ít nhất là xấp xỉ.
2 Các số được tạo ra cần phải độc lập, nghĩa là giá trị của một số trong dãy số ngẫu nhiên không ảnh hưởng đến giá trị của số kế tiếp.
3 Dãy số ngẫu nhiên được tạo ra cần phải tái tạo lại được Điều này cho phép lặp lại thí nghiệm mô phỏng.
4 Dãy số không được lặp lại đối với bất cứ chiều dài nào Theo lý thuyết thì không thể có, nhưng vì mục đích thực tế thì khả năng lặp lại của một chu kỳ dài là phù hợp Chu kỳ lặp lại của một bộ số ngẫu nhiên được gọi là giai đoạn của nó.
5 Việc tạo các số ngẫu nhiên cần phải nhanh chóng vì trong các nghiên cứu mô phỏng, đòi hỏi cần có nhiều số ngẫu nhiên, nếu việc tạo các số diễn ra chậm thì có thể mất nhiều thời gian và tăng giá thành các nghiên cứu mô phỏng.
6 Trong việc taọ số ngẫu nhiên nên sử dụng càng ít bộ nhớ càng tốt Mô hình mô phỏng thường đòi hỏi bộ nhớ lớn, do bộ nhớ thường có hạn nên việc giảm tối đa việc chiếm dụng bộ nhớ trở nên rất cần thiết trong việc tạo ra số ngẫu nhiên.
Chúng ta sẽ tìm hiểu một số phương pháp cơ bản để tạo số ngẫu nhiên và nắm bắt nguyên lý hoạt động của chúng Dựa trên những phương pháp này, bài viết sẽ tiếp tục ở chương sau để xem xét cách sinh ra các số ngẫu nhiên theo một phân phối nhất định, ví dụ như phân phối số mũ và phân phối chuẩn, đồng thời làm rõ ưu nhược điểm và ứng dụng của từng phương pháp trong thực tiễn.
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)
Kỹ thuật nửa bình phương do John von Neumann phát triển vào những năm 1940 Bắt đầu từ một số cho trước, ta bình phương số đó và lấy phần chữ số ở giữa của kết quả bình phương làm số thứ hai của dãy Tiếp tục với số thứ hai, ta lặp lại quá trình bằng cách bình phương nó và lấy phần chữ số ở giữa của bình phương này làm số tiếp theo, và quá trình này được lặp lại liên tục để hình thành chuỗi số.
Giả sử số đầu x 0 = 25, khi đó các số ngẫu nhiên có 2 chữ số gồm
Giả sử số đầu x 0 = 3187, khi đó các số ngẫu nhiên có 4 chữ số gồm
Phương pháp nửa bình phương có một số tính chất sau:
Các dãy số được tạo ra có chu kỳ ngắn.
Bất kỳ lúc nào số 0 đều tạo ra các số bằng 0 (trường hợp ví dụ 1) b Phương pháp đồng dư bậc hai
Phương pháp này gần như tương đương với phương pháp nửa bình phương nhưng chu kỳ lặp lại của nó kéo dài hơn Mối quan hệ đệ quy của phương pháp này được cho bởi x_{n+1} = (x_n(x_n + 1)) mod m, với n ≥ 0, x_0 mod 4 = 2 và m = 2^k Việc xác định x_0 và tham số m ảnh hưởng trực tiếp đến chu kỳ và hành vi của dãy số sinh ra qua quá trình lặp, từ đó định hình ứng dụng và tối ưu hóa cho các bài toán liên quan đến modulo và tính toán số học.
Với x0 = 2, m = 16 và phương pháp đồng dư bậc hai để tạo dãy số ngẫu nhiên, các bước cho thấy x1 = (x0(x0+1)) mod 16 = (2(2+1)) mod 16 = 6; x2 = (x1(x1+1)) mod 16 = (6(6+1)) mod 16 = 10; x3 = (x2(x2+1)) mod 16 = (10(10+1)) mod 16 = 14; x4 = (x3(x3+1)) mod 16 = (14(14+1)) mod 16 = 2; x5 = (x4(x4+1)) mod 16 = (2(2+1)) mod 16 = 6; x6 = (x5(x5+1)) mod 16 = (6(6+1)) mod 16 = 10; x7 = (x6(x6+1)) mod 16 = (10(10+1)) mod 16 = 14; x8 = (x7(x7+1)) mod 16 = (14(14+1)) mod 16 = 2.
Dùng phần mềm R để tạo ra 50 số ngẫu nhiên theo phương pháp này ta có câu lệnh như sau:
Ta có kết quả như sau:
Phương pháp đồng dư bậc hai được sử dụng khi m là lũy thừa của 2 và có chu kỳ dài hơn phương pháp nửa bình phương, cho phép mô tả và tối ưu hóa chu kỳ của dãy đồng dư trong các bài toán tính toán số học modulo Phương pháp đồng dư tuyến tính (Linear congruence algorithm) là một kỹ thuật khác nhằm xử lý các đồng dư tuyến tính, tìm nghiệm của các phương trình dạng ax ≡ b (mod m) một cách nhanh chóng và tin cậy, phù hợp với nhiều bài toán liên quan đến modulo và tối ưu hóa chu trình tính toán.
Phương pháp đồng dư tuyến tính (Linear Congruential Generators – LCG) là phương pháp được sử dụng phổ biến nhất để sinh số ngẫu nhiên và được Lehmer giới thiệu lần đầu Trạng thái tại bước n của quá trình được ký hiệu bằng x_n, một số nguyên, và hàm chuyển T được định nghĩa theo x_n = (a x_{n-1} + c) mod m với n ≥ 0 Các tham số a, c và m quyết định tính chất của dãy số sinh ra (chu kỳ, phân bố) và x_n được xác định từ x_{n-1} bằng phép nhân với a, cộng c và lấy phần dư với m, bắt đầu từ trạng thái khởi động x_0.
Trong đó: x 0 là giá trị khởi đầu cho trước (0 ¿ x o ¿ m) a là hằng số nhân (0 ¿ a ¿ m). c là gia số (0 ¿ c ¿ m). m là modul (m > 0).
1 Nếu a=1: phương pháp được gọi là phương pháp cộng.
2 Nếu c=0: phương pháp được gọi là phương pháp nhân (multiplicative congruential random number generator).
3 Nếu c ¿ 0, phương pháp được gọi là phương pháp đồng dư hỗn tạp (mixed congruential random number generator).
4 Các LCG nhân (c=0) nhanh hơn các LCG hỗn tạp (c ¿ 0) do chúng có ít phép toán cộng hơn.
5 Trong thực tế phương pháp nhân được dùng nhiều hơn phương pháp cộng Bởi vì theo phương pháp này x i+1 được xác định bởi x i Do (m+1) giá trị x o ,x 1 , , x m không thể phân biệt, nên có ít nhất một giá trị xuất hiện 2 lần, ví dụ như x i và x i+k
Khi đó x i+k ,…, x i+k-1 được lặp lại như x i+k ,…, x i+2k-1 và như vậy dãy số x i tuần hoàn với chu kỳ k0: chu kỳ tối đa là m có thể đạt được khi và chỉ khi a mod 4 1 và c là số lẻ (thường được chọn bằng 1) Ví dụ, xét bộ sinh LCG (a, 1, 16, x 0 ): chu kỳ tối đa là 16 có thể đạt được nếu và chỉ nếu a=1, 5, 9 hay 13 Khi a=3, hay 11 thì chu kỳ là 8; khi a=7 thì chu kỳ là 4; và khi a=5 thì chu kỳ là 2 Chẳng hạn chuỗi các số nguyên giả ngẫu nhiên sinh ra với LCG(5,1,16,1) là 1, 6, 15, 12, 13, 2, 11, 8, 9, 14, 7, 4, 5, 10, 3,
5 Khi m=2 n và c=0: chu kỳ tối đa là m/4 đạt được nếu và chỉ nếu a mod 8 1 hay a mod
8 5 (thường được chọn) và giá trị khởi đầu là số lẻ Ví dụ, với bộ sinh LCG(a, 0, 16, x 0 ), chu kỳ tối đa là 4 đạt được nếu và chỉ nếu a=3, 5, 11 hay 13.
6 Khi m là số nguyên tố và a>1 (không quan tâm đến c = 0 hay không): chu kỳ tối đa là m-1 đạt được khi và chỉ khi a là số nguyên thủy đầu tiên của modul m.
Trong bộ sinh đồng dư tuyến tính (LCG), tham số quan trọng nhất là modul m, bởi kích thước của nó giới hạn chu kỳ và do đó m được chọn chủ yếu ở hai dạng: số nguyên tố hoặc là lũy thừa của 2 Đối với các LCG có modul là số nguyên tố, việc dùng gia số c ≠ 0 không làm tăng chu kỳ trừ khi a = 1 Thông thường, a phải lớn hơn 1 để chuỗi số sinh ra có tính ngẫu nhiên.
Xét bộ sinh LCG (a, 0, 13, 1) với c = 0 và m = 13, ta đánh giá tính ngẫu nhiên của chuỗi số được sinh ra dựa trên tham số a Các giá trị a như 2, 6 và 7 đều cho chu kỳ đầy đủ (tức là chu trình tối đa trong tập {1,…,12} khi khởi tạo khác 0), mặc dù mức độ ngẫu nhiên của chuỗi có thể khác nhau giữa các trường hợp Dù có chu kỳ đầy đủ, người ta vẫn so sánh các tham số và lựa chọn sao cho phân phối và khoảng cách giữa các số sinh ra được tối ưu hóa cho từng ứng dụng Nói chung, nhiều người mong muốn bộ sinh có chu kỳ đầy đủ và độ ngẫu nhiên ổn định hơn so với các bộ sinh có chu kỳ ngắn, để đảm bảo hiệu quả và độ tin cậy của các ứng dụng số ngẫu nhiên.
2 1, 2, 4, 8, 3, 6, 12, 11, 9, 5, 10, 7, 1,… 12 các sự khác 3 1,3,9,1 3 của giá
4 1, 4, 3, 12, 9, 10, 1,… 6 đầu chỉ chuyển 5 1, 5, 12, 8, 1 4 điểm 6 1, 6, 10, 5, 9, 11, 12, 6, 3, 8, 4, 2, 1, 12 trong
10 1, 10, 9, 12, 3, 4, 1, 6 sinh chu đủ Nếu 11 1, 11, 4, 5, 3, 7, 12, 2, 9, 8, 10, 6, 1 12 khởi đầu
Trong bài viết này ta khảo sát một dãy số được sinh bằng LCG (linear congrential generator) với m = 6 và x0 = 1 Dãy chu trình đầy đủ được mô tả bởi vòng lặp bắt đầu từ x0 và quay về x0 sau khi sinh đủ các giá trị, ví dụ chu trình: 1, 6, 10, 8, 9, 2, 12, 7, 3, 5, 4, 11, 1 Việc lựa chọn các tham số a và c cùng với giá trị khởi động x0 định hướng chu trình sang trạng thái khởi đầu phù hợp và đảm bảo có chu kỳ đầy đủ Bài viết trình bày cách nhận diện chu trình đầy đủ, cách kiểm tra tính lặp và cách biểu diễn chu trình bằng danh sách các giá trị liên tiếp để đánh giá chất lượng ngẫu nhiên và phạm vi bao phủ của mẫu số sinh ra.
Các giá trị khởi đầu từ 1 đến 12 không làm ảnh hưởng đến tính ngẫu nhiên của chuỗi mà chỉ thay đổi điểm khởi đầu của chuỗi đó Tuy nhiên, nếu bộ sinh không có chu kỳ đầy đủ, các giá trị khởi đầu khác nhau sẽ tạo ra các chuỗi kết quả khác nhau với chu kỳ riêng biệt cho mỗi điểm khởi đầu.
Trong bài toán LCG, nếu bộ sinh chu kỳ không phải đầy đủ, thì các giá trị khởi đầu x0 có thể tạo ra các chuỗi số khác nhau và các chu kỳ có độ dài khác nhau Ví dụ với tham số a = 3, c = 0, m = 16 và khởi đầu x0 cho trước, công thức x_{n+1} = (3 x_n) mod 16 cho ra chuỗi kết quả {x_n} phụ thuộc vào x0; một số giá trị x0 cho chu kỳ ngắn, trong khi những giá trị khác có chu kỳ dài hoặc có hiện tượng lặp lại sớm Việc phân tích chu kỳ của LCG giúp hiểu rõ tính chất chu trình và ảnh hưởng của tham số a, c, m và x0 đến chất lượng chuỗi số sinh ra, từ đó đánh giá khả năng ngẫu nhiên và tối ưu hóa tham số để đạt chu kỳ tối đa.
Phương pháp hoán vị giả ngẫu nhiên và Demo
Ý tưởng thực hiện
Trong kỹ thuật nhúng LSB, thông tin mật được giấu lần lượt vào các bit cố định của khối ảnh hoặc theo một trật tự đã xác định, tuy đơn giản cho người giấu tin nhưng dễ bị tấn công vét cạn hoặc nhận dạng tự động Ý tưởng hoán vị ngẫu nhiên hướng tới đặt vị trí nhúng ở các vị trí ngẫu nhiên, đồng thời cho phép tất cả các bit của ảnh tham gia quá trình nhúng và phân bổ ngẫu nhiên trên toàn miền không gian của ảnh mà không tuân theo một thứ tự cố định; tuy nhiên, khi làm như vậy, cả người giấu tin và người tách tin đều sẽ không biết vị trí các bit được nhúng, khiến phương pháp khó thực hiện Để giải quyết vấn đề này, các chuyên gia đề xuất hoán vị giả ngẫu nhiên, dựa trên nguyên lý hoán vị ngẫu nhiên nhưng với các vị trí nhúng được sinh ra bởi một chuỗi ngẫu nhiên thay đổi sau mỗi lần nhúng; mô hình giấu tin và tách tin được mô tả trong hình minh họa, cho thấy các yếu tố như nét đứt và mũi tên thể hiện các bước có thể được sử dụng hoặc bỏ qua tùy chọn của người dùng.
Bộ sinh số giả ngẫu nhiên (pseudorandom number generator - PRNG), còn được gọi là bộ sinh bit ngẫu nhiên tất định (DRBG), là thuật toán sinh ra chuỗi các số có các đặc tính gần như của chuỗi số ngẫu nhiên [11, 12] Chuỗi sinh ra từ PRNG không thực sự ngẫu nhiên, vì nó hoàn toàn được xác định từ giá trị khởi đầu, được gọi là seed, và seed này có thể hoàn toàn là một giá trị ngẫu nhiên.
Mặc dù chuỗi gần ngẫu nhiên này gần giống với chuỗi được sinh ra bằng bộ sinh số ngẫu nhiên từ phần cứng, bộ sinh số giả ngẫu nhiên có vai trò rất quan trọng trong thực tế vì tốc độ trong quá trình tạo số và khả năng tái sử dụng của nó.
Hình 4: Sơ đồ nhúng và tách tin của phương pháp hoán vị giả ngẫu nhiên
Quá trình giấu tin
Theo sơ đồ tổng quan về quá trình giấu và tách tin, để thực hiện giấu tin và giải mã, bên gửi và bên nhận cần đồng thuận về việc sử dụng thuật toán sinh số giả ngẫu nhiên và giá trị khởi tạo ban đầu, hoặc gửi giá trị khởi tạo qua kênh truyền an toàn nhằm đảm bảo tính bảo mật và khả năng giải mã chính xác.
Ngoài ra nếu thông điệp được mã hóa thì hai bên cũng cần thống nhất thuật toán mã hóa, giải mã và gửi khóa qua kênh truyền an toàn.
Bước 1 của quy trình là mã hóa thông điệp (nếu cần) và chuyển nó sang dãy nhị phân Độ dài của thông điệp được biểu diễn ở dạng nhị phân, và với từng vị trí i, bit thứ i của thông điệp sau khi mã hóa và chuyển về dạng nhị phân sẽ được xác định tương ứng với vị trí đó.
Bước 2: Trích xuất ma trận điểm ảnh trong ảnh, biến đổi các điểm ảnh về dạng nhị
Bước 3: Sử dụng bộ sinh số giả ngẫu (PRNG) để tạo ra một dãy nhị phân có độ dài bằng với kích thước của ảnh sau khi được phân tách và chuyển đổi ma trận thành dãy bit Với các giá trị khởi tạo được chọn trước, PRNG sẽ sinh ra dãy số 1, 2, … và từ đó quy đổi chúng thành nhị phân phục vụ cho các bước xử lý ảnh như mã hoá, nén hoặc phân tích dữ liệu hình ảnh.
Bước 4: Thay thế bit của ảnh bằng bit của thông điệp
Quá trình giải tin
Thuật toán tách tin: chuyển về dãy nhị phân và tương ứng là bit
Bước 1: Trích xuất ma trận điểm ảnh trong ảnh, biến đổi các điểm ảnh về dạng nhị
Bước 2: Sử dụng bộ sinh số giả ngẫu nhiên để xác định độ dài của ảnh sau khi phân tích và chuyển ma trận thành dãy nhị phân Gọi phần tử thứ i của ảnh là xi; với giá trị khởi tạo đã chọn trước, hệ thống sẽ sinh ra dãy nhị phân tương ứng Đây chính là dãy nhị phân được đánh số 1, 2, … để phục vụ cho các bước xử lý tiếp theo.
Bước 3: Lần lượt lấy ra các bit bit của ảnh và ghép lại để được một dãy nhị của thông điệp.
Đánh giá
Ưu điểm nổi bật là độ an toàn cao của phương pháp này nhờ sử dụng bộ sinh số giả ngẫu nhiên, khiến kẻ tấn công khó nhận diện quy luật giấu tin như kỹ thuật LSB; các bit của thông điệp được giấu vào các bit ngẫu nhiên trong ảnh, tăng tính bảo mật và làm cho thông điệp khó bị phát hiện khi phân tích nội dung.
Nhúng dữ liệu vào ảnh bằng kỹ thuật LSB có thể gặp xung đột khi chu kỳ của bộ sinh số giả ngẫu nhiên không đủ lớn, dẫn đến hiện tượng nhiều bit bị ẩn vào cùng một vị trí và các bit thông điệp có thể được giấu vào các vị trí bất kì chứ không chỉ ở LSB, làm ảnh thay đổi giá trị rất nhiều và dễ bị nhận biết bằng mắt thường Để khắc phục nhược điểm này, các chuyên gia thường kết hợp giữa kỹ thuật LSB với hoán vị giả ngẫu nhiên Phương pháp hoán vị giả ngẫu nhiên sẽ sinh ra các số ngẫu nhiên được coi là các vị trí ảnh để nhúng, và sau đó sẽ áp dụng kỹ thuật LSB lên các vị trí đã được xác định nhằm tăng tính ẩn và bảo vệ ảnh khỏi bị phát hiện.
Bước 1: Thông được chuyển sang thành dãy nhị phân
Ví dụ: ta có thông điệp đầu vào là “mothaiba” thông điệp được mã hoá thành dạng nhị phân có dạng
Nhằm mục đích mã hóa và giải mã thuận tiện, ta sẽ dùng 8 bit đầu của chuỗi mã hóa (tối đa 256 ký tự) để nhúng độ dài thông điệp vào ảnh Tùy thuộc vào trường hợp và mục đích sử dụng, khi số ký tự cần mã hóa lớn, ta có thể mở rộng xuống 16 hoặc 32 bit đầu để ghi số lượng ký tự của thông điệp và nhúng nó vào ảnh.
Bước 2: Sử dụng bộ sinh số giả ngẫu nhiên và giá trị khởi tạo chọn trước, sinh dãy số r 1 ,r 2 , … , r lm
Với mỗi phương pháp sinh số giả ngẫu nhiên khác nhau, ta sẽ thu được một bộ số giả ngẫu nhiên riêng biệt Ví dụ, hoán vị giả ngẫu nhiên sử dụng phương pháp đồng dư bậc 2 là một trong những cách tiếp cận phổ biến, cho ra một dãy số ngẫu nhiên khác với các phương pháp khác nhờ cơ chế hoán vị và đặc tính của đồng dư bậc 2.
Ví dụ: với seed ban đầu x 0 34 (thoảmãn x 0 mod 4=2), n và tổng điểm ảnh là p
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ớin 0 ,x omod 4=2 ,n=2 k
Ta sẽ sinh được chuỗi số giả ngẫu nhiên:
Vì chọn n = 10 nên các số giả ngẫu nhiên không vượt quá 2 10 24 b) Hoán vị giả ngẫu nhiên sử dụng phương pháp đồng dư tuyến tính:
Ví dụ: với seed ban đầu x 0 34 ,a ,c ,m 17 và tổng điểm ảnh là p
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 là hằng số nhân (0 am) c là gia số (0 c m) m là modul (m>0) và m là 1 số nguyên tố đủ lớn
Ta sẽ sinh được chuỗi số giả ngẫu nhiên:
752, 695, 1743, 1406, 1728, 1151, 1427, 68, 1169, 1733] c)Hoán vị giả ngẫu nhiên sử dụng phương pháp Blum Blum Shub:
Ví dụ: với seed ban đầu x 0 34 , pY ,qg ,M = p∗q; và tổng điểm ảnh là p
Ta có công thức tạo số giả ngẫu nhiên: x n +1 =(x ¿¿ n 2 mod M)mod p ¿
Trong đó M là tích của 2 số nguyên tố lớn p và q
Ta sẽ sinh được chuỗi số giả ngẫu nhiên
Bước 3 mô tả việc thay thế một bit của ảnh bằng bit từ hai nguồn: bit từ chuỗi số ngẫu nhiên (8 bit) và bit của thông điệp Ta lấy giá trị pixel tại vị trí do hàm sinh số ngẫu nhiên cung cấp (vị trí do hàm sinh số ngẫu nhiên chỉ định) bằng getRGB, sau đó dùng hàm setBitValue để gán bit ở đúng vị trí đó với giá trị bit được sinh ra từ thông điệp; StorageBit của pixel được cập nhật từ chuỗi bit sinh ra từ thông điệp.
Sau đo ta set lai gia tri cua pixel sau khi đa đươc xư ly ;
Bước 4: Sau khi xử lý, các bit của thông điệp được nhúng vào các pixel của ảnh thông qua các hàm xử lý trên ảnh; ta có thể hiển thị ảnh chứa thông điệp lên màn hình để kiểm tra và có thể lưu nó lại để gửi đi hoặc giải mã khi cần.
Bước 1: Đầu tiên, ta tách 8 bit của thông điệp mã hóa để xác định kích thước dữ liệu cần xử lý Từ đó xác định số dãy số cần sinh ra nhằm biến đổi các bit của thông điệp dựa trên seed và hàm sinh số ngẫu nhiên giả lập đã có.
Vi du ơ đây ta co ham Blum blum shub
Vơi seed 34 va n=8 ta co thê sinh ra day sô
Để thực hiện, ta sử dụng hàm extractInteger để lấy từng bit từ pixel tại vị trí được cung cấp và gán chúng vào biến length; sau đó, hàm trả về một giá trị 8-bit trong trường hợp này.
Bước 2: Sử dụng bộ sinh số giả ngẫu nhiên (PRNG) và giá trị khởi tạo (seed) đã được thiết lập trước để sinh chuỗi số ngẫu nhiên Việc xác định seed cho phép bạn tái tạo lại chuỗi sinh khi cần thiết Độ dài dữ liệu sinh ra được tính bằng công thức số lượng = chiều dài × 8 + 8 bit, đảm bảo đủ bít cho từng ký tự hoặc phần tử trong chuỗi dữ liệu Mặc định, hệ thống lưu trữ giá trị số lượng ký tự để đảm bảo quá trình sinh số có thể lặp lại với cùng seed và kiểm chứng kết quả Sự kết hợp giữa seed và số lượng ký tự đóng vai trò then chốt trong chất lượng và khả năng tái tạo của chuỗi giả ngẫu nhiên.
Bước 3: Sử dụng hàm extractBit để lấy lại các giá trị bit của thông điệp theo thứ tự của dãy số giả ngẫu nhiên được sinh ra, dựa trên chiều dài của thông điệp đã gửi Hàm extractBit cho phép trích xuất chính xác từng bit nhờ sự sắp xếp có chủ đích của dãy số ngẫu nhiên, từ đó tái tạo đầy đủ nội dung thông điệp Quá trình này hỗ trợ giải mã và đảm bảo tính nhất quán của dữ liệu, đồng thời cung cấp nền tảng cho các phương pháp mã hóa bằng bit và kiểm chứng thông điệp.
Sau đo chuyên chuôi nhi phân tim đươc thanh dang text va in ra man hinh, ta thu đươc thông điêp đa nhung vao anh