Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Lập Trình

Khóa con trong thuật toán Blowfish được tạo như thế nào?


Blowfish là thuật toán mật mã khối đối xứng do Bruce Schneier phát minh 12/1993. Blowfish là thay thế DES hoặc IDEA. Một trong những mật mã mạng Feistel phổ biến nhất là Blowfish. Blowfish có kích thước khối 64-bit và độ dài khóa biến đổi 42-448 bit. Thuật toán gồm phần mở rộng khóa và phần mã hóa dữ liệu.

Blowfish biến khóa tối đa 448 bit thành các mảng khóa con tổng 1042 giá trị 32-bit (4168 byte). Là hệ Feistel 16 vòng, hỗ trợ S-boxes phụ thuộc khóa rất lớn và cho phép 16 lần lặp.

Mỗi vòng thích ứng với thay thế phụ thuộc khóa và dữ liệu, và hoán vị phụ thuộc khóa. Từ 32-bit và XOR được thực hiện bằng cộng. Có mảng P và bốn S-box 32-bit.

Mảng P chứa 18 khóa con 32-bit, mỗi S-box chứa 256 mục. Đầu vào là yếu tố dữ liệu 64-bit. Quy trình tạo khóa con:

  • Blowfish dùng số lượng rất lớn khóa con. Các khóa này phải chuẩn bị trước mã hóa/giải mã. Kích thước khóa từ 32-448 bit. Nói cách khác, kích thước khóa từ 1-14 từ, mỗi từ 32-bit. Khóa lưu trong mảng: K1, K2,...Kn (1 ≤ n ≤ 14).

  • Khái niệm mảng P chứa 18 khóa con 32-bit: P1, P2,..., P18. Tạo mảng P mô tả sau.

  • Có 4 S-box 32-bit, mỗi 256 mục: S1,0...S1,255; S2,0...S2,255; S3,0...S3,255; S4,0...S4,255. Tạo mảng P định nghĩa sau.

  • Khởi tạo mảng P trước, sau đó 4 S-box, với chuỗi cố định.

  • Mảng P và 4 S-box biểu thị bằng chữ số hex của Pi.

  • Thực hiện XOR bitwise mảng P với mảng K tái sử dụng từ mảng K cần với bit khóa (P1 XOR 32-bit khóa, P2 XOR 32-bit khóa).

  • Mã hóa khối 64-bit toàn số 0 dùng quy trình mã hóa sau với P và S thông thường.

  • Thay P1, P2 bằng đầu ra mã hóa, đầu ra mới gọi là P1, P2.

  • Mã hóa đầu ra bước 3 dùng P-box và S-box hiện tại, thay P3, P4 bằng bản mã kết quả, đầu ra mới gọi P3, P4.

  • Lặp lại các bước cho đến khi có tất cả phần tử mảng P (P1, P2...).