Blowfish là thuật toán mật mã khối đối xứng và nó mã hóa thông tin khối 64-bit tại một thời điểm. Nó tuân theo mạng Feistel và quy trình làm việc của thuật toán này được chia thành hai phần.
-
Tạo khóa con - Quá trình này biến đổi khóa dài tối đa 448 bit thành các khóa con thêm 4168 bit.
-
Mã hóa dữ liệu - Trong quá trình mã hóa dữ liệu, nó sẽ lặp lại 16 lần mạng. Mỗi vòng bao gồm hoán vị phụ thuộc khóa và thay thế phụ thuộc vào khóa và dữ liệu. Các phép toán trong thuật toán là XOR hoặc phép cộng trên các từ 32 bit. Các hoạt động bổ sung duy nhất là bốn lần tra cứu thông tin mảng được lập chỉ mục mỗi vòng.
Chúng ta hãy thảo luận về hai phần này như sau -
-
Tạo khóa phụ - Thuật toán mật mã Blowfish sử dụng số lượng khóa phụ khổng lồ. Các khóa này đang tạo trước đó cho bất kỳ mã hóa dữ liệu hoặc giải mã nào.
Mảng p bao gồm các khóa phụ 18, 32 bit -
P1, P2, …………., Tr18.
Có bốn S-Box 32-bit bao gồm 256 mục nhập mỗi hộp -
S1,0, S1,1, ………. S1,255
S2,0, S2,1, ……… .. S2,255
S3,0, S3,1, ……… .. S3,255
S4,0, S4,1, ……… ... S4,255
Các bước tạo khóa phụ
-
Khởi tạo đầu tiên, mảng P và do đó là bốn hộp S, theo thứ tự, với một chuỗi cố định và chuỗi này cũng bao gồm các chữ số thập lục phân của π.
P1 =0x243f6a88, P2 =0x85a308d3, P3 =0x13198a2e, P4 =0x3707344, v.v.
-
XOR P1 với 32 bit đầu tiên của khóa, XOR P2 với thứ hai là 32 bit của khóa, v.v. cho tất cả các bit của khóa (có thể hình dung lên đến P14). Lặp lại chu trình quy trình qua các bit khóa cho đến khi mảng P hoàn chỉnh đã được XOR với các keybit. (Đối với mỗi khóa ngắn, có một phần là một khóa dài hơn tương đương. Ví dụ:nếu A là khóa 64 bit, thì AA, AAA, v.v., là các khóa giống nhau.)
-
Nó có thể mã hóa chuỗi bằng 0 bằng thuật toán Blowfish, sử dụng các khóa con được xác định ở bước 1 và bước 2.
-
Nó có thể khôi phục P1 và P2 với đầu ra 64 bit của bước (3).
-
Nó có thể mã hóa đầu ra của bước (3) bằng cách sử dụng thuật toán với các khóa con đã thay đổi.
-
Nó có thể khôi phục P3 và P4 với đầu ra của bước (5).
-
Nó có thể được sử dụng để tiếp tục thủ tục, khôi phục tất cả các mục của mảng P và cả bốn hộp S theo thứ tự, với kết quả của thuật toán thay đổi liên tục.
-
-
Tổng cộng 521 lần lặp là cần thiết để tạo tất cả các khóa con được yêu cầu. Ứng dụng có thể lưu các khóa con thay vì thực hiện quá trình dẫn xuất này, nhiều lần.
-
Mã hóa dữ liệu - Blowfish là một mạng Feistel bao gồm 16 vòng.
Đầu vào là phần tử dữ liệu 64 bit, x.
Chia x thành hai nửa 32 bit:x L , x R .
Sau đó, cho i =1 đến 16;
x L =x L XOR P i
x R =F (x L ) XOR x R
Hoán đổi x L và x R
Sau thứ 16 vòng, Hoán đổi x L và x R một lần nữa để hoàn tác lần hoán đổi cuối cùng.
Sau đó, ciphertext =nối x L và x R , x R =x R XOR P17 và x L =x L XOR P 18 .
Cuối cùng, kết hợp lại x L và x R để lấy bản mã. Giải mã tương tự như mã hóa, khác với P1, P2, …… P18 được sử dụng theo thứ tự ngược lại.