Phần này sẽ phân tích, so sánh độ phức tạp tính toán và phạm vi ứng dụng của sơ đồ đề xuất (sơ đồ Rabin mới) so với hai sơ đồ Shimada, Chen-Tsu.
35
2.3.6.1. Độ phức tạp tính toán
Độ phức tạp tính toán của thuật toán mã hóa trong cả ba sơ đồ trên là tương đương nhau, vì đều phải tính 𝐽 (𝑀
𝑁) và 𝑀2 𝑚𝑜𝑑 𝑁. Do vậy, luận án chỉ so sánh độ phức tạp tính toán của các thuật toán giải mã.
Trước hết có thể dễ dàng nhận thấy, những tính toán chủ yếu của thuật toán giải mã trong sơ đồ Shimada gồm ba công việc:
(1) Tính 𝐿 (𝐶
𝑝) và 𝐿 (𝐶
𝑞). Các đại lượng này trong trường hợp tổng quát được tính theo công thức:
𝐿 (𝐶
𝑝) = 𝐶(𝑝−1)/2 𝑚𝑜𝑑 𝑝́vá́́ ́ ́𝐿 (𝐶
𝑞) = 𝐶(𝑞−1)/2 𝑚𝑜𝑑 𝑞
Nếu xem phép tính cơ bản là phép nhân và phép chia mod, thì theo [6] số phép tính cần thực hiện xấp xỉ bằng:
2 × 𝑙𝑜𝑔2(𝑝 − 1
2 ) + 2 × 𝑙𝑜𝑔2( 𝑞 − 1
2 ) ≈ 2 × 𝑙𝑜𝑔2[(𝑝 + 1) × (𝑞 + 1)]
(2) Để tính các nghiệm 𝑥1, 𝑥2, 𝑥3, 𝑥4 của phương trình 𝑋2 ≡ 𝜃 (𝑚𝑜𝑑 𝑁) theo các công thức trong mục 2.3.1. Trong số đó, hai công thức phức tạp nhất là:
𝑥𝑝 = 𝜃(𝑝+1)/4 𝑚𝑜𝑑 𝑝 và 𝑥𝑞 = 𝜃(𝑞+1)/4 𝑚𝑜𝑑 𝑞 Cũng theo [6], thì số phép tính cần dùng xấp xỉ bằng: 2 × 𝑙𝑜𝑔2(𝑝 + 1 4 ) + 2 × 𝑙𝑜𝑔2( 𝑞 + 1 4 ) ≈ 2 × 𝑙𝑜𝑔2[(𝑝 + 1) × (𝑞 + 1)]
(3) Việc tính hai hàm 𝑡𝑒(𝑥) và 𝑢𝑒(𝑥) đối với ít nhất là một nghiệm và nhiều nhất là bốn nghiệm. Do đó, trung bình phải tính 𝑡𝑒(𝑥) và 𝑢𝑒(𝑥) đối với hai trong số bốn nghiệm 𝑥1, 𝑥2, 𝑥3và 𝑥4 nên số phép tính xấp xỉ bằng:
2 × 𝑙𝑜𝑔2(𝑝 − 1
2 ) + 2 × 𝑙𝑜𝑔2( 𝑞 − 1
2 ) ≈ 2 × 𝑙𝑜𝑔2[(𝑝 + 1) × (𝑞 + 1)]
Từ (1), (2) và (3) suy ra, độ phức tạp tính toán của thuật toán giải mã Shimada xấp xỉ bằng:
8 × 𝑙𝑜𝑔2((𝑝 + 1) × (𝑞 + 1))
So với Shimada, thuật toán giải mã Chen-Tsu giảm được các phép tính ở (3), nên độ phức tạp xấp xỉ bằng:
36
Theo mục 2.3.3, thuật toán giải mã của sơ đồ đề xuất chỉ cần thực hiện các phép tính trong (2), nên độ phức tạp xấp xỉ bằng:
2 × 𝑙𝑜𝑔2((𝑝 + 1) × (𝑞 + 1))
Các kết quả phân tích trên được trình bày trong bảng sau đây.
Bảng 2.1.Độ phức tạp của thuật toán giải mã trong các sơ đồ Rabin cải tiến.
Sơ đồ Số phép toán cơ bản
Sơ đồ Rabin mới ≈ 2 × 𝑙𝑜𝑔2((𝑝 + 1) × (𝑞 + 1))
Chen-Tsu ≈ 4 × 𝑙𝑜𝑔2((𝑝 + 1) × (𝑞 + 1))
Shimada ≈ 8 × 𝑙𝑜𝑔2((𝑝 + 1) × (𝑞 + 1))
Bảng phân tích trên cho thấy khối lượng tính thuật toán giải mã trong sơ đồ đề xuất chỉ bằng ½ so với sơ đồ Chen - Tsu và bằng ¼ so với sơ đồ Shimada. Những kết luận này phù hợp với kết quả thực nghiệm.
2.3.6.2. Phạm vi ứng dụng
Trong cả hai sơ đồ Shimada và Chen-Tsu đều cần dùng tính chất 𝑡𝑒(𝑀) = 𝑡𝑑(𝐶)
và 𝑢𝑒(𝑀) = 𝑢𝑑(𝐶). Để có được tính chất này, các sơ đồ [14,42] cần chọn hai số nguyên tố p có dạng 7 (mod 8) và q có dạng 3 (mod 8). Cả hai dạng này đều là các trường hợp riêng của dạng 3 (mod 4). Thực tế cho thấy, tập các số nguyên tố dạng 7 (mod 8) và 3 (mod 8) nhỏ hơn nhiều so với tập các số nguyên tố dạng 3 (mod 4). Do trong sơ đồ đề xuất vẫn sử dụng các số nguyên tố 𝑝, 𝑞 có dạng 3 (mod 4) như sơ đồ Rabin gốc [46], nên sơ đồ đề xuất có phạm vi ứng dụng rộng hơn so với [14,42].
2.3.6.3. Thực nghiệm
Để khảo sát tốc độ thực hiện của các thuật toán giải mã, trong thực nghiệm sử dụng hai số nguyên tố 𝑝, 𝑞 có độ lớn khoảng 50 chữ số như sau:
p = 430606897333168273518201112510828692695315291101473646891711 q = 196996179941292068795331733133608048430672235582931
Việc so sánh được thực hiện trên 8 tệp bản rõ với các kích thước khác nhau. Chương trình thực nghiệm được xây dựng bằng ngôn ngữ lập trình C# và thực hiện trên máy tính HP 6530s. Thời gian giải mã của các sơ đồ ứng với các tệp bản rõ được thống kê ở bảng sau:
37
Bảng 2.2. Thời gian thực hiện thuật toán giải mã trong các sơ đồ Rabin cải tiến.
STT Kích thước tệp Thời gian giải mã (giây)
Shimada Chen - Tsu Sơ đồ Rabin mới
1. 100 KB 12.2 8.2 7.12 2. 167 KB 37.68 12.68 8.67 3. 267 KB 40.4 17.4 9.53 4. 394 KB 57.3 26.3 10.57 5. 501 KB 73.56 30.56 13.34 6. 1.229 MB 145.34 78 33.46 7. 1.558 MB 189.67 107.8 42.34 8. 5.2 MB 674.25 289.74 130
Các số liệu trên Bảng 2.2 cho thấy, tốc độ thực hiện của thuật toán giải mã trong sơ đồ đề xuất luôn nhanh hơn hai sơ đồ Shimada, Chen - Tsu và phù hợp với kết luận trong phần phân tích lý thuyết.
2.4. Giấu tin trên ảnh nhị phân
Giấu tin trên ảnh nhị phân có vai trò quan trọng trong lĩnh vực giấu tin nói chung và thủy vân nói riêng. Ngoài việc ứng dụng trực tiếp trên ảnh nhị phân, các lược đồ này còn là cơ sở để phát triển cho những loại dữ liệu đa phương tiện khác.
Bên cạnh hướng tiếp cận theo phương pháp module [3,49], một hướng tiếp cận phổ biến khác là chia ảnh gốc thành các khối điểm ảnh và nhúng tin trên từng khối thông qua các ma trận khóa. Lược đồ Wu-Lee [45] được xem là một trong những phương pháp đầu tiên theo hướng tiếp cận chia khối. Theo đó, mỗi khối m×n điểm ảnh có thể nhúng 1 bít bằng cách biến đổi nhiều nhất một phần tử, sao cho tổng giá trị của các điểm ảnh trên ma trận nhị phân 𝐾 (tại các vị trí 𝐾𝑖,𝑗 = 1) có cùng tính chẵn lẻ với bít cần giấu.Theo các tài liệu nghiên cứu, hai lược đồ giấu tin TCP [64] và CTL [13] thuộc nhóm những phương pháp tốt nhất hiện nay. Theo đó, với mỗi khối 𝐹 gồm 𝑚 × 𝑛 điểm ảnh cả hai lược đồ [13,64] đều nhúng được tối đa 𝑟 = ⌊𝑙𝑜𝑔2(𝑚 × 𝑛 + 1)⌋ bít. Để nhúng được 𝑟 bít, lược đồ TCP [64] cần biến đổi nhiều nhất 2 phần tử trên 𝐹, trong khi lược đồ CTL [13] chỉ thay đổi nhiều nhất 1 phần tử. Do vậy, tính che giấu của lược đồ CTL tốt hơn so với lược đồ TCP. Tuy nhiên, nội
38
dung của lược đồ CTL khá phức tạp và các tác giả có sự nhầm lẫn nghiêm trọng trong việc xác định vị trí phần tử cần biến đổi dẫn đến một số trường hợp thuật toán không thể khôi phục chính xác dãy bít đã nhúng.
2.4.1.Lược đồ giấu tin TCP
Lược đồ TCP [64] thực chất là mở rộng lược đồ Wu-Lee [45]. Với mỗi khối 𝐹
gồm 𝑚 × 𝑛 điểm ảnh, lược đồ TCP có thể nhúng được tối đa 𝑟 bít (𝑟 ≤ ⌊log2 (𝑚 × 𝑛 + 1)⌋) bằng cách biến đổi nhiều nhất 2 phần tử trên 𝐹 để nhận được 𝐺. Trong quá trình nhúng và trích tin, lược đồ sử dụng hai khóa bí mật:
- Khóa bí mật 𝐾 là ma trận nhị phân cấp 𝑚 × 𝑛
- Khóa bí mật 𝑊 là ma trận nguyên cấp 𝑚 × 𝑛 thỏa mãn điều kiện:
{𝑊𝑖,𝑗 |𝑖 = 1, … , 𝑚 và 𝑗 = 1, … , 𝑛} = {1, … , 2𝑟 − 1},
với 𝑟 là số bít tối đa có thể nhúng và thỏa mãn điều kiện:
𝑟 ≤ ⌊log2(𝑚 × 𝑛 + 1)⌋
2.4.1.1. Thuật toán nhúng tin
Thuật toán nhúng dãy bít 𝑏 = 𝑏1𝑏2. . . 𝑏𝑟 vào ma trận nhị phân 𝐹 cấp 𝑚 × 𝑛 (khối
𝑚 × 𝑛 điểm ảnh) để nhận được ma trận 𝐺, giữa 𝐺 và 𝐹 khác nhau tối đa 2 phần tử, ma trận 𝐺 luôn thỏa mãn điều kiện:
𝑏 = 𝑆𝑈𝑀((𝐺⨁𝐾) ⊗ 𝑊) 𝑚𝑜𝑑 2𝑟 (2.2)
Nội dung thuật toán gồm các bước:
Bước 1: Tính
- Đặt 𝑇 = 𝐹 ⊕ 𝐾
- Tính 𝑠 = 𝑆𝑈𝑀(𝑇 ⊗ 𝑊)
- 𝑑 = 𝑏 − 𝑠 (𝑚𝑜𝑑 2𝑟)
Bước 2: Nhúng dãy bít bằng cách thay đổi nhiều nhất một phần tử. Thuật toán xét hai trường hợp sau:
T/h1: Nếu 𝑑 = 0, thì đặt 𝐺 = 𝐹 và kết thúc thuật toán.
T/h2: Nếu 𝑑 ≠ 0, thì xây dựng tập 𝑍𝑑 như sau:
𝑍𝑑 = {(𝑖, 𝑗)|(𝑇𝑖,𝑗 = 0 và W𝑖,𝑗 = 𝑑) hoặc (𝑇𝑖,𝑗 = 1 và W𝑖,𝑗 = 2𝑟 − 𝑑), ∀𝑖, 𝑗}
39 - Chọn một phần tử (𝑖, 𝑗) ∈ 𝑍𝑑
- Đảo phần tử 𝐹𝑖,𝑗 theo công thức: 𝐹𝑖,𝑗 = 1 − 𝐹𝑖,𝑗
- Đặt 𝐺 = 𝐹 và kết thúc thuật toán. Nếu 𝑍𝑑 = ∅, thì chuyển sang Bước 3:
Bước 3: Nhúng dãy bít bằng cách thay đổi hai phần tử Xây dựng tập 𝑍2𝑑 như sau:
𝑍2𝑑 = {(𝑖, 𝑗)|(𝑇𝑖,𝑗 = 0 và W𝑖,𝑗 = 2𝑑) hoặc (𝑇𝑖,𝑗 = 1 và W𝑖,𝑗 = 2𝑟 − 2𝑑), ∀𝑖, 𝑗}
Nếu 𝑍2𝑑 bằng rỗng tiếp tục xét 𝑍3𝑑,... Gọi ℎ là số tự nhiên đầu tiên (ℎ ≥ 2) để
𝑍ℎ𝑑 khác rỗng. Khi đó, thuật toán thực hiện: - Chọn một phần tử (𝑖, 𝑗) ∈ 𝑍ℎ𝑑
- Chọn một phần tử (𝑢, 𝑣) ∈ 𝑍𝑑−ℎ𝑑 với (𝑢, 𝑣) ≠ (𝑖, 𝑗).
- Đảo giá trị 𝐹𝑖,𝑗 và 𝐹𝑢,𝑣 theo công thức: 𝐹𝑖,𝑗 = 1 − 𝐹𝑖,𝑗 và 𝐹𝑢,𝑣 = 1 − 𝐹𝑢,𝑣
- Đặt 𝐺 = 𝐹 và kết thúc thuật toán.
Từ nội dung của Bước 3 có thể thấy, thuật toán TCP có tính dừng nếu ta chứng minh được tồn tại số tự nhiên ℎ để 𝑍ℎ𝑑 ≠ ∅. Ngoài ra, để lược đồ TCP đúng đắn ta cũng cần chứng minh 𝐺 luôn thỏa điều kiện (2.2). Những điều này đã được chứng minh trong [5].
2.4.1.2. Thuật toán trích tin
Để khôi phục dãy bít 𝑏 = 𝑏1𝑏2… 𝑏𝑟 từ ma trận 𝐺, thuật toán sử dụng hai khóa bí mật 𝐾 và 𝑊 như trong thuật toán nhúng tin. Dãy bít 𝑏 được tính theo công thức:
𝑏 = 𝑆𝑈𝑀((𝐺 ⊕ 𝐾) ⊗ 𝑊) 𝑚𝑜𝑑 2𝑟
2.4.2.Lược đồ giấu tin CTL
Giống như lược đồ TCP, mỗi khối 𝐹 gồm 𝑚 × 𝑛 điểm ảnh, lược đồ CTL [13] nhúng được dãy 𝑟 bít (𝑟 ≤ ⌊𝑙𝑜𝑔2(𝑚 × 𝑛 + 1)⌋) nhưng thay đổi nhiều nhất 1 phần tử. Ngoài ma trận khóa nhị phân 𝐾 cấp 𝑚 × 𝑛, CTL sử dụng ma trận nguyên 𝑂 cấp
𝑚 × 𝑛 thỏa mãn điều kiện:
{1, … , 2𝑟 − 1} = {𝑂𝑖,𝑗 | 𝑖 = 1, … , 𝑚 và 𝑗 = 1, … , 𝑛} với 𝑟 ≤ ⌊𝑙𝑜𝑔2(𝑚 × 𝑛 + 1)⌋
Nội dung các thuật toán nhúng và trích tin của lược đồ CTL trên một khối điểm ảnh được trình bày tóm tắt như sau.
40
2.4.2.1. Thuật toán nhúng tin
Việc nhúng dãy bít 𝑠 = 𝑠𝑟… 𝑠1 vào khối điểm ảnh 𝐹 để nhận được khối ảnh chứa tin 𝐹′ như sau:
Xác định các tập 𝑁𝑡 = { (𝑖, 𝑗) | bít thứ 𝑡 của 𝑂𝑖,𝑗 bằng 1} với 1 ≤ 𝑡 ≤ 𝑟.
Bước 1: Đặt 𝐵 = 𝐹⨁ 𝐾
Bước 2: Tính
𝐻𝑡 = ∑ 𝐵𝑖,𝑗, với 1 ≤ 𝑡 ≤ 𝑟
(𝑖,𝑗)∈𝑁𝑡
Bước 3: Tính ℎ𝑡 = 𝐻𝑡 𝑚𝑜𝑑 2, với 𝑡 = 1, … , 𝑟
Bước 4: Tính dãy bít 𝑅 = 𝑅𝑟… 𝑅1 theo công thức :
𝑅𝑡 = {0,1, nếu ℎnếu ℎ𝑡 = 𝑠𝑡 𝑡 ≠ 𝑠𝑡 Bước 5: Tính 𝑀𝑃 = ∑ 2𝑡 × 𝑅𝑡+1 𝑟−1 𝑡=0
Nếu 𝑀𝑃 = 0 thì 𝐹 chính là 𝐹’ (nhúng 𝑟 bít mà không cần thay đổi giá trị điểm ảnh). Trong trường hợp trái lại, thuật toán cần thực hiện bước tiếp theo.
Bước 6: Thay đổi giá trị của một điểm ảnh ứng với 𝑀𝑃: - 𝑖 = (𝑀𝑃 − 1) 𝑑𝑖𝑣 𝑛 + 1
- 𝑗 = 𝑀𝑃 – 𝑛 × (𝑖 − 1)
- 𝐹𝑖,𝑗 = 1 − 𝐹𝑖,𝑗
- Đặt 𝐹’ = 𝐹 và kết thúc thuật toán.
2.4.2.2. Thuật toán trích tin
Thuật toán sử dụng hai ma trận khóa bí mật 𝐾 và 𝑂 như trong thuật toán nhúng tin, việc khôi phục dãy bít tin mật 𝑠 = 𝑠𝑟… 𝑠1 từ khối điểm ảnh chứa tin 𝐹’ như sau:
Xác định các tập 𝑁𝑡 = { (𝑖, 𝑗) | bít thứ 𝑡 của 𝑂𝑖,𝑗 bằng 1} với 1 ≤ 𝑡 ≤ 𝑟.
Bước 1: Đặt 𝐷 = 𝐹′⨁ 𝐾
41
S′𝑡 = ∑ 𝐷𝑖,𝑗 với 𝑡 = 1, … , 𝑟
(𝑖,𝑗)∈𝑁𝑡
Bước 3: Khôi phục dãy bít:
s′𝑡 = S′𝑡 𝑚𝑜𝑑 2, với 𝑡 = 1, … , 𝑟
2.4.2.3. Chính xác hóa lược đồ CTL
Lược đồ CTL [13] có sự nhầm lẫn trong thuật toán nhúng tin dẫn đến một số trường hợp không thể trích được dãy bít đã nhúng từ khối ảnh chứa tin 𝐹′. Theo Bước 5 của thuật toán nhúng tin, vị trí của phần tử cần thay đổi được xác định bằng công thức:
𝑀𝑃 = ∑ 2𝑡 × 𝑅𝑡+1
𝑟−1
𝑡=0
Cách xác định như vậy chỉ đúng khi ma trận 𝑂 có giá trị tuần tự từ 1, … , 2𝑟. Nếu 𝑂
là ma trận được chọn ngẫu nhiên như trong phần phân tích tính bảo mật của [13], thì cách xác định như trên là không chính xác. Ta xét ví dụ, dãy bít mật 𝑠 = (111),
khối điểm ảnh 𝐹 và ma trận khóa 𝑂 (để đơn giản, chọn 𝐾 là ma trận 0) như sau:
𝑶 𝑭
1 3 2 1 0 1
4 6 5 1 1 1
3 2 6 0 1 0
7 0 6 1 0 0
Với các tham số đã cho, theo thuật toán CTL ta nhận được dãy bít 𝑅 = (110) và
𝑀𝑃 = 6. Như vậy, theo [13] phần tử ở hàng 2 và cột 3 của ma trận 𝐹 cần đảo giá trị. Vậy, sau khi đảo phần tử 𝐹2,3 ta nhận được khối ảnh 𝐹′ chứa tin như sau:
𝑭’
1 0 1
1 1 0
0 1 0
42
Khi đó, theo thuật toán trích tin của lược đồ CTL ta nhận được dãy bít 𝑠′ = (001). Vậy, 𝑠′ khác 𝑠. Nói cách khác, dãy bít trích được trong trường hợp này khác với dãy bít đã nhúng.
Để lược đồ CTL được chính xác, theo luận án cần sửa lại nội dung Bước 5 và Bước 6 của thuật toán nhúng tin như sau:
- Xác định tập Ω: 𝛺 = { (𝑖, 𝑗)| 𝑂𝑖,𝑗 = 𝑅, 1 ≤ 𝑖 ≤ 𝑚, 1 ≤ 𝑗 ≤ 𝑛} - Chọn một phần tử (𝑢, 𝑣) ∈ 𝛺 và đảo phần 𝐹𝑢,𝑣: 𝐹𝑢,𝑣 = 1 − 𝐹𝑢,𝑣
Cùng với ví dụ trên, khi biết 𝑅 = (110), thuật toán sửa đổi dễ dàng xác định được tập Ω:
𝛺 = { (2,2), (3,3), (4,3) }.
Khi đó, giả sử chọn (𝑢, 𝑣) = (3,3) và đảo 𝐹3,3 sẽ nhận được khối ảnh chưa tin 𝐹′′
như sau: 𝑭′′ 1 0 1 1 1 1 0 1 1 1 0 0
Từ khối ảnh chứa tin 𝐹′′, ta sử dụng thuật toán trích tin của lược đồ CTL sẽ nhận được 𝑠′′ = (111). Suy ra 𝑠′′ = 𝑠.
2.5. Đề xuất một lược đồ giấu tin mới trên ảnh nhị phân
Dựa trên ý tưởng của các lược đồ [13,45,64], phần này đề xuất lược đồ giấu tin mới trên ảnh nhị phân (lược đồ đề xuất 2.5). Với mỗi khối 𝑚 × 𝑛 điểm ảnh, lược đồ mới có thể nhúng dãy 𝑟 bít (với 𝑟 ≤ ⌊𝑙𝑜𝑔2(𝑚 × 𝑛 + 1)⌋) và thay đổi nhiều nhất một phần tử. Để tiện theo dõi, trước tiên luận án trình bày hai thuật toán nhúng và trích tin trên một khối điểm ảnh.
2.5.1.Thuật toán nhúng dãy bít trên một khối điểm ảnh
Để nhúng dãy 𝑟 bít 𝑏 = 𝑏1𝑏2… 𝑏𝑟 vào khối 𝑚 × 𝑛 điểm ảnh 𝐹, thuật toán sử dụng hai khóa bí mật 𝑃 và 𝑞. Trong đó, 𝑃 là ma trận nguyên cấp 𝑚 × 𝑛 và 𝑞 là một số nguyên thỏa mãn các điều kiện:
43
- {1, … , 2𝑟 − 1} ⊆ {𝑃𝑖,𝑗 |𝑖 = 1 … 𝑚, 𝑗 = 1 … 𝑛} và 𝑃𝑖,𝑗 ∈ {0, … , 2𝑟 − 1}
- 𝑞 ∈ {0, … , 2𝑟− 1}
Với 𝑟 ≤ ⌊𝑙𝑜𝑔2(𝑚 × 𝑛 + 1)⌋.
Thuật toán biến đổi nhiều nhất một phần tử trên 𝐹 để nhận được ma trận 𝐺 luôn thỏa mãn điều kiện:
𝑋𝑆𝑈𝑀(𝐺 ⊗ 𝑃) ⊕ 𝑞 = 𝑏 (2.3) Nội dung thuật toán gồm các bước:
Bước 1:
- Tính 𝑠 = 𝑋𝑆𝑈𝑀(𝐹⨂𝑃)⨁𝑞 (2.4) - Nếu 𝑠 = 𝑏, thì đặt 𝐺 = 𝐹 và kết thúc thuật toán
- Nếu s ≠ b, chuyển sang Bước 2
Bước 2:
- Tính 𝑑 = 𝑠 ⨁ 𝑏
- Chọn một phần tử (𝑢, 𝑣) sao cho 𝑃𝑢,𝑣 = 𝑑
- Đảo phần tử 𝐹𝑢,𝑣: 𝐹𝑢,𝑣 = 1 − 𝐹𝑢,𝑣
- Đặt 𝐺 = 𝐹 và kết thúc thuật toán.
Nhận xét 2.2. Trong thuật toán trên, 𝑑 là một số nguyên có giá trị từ 1 đến 2𝑟− 1. Do vậy, để Bước 2 luôn thực hiện được thì 𝑃 phải thỏa mãn điều kiện:
{1, … , 2𝑟 − 1} ⊆ {𝑃𝑖,𝑗|𝑖 = 1, … , 𝑚 và 𝑗 = 1, … , 𝑛} (2.5)
2.5.2.Thuật toán trích dãy bít trên một khối điểm ảnh
Để trích dãy bít 𝑏 = 𝑏1𝑏2… 𝑏𝑟 từ khối điểm ảnh 𝐺, thuật toán sử dụng hai khóa bí mật 𝑃, 𝑞 đã dùng trong thuật toán nhúng tin và tính theo công thức:
𝑏 = 𝑋𝑆𝑈𝑀(𝐺 ⊗ 𝑃) ⊕ 𝑞
Xét ví dụ minh họa thuật toán 2.5.1 nhúng 3 bít 𝑏 = 𝑏1𝑏2𝑏3 vào ma trận 𝐹 với các tham số như sau:
𝒃 = 𝑏1𝑏2𝑏3= 101 𝑭 𝑷 𝒒 = 𝟑
1 0 0 2 1 3
0 1 1 7 6 4
44
Theo Bước 1 của thuật toán nhúng tin ta có:
- 𝑠 = 𝑋𝑆𝑈𝑀(𝐹⨂𝑃)⨁𝑞 = (2 ⨁ 6 ⨁ 4 ⨁ 5) ⨁ 3 = 6 = 1102
- Do 𝑠 ≠ 𝑏, chuyển sang Bước 2. Nội dung Bước 2 cần thực hiện:
- 𝑑 = 𝑠 ⨁ 𝑏 = 6 ⨁ 5 = 3
- Theo thuật toán chọn (𝑢, 𝑣)|𝑃𝑢,𝑣 = 𝑑, suy ra (𝑢, 𝑣) = (1,3)
- Đảo giá trị phần tử 𝐹1,3: 𝐹1,3 = 1 − 0 = 1 và Đặt 𝐺 = 𝐹.
Vậy sau khi nhúng dãy bít 𝑏 = 1012 vào khối điểm ảnh 𝐹 ta nhận được 𝐺:
𝑮
1 0 1
0 1 1
0 1 1
Từ khối điểm ảnh 𝐺, thuật toán trích tin thực hiện:
𝑏 = 𝑋𝑆𝑈𝑀(𝐺 ⊗ 𝑃) ⊕ 𝑞 = (2⨁3⨁6⨁4⨁5)⨁3 = 5 = 1012
Như vậy, thuật toán khôi phục chính xác dãy bít đã nhúng trên khối điểm ảnh 𝐺.
2.5.3.Chứng minh tính đúng đắn của thuật toán nhúng dãy bít trên một
khối điểm ảnh
Để khẳng định thuật toán 2.5.1 đúng, ta cần chứng minh ma trận 𝐺 nhận được từ thuật toán 2.5.1 thỏa mãn điều kiện (2.3): 𝑋𝑆𝑈𝑀(𝐺⨂𝑃)⨁q = 𝑏. Điều này hiển nhiên đúng nếu thuật toán kết thúc tại Bước 1, vì vậy chỉ cần chứng minh trong trường hợp thuật toán 2.5.1 kết thúc tại Bước 2.
Theo Bước 2 của thuật toán và điều kiện (2.5) ta có:
𝑃𝑢,𝑣 = 𝑑 = 𝑠 ⨁𝑏 ∈ {1,2, … , 2𝑟 − 1} (2.6) 𝐺𝑖,𝑗 = {𝐹1 − 𝐹𝑖,𝑗, nếu (𝑖, 𝑗) ≠ (𝑢, 𝑣) 𝑖,𝑗, nếu (𝑖, 𝑗) = (𝑢, 𝑣) (2.7) Nếu đặt: 𝑠′ = 𝑋𝑆𝑈𝑀(𝐺 ⊗ 𝑃)⨁𝑞 = (∑ 𝐺𝑖,𝑗 × 𝑃𝑖,𝑗 ⨁ 𝑖,𝑗 ) ⨁𝑞 Từ (2.4), (2.7) và 𝑎 ⨁ 𝑎 = 0 ta nhận được: