CoderTools

Công cụ mã hóa/giải mã Blowfish

Mã hóa khối đối xứng nhanh được thiết kế bởi Bruce Schneier

⚠️ Lưu ý bảo mật

Kích thước khối 64 bit của Blowfish có thể dễ bị tấn công sinh nhật với khối lượng dữ liệu lớn. Để bảo mật tối đa, hãy xem xét sử dụng AES-256 cho các dự án mới.

Độ dài khóa Blowfish: 4-56 byte (32-448 bit). Khuyến nghị: 16 byte (128 bit) trở lên
Tùy chọn định dạng

Về mã hóa Blowfish

Blowfish là mật mã khối đối xứng 64 bit do Bruce Schneier thiết kế năm 1993, phát hành như một lựa chọn thay thế DES nhanh và không có bằng sáng chế. Cấu trúc Feistel 16 vòng sử dụng khóa có độ dài biến đổi từ 32 đến 448 bit. Lịch trình khóa tạo ra 18 mục P-array và bốn S-box 256 mục (~4 KB) bằng cách mã hóa các chữ số thập lục phân của π. Là mật mã mặc định của OpenVPN (chế độ BF-CBC) đến phiên bản 2.4.0 (2017), sau đó được thay thế bởi AES-256-GCM.

Thiết lập khóa Blowfish cố ý chậm (521 lần lặp bản thân), làm cho việc tìm kiếm khóa vũ lực tốn kém. bcrypt khai thác điều này với Eksblowfish cho băm mật khẩu với hệ số chi phí 4-31. Giới hạn chính là kích thước khối 64 bit: Sweet32 (CVE-2016-2183, 2016) cho thấy ~32 GB dưới cùng khóa CBC tạo ra va chạm khối có thể khai thác thống kê.

Tính năng chính

  • Khóa biến đổi: 32 đến 448 bit, cùng Feistel 16 vòng cho tất cả độ dài
  • Khóa con dẫn xuất từ π: khởi tạo minh bạch không có cửa hậu
  • Hiệu suất cao trên phần cứng 32 bit không có AES-NI
  • Nguồn gốc bcrypt: Eksblowfish (OpenBSD 1999) dẫn xuất từ việc tạo khóa con chậm của Blowfish

Các chế độ mã hóa

  • CBC: CBC Blowfish — khối 64 bit XOR với mật mã trước. Giới hạn Sweet32: sau ~32 GB dưới cùng khóa CBC, va chạm có thể khai thác. Phải xoay khóa trước giới hạn đó.
  • ECB: ECB Blowfish — mỗi khối 8 byte xử lý độc lập. Khối giống nhau → mật mã giống nhau. Chỉ cho thao tác một khối.
  • CFB: CFB Blowfish — luồng tự đồng bộ có lan truyền lỗi. Cùng ràng buộc Sweet32 32 GB mỗi khóa như CBC.
  • OFB: OFB Blowfish — luồng khóa xác định bằng cách mã hóa lại lặp lại. Không lan truyền lỗi nhưng giới hạn chu kỳ 2³² khối.

So sánh thuật toán

Thuật toán Độ dài khóa Kích thước khối Bảo mật Tốc độ
Blowfish 32-448 bit 64 bits Tốt Nhanh
AES 128/192/256 bits 128 bits Xuất sắc Nhanh
DES 56 bits 64 bits Yếu Nhanh
3DES 112/168 bits 64 bits Trung bình Chậm

Lưu ý về bảo mật

  • Sweet32 (CVE-2016-2183, 2016): sau ~32 GB CBC cùng khóa, va chạm khối có thể khai thác thống kê. Xoay khóa bắt buộc trước 2³² khối.
  • OpenVPN 2.4.0 (2017) thay BF-CBC bằng AES-256-GCM sau Sweet32. Kết nối BF-CBC hiện tạo cảnh báo không khuyến nghị.
  • Không có tấn công thuật toán nào trên 16 vòng đầy đủ của Blowfish. Hơn 30 năm phân tích công khai không có đột phá mật mã ngoài Sweet32.
  • Dùng AES-128-GCM hoặc AES-256-GCM cho ứng dụng mới. Blowfish cho giải mã dữ liệu BF-CBC cũ và giáo dục.

Trường hợp sử dụng

  • bcrypt: Eksblowfish sử dụng sự chậm của Blowfish cho băm mật khẩu với hệ số chi phí cấu hình được (4-31). Nền tảng để hiểu mô hình bảo mật bcrypt
  • Giải mã lưu trữ OpenVPN: lưu lượng BF-CBC trước 2017 cần Blowfish để giải mã và chuyển sang AES-256-GCM
  • Hệ thống nhúng tài nguyên thấp: footprint nhỏ, 32-bit tối ưu, không cần AES-NI. Khối lượng < 32 GB mỗi khóa
  • Giáo dục mật mã học: cấu trúc π, Feistel, S-box và lịch sử tấn công 30 năm để dạy đánh đổi thiết kế mật mã đối xứng

Tài liệu tham khảo

Menu Nhanh

Chưa có công cụ gần đây