Professional Documents
Culture Documents
Biểu thức:: - Thuật Toán Euclid mở rộng
Biểu thức:: - Thuật Toán Euclid mở rộng
a mod n=r
Lưu ý: +Nếu a<n thì a mod n=a
+Nếu a<0 thì cộng a và n cho đến khi nhận được số nguyên đầu tiên
+Nếu a chia hết cho n thì r=0
Ta cần dùng phép toán Euclid mở rộng để tìm được ma trận nghịch đảo của ma
trận khóa K trên một module vành Zm tương ứng, với điều kiện K khả nghịch.
Thuật toán Euclid có dạng:
ax+by=c
Vd: Tính 550-1 mod 1759
=>tìm x sao cho 550x=1 (mod 1759)
tức là cần tìm biểu diễn 550x + 1759y = 1
1.
1759 = 3*550+ 109 1) 109 = 1759 - 3*550
2.
1.
550 = 5*109 + 5 2) 550 = 5(1759 - 3*550) + 5
2.
5 = (-5)*1759 + 16*550
1.
109 = 21*5 + 4 3) (1759-3*550) = 21((-5)*1759 + 16*550) + 4
2.
4 = 106*1759 - 339*550
1.
5 = 1*4 + 1 4) ((-5)*1759 + 16*550) = 1*(106*1759 - 339*550) + 1
2.
1 = (-111)*1759 + 335*550
1.
4 = 4*1 +0
2.
Từ đó ta biết được 550-1 mod 1759 = 335 mod 1759
b. Các bước tìm ma trận nghịch đảo của ma trận khoá K:
K-1=
1det (K)
*Adj(K)mod26
Bước 1: Tìm định thức của ma trận K và tính định thức trên mod26.
Bước 2: Tìm ma trận Adj(K) và tính ma trận trên mod26.
Bước 3: Tính nghịch đảo của module bằng phép toán Euclid mở rộng.
Bước 4: Tìm ma trận K-1.
3. Ma trận khả nghịch trên Z26
Nếu ma trận vuông A cấp m trên (Z26) có det(A) khả nghịch trên (Z26) thì bản
thân ma trận A khả nghịch trên (Z26).
Tức là: ta có det(A)≠0 và det(A) khả nghịch trên (Z26) thì ước chung lớn nhất
(UCLN): UCLN(det(A), 26)=1 thì khi đó ma trận A khả nghịch trên (Z26).
Điều kiện cần và đủ để ma trận vuông A khả nghịch là det(A)≠0, nếu
det(A)=0 thì không tồn tại ma trận nghịch đảo.
Ta cần có ma trận nghịch đảo của ma trận khoá K để giải văn bản mã.
4. Quy trình mã hóa và giải mã
Ta có bảng quy ước :
0 1 2 3 4 5 6 7 8 9 10 11 12
A B C D E F G H I J K L M
13 14 15 16 17 18 19 20 21 22 23 24 25
N O P Q R S T U V W X Y Z
Ví dụ 1:
aMã hóa bản rõ “HELLO WORLD” bằng hệ mã Hill sử dụng khóa
K= [Phương trình]
Giải: a)Vì khóa K là ma trận vuông cấp 3 nên ta chia bản rõ thành từng phần 3 kí
tự và ánh xạ vào Z26, do số kí tự của bản rõ không chia hết cho 3 nên ta thêm n kí
tự ngẫu nhiên thuộc Z26 để bản rõ tương thích với khóa K:
H E L L O X W O R L D X
7 4 11 11 14 23 22 14 17 11 3 23
Ví dụ 4:
a) Mã hóa bản rõ “ GIẢI TÍCH ’’ bằng hệ mã Hill sử dụng khóa K=[Phương
trình]
b Giải bản mã ở câu a
Giải
a Vì khóa K là ma trận vuông cấp 3 nên ta chia bản rõ từng phần 3 kí tự và ánh xạ
vào Z94 , quy ước khoảng trống là dấu “”
G I Ả I T Í C H
35 37 4 37 0 69 38 20 36
[Phương trình] = [Phương trình] ; [Phương trình] = [Phương trình] ;
[Phương trình] = [Phương trình]
Hàm mã hóa: eK (p) K.p mod 94,ta có:
[Phương trình]=K.[Phương trình]=[Phương trình]
[Phương trình]=K.[Phương trình]mod 94=[Phương trình] = [Phương trình]
[Phương trình]=K.[Phương trình]mod 94= [Phương trình]= [Phương trình]
Bản mã eK thu được là: FÉM ỨÀU ẮLI
b Để giải bản mã ở câu a cần tìm K-1
K-1 =
1detK
.Adj K mod 94
K=[Phương trình]
Adj K mod 94 = [Phương trình] mod 94 = [Phương trình]
Þ K-1 =
155
[Phương trình]mod 94
Áp dụng thuật toán Euclid
Ta có: 55-1 mod 94
1) 94 = 1*55 + 39
2) 55 = 1*39 + 16
3) 39 = 2*7 + 2
4) 16 = 4*1 + 0
5) 7 = 3*2 + 1
6) 2 = 2*1 + 0
Phần mở rộng
1) 39 = 94 - 1*55
2) 55 = 1*( 94 - 1*55 ) + 16 Û 16 = -1*94 + 2*55
3) (94 - 1*55) = 2* (2*55 - 1*49) + 7 Û 7= 3*94 -5*55
4) (2*55 - 1*94) = 2*(3*94 - 5*55) + 2 Û 2 = 12*55 - 7*94
5) (3*94 - 5*55) = 3*(12*55 - 7*94) Û 1= ( 24*94 - 41*55 )
Þ Nhận biểu thức mở rộng tại 5) 1= ( 24*94 - 41*55 )
Ta có: - 41 mod 94 = 53
Þ K-1 = 53 [Phương trình] mod 94 = [Phương trình]
*Kiểm tra K-1
Nếu K.K-1 mod 94 bằng ma trận đơn vị I thì K-1 chính xác
Ta có: K.K-1 mod 94 =[Phương trình] [Phương trình] mod 94= [Phương
trình]mod 94 =[Phương trình] Þ K-1 chính xác
Hàm giải mã : dK (C) = K-1 .C mod 94
[Phương trình]=K-1 [Phương trình]
nhap_khoa = [[int(x) for x in input(f'Nhập dòng {i+1} của ma trận khóa 3x3
(cách nhau bởi dấu cách): ').split()] for i in range(3)]
( xếp các mảng thành ma trận)
ma_tran_khoa = np.array(nhap_khoa)
tin_nhan = input('Nhập thông điệp: ') ( nhập thông điệp muốn mã hóa từ bàn
phím)
print("Đang mã hóa....\n-------------------------") (make color)
print("Thông điệp nhập vào : " + tin_nhan)
tin_nhan = tin_nhan.upper().replace(" ", "_")
n = len(tin_nhan) % len(ma_tran_khoa)
if n != 0:
for i in range(len(ma_tran_khoa) - n):
tin_nhan += 'X'
print("Thông điệp sau khi đệm: " + tin_nhan)
# Sử dụng ví dụ:
main()
def main():
nhap_khoa = [[int(x) for x in input(f'Nhập dòng {i+1} của ma trận khóa 3x3
(cách nhau bởi dấu cách): ').split()] for i in range(3)]
try:
ma_tran_khoa_nguoc = Matrix(nhap_khoa).inv_mod(26)
if ma_tran_khoa_nguoc is None:
raise np.linalg.LinAlgError
ma_tran_khoa_nguoc = np.array(ma_tran_khoa_nguoc)
except np.linalg.LinAlgError:
print("Ma trận khóa không thể nghịch đảo. Hãy nhập một ma trận
khác.")
return
3. Ứng dụng nổi trội của mã HILL trong đời sống hiện đại
Ứng dụng của phương pháp mã hóa Hill Cipher trong văn bản được đánh giá cao
vì tốc độ mã hóa và giải mã nhanh chóng. Phương pháp này đặc biệt hiệu quả trong
việc bảo mật dữ liệu truyền qua mạng mở.
Lĩnh vực quân sự: Hỗ trợ truyền tin giữa các đơn vị quân sự và bảo mật
thông tin về chiến lựơc, ngăn chặn xâm nhập và lộ thông tin quan trọng trong
quân đội.
Lĩnh vực trao đổi thư tín, tin nhắn: mã hóa tin nhắn văn bản, tệp tin, hình
ảnh, email, hoặc bất kỳ hình thức giao tiếp kỹ thuật số nào; đảm bảo tính bảo
mật và riêng tư của thông tin nhạy cảm
Lĩnh vực thương mại điện tử: mã hóa giao dịch tài chính và thông tin cá
nhân trong quá trình mua sắm trực tuyến hoặc ngân hàng, nâng cao dữ liệu cá
nhân
Lĩnh vực Internet of Things (IoT): Với sự phát triển của Internet of Things
(IoT), Hill Cipher có thể được sử dụng để mã hóa dữ liệu truyền qua các thiết bị
IoT, bảo vệ quyền riêng tư và ngăn chặn truy cập trái phép vào thông tin nhạy
cảm.
3.1. Mã hóa đầu cuối – Mã hóa sâu – Bảo mật dữ liệu
a) Mã hóa đầu cuối
Sau khi bản rõ được mã hóa, key giải mã sẽ được gửi đến cá nhân được nhận chỉ
định, chỉ có một key duy nhất. Trong quá trình gửi, không có đơn vị trung gian nào
có thể giải mã được.
Mô hình minh họa:
3.2. Ví dụ
IV - KẾT LUẬN
V – TÀI LIỆU THAM KHẢO
[1] Giáo trình Đại số tuyến tính – Thầy Đặng Văn Vinh
[2] Wikipedia.org/wiki/Hill_cipher
Biểu thức:
a mod n=r
Lưu ý: +Nếu a<n thì a mod n=a
+Nếu a<0 thì cộng a và n cho đến khi nhận được số nguyên đầu tiên
+Nếu a chia hết cho n thì r=0
Ta cần dùng phép toán Euclid mở rộng để tìm được ma trận nghịch đảo của ma
trận khóa K trên một module vành Zm tương ứng, với điều kiện K khả nghịch.
Thuật toán Euclid có dạng:
ax+by=c
Vd: Tính 550-1 mod 1759
=>tìm x sao cho 550x=1 (mod 1759)
tức là cần tìm biểu diễn 550x + 1759y = 1
1.
1759 = 3*550+ 109 1) 109 = 1759 - 3*550
2.
1.
550 = 5*109 + 5 2) 550 = 5(1759 - 3*550) + 5
2.
5 = (-5)*1759 + 16*550
1.
109 = 21*5 + 4 3) (1759-3*550) = 21((-5)*1759 + 16*550) + 4
2.
4 = 106*1759 - 339*550
1.
5 = 1*4 + 1 4) ((-5)*1759 + 16*550) = 1*(106*1759 - 339*550) + 1
2.
1 = (-111)*1759 + 335*550
1.
4 = 4*1 +0
2.
Từ đó ta biết được 550-1 mod 1759 = 335 mod 1759
0 1 2 3 4 5 6 7 8 9 10 11 12
A B C D E F G H I J K L M
13 14 15 16 17 18 19 20 21 22 23 24 25
N O P Q R S T U V W X Y Z
Ví dụ 1:
aMã hóa bản rõ “HELLO WORLD” bằng hệ mã Hill sử dụng khóa
K= [Phương trình]
Giải: a)Vì khóa K là ma trận vuông cấp 3 nên ta chia bản rõ thành từng phần 3 kí
tự và ánh xạ vào Z26, do số kí tự của bản rõ không chia hết cho 3 nên ta thêm n kí
tự ngẫu nhiên thuộc Z26 để bản rõ tương thích với khóa K:
H E L L O X W O R L D X
7 4 11 11 14 23 22 14 17 11 3 23
Ví dụ 4:
a) Mã hóa bản rõ “ GIẢI TÍCH ’’ bằng hệ mã Hill sử dụng khóa K=[Phương
trình]
b Giải bản mã ở câu a
Giải
a Vì khóa K là ma trận vuông cấp 3 nên ta chia bản rõ từng phần 3 kí tự và ánh xạ
vào Z94 , quy ước khoảng trống là dấu “”
G I Ả I T Í C H
35 37 4 37 0 69 38 20 36
[Phương trình] = [Phương trình] ; [Phương trình] = [Phương trình] ;
[Phương trình] = [Phương trình]
Hàm mã hóa: eK (p) K.p mod 94,ta có:
[Phương trình]=K.[Phương trình]=[Phương trình]
[Phương trình]=K.[Phương trình]mod 94=[Phương trình] = [Phương trình]
[Phương trình]=K.[Phương trình]mod 94= [Phương trình]= [Phương trình]
Bản mã eK thu được là: FÉM ỨÀU ẮLI
b Để giải bản mã ở câu a cần tìm K-1
K-1 =
1detK
.Adj K mod 94
K=[Phương trình]
Adj K mod 94 = [Phương trình] mod 94 = [Phương trình]
Þ K-1 =
155
[Phương trình]mod 94
Áp dụng thuật toán Euclid
Ta có: 55-1 mod 94
1) 94 = 1*55 + 39
2) 55 = 1*39 + 16
3) 39 = 2*7 + 2
4) 16 = 4*1 + 0
5) 7 = 3*2 + 1
6) 2 = 2*1 + 0
Phần mở rộng
1) 39 = 94 - 1*55
2) 55 = 1*( 94 - 1*55 ) + 16 Û 16 = -1*94 + 2*55
3) (94 - 1*55) = 2* (2*55 - 1*49) + 7 Û 7= 3*94 -5*55
4) (2*55 - 1*94) = 2*(3*94 - 5*55) + 2 Û 2 = 12*55 - 7*94
5) (3*94 - 5*55) = 3*(12*55 - 7*94) Û 1= ( 24*94 - 41*55 )
Þ Nhận biểu thức mở rộng tại 5) 1= ( 24*94 - 41*55 )
Ta có: - 41 mod 94 = 53
Þ K-1 = 53 [Phương trình] mod 94 = [Phương trình]
*Kiểm tra K-1
Nếu K.K-1 mod 94 bằng ma trận đơn vị I thì K-1 chính xác
Ta có: K.K-1 mod 94 =[Phương trình] [Phương trình] mod 94= [Phương
trình]mod 94 =[Phương trình] Þ K-1 chính xác
Hàm giải mã : dK (C) = K-1 .C mod 94
[Phương trình]=K-1 [Phương trình]
nhap_khoa = [[int(x) for x in input(f'Nhập dòng {i+1} của ma trận khóa 3x3
(cách nhau bởi dấu cách): ').split()] for i in range(3)]
( xếp các mảng thành ma trận)
ma_tran_khoa = np.array(nhap_khoa)
tin_nhan = input('Nhập thông điệp: ') ( nhập thông điệp muốn mã hóa từ bàn
phím)
print("Đang mã hóa....\n-------------------------") (make color)
print("Thông điệp nhập vào : " + tin_nhan)
tin_nhan = tin_nhan.upper().replace(" ", "_")
n = len(tin_nhan) % len(ma_tran_khoa)
if n != 0:
for i in range(len(ma_tran_khoa) - n):
tin_nhan += 'X'
print("Thông điệp sau khi đệm: " + tin_nhan)
# Sử dụng ví dụ:
main()
BỔ SUNG HÌNH ẢNH CHẠY CODE
def main():
nhap_khoa = [[int(x) for x in input(f'Nhập dòng {i+1} của ma trận khóa 3x3
(cách nhau bởi dấu cách): ').split()] for i in range(3)]
try:
ma_tran_khoa_nguoc = Matrix(nhap_khoa).inv_mod(26)
if ma_tran_khoa_nguoc is None:
raise np.linalg.LinAlgError
ma_tran_khoa_nguoc = np.array(ma_tran_khoa_nguoc)
except np.linalg.LinAlgError:
print("Ma trận khóa không thể nghịch đảo. Hãy nhập một ma trận
khác.")
return
3. Ứng dụng nổi trội của mã HILL trong đời sống hiện đại
Ứng dụng của phương pháp mã hóa Hill Cipher trong văn bản được đánh giá cao
vì tốc độ mã hóa và giải mã nhanh chóng. Phương pháp này đặc biệt hiệu quả trong
việc bảo mật dữ liệu truyền qua mạng mở.
Lĩnh vực quân sự: Hỗ trợ truyền tin giữa các đơn vị quân sự và bảo mật
thông tin về chiến lựơc, ngăn chặn xâm nhập và lộ thông tin quan trọng trong
quân đội.
Lĩnh vực trao đổi thư tín, tin nhắn: mã hóa tin nhắn văn bản, tệp tin, hình
ảnh, email, hoặc bất kỳ hình thức giao tiếp kỹ thuật số nào; đảm bảo tính bảo
mật và riêng tư của thông tin nhạy cảm
Lĩnh vực thương mại điện tử: mã hóa giao dịch tài chính và thông tin cá
nhân trong quá trình mua sắm trực tuyến hoặc ngân hàng, nâng cao dữ liệu cá
nhân
Lĩnh vực Internet of Things (IoT): Với sự phát triển của Internet of Things
(IoT), Hill Cipher có thể được sử dụng để mã hóa dữ liệu truyền qua các thiết bị
IoT, bảo vệ quyền riêng tư và ngăn chặn truy cập trái phép vào thông tin nhạy
cảm.
3.1. Mã hóa đầu cuối – Mã hóa sâu – Bảo mật dữ liệu
a) Mã hóa đầu cuối
Sau khi bản rõ được mã hóa, key giải mã sẽ được gửi đến cá nhân được nhận chỉ
định, chỉ có một key duy nhất. Trong quá trình gửi, không có đơn vị trung gian nào
có thể giải mã được.
Mô hình minh họa:
3.2. Ví dụ
IV - KẾT LUẬN
V – TÀI LIỆU THAM KHẢO
[1] Giáo trình Đại số tuyến tính – Thầy Đặng Văn Vinh
[2] Wikipedia.org/wiki/Hill_cipher