MÔ TẢ THUẬT TOÁN
1. Trao đổi khóa bằng Diffie-Hellman
Diffie-Hellman là một phương pháp trao đổi khóa công khai cho phép hai bên tạo ra một khóa bí mật chung qua kênh không an toàn.
Quy trình:
- Cả hai bên thống nhất một số nguyên tố p (prime number) p và cơ số g (base).
- Mỗi bên chọn một số bí mật riêng (a hoặc b).
- Tính giá trị công khai A = g^a mod p và B = g^b mod p.
- Trao đổi A và B.
- Tính khóa chung: bên thứ nhất tính K = B^a mod p, bên thứ hai tính K = A^b mod p. Kết quả sẽ giống nhau.
Khóa chung K này sẽ được sử dụng làm cơ sở để sinh khóa mã hóa đối xứng.
2. Xác minh khóa bằng chữ ký số RSA
RSA là thuật toán mã hóa bất đối xứng có thể dùng để tạo chữ ký số, đảm bảo tính xác thực và toàn vẹn của khóa trao đổi.
Quy trình:
- Bên gửi tạo chữ ký số bằng cách băm khóa chung (Diffie-Hellman) rồi mã hóa băm này bằng khóa riêng RSA.
- Bên nhận sử dụng khóa công khai RSA của bên gửi để giải mã chữ ký.
- So sánh kết quả băm này với băm của khóa chung đã nhận được.
- Nếu trùng nhau, khóa chung được xác thực, đảm bảo không bị giả mạo.
3. Băm khóa bằng MD5
Sau khi xác thực khóa chung, khóa này được băm bằng thuật toán MD5 để tạo ra khóa 128 bit dùng làm khóa đối xứng.
MD5 là hàm băm mật mã tạo ra giá trị băm 128 bit từ dữ liệu đầu vào bất kỳ, giúp khóa có định dạng phù hợp và đảm bảo đồng nhất.
4. Quy trình mã hóa và giải mã trong AES và Twofish
4.1 Thuật toán AES (Advanced Encryption Standard)
AES là thuật toán mã hóa khối phổ biến với kích thước khối 128 bit và khóa có độ dài 128, 192 hoặc 256 bit. Quy trình mã hóa bao gồm nhiều vòng xử lý gồm SubBytes, ShiftRows, MixColumns và AddRoundKey để đảm bảo tính bảo mật cao.
Mỗi vòng xử lý giúp làm nhiễu dữ liệu đầu vào và khuếch tán các bit, đảm bảo sự thay đổi lớn với thay đổi nhỏ của dữ liệu đầu vào.

Quy trình mã hóa giải mã
4.2 Thuật toán Twofish
4.2.1 Quy trình Mã hóa trong Twofish
Twofish là thuật toán mã hóa khối với kích thước khối 128 bit và khóa dài 128, 192 hoặc 256 bit. Thuật toán sử dụng cấu trúc Feistel gồm 16 vòng mã hóa.

Cấu trúc mã hóa
Thông tin cần mã hóa: Khối dữ liệu 128 bit chia thành 4 phần A, B, C, D (mỗi phần 32 bit), khóa chính cũng chia thành K0, K1, K2, K3.
Dữ liệu đầu vào được XOR với khóa con trước khi mã hóa. Quá trình mã hóa diễn ra qua 16 vòng với khóa con riêng biệt mỗi vòng.

Bảng mã ASCII
4.2.2 Quá trình mã hóa chính (16 vòng)
Mỗi vòng bao gồm các bước chính:
a) Hàm F:
Nửa trái (L) được chia thành 4 từ con, kết hợp với khóa con riêng, qua S-Box tùy biến, ma trận MDS và biến đổi Hadamard tạo ra kết quả đầu ra.
b) S-Box:
S-Box là hộp thay thế phi tuyến 8x8 bit được tạo tùy biến từ khóa chính, tăng khả năng bảo mật.

Cấu trúc của S-box
Ma trận MDS 4x4 trên trường GF(2^8) đảm bảo phân tán bit mạnh mẽ, và phép biến đổi PHT giúp trộn bit hiệu quả.
c) XOR với nửa phải:
Kết quả hàm F được XOR với nửa phải (R), sau đó hoán đổi nửa trái và nửa phải để chuẩn bị cho vòng tiếp theo.
d) Hoán đổi nửa trái và nửa phải:
Giúp đảm bảo cả hai phần của khối dữ liệu đều được xử lý.
e) Làm trắng đầu ra (Output Whitening):
Bước cuối cùng trước khi xuất ra khối mã hóa 128 bit.
4.2.3 Quy trình giải mã
Giống quy trình mã hóa nhưng áp dụng subkey theo thứ tự đảo ngược và một số điều chỉnh nhỏ để phục hồi dữ liệu gốc.

So sánh quy trình mã hóa và giải mã