Mật mã học hoặc khoa học mật mã là nghiên cứu về các kỹ thuật được sử dụng cho mã hóa và truyền thông an toàn. Các nhà mật mã học là những người nghiên cứu và phân tích mật mã học.
Các nhà mật mã học luôn xây dựng và phân tích các giao thức để ngăn chặn người dùng không được phép đọc các tin nhắn riêng tư cũng như các lĩnh vực sau của bảo mật thông tin:
- Bí mật dữ liệu
- Tính toàn vẹn dữ liệu
- Xác thực
- Không thể chối bỏ
Mật mã học là sự kết hợp của nhiều ngành, bao gồm toán học và khoa học máy tính. Các ví dụ về việc sử dụng mật mã học bao gồm mạng riêng ảo (VPN), thương mại điện tử, truyền email an toàn và chip thẻ tín dụng. Mỗi khi bạn kiểm tra Facebook, Instagram hoặc xem video YouTube trên trình duyệt web, bạn đang sử dụng các thuật toán và triển khai mật mã, vì các trang web này sử dụng Bảo mật Tầng Truyền tải (TLS). Bạn sẽ tìm hiểu về các thuật toán mật mã khác nhau sau trong chương này.
Bạn cũng có thể thường nghe thuật ngữ **phân tích mật mã**, tức là nghiên cứu cách phá vỡ các thuật toán mã hóa hoặc triển khai của chúng.
Mật mã (Ciphers)
Mật mã là một tập hợp các quy tắc, còn được gọi là thuật toán, về cách thực hiện mã hóa hoặc giải mã. Có hàng trăm thuật toán mã hóa hiện có, và có thể còn nhiều thuật toán độc quyền khác được sử dụng cho các mục đích đặc biệt, chẳng hạn như cho mục đích chính phủ và an ninh quốc gia.
Các phương pháp phổ biến mà mật mã sử dụng bao gồm:
- Thay thế (Substitution): Loại mật mã này thay thế một ký tự bằng một ký tự khác. Ví dụ, một mật mã thay thế đơn giản có thể thay đổi một chữ cái trong bảng chữ cái bằng một chữ cái khác. Để làm cho nó phức tạp hơn, chúng ta có thể thay thế nhiều hơn một ký tự và chỉ chọn một số chữ cái nhất định để thay thế. Phương pháp thay thế chính xác có thể được gọi là **“khóa” (key)**. Nếu cả hai bên tham gia vào kênh liên lạc mã hóa hiểu được khóa, họ đều có thể mã hóa và giải mã dữ liệu. Một ví dụ về thay thế được thể hiện trong Hình 2-1.
```
S E C R E T T E X T
A R X F R S U S R Y S
```
Hình 2-1: Ví dụ về Thay thế**
- Đa bảng chữ cái (Polyalphabetic): Tương tự như thay thế, nhưng thay vì sử dụng một bảng chữ cái duy nhất, nó có thể sử dụng nhiều bảng chữ cái và chuyển đổi giữa chúng bằng một ký tự kích hoạt trong tin nhắn được mã hóa.
- Chuyển vị (Transposition): Phương pháp này sử dụng nhiều tùy chọn khác nhau, bao gồm việc sắp xếp lại các chữ cái. Ví dụ, nếu chúng ta có tin nhắn “This is secret”, chúng ta có thể viết nó ra (từ trên xuống dưới, từ trái sang phải) như trong Hình 2-2.
```
T S S R
H I E E
I S C T
```
Hình 2-2: Ví dụ về Chuyển vị**
Sau đó, chúng ta mã hóa nó thành **RETCSIHTSSEI**, bắt đầu từ góc trên bên phải và di chuyển theo chiều kim đồng hồ, xoắn vào trong. Để ai đó biết cách mã hóa/giải mã đúng, cần có khóa chính xác.
Khóa (Keys)
Khóa trong Hình 2-2 đề cập đến hướng dẫn về cách sắp xếp lại các ký tự. Trong trường hợp này, nó bắt đầu từ góc trên bên phải, di chuyển theo chiều kim đồng hồ và xoắn vào trong.
Bản đệm một lần (One-time pad - OTP)** là một ví dụ tốt về khóa chỉ được sử dụng một lần. Sử dụng phương pháp này, nếu chúng ta muốn mã hóa một tin nhắn 32-bit, chúng ta sử dụng một khóa 32-bit, còn gọi là bản đệm, chỉ được sử dụng một lần. Mỗi bit từ bản đệm được tính toán toán học với bit tương ứng từ tin nhắn của chúng ta, và kết quả là văn bản mã hóa, hoặc nội dung được mã hóa. Khóa trong trường hợp này là bản đệm sử dụng một lần. Bản đệm cũng phải được người nhận biết nếu họ muốn giải mã tin nhắn. (Một cách sử dụng khác của từ viết tắt OTP là mật khẩu một lần của người dùng, là một chủ đề hoàn toàn khác.)
Mật mã khối và Mật mã dòng (Block and Stream Ciphers)
Các thuật toán mã hóa có thể hoạt động trên các khối dữ liệu cùng một lúc hoặc trên các bit và byte dữ liệu, tùy thuộc vào loại mật mã. Hãy so sánh hai phương pháp này.
Mật mã khối (Block Cipher): Là một mật mã khóa đối xứng (nghĩa là cùng một khóa được sử dụng để mã hóa và giải mã) hoạt động trên một nhóm bit được gọi là khối. Một thuật toán mã hóa mật mã khối có thể lấy một khối văn bản gốc 64-bit và tạo ra một khối văn bản mã hóa 64-bit. Với loại mã hóa này, khóa để mã hóa cũng được sử dụng để giải mã. Các ví dụ về thuật toán mật mã khối đối xứng bao gồm:
- Tiêu chuẩn Mã hóa Nâng cao (AES)
- Tiêu chuẩn Mã hóa Kỹ thuật số Gấp ba (3DES)
- Blowfish
- Tiêu chuẩn Mã hóa Dữ liệu (DES)
- Thuật toán Mã hóa Dữ liệu Quốc tế (IDEA)
- Serpent
- Twofish
Các mật mã khối có thể thêm phần đệm trong trường hợp không đủ dữ liệu để mã hóa thành kích thước khối đầy đủ. Điều này có thể dẫn đến một lượng nhỏ chi phí lãng phí, vì phần đệm nhỏ sẽ được xử lý bởi mật mã cùng với dữ liệu thực.
Mật mã dòng (Stream Cipher): Là một mật mã khóa đối xứng (nghĩa là cùng một khóa được sử dụng để mã hóa và giải mã), trong đó dữ liệu văn bản gốc được mã hóa từng bit một với các bit của dòng khóa, còn được gọi là dòng chữ số mật mã. Kết quả đầu ra là một dòng văn bản mã hóa. Vì một dòng văn bản mã hóa của thuật toán nhất định không cần phải phù hợp với kích thước khối cố định, có thể có ít chi phí hơn một chút so với mật mã khối yêu cầu đệm để hoàn thành kích thước khối.
Các nhà mật mã học luôn xây dựng và phân tích các giao thức để ngăn chặn người dùng không được phép đọc các tin nhắn riêng tư cũng như các lĩnh vực sau của bảo mật thông tin:
- Bí mật dữ liệu
- Tính toàn vẹn dữ liệu
- Xác thực
- Không thể chối bỏ
Mật mã học là sự kết hợp của nhiều ngành, bao gồm toán học và khoa học máy tính. Các ví dụ về việc sử dụng mật mã học bao gồm mạng riêng ảo (VPN), thương mại điện tử, truyền email an toàn và chip thẻ tín dụng. Mỗi khi bạn kiểm tra Facebook, Instagram hoặc xem video YouTube trên trình duyệt web, bạn đang sử dụng các thuật toán và triển khai mật mã, vì các trang web này sử dụng Bảo mật Tầng Truyền tải (TLS). Bạn sẽ tìm hiểu về các thuật toán mật mã khác nhau sau trong chương này.
Bạn cũng có thể thường nghe thuật ngữ **phân tích mật mã**, tức là nghiên cứu cách phá vỡ các thuật toán mã hóa hoặc triển khai của chúng.
Mật mã (Ciphers)
Mật mã là một tập hợp các quy tắc, còn được gọi là thuật toán, về cách thực hiện mã hóa hoặc giải mã. Có hàng trăm thuật toán mã hóa hiện có, và có thể còn nhiều thuật toán độc quyền khác được sử dụng cho các mục đích đặc biệt, chẳng hạn như cho mục đích chính phủ và an ninh quốc gia.
Các phương pháp phổ biến mà mật mã sử dụng bao gồm:
- Thay thế (Substitution): Loại mật mã này thay thế một ký tự bằng một ký tự khác. Ví dụ, một mật mã thay thế đơn giản có thể thay đổi một chữ cái trong bảng chữ cái bằng một chữ cái khác. Để làm cho nó phức tạp hơn, chúng ta có thể thay thế nhiều hơn một ký tự và chỉ chọn một số chữ cái nhất định để thay thế. Phương pháp thay thế chính xác có thể được gọi là **“khóa” (key)**. Nếu cả hai bên tham gia vào kênh liên lạc mã hóa hiểu được khóa, họ đều có thể mã hóa và giải mã dữ liệu. Một ví dụ về thay thế được thể hiện trong Hình 2-1.
```
S E C R E T T E X T
A R X F R S U S R Y S
```
Hình 2-1: Ví dụ về Thay thế**
- Đa bảng chữ cái (Polyalphabetic): Tương tự như thay thế, nhưng thay vì sử dụng một bảng chữ cái duy nhất, nó có thể sử dụng nhiều bảng chữ cái và chuyển đổi giữa chúng bằng một ký tự kích hoạt trong tin nhắn được mã hóa.
- Chuyển vị (Transposition): Phương pháp này sử dụng nhiều tùy chọn khác nhau, bao gồm việc sắp xếp lại các chữ cái. Ví dụ, nếu chúng ta có tin nhắn “This is secret”, chúng ta có thể viết nó ra (từ trên xuống dưới, từ trái sang phải) như trong Hình 2-2.
```
T S S R
H I E E
I S C T
```
Hình 2-2: Ví dụ về Chuyển vị**
Sau đó, chúng ta mã hóa nó thành **RETCSIHTSSEI**, bắt đầu từ góc trên bên phải và di chuyển theo chiều kim đồng hồ, xoắn vào trong. Để ai đó biết cách mã hóa/giải mã đúng, cần có khóa chính xác.
Khóa (Keys)
Khóa trong Hình 2-2 đề cập đến hướng dẫn về cách sắp xếp lại các ký tự. Trong trường hợp này, nó bắt đầu từ góc trên bên phải, di chuyển theo chiều kim đồng hồ và xoắn vào trong.
Bản đệm một lần (One-time pad - OTP)** là một ví dụ tốt về khóa chỉ được sử dụng một lần. Sử dụng phương pháp này, nếu chúng ta muốn mã hóa một tin nhắn 32-bit, chúng ta sử dụng một khóa 32-bit, còn gọi là bản đệm, chỉ được sử dụng một lần. Mỗi bit từ bản đệm được tính toán toán học với bit tương ứng từ tin nhắn của chúng ta, và kết quả là văn bản mã hóa, hoặc nội dung được mã hóa. Khóa trong trường hợp này là bản đệm sử dụng một lần. Bản đệm cũng phải được người nhận biết nếu họ muốn giải mã tin nhắn. (Một cách sử dụng khác của từ viết tắt OTP là mật khẩu một lần của người dùng, là một chủ đề hoàn toàn khác.)
Mật mã khối và Mật mã dòng (Block and Stream Ciphers)
Các thuật toán mã hóa có thể hoạt động trên các khối dữ liệu cùng một lúc hoặc trên các bit và byte dữ liệu, tùy thuộc vào loại mật mã. Hãy so sánh hai phương pháp này.
Mật mã khối (Block Cipher): Là một mật mã khóa đối xứng (nghĩa là cùng một khóa được sử dụng để mã hóa và giải mã) hoạt động trên một nhóm bit được gọi là khối. Một thuật toán mã hóa mật mã khối có thể lấy một khối văn bản gốc 64-bit và tạo ra một khối văn bản mã hóa 64-bit. Với loại mã hóa này, khóa để mã hóa cũng được sử dụng để giải mã. Các ví dụ về thuật toán mật mã khối đối xứng bao gồm:
- Tiêu chuẩn Mã hóa Nâng cao (AES)
- Tiêu chuẩn Mã hóa Kỹ thuật số Gấp ba (3DES)
- Blowfish
- Tiêu chuẩn Mã hóa Dữ liệu (DES)
- Thuật toán Mã hóa Dữ liệu Quốc tế (IDEA)
- Serpent
- Twofish
Các mật mã khối có thể thêm phần đệm trong trường hợp không đủ dữ liệu để mã hóa thành kích thước khối đầy đủ. Điều này có thể dẫn đến một lượng nhỏ chi phí lãng phí, vì phần đệm nhỏ sẽ được xử lý bởi mật mã cùng với dữ liệu thực.
Mật mã dòng (Stream Cipher): Là một mật mã khóa đối xứng (nghĩa là cùng một khóa được sử dụng để mã hóa và giải mã), trong đó dữ liệu văn bản gốc được mã hóa từng bit một với các bit của dòng khóa, còn được gọi là dòng chữ số mật mã. Kết quả đầu ra là một dòng văn bản mã hóa. Vì một dòng văn bản mã hóa của thuật toán nhất định không cần phải phù hợp với kích thước khối cố định, có thể có ít chi phí hơn một chút so với mật mã khối yêu cầu đệm để hoàn thành kích thước khối.