1. Chương 1: Một số kiến thức toán học bổ trợ
Chương 2: Các khái niệm cơ sở và mật mã khóa đối xứng
1. Mật mã Caesar
Mã hóa Caesar là một phương pháp mã hóa đơn giản trong mật mã học, được
gọi là "phép dịch chữ cái". Phương pháp này được đặt tên theo Julius Caesar, người
được cho là đã sử dụng nó để gửi tin nhắn bí mật trong thời kỳ La Mã cổ đại.
* Kỹ thuật mã hóa
Cách thực hiện mã hóa Caesar như sau:
1. Chọn một khoá: Khoá trong trường hợp này là một số nguyên dương,
thường được gọi là "bước dịch" hoặc "độ lệch". Khoá này quyết định bao
nhiêu chữ cái sẽ được dịch.
2. Dịch các chữ cái: Mỗi chữ cái trong thông điệp gốc được dịch đi một số
bước tương ứng với khoá đã chọn. Ví dụ, nếu chọn khoá là 3, thì 'A' sẽ
được dịch thành 'D', 'B' sẽ được dịch thành 'E', và cứ như vậy.
3. Quy tắc dịch: Các chữ cái được dịch theo hình vòng tròn, nghĩa là sau khi
dịch hết các chữ cái trong bảng chữ cái, nó sẽ quay lại bắt đầu từ đầu.
Chẳng hạn, nếu cuối cùng đến 'Z', nó sẽ quay trở lại 'A'.
4. Bảo toàn khoảng trắng và ký tự khác: Khoảng trắng và các ký tự đặc biệt
không được dịch, chúng được bảo toàn nguyên trạng.
* Kỹ thuật giải mã
Để giải mã một thông điệp được mã hóa Caesar, bạn sẽ thực hiện phép dịch
ngược lại với cùng một khoá, đưa nó trở về dạng gốc.
2. Tóm lại, mã hóa Caesar là một phương pháp đơn giản nhưng không an toàn đối
với các vấn đề bảo mật cao, vì có thể dễ dàng bị giải mã bằng cách thử nghiệm tất
cả các khả năng.
Bản rõ (Plaintext): P = {p0, p1, p2,…, pn-1}
Bản mã (Cipher): C = {c0, c1, c2,…, cn-1}
Khóa (Key): K = k ( 0<k<26)
Phép mã hóa (Encrypt)-E: C = (P+k)mod26
Phép giải mã (Decrypt)-E: C = (P-k)mod26
Tham khảo nguồn Caesar Cipher in Cryptography - GeeksforGeeks
2. Mật mã Playfair
Mật mã Playfair là mật mã thay thế digraph thực tế đầu tiên. Sơ đồ này được
phát minh vào năm 1854 bởi Charles Wheatstone nhưng được đặt theo tên của Lord
Playfair, người đã thúc đẩy việc sử dụng mật mã. Nó được sử dụng cho các mục đích
chiến thuật của các lực lượng Anh trong Chiến tranh Boer lần thứ hai và trong Thế
chiến I và cho cùng một mục đích của người Úc trong Thế chiến II. Điều này là do
Playfair sử dụng khá nhanh và không yêu cầu thiết bị đặc biệt.
* Kỹ thuật mã hóa
Trong mật mã playfair không giống như mật mã truyền thống, chúng tôi mã
hóa một cặp bảng chữ cái (digraph) thay vì một bảng chữ cái duy nhất. Phương pháp
này dựa trên việc sử dụng một bảng chứa các chữ cái để mã hóa và giải mã thông
điệp. Cụ thể, quy trình mã hóa Playfair được thực hiện như sau:
1. Tạo bảng Playfair:
Hình vuông khóa là một lưới bảng chữ cái 5×5 hoạt động như chìa khóa để mã
hóa bản rõ. Mỗi bảng chữ cái trong số 25 bảng chữ cái phải là duy nhất và một chữ
cái của bảng chữ cái (thường là J) bị bỏ qua khỏi bảng (vì bảng chỉ có thể chứa 25
bảng chữ cái). Nếu bản rõ chứa J, thì nó được thay thế bằng I.
Bảng này được tạo ra từ một khẩu điển (keyword) được chọn bởi người mã hóa.
Các chữ cái trong khẩu điển không được lặp lại và viết hoa. Các chữ cái của bảng
Playfair được điền vào từ trái qua phải, từ trên xuống dưới, bỏ qua các chữ cái đã xuất
hiện trong khẩu điển.
Ví dụ: Nếu khẩu điển là "KEYWORD", bảng Playfair sẽ có dạng:
K E Y W O
3. R D A B C
F G H I L
M N P Q S
T U V X Z
2. Chia thông điệp thành các cặp chữ cái:
Bước này thực hiện trước khi mã hóa. Nếu trong cặp chữ cái có hai chữ giống nhau
hoặc bị trùng, chèn một chữ "X" ở giữa.
Ví dụ: Nếu thông điệp là "HELLO WORLD", ta sẽ có "HE LX LO WO RL DX".
3. Mã hóa từng cặp chữ cái:
Với mỗi cặp chữ cái, ta thực hiện các bước sau:
Nếu cặp cùng một hàng trên bảng Playfair, thì thay thế mỗi chữ cái bằng chữ
cái phía bên phải của nó. Nếu ở cuối hàng, chuyển đến chữ cái đầu.
Nếu cặp cùng một cột trên bảng Playfair, thì thay thế mỗi chữ cái bằng chữ cái
phía dưới của nó. Nếu ở cuối cột, chuyển đến chữ cái đầu.
Nếu không thuộc cùng hàng hoặc cột, tạo một hình vuông ở giữa cặp chữ cái,
sau đó chọn chữ cái phía đối diện.
Ví dụ: Sử dụng bảng Playfair trên, cặp "HE" sẽ được mã hóa thành "GR", cặp "LX"
sẽ được mã hóa thành "MN", vv.
4. Kết hợp các cặp đã mã hóa lại:
Cuối cùng, ta kết hợp các cặp đã mã hóa lại thành thông điệp đã mã hóa.
Mã hóa Playfair mang lại sự bảo mật tương đối vì nó sử dụng một bảng phức tạp để
thay đổi các cặp chữ cái. Tuy nhiên, cũng có một số điểm yếu, ví dụ như cần phải xử
lý ký tự đặc biệt như "J" trong tiếng Anh, và khái niệm về khẩu điển khá quan trọng
để bảo mật thông điệp.
Chẳng hạn:
4. * Kỹ thuật giải mã
Giải mã mật mã Playfair cũng đơn giản như thực hiện ngược lại quy trình tương
tự. Người nhận có cùng khóa và có thể tạo cùng một bảng khóa, sau đó giải mã bất
kỳ tin nhắn nào được thực hiện bằng khóa đó.
Lưu ý: Bản mã luôn có số ký tự chẵn.
Thực hiện các bước tương tự như trong kỹ thuật mã hóa. Khác nhau tại quy tắc
giải mã từng cặp chữ cái trong Bước 3.
5. Nếu cả hai chữ cái nằm trong cùng một cột: Lấy chữ cái phía trên mỗi chữ
cái (quay trở lại dưới cùng nếu ở trên cùng).
Nếu cả hai chữ cái nằm trong cùng một hàng: Lấy chữ cái ở bên trái của
mỗi chữ cái (quay lại ngoài cùng bên phải nếu ở vị trí ngoài cùng bên trái).
Nếu cả hai quy tắc trên đều không đúng: Tạo thành một hình chữ nhật với
hai chữ cái và lấy các chữ cái ở góc ngang đối diện của hình chữ nhật.
Chẳng hạn:
Tham khảo nguồn Mật mã Playfair với các ví dụ - GeeksforGeeks
3. Mật mã Hill
Mật mã Hill là một mật mã thay thế đa dạng dựa trên đại số tuyến tính. Mỗi
chữ cái được biểu thị bằng một số modulo 26. Nó được phát triển bởi nhà toán học
Lester S. Hill vào năm 1929.
6. Cơ bản, mật mã Hill mã hóa thông điệp bằng cách chia thành các khối con
(thường là các cặp hoặc các nhóm các chữ cái), sau đó nhân chúng với một ma trận
số nguyên. Mục tiêu của mật mã Hill là thay đổi tần suất xuất hiện của các ký tự để
làm cho việc giải mã trở nên khó khăn.
Để mã hóa một thông điệp, mỗi khối n chữ cái (được coi là vectơ n thành
phần) được nhân với một ma trận n × n đảo ngược, với mô đun 26. Để giải mã
thông điệp, mỗi khối được nhân với nghịch đảo của ma trận được sử dụng để mã
hóa.
Ví dụ:
Input : Plaintext: ACT
Key: GYBNQKURP
Output : Ciphertext: POH
* Kỹ thuật mã hóa
1. Chọn ma trận khóa (key matrix): Ma trận này phải là một ma trận vuông
có nghịch đảo modular. Điều này đảm bảo rằng việc giải mã sẽ được thực hiện
được. Ma trận này phải có kích thước tùy ý, nhưng thường được chọn có kích
thước 2x2 hoặc 3x3.
2. Chia thông điệp thành các khối con: Thông điệp được chia thành các cặp
hoặc nhóm các chữ cái. Mỗi cặp hoặc nhóm sẽ được biểu diễn bằng một vector
(dưới dạng các số nguyên).
3. Nhân ma trận khóa với vector đại diện cho cặp hoặc nhóm: Kết quả của
phép nhân sẽ là một vector mới.
4. Chuyển đổi vector kết quả thành các chữ cái: Các số nguyên trong vector
kết quả được chuyển đổi thành các chữ cái tương ứng.
Ví dụ:
Chúng ta phải mã hóa thông điệp 'ACT' (n = 3). Khóa là 'GYBNQKURP' có thể
được viết dưới dạng ma trận nxn:
7. Thông điệp 'ACT' được viết dưới dạng vector:
Vectơ được mã hóa được cho là:
tương ứng với bản mã của 'POH'
* Kỹ thuật giải mã
Tương tự như mã hóa, khác ở bước chọn ma trận khóa thì ở đây ta cần tìm ma
trận nghịch đảo của ma trận khóa. Sau đó thực hiện nhân ma
Sử dụng lại ví dụ trên:
8. Để giải mã thông điệp, chúng ta biến bản mã trở lại thành một vector, sau đó
chỉ cần nhân với ma trận nghịch đảo của ma trận khóa (IFKVIVVMI bằng chữ cái).
Nghịch đảo của ma trận được sử dụng trong ví dụ trước là:
Đối với bản mã 'POH' trước đó:
mang lại cho chúng tôi 'ACT'.
4. Mật mã Vigenere
Mật mã Vigenere là một phương pháp mã hóa văn bản chữ cái. Nó sử dụng
một hình thức thay thế đa chữ cái đơn giản. Mật mã đa chữ cái là bất kỳ mật mã nào
dựa trên sự thay thế, sử dụng nhiều bảng chữ cái thay thế. Việc mã hóa văn bản gốc
được thực hiện bằng cách sử dụng hình vuông Vigenère hoặc bảng Vigenère.
Bảng này bao gồm các bảng chữ cái được viết ra 26 lần trong các hàng khác
nhau, mỗi bảng chữ cái dịch chuyển theo chu kỳ sang trái so với bảng chữ
cái trước đó, tương ứng với 26 Mật mã Caesar có thể.
Tại các điểm khác nhau trong quá trình mã hóa, mật mã sử dụng một bảng
chữ cái khác với một trong các hàng.
Bảng chữ cái được sử dụng tại mỗi điểm phụ thuộc vào một từ khóa lặp lại.
Ví dụ:
Input : Plaintext : GEEKSFORGEEKS
9. Keyword : AYUSH
Output : Ciphertext : GCYCZFMLYLEIM
Để tạo khóa, từ khóa đã cho được lặp lại theo cách tròn cho đến khi nó khớp
với độ dài của văn bản thuần túy.
Từ khóa "AYUSH" tạo khóa "AYUSHAYUSHAYU" Văn bản thuần túy sau
đó được mã hóa bằng quy trình được giải thích bên dưới.
* Kỹ thuật mã hóa
Chữ cái đầu tiên của bản rõ, G được ghép với A, chữ cái đầu tiên của khóa. Vì
vậy, sử dụng hàng G và cột A của hình vuông Vigenère, cụ thể là G. Tương tự, đối
với chữ cái thứ hai của bản rõ, chữ cái thứ hai của khóa được sử dụng, chữ cái ở hàng
E và cột Y là C. Phần còn lại của bản rõ được mã hóa theo cách tương tự.
Giải mã được thực hiện bằng cách đi đến hàng trong bảng tương ứng với khóa,
tìm vị trí của chữ cái bản mã trong hàng này, sau đó sử dụng nhãn của cột làm bản
rõ. Ví dụ: trong hàng A (từ AYUSH), bản mã G xuất hiện trong cột G, là chữ cái văn
10. bản rõ đầu tiên. Tiếp theo, chúng ta đi đến hàng Y (từ AYUSH), xác định vị trí bản
mã C được tìm thấy trong cột E, do đó E là chữ cái văn bản rõ thứ hai.