3. Bố cục luận văn
2.2.3. Giải pháp tăng độ an toàn cho thuỷ vân
Kỹ thuật nhúng thuỷ vân trình bày trong phần 2.2.1 đã bộc lộ khả năng dễ dàng phát hiện và loại bỏ thuỷ vân trong ảnh chứa do việc chọn cặp hệ số trong miền tần số giữa của khối DCT có quy luật đặc biệt đó là cặp hệ số có độ lệch lớn nhất trong khối. Phần này trình bày giải pháp bổ sung cho kỹ thuật nhúng thuỷ vân trên để đƣợc hệ thuỷ vân có độ an toàn cao, đặc biệt khó đối với việc dò tìm thuỷ vân trong ảnh chứa khi không biết thông tin khoá.
2.2.3.1. Quá trình nhúng thuỷ vân
Vào: - Ảnh gốc F;
- Thuỷ vân là một chuỗi bit hoặc ảnh nhị phân đã chuyển sang chuỗi bit Ra: Ảnh F’ chứa thuỷ vân, khoá để tách thuỷ vân.
Thực hiện:
1. Ảnh gốc F đƣợc chia thành các khối 8×8, mỗi bit thuỷ vân đƣợc nhúng trong một khối
2. Chọn một khối chƣa nhúng thuỷ vân B, thực hiện DCT(B) đƣợc B’
3. Gọi MID là dãy 22 phần tử các hệ số thuộc miền tần số giữa của B’. Xây dựng DM là ma trận độ lệch kích thƣớc 22×22, các phần tử là giá trị độ lệch giữa MID(i) và MID(j), DM(i,j)=|MID(i)-MID(j)|
Gọi TK là dãy gồm t phần tử trong DM có giá trị k (k là hệ số tƣơng quan giữa tính ẩn và tính bền vững của thuỷ vân) đã chọn trƣớc.
Nếu t=0 thì thực hiện bƣớc 4, ngƣợc lại chọn ngẫu nhiên một số tự nhiên
vt trong đoạn [1, t] rồi xác định cặp hệ số có độ lệch tƣơng ứng bằng
TK(vt). Đặt B’(u,v) là phần tử nhỏ hơn trong cặp hệ số, B’(p,q) là phần tử lớn hơn trong cặp hệ số vừa chọn. Thực hiện bƣớc 5.
4. Xác định B’(u,v) là phần tử nhỏ nhất và B’(p,q) là phần tử lớn nhất trong miền tần số giữa của khối B’
Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn
Tính d=B’(p,q)-B’(u,v). Nếu d<k thì tiến hành thay đổi hệ số đã chọn theo
công thức: 2 / ) ( ) , ( ' ) , ( ' 2 / ) ( ) , ( ' ) , ( ' d k v u B v u B d k q p B q p B
5. Nếu bit thuỷ vân cần nhúng vào khối hiện tại là bit 0 thì lƣu vị trí (p,q) vào biến max đồng thời lƣu vị trí (u,v) vào biến min; ngƣợc lại nếu bit cần nhúng là bit 1 thì lƣu vị trí (u,v) vào biến max đồng thời lƣu vị trí (p,q) vào biến min.
6. Thực hiện phép biến đổi ngƣợc IDCT với khối B’ mới, ghép các khối kết quả để đƣợc ảnh đã nhúng thuỷ vân F’. Khoá để tách thuỷ vân là các biến lƣu vị trí max và min trong từng khối.
2.2.3.2. Quá trình tách thuỷ vân:
Đƣợc thực hiện nhƣ tách thuỷ vân trong 2.2.2
Nhận xét:
Khác với kỹ thuật trình bày trong 2.2.1, kỹ thuật nhúng thuỷ vân trong 2.2.3 đƣa ra một ma trận độ lệch nhằm tính giá trị độ lệch giữa các cặp hệ số thuộc miền tần số giữa của khối DCT. Căn cứ vào sự so sánh các phần tử thuộc ma trận độ lệch với hệ số k để chọn ra những cặp hệ số không cần biến đổi đã thoả mãn điều kiện giấu.
Trong trƣờng hợp ở khối hiện tại không có cặp hệ số nào thoả mãn điều kiện giấu thì buộc phải thay đổi hệ số. Trƣờng hợp này thực hiện nhƣ trong 2.2.2.
Khi ở khối đang xét có nhiều hơn một cặp hệ số thoả mãn điều kiện giấu, kỹ thuật trong 2.2.3 đƣa ra thuật toán chọn ngẫu nhiên một cặp để ghi nhận và sử dụng làm khoá cho quá trình tách thuỷ vân. Điều này làm tăng đáng kể tính bí mật cho bit thuỷ vân đƣợc nhúng vào khối tƣơng ứng.
Ví dụ: Chọn hệ số k=30, trong quá trình nhúng thuỷ vân, khối ảnh gốc đang xét B và khối biến đổi B’=DCT(B) có giá trị tƣơng ứng nhƣ bảng 2.1.
Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn
Bảng 2.1. Ví dụ về giá trị của các khối ảnh trước và sau biến đổi DCT
177 169 179 174 176 162 181 160 164 171 171 177 165 176 175 184 161 171 168 184 170 167 186 161 B = 178 171 171 184 180 163 171 168 196 167 173 175 177 165 179 159 171 174 179 168 170 169 185 174 165 161 170 169 184 165 172 160 186 176 172 162 170 185 183 168 1381 4 -5 6 -1 20 -13 14 -1 -2 -6 -15 4 5 -6 -7 -1 -7 4 3 -12 -6 6 0 B' = 0 6 3 -2 2 2 3 14 9 19 6 14 7 6 3 7 -10 3 -18 -4 7 -2 -9 9 5 0 4 -1 -14 6 -7 1 -7 7 -8 10 1 10 -6 7
MID là dãy đƣợc thiết lập bởi 22 phần tử thuộc miền tần số giữa B’, có thể lập dãy 22 phần tử này theo thứ tự:
MID(1)=B’(4,1), MID(2)=B’(3,2), MID(3)=B’(2,3), MID(4)=B’(1,4),
Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn
MID(9)=B’(1,5), MID(10)=B’(6,1), MID(11)=B’(5,2), MID(12)=B’(4,3), MID(13)=B’(3,4), MID(14)=B’(2,5), MID(15)=B’(1,6), MID(16)=B’(7,1), MID(17)=B’(6,2), MID(18)=B’(5,3), MID(19)=B’(4,4), MID(20)=B’(3,5), MID(21)=B’(2,6), MID(22)=B’(1,7).
Dãy giá trị tƣơng ứng là MID=[0, -7, -6, 6, 9, 6, 4, -15, -1, -10, 19, 3, 3, 4, 20, 5, 3, 6, -2, -12, 5, -13]
Ma trận độ lệch DM là ma trận giá trị các phần tử đối xứng qua đƣờng chéo chính đƣợc xác định trên cơ sở dãy MID có giá trị nhƣ trong bảng 2.2. Với k=30, dãy TK đƣợc xây dựng từ MID gồm t=7 phần tử, cụ thể:
TK(1)=DM(8, 11), TK(2)=DM(8, 15), TK(3)=DM(10, 15), TK(4)=DM(11, 20), TK(5)=DM(11, 22), TK(6)=DM(15, 20),
TK(7)=DM(15, 22).
Tiếp theo chọn ngẫu nhiên một số tự nhiên thuộc đoạn [1, 7], chẳng hạn chọn vt=4, khi đó cặp hệ số trong khối sẽ đƣợc xác định tƣơng ứng với TK(4), ứng với DM(11, 20), ứng với cặp phần tử ở vị trí 11 và 20 trong MID, từ đó xác định cặp hệ số: ứng với phần tử MID(11) là B’(5, 2), ứng với phần tử
MID(20) là B’(3, 5) đây là cặp hệ số trong miền tần số giữa đƣợc lựa chọn. Trong ví dụ này, có thể chọn một trong 7 cặp hệ số đƣơng nhiên đã thoả mãn điều kiện nhúng bit thuỷ vân mà không cần biến đổi.
Trong trƣờng hợp ma trận độ lệch DM không tồn tại phần tử nào có giá trị lớn hơn hoặc bằng k (trong ví dụ này nhƣng với k=36 chẳng hạn), khi đó kỹ thuật thực hiện theo cách buộc phải chọn ngẫu nhiên một cặp hệ số, hoặc chọn cặp hệ số có độ lệch lớn nhất trong miền tần số giữa nhƣ đã trình bày trong 2.2.1 để thực hiện biến đổi cho thoả mãn điều kiện nhúng bit thuỷ vân.
Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn
Bảng 2.2. Giá trị ma trận độ lệch tương ứng với khối ảnh gốc đã chọn
0 7 6 6 9 6 4 15 1 10 19 3 3 4 20 5 3 6 2 12 5 13 0 1 13 16 13 11 8 6 3 26 10 10 11 27 12 10 13 5 5 12 6 0 12 15 12 10 9 5 4 25 9 9 10 26 11 9 12 4 6 11 7 0 3 0 2 21 7 16 13 3 3 2 14 1 3 0 8 18 1 19 0 3 5 24 10 19 10 6 6 5 11 4 6 3 11 21 4 22 0 2 21 7 16 13 3 3 2 14 1 3 0 8 18 1 19 0 19 5 14 15 1 1 0 16 1 1 2 6 16 1 17 0 14 5 34 18 18 19 35 20 18 21 13 3 20 2 0 9 20 4 4 5 21 6 4 7 1 11 6 12 0 29 13 13 14 30 15 13 16 8 2 15 3 0 16 16 15 1 14 16 13 21 31 14 32 0 0 1 17 2 0 3 5 15 2 16 0 1 17 2 0 3 5 15 2 16 0 16 1 1 2 6 16 1 17 0 15 17 14 22 32 15 33 0 2 1 7 17 0 18 0 3 5 15 2 16 0 8 18 1 19 0 10 7 11 0 17 1 0 18 0 2.3. Mã Hamming
Trong viễn thông, mã Hamming đƣợc biết đến là một mã sửa lỗi tuyến tính, đƣợc đặt tên theo tên của ngƣời phát minh ra nó, Richard Hamming. Mã Hamming có thể phát hiện một bit hoặc hai bit bị lỗi và sửa các lỗi do một bit
Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn
bị sai gây ra. Một mã có khả năng tái dựng lại thông điệp gốc trong một môi trƣờng nhiễu lỗi đƣợc gọi là mã "sửa lỗi".
2.3.1. Lịch sử mã Hamming
Trong những năm của thập niên kỷ 1940, Hamming làm việc tại Bell Labs trên máy tính Bell Model V, một máy điện cơ dùng rơ-le, với tốc độ rất chậm, mấy giây đồng hồ một chu kỳ máy. Nhập liệu đƣợc cho vào máy bằng những cái thẻ đục lỗ, và hầu nhƣ máy luôn luôn gây lỗi trong khi đọc.
Trong những ngày làm việc trong tuần, những mã đặc biệt đƣợc dùng để tìm ra lỗi và mỗi khi tìm đƣợc, nó nhấp nháy đèn báo hiệu, báo cho ngƣời điều khiển biết để họ sửa, điều chỉnh máy lại.
Trong thời gian ngoài giờ làm việc hoặc trong những ngày cuối tuần, khi ngƣời điều khiển máy không có mặt, mỗi khi có lỗi xảy ra, máy tính tự động bỏ qua chƣơng trình đƣơng chạy và chuyển sang công việc khác.
Hamming thƣờng làm việc trong những ngày cuối tuần và ông càng ngày càng trở nên bực tức mỗi khi ông phải khởi động lại các chƣơng trình ứng dụng từ đầu, do chất lƣợng kém, không đáng tin cậy của bộ máy đọc các thẻ đục lỗ. Mấy năm tiếp theo đó, ông dồn tâm lực vào việc xây dựng hằng loạt các thuật toán có hiệu quả cao để giải quyết vấn đề sửa lỗi.
Năm 1950, ông đã công bố một phƣơng pháp mà hiện nay đƣợc biết là Mã Hamming. Một số chƣơng trình ứng dụng hiện thời vẫn còn sử dụng mã này của ông.
2.3.2. Các thời kỳ trƣớc của mã Hamming
Nhiều mã phát hiện lỗi đơn giản đã đƣợc sử dụng trƣớc khi có mã Hamming, nhƣng không có mã nào hiệu quả bằng mã Hamming với một tổng phí tƣơng đƣơng.
Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn
2.3.2.1 Mã chẵn lẻ
Mã chẵn lẻ thêm một bit vào trong dữ liệu, và bit cho thêm này cho biết số lƣợng bit có giá trị 1 của đoạn dữ liệu nằm trƣớc là một số chẵn hay một số lẻ. Nếu một bit bị thay đổi trong quá trình truyền dữ liệu, giá trị chẵn lẻ trong thông điệp sẽ thay đổi và do đó có thể phát hiện đƣợc lỗi.
Theo quy ƣớc chung, bit kiểm tra có giá trị bằng 1 nếu số lƣợng bit có giá trị 1 trong dữ liệu là một số lẻ, và giá trị của bit kiểm tra bằng 0 nếu số lƣợng bit có giá trị 1 trong dữ liệu là một số chẵn. Nói cách khác, nếu đoạn dữ liệu và bit kiểm tra đƣợc gộp lại cùng với nhau, số lƣợng bit có giá trị bằng 1 luôn luôn là một số chẵn.
Việc kiểm tra dùng mã chẵn lẻ là một việc không đƣợc chắc chắn cho lắm, vì nếu số bit bị thay đổi là một số chẵn (2, 4, 6 - cả hai, bốn hoặc sáu bit đều bị hoán vị) thì mã này không phát hiện đƣợc lỗi. Hơn nữa, mã chẵn lẻ không biết đƣợc bit nào là bit bị lỗi, kể cả khi nó phát hiện là có lỗi xảy ra. Toàn bộ dữ liệu đã nhận đƣợc phải bỏ đi, và phải truyền lại từ đầu.
Trên một kênh truyền bị nhiễu, việc truyền nhận thành công có thể mất rất nhiều thời gian, nhiều khi còn không truyền đƣợc nữa. Mặc dù việc kiểm tra bằng mã chẵn lẻ không đƣợc tốt cho lắm, song vì nó chỉ dùng 1 bit để kiểm tra cho nên nó có số tổng phí (overhead) thấp nhất, đồng thời, nó cho phép phục hồi bit bị thất lạc nếu ngƣời ta biết đƣợc vị trí của bit bị thất lạc nằm ở đâu.
2.3.2.2 Mã hai-trong-năm
Trong những năm của thập niên kỷ 1940, Bell có sử dụng một mã hiệu phức tạp hơn một chút, gọi là mã hai-trong-năm (two-out-of-five code). Mã này đảm bảo mỗi một khối 5 bit (còn đƣợc gọi là khối-5) có chính xác hai bit có giá trị bằng 1.
Máy tính có thể nhận ra là dữ liệu nhập vào có lỗi nếu trong một khối 5 bit không 2 bit có giá trị bằng 1. Tuy thế, mã hai-trong-năm cũng chỉ có thể
Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn
phát hiện đƣợc một đơn vị bit mà thôi. Nếu trong cùng một khối, một bit bị đảo ngƣợc thành giá trị 1, và một bit khác bị đảo ngƣợc thành giá trị 0, quy luật hai-trong-năm vẫn cho một giá trị đúng (remained true), và do đó nó không phát hiện là có lỗi xảy ra.
2.3.2.3 Tái diễn dữ liệu
Một mã nữa đƣợc dùng trong thời gian này là mã hoạt động bằng cách nhắc đi nhắc lại bit dữ liệu vài lần (tái diễn bit đƣợc truyền) để đảm bảo bit dữ liệu đƣợc truyền, truyền đến nơi nhận trọn vẹn.
Chẳng hạn, nếu bit dữ liệu cần đƣợc truyền có giá trị bằng 1, một mã tái diễn n=3 sẽ cho truyền gửi giá trị "111". Nếu ba bit nhận đƣợc không giống nhau, thì hiện trạng này báo cho ta biết rằng, lỗi trong truyền thông đã xảy ra. Nếu kênh truyền không bị nhiễu, tƣơng đối đảm bảo, thì với hầu hết các lần truyền, trong nhóm ba bit đƣợc gửi, chỉ có một bit là bị thay đổi.
Do đó các nhóm 001, 010, và 100 đều tƣơng đƣơng cho một bit có giá trị 0, và các nhóm 110, 101, và 011 đều tƣơng đƣơng cho một bit có giá trị 1 - lƣu ý số lƣợng bit có giá trị 0 trong các nhóm đƣợc coi là có giá trị 0, là đa số so với tổng số bit trong nhóm, hay 2 trong 3 bit, tƣơng đƣơng nhƣ vậy, các nhóm đƣợc coi là giá trị 1 có số lƣợng bit bằng 1 nhiều hơn là các bit có giá trị 0 trong nhóm - chẳng khác gì việc các nhóm bit đƣợc đối xử nhƣ là "các phiếu bầu" cho bit dữ liệu gốc vậy.
Tuy nhiên, những mã này không thể sửa tất cả các lỗi một cách đúng đắn hoàn toàn.
Chẳng hạn chúng ta có một ví dụ sau: nếu một kênh truyền đảo ngƣợc hai bit và do đó máy nhận thu đƣợc giá trị "001", hệ thống máy sẽ phát hiện là có lỗi xảy ra, song lại kết luận rằng bit dữ liệu gốc là bit có giá trị bằng 0. Đây là một kết luận sai lầm.
Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn
Nếu chúng ta tăng số lần các bit đƣợc nhắc lại lên 4 lần, chúng ta có thể phát hiện tất cả các trƣờng hợp khi 2 bit bị lỗi, song chúng ta không thể sửa chữa chúng đƣợc (số phiếu bầu "hòa"); với số lần nhắc lại là 5 lần, chúng ta có thể sửa chữa tất cả các trƣờng hợp 2 bit bị lỗi, song không thể phát hiện ra các trƣờng hợp 3 bit bị lỗi.
Nói chung, mã tái diễn là một mã hết sức không hiệu quả, giảm công suất xuống 3 lần so với trƣờng hợp đầu tiên trong ví dụ trên của chúng ta, và công suất làm việc giảm xuống một cách nhanh chóng nếu chúng ta tăng số lần các bit đƣợc nhắc lại với mục đích để sửa nhiều lỗi hơn.
2.3.3. Thuật toán mã Hamming
Hamming nghiên cứu các kế hoạch mã hóa hiện có, bao gồm cả mã hai-trong-năm, rồi tổng quát hóa khái niệm của chúng. Nguyên lý của mã Hamming bắt nguồn từ việc khai triển và mở rộng quan điểm chẵn lẻ.
Khởi đầu, ông xây dựng một danh mục để diễn tả hệ thống máy, bao gồm cả số lƣợng bit dùng cho dữ liệu và các bit sửa lỗi trong một khối. Chẳng hạn, bit chẵn lẻ phải thêm 1 bit vào trong mỗi từ dữ liệu. Hamming diễn tả phƣơng pháp này là mã (8,7). Nó có nghĩa là một từ dữ liệu có tổng số bit là 8 bit, trong đó chỉ có 7 bit là các bit của dữ liệu mà thôi. Theo phƣơng pháp suy nghĩ này, mã tái diễn (nhắc lại) ở trên phải đƣợc gọi là mã (3,1). Tỷ lệ thông tin là tỷ lệ đƣợc tính bằng việc lấy con số thứ hai chia cho con số thứ nhất. Nhƣ vậy với mã tái diễn (3,1) ở trên, tỷ lệ thông tin của nó là .
Hamming còn phát hiện ra vấn đề với việc đảo giá trị của hai hoặc hơn hai bit nữa, và miêu tả nó là "khoảng cách" (hiện nay nó đƣợc gọi là khoảng