Tổng quan về phương pháp thay thế LSB Ý tưởng cơ bản của kỹ thuật này là tiến hành giấu tin vào vị trí các bit ít quan trọng LSB đối với mỗi phần tử trong bảng màu.. Đây là phương pháp g
Trang 1HỌ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 bài tập lớn:
Phương pháp hoán vị giả ngẫu nhiên
Giảng viên hướng dẫn: TS Đỗ Xuân Chợ
Sinh viên thực hiện:
Nguyễn Hoàng Đức B17DCAT046
Trần Quốc Định B17DCAT038
Bùi Trần Quốc Cường B17DCAT026
Phạm Tuấn Nam B17DCAT134
Phạm Hoàng Thịnh B17DCAT174
Hà Nội 2021
Trang 2Mục lục
DANH MỤC HÌNH ẢNH 3
Chương 1: Phương pháp LSB 4
1.1 Tổng quan về phương pháp thay thế LSB 4
1.2 Phương pháp giấu tin và tách tin trên k bit LSB 6
1.2.1 Phương pháp giấu tin 6
1.2.2 Phương pháp tách tin 7
1.3 Phương pháp giấu tin và tách tin trên k bit LSB nâng cao 7
1.3.1 Phương pháp giấu tin 7
1.3.2 Phương pháp tách tin 9
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 ra các số giả ngẫu nhiên 11
2.2.1 Phương pháp cơ bản 11
2.2.2 Phương pháp dựa trên mật mã học nguyên thuỷ 18
2.2.3 Phương pháp dựa trên 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 và Demo 22
3.1 Ý tưởng thực hiện 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
Trang 3DANH MỤC HÌNH ẢNH
Hình 1: Bit có trọng số thấp LSB 4
Hình 2: Quá trình giấu tin 5
Hình 3: Quá trình lấy thông tin ra khỏi ảnh 5
Hình 4: Sơ đồ nhúng và tách tin của phương pháp hoán vị giả ngẫu nhiên 23
Trang 4Chương 1: Phương pháp LSB
1.1 Tổng quan về phương pháp thay thế LSB
Ý tưởng cơ bản của kỹ thuật này là tiến hành giấu tin vào vị trí các bit ít quan
trọng LSB đối với 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ướ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 Vì vậy khi ta thay đổi bit ít quan trọng của một điểm ảnh thì
màu sắc của mỗi điểm ảnh mới sẽ tương đối gần với điểm ảnh cũ Ví dụ đối với ảnh 16
bit thì 15 bit là biểu diễn 3 màu RGB của điểm ảnh còn bit cuối cùng không dùng đến thì
ta sẽ tách bit này ra ở mỗi điểm ảnh để giấu tin…
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 ta coi bit cuối cùng là bit ít quan trọng nhất, thay đổi giá trị
của bit này thì sẽ thay đổi giá trị của điểm ảnh lên hoặc xuống đúng một đơn vị, với sự
thay đổi nhỏ đó ta hi vọng là cấp độ màu của điểm ảnh sẽ không bị thay đổi nhỉều
Trang 5Hình 2: Quá trình giấu tin
Hình 3: Quá trình lấy thông tin ra khỏi ảnh
Trang 61.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
Đầ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
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
giấu tin sẽ thực hiện biểu diễn ma trận điểm ảnh về dạng số thập phân Công thức biến
đổi tổng quát như sau:
C = {𝑥𝑖𝑗 | 0 ≤ i ≤ 𝑀𝑐, 0 ≤ j ≤ 𝑁𝑐, 𝑥𝑖𝑗 = {0, 1, 2, …, 255}}
- Sau khi ảnh C đã được chuyển thành ma trận điểm ảnh thì tiếp tục chuyển ma trận
điểm ảnh này về mảng 1 chiều I với i phần tử, sau đó chuyển các điểm ảnh về dạng nhị
phân
- thông điệp M chiều dài n bit sẽ chuyển về dạng nhị phân:
M = {𝑚𝑖 | 0 ≤ I < 𝑛, 𝑚𝑖{0,1}}
- Cứ 8 bit ảnh tách bỏ số bit LSB ngoài cùng bên phải và ghép phần còn lại với k bit
nhị phân đầu của thông điệp (k có thể là 2 hoặc 4 bit), kết quả thu được đưa về dạng thập
phân rồi gán ngược lại vào I(i) Cuối cùng chuyển đổi ảnh giá trị nhị phân trong mảng I
từ mảng một chiều về mảng 2 chiều 𝑀𝑐× 𝑁𝑐 phần tử, ta được ảnh mới đã giấu tin
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 11001000Thô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
Trang 7Quy 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 11001010Như vậy, ảnh sau khi giấu thông điệp M có điểm ảnh dạng nhị phân như sau:
00001101 01100010 10010100 11001010
1.2.2 Phương pháp tách tin
Cũng tương tự như quá trình giấu tin trong ảnh, quá trình tách tin trong ảnh cũng
được thực hiện theo các giai đoạn tương tự
Đầu vào: Ảnh mang tin
Đầu ra: Ảnh đã tách tin và thông tin bí mật
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 đổi ma trận ảnh 𝑀𝑐 × 𝑁𝑐 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 k bit (k có thể là 2 hoặc
4 bit) ngoài cùng bên phải rồi ghép các kết quả này lại với nhau
- Kết quả thu được sử dụng hàm chuyển đổi từ chuỗi số nhị phân về chuỗi kí tự Sau
khi lặp lại quá trình trên số lần bằng số lần duyệt, thu được nội dung 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
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
Đầu vào:
- Ảnh gốc cấp xám
Trang 8- Biểu diễn thông tin giấu dưới dạng chuỗi nhị phân.
- Sử dụng một khóa 8 bit bất kỳ (khóa là kí tự, chuyển khóa về dạng mảng như với
thông điệp) đem mã hóa với chuỗi thông điệp bí mật bằng phép XOR: cứ 8 bit khóa đem
XOR với 8 bit đầu vào của thông điệp Thực hiện lại bước này cho đến khi nội dung
thông điệp được mã hóa hết
- Thông điệp đã mã hóa đem giấu vào ảnh tương tự như phương pháp thay thế k
bit LSB cổ điển: Là tách lấy 6 bit đầu của bit ảnh đem ghép với 2 bit đầu trong thông điệp
rồi chuyển về dạng thập phân và gán ngược lại vào ảnh
- Thực hiện cho đến khi lấy hết các bit của chuỗi nhị phân thông điệp để ghép với
các bit ảnh Chuyển đổi ảnh I từ mảng một chiều về mảng 2 chiều m x n phần tử, ta được
ảnh mới đã giấu tin
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 11001000Thô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
Trang 9Nhập khóa, cũng là 1 kí tự 8 bit, giả sử là chữ ‘b’, có dạng nhị phân như sau:
01100010
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ẽ
- 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 sử dụng hàm chuyển đổi từ chuỗi số nhị phân về chuỗi kí tự Sau khi
lặp lại quá trình trên số lần bằng số lần duyệt, ta thu được nội dung thông điệp đã 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 về bảng mã đã được quy ước sẵn: Tương tự như
trường hợp chuyển đổi kí tự về mã nhị phân của nó, nhưng ở đây khi giấu tin ta sử dụng
bảng quy đổi các kí tự và chữ số theo một chuẩn do người lập trình tự định nghĩa Đến
bước tách ta lại quy đổi ngược lại về dạng kí tự và số ban đầu
Trang 10Ví 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
1.4 Đánh giá phương pháp LSB
Ưu điểm:
Chất lượng hình ảnh sau giấu tin hầu như không bị ảnh hưởng
Kỹ thuật LSB đơn giản, dễ cài đặt và phát huy hiệu quả tốt trong nhiều ứng dụng
Kỹ thuật LSB là nền tảng cơ bản cho nhiều kỹ thuật phức tạp sau này
Nhược điểm:
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 Để giải quyết 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 sử dụng kỹ thuật LSB hoặc á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 ra các dãy pixel ngẫu nhiên thay
thế việc ánh xạ tuần tự mà LSB sử dụng Điều này cũng giúp thông tin giấu được
an toàn hơn vì để có được thông điệp, kẻ tấn công cần nắm rõ thuật toán được sử
dụng trong phương thức Seed
Trang 11Chương 2: Tạo số giả ngẫu nghiên
2.1 Giới thiệu
Có rất nhiều phương pháp đáng tin cậy để sinh các số ngẫu nhiên cho việc mô
phỏng ngẫu nhiên thông qua các bộ sinh số ngẫu nhiên với cơ sở toán học vững chắc
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 để tạo số ngẫu nhiên cơ bản Dựa vào
những phương pháp này, chúng ta sẽ tiếp tục trong chương tiếp theo để xem xét những
phương pháp tạo những số ngẫu nhiên mà có một phân phối nhất định, như phân phối số
mũ, phân phối chuẩn,
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)
Kỹ thuật nửa bình phương do John von Neuman phát triển vào những năm 40 Bắt
đầu từ số đầu tiên cho trước, ta bình phương nó lên và số giữa của số bình phương này
Trang 12được dùng làm số thứ hai của dãy số Kế tiếp, bình phương số thứ hai và lấy số giữa của
số bình phương này làm số thứ ba cho dãy số Quá trình cứ lặp lại tiếp tục như vậy
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
có chu kỳ dài hơn Mối quan hệ phép đệ quy cho phương pháp này được xác định bởi:
xn+1 = (xn(xn + 1)) mod m, với n 0, xo mod 4 =2, m= 2k
Ví dụ:
Với x0 = 2, m = 16 và tạo dãy số ngẫu nhiên sử dụng phương pháp đồng dư bậc hai
Trang 13Phươ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
c Phương pháp đồng dư tuyến tính (Linear congruence algorithm)
Phương pháp đồng dư tuyến tính (Linear Congruential Generators – LCG) là
phương pháp được sử dụng thông dụng nhất, được đưa ra đầu tiên bởi Lehmer Trạng thái
tại bước thứ n là một số nguyên x n và hàm chuyển T được định nghĩa như sau:
xn = (a xn-1 +c ) mod m, n ≥ 0
Trang 14Trong đó: x 0 là giá trị khởi đầu cho trước (0¿xo ¿m)
a là hằng số nhân (0 ¿ a ¿m)
c là gia số (0¿c¿m)
m là modul (m > 0).
Chú ý :
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 xi+1 được xác định bởi xi.Do (m+1) giá trị xo,x1, , xm 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ư xi và xi+k
Khi đó xi+k,…, xi+k-1 được lặp lại như xi+k,…, xi+2k-1 và như vậy dãy số xi tuần hoàn với
chu kỳ k<=m Toàn bộ chu kì m luôn có thể đạt được với a=c=1
Bên cạnh đó, sự lựa chọn các tham số a, c, m, xo rất quan trọng đối với chất lượng của
bộ sinh Nếu chúng không được chọn chính xác, bộ sinh có thể sẽ không có chu kỳ lớn
nhất, hay các số được sinh ra có thể không thể hiện tính ngẫu nhiên tốt hay thậm chí bộ
sinh có thể không thực hiện hiệu quả Đối với bộ số nhân lớn nhất là m-1 và nếu khi 0
xảy ra thì nó sẽ lặp lại không xác định
6 Thông thường, ta nên chọn m để làm cho toán tử modul có hiệu lực và sau đó chọn a
và c để làm cho chu kỳ càng dài càng tốt
7 Một chu kỳ đầy đủ (có độ dài m) có thể đạt được khi một số của điều kiện được thỏa
mãn như trong định lý sau
Định lý :
Một bộ sinh đệ quy có chu kỳ đầy đủ m khi và chỉ khi nó thỏa các điều kiện sau:
(i) USCLN (c, m) = 1 (nghĩa là c và m luôn có ước số chung bằng 1).
(ii) a 1 mod p đối với mỗi ước nguyên tố p của m (nghĩa là mỗi ước số chung
của m cũng là ước số chung của a-1 )
(iii) a mod 4 nếu 4 chia hết cho m (nghĩa là, nếu m có bậc 4 thì 4 cũng là ước số
của a - 1)
Trang 15Định nghĩa:
Nếu m là nguyên tố thì a là số nguyên thủy đầu tiên của modul m nếu và chỉ nếu an mod
m 1 với n=1, 2, 3, …, m-2
Chú ý:
1 Nếu m là số nguyên tố thì chu kỳ đủ đạt được chỉ khi a = 1
2 Ngay cả khi bộ sinh là chu kỳ đầy đủ vẫn không chắc chắn rằng các số được tạo ra là
số ngẫu nhiên Chẳng hạn, nếu a = 1, m = 1 và c = 3 thì các điều kiện trên đều thỏa
mãn, nhưng với x0 = 0 toàn bộ dãy số được tạo ra là 4, 7, 10, 2, 5, 8, 0, 3, 6, 9, 1, 4,
7, chúng hầu như không phải là số ngẫu nhiên
3 Việc lựa chọn hằng số nhân a ảnh hưởng đến độ lớn của chu kỳ và tính ngẫu nhiên của
chuỗi được sinh ra
4 Khi m= 2n và c>0: 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, x0): 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,
0, 1, 6, 15, 12, 13, 2, 11, 8, 9, 14,
5 Khi m=2n 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,
x0), 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
Như vậy, tham số quan trọng nhất của một LCG là modul m Kích thước của nó
ràng buộc chu kỳ (m thường được chọn là số nguyên tố hoặc là lũy thừa của 2) Đối với
các bộ sinh đồng dư tuyến tính với modul là số nguyên tố, việc sử dụng gia số c≠0 không
tăng chu kỳ ngoại trừ khi a = 1 Thông thường, a phải lớn hơn 1 để chuỗi sinh ra có tính
ngẫu nhiên
Ví dụ 1:
Xét bộ sinh LCG (a, 0, 13, 1), xét về tính ngẫu nhiên của chuỗi được sinh ra, a=6
hoặc a=11 tốt hơn a=2 hay a=7 mặc dù chúng sinh ra chu kì đầy đủ Người ta thường
mong muốn các bộ sinh có chu kỳ đầy đủ hơn là các bộ sinh có chu kỳ ngắn
Trang 16Các giá trị khởi đầu giữa 1 và 12 không ảnh hưởng đến tính ngẫu nhiên của chuỗi
mà chỉ chuyển điểm khởi đầu của chuỗi Tuy nhiên nếu bộ sinh không phải có chu kỳ đầy
đủ thì các giá trị khởi đầu khác nhau sẽ sinh ra các chuỗi kết quả khác nhau với các chu
kỳ khác nhau
Ví dụ 2:
Nếu một LCG không phải là bộ sinh chu kỳ đầy đủ, thì các giá trị khởi đầu xo có
thể cho ra các chuỗi khác nhau và độ dài chu kỳ khác nhau Chẳng hạn với LCG(3, 0, 16,