Trong mật mã học, S-box (substitution-box) là thành phần cơ bản của thuật toán mã khóa đối xứng, được dùng để thực hiện các phép thay thế phi tuyến. Trong mã khối, chúng thường được sử dụng để che giấu mối quan hệ giữa khóa mật mã và bản mã — tính hỗn loạn do Shannon đề xuất.
Nhìn chung, S-box lấy m bit đầu vào và biến đổi chúng thành n bit đầu ra, trong đó n không nhất thiết phải bằng m.[1] Một S-box kích thước m × n có thể được biểu diễn như một bảng tra với 2 m chuỗi n bit. Chúng ta thường sử dụng các bảng chuẩn đã được công bố, như trong Data Encryption Standard (DES), nhưng trong một số mã, các bảng được tạo động từ khóa (ví dụ: thuật toán mã hóa Blowfish và Twofish).
Một ví dụ điển hình cho bảng chuẩn là S-box trong DES (S 5), 6 bit đầu vào được ánh xạ thành 4 bit đầu ra:
S 5 | 4 bit bên trong | ||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0000 | 0001 | 0010 | 0011 | 0100 | 0101 | 0110 | 0111 | 1000 | 1001 | 1010 | 1011 | 1100 | 1101 | 1110 | 1111 | ||
2 bit ngoài | 00 | 0010 | 1100 | 0100 | 0001 | 0111 | 1010 | 1011 | 0110 | 1000 | 0101 | 0011 | 1111 | 1101 | 0000 | 1110 | 1001 |
01 | 1110 | 1011 | 0010 | 1100 | 0100 | 0111 | 1101 | 0001 | 0101 | 0000 | 1111 | 1010 | 0011 | 1001 | 1000 | 0110 | |
10 | 0100 | 0010 | 0001 | 1011 | 1010 | 1101 | 0111 | 1000 | 1111 | 1001 | 1100 | 0101 | 0110 | 0011 | 0000 | 1110 | |
11 | 1011 | 1000 | 1100 | 0111 | 0001 | 1110 | 0010 | 1101 | 0110 | 1111 | 0000 | 1001 | 1010 | 0100 | 0101 | 0011 |
Đưa vào 6 bit, 4 bit đầu ra sẽ thu được bằng cách chọn chỉ số hàng bằng hai bit ngoài (bit đầu tiên và bit cuối cùng) và chỉ số cột sử dụng bốn bit bên trong. Ví dụ: đầu vào " 0 1101 1 " có các bit ngoài " 01 " và các bit bên trong "1101"; đầu ra tương ứng sẽ là "1001".[2]
S-box thứ 8 của DES là chủ đề của các nghiên cứu trong nhiều năm vì lo ngại rằng một backdoor — một lỗ hổng mà chỉ những người tạo ra nó biết — có thể đã được đính trong mật mã. Tiêu chí thiết kế S-box cuối cùng đã được công bố (trong Coppersmith 1994 ) sau khi tái khám phá công khai về thám mã vi phân, cho thấy rằng chúng đã được điều chỉnh cẩn thận để tăng sức đề kháng chống lại cuộc tấn công cụ thể này. Biham và Shamir nhận thấy rằng ngay cả những sửa đổi nhỏ đối với hộp chữ S cũng có thể làm suy yếu đáng kể DES.
Đã có rất nhiều nghiên cứu về thiết kế S-box tốt, và người ta hiểu nhiều hơn về việc sử dụng chúng trong mật mã khối so với khi DES được phát hành. Bất kỳ S-box nào trong đó bất kỳ tổ hợp tuyến tính nào của các bit đầu ra được tạo ra bởi chức năng uốn cong của các bit đầu vào được gọi là một S-box hoàn hảo.[3]