Các phương pháp mật mã cổ điển phổ biến và cách triển khai

1. Mật mã Caesar (Caesar Cipher)

Mật mã Caesar là một trong những kỹ thuật mã hóa đơn giản nhất. Đây là loại mật mã thay thế, trong đó mỗi chữ cái trong bản rõ (plaintext) được thay thế bằng một chữ cái khác nằm cách nó một khoảng nhất định trong bảng chữ cái.

Nguyên lý hoạt động

Giả sử chúng ta dịch chuyển 3 vị trí (Key = 3):

Gốcabcdefg...
Mã hóadefghij...

Ví dụ: Với từ "hello" và khóa là 3, bản mã thu được là "khoor".

Triển khai bằng Python

def caesar_algorithm(data, key):
    output = ""
    for character in data:
        if character.isalpha():
            # Xác định điểm bắt đầu trong bảng mã ASCII
            offset = ord('A') if character.isupper() else ord('a')
            # Thực hiện dịch chuyển và xoay vòng trong 26 chữ cái
            converted = chr((ord(character) - offset + key) % 26 + offset)
            output += converted
        else:
            output += character
    return output

original_text = "Hello World"
shift_val = 5
encrypted = caesar_algorithm(original_text, shift_val)
print(f"Bản rõ: {original_text}")
print(f"Bản mã: {encrypted}")

Các biến thể của Caesar

  • ROT13: Trường hợp đặc biệt của Caesar với khóa là 13. Vì bảng chữ cái tiếng Anh có 26 ký tự, việc áp dụng ROT13 hai lần sẽ trả về văn bản gốc.
  • ROT5: Tương tự như Caesar nhưng chỉ áp dụng cho các chữ số (0-9) với độ dịch chuyển là 5.
  • ROT47: Sử dụng phạm vi ký tự ASCII lớn hơn (từ 33 đến 126), bao gồm cả chữ cái, số và ký tự đặc biệt.

2. Mật mã Đường ray (Rail Fence Cipher)

Mật mã đường ray thuộc loại mật mã hoán vị. Bản rõ được viết theo đường zigzag trên các "thanh ray" ảo, sau đó đọc lại theo từng hàng để tạo thành bản mã.

Ví dụ minh họa

Bản rõ: "CIPHERTEXT", số hàng (khóa) = 2

Cách viết:
C . P . E . T . X
. I . H . R . E . T
Bản mã thu được: "CPETXIHRET"

Triển khai Python đơn giản

def encrypt_rail_fence(text, num_rails):
    # Khởi tạo các hàng trống
    rows = ['' for _ in range(num_rails)]
    index = 0
    
    # Chia ký tự vào các hàng theo thứ tự tuần hoàn
    for char in text.replace(" ", ""):
        rows[index] += char
        index = (index + 1) % num_rails
        
    return "".join(rows)

message = "INFORMATIONSECURITY"
rails = 3
print(f"Kết quả mã hóa {rails} hàng: {encrypt_rail_fence(message, rails)}")

3. Mật mã Vigenère

Vigenère là một phương pháp mã hóa đa bảng chữ cái. Nó sử dụng một từ khóa để xác định các bước dịch chuyển khác nhau cho từng ký tự trong bản rõ.

Cách hoạt động

Sử dụng bảng Tabula Recta (bình phương Vigenère). Nếu bản rõ là "ATTACK" và từ khóa là "LEMON", ta sẽ thực hiện:

  • Chữ 'A' mã hóa với khóa 'L'
  • Chữ 'T' mã hóa với khóa 'E'
  • Chữ 'T' mã hóa với khóa 'M' ...

Triển khai Python

def vigenere_process(text, key, decrypt=False):
    final_text = []
    key = key.upper()
    key_idx = 0
    
    for char in text.upper():
        if char.isalpha():
            shift = ord(key[key_idx % len(key)]) - ord('A')
            if decrypt:
                shift = -shift
            
            new_char = chr((ord(char) - ord('A') + shift) % 26 + ord('A'))
            final_text.append(new_char)
            key_idx += 1
        else:
            final_text.append(char)
            
    return "".join(final_text)

token = "PYTHON"
raw = "PROGRAMMING"
cipher = vigenere_process(raw, token)
print(f"Vigenere Encrypted: {cipher}")

4. Mật mã Bacon (Baconian Cipher)

Mật mã Bacon không dựa trên sự thay đổi ký tự mà dựa trên việc thay thế mỗi chữ cái bằng một chuỗi gồm 5 ký tự 'A' hoặc 'B'. Đây là một dạng tiền thân của mã nhị phân.

Bảng quy đổi cơ bản

AaaaaaI/JabaaaRbaaaa
BaaaabKabaabSbaaab
CaaabaLababaTbaaba

Ứng dụng trong ẩn mã học (Steganography)

Mật mã Bacon thường được dùng để giấu tin nhắn trong một văn bản bình thường bằng cách thay đổi định dạng chữ (ví dụ: chữ thường là 'a', chữ hoa là 'b'; hoặc chữ in nghiêng là 'a', chữ đứng là 'b').

Ví dụ: "abCDE" có thể đại diện cho chuỗi "aabbb" nếu ta quy ước chữ thường là 'a' và chữ hoa là 'b'.

5. Máy Enigma

Enigma là một thiết bị mã hóa cơ-điện nổi tiếng được sử dụng bởi quân đội Đức trong Thế chiến II. Nó sử dụng một hệ thống các bánh răng (rotor) quay sau mỗi lần nhấn phím, khiến sơ đồ thay thế chữ cái thay đổi liên tục.

Đặc điểm quan trọng của Enigma là tính đối xứng: nếu máy được thiết lập cấu hình giống hệt nhau, việc nhập bản mã sẽ trả về bản rõ ban đầu. Tuy nhiên, một điểm yếu chí mạng của nó là một chữ cái không bao giờ được mã hóa thành chính nó.

Thẻ: cryptography caesar-cipher vigenere-cipher python cyber-security

Đăng vào ngày 5 tháng 9 lúc 15:15