CoderTools

Mã hóa/Giải mã TEA/XTEA/XXTEA

Họ Tiny Encryption Algorithm - Mã khối đối xứng nhẹ

Lưu ý Bảo mật

TEA/XTEA/XXTEA là các mã nhẹ được sử dụng chủ yếu trong hệ thống nhúng và game. Đối với các ứng dụng yêu cầu bảo mật cao, vui lòng sử dụng AES thay thế.

Tất cả các thuật toán họ TEA sử dụng khóa cố định 128-bit (16 byte).
Tùy chọn định dạng

Về họ TEA

TEA (Tiny Encryption Algorithm) được thiết kế bởi David Wheeler và Roger Needham tại Phòng Thí nghiệm Máy tính, Đại học Cambridge năm 1994. Đặc điểm nổi bật là tính đơn giản cực độ: toàn bộ vòng lặp mã hóa có thể viết trong dưới 10 dòng C, nhưng vẫn đạt bảo mật mật mã khối 64-bit qua 32 lần lặp double-round kiểu Feistel. Hằng số ma thuật δ = 0x9E3779B9 (gần bằng φ × 2³², với φ là tỷ lệ vàng) được cộng vào tổng tích lũy mỗi vòng để ngăn các điểm cố định của khóa yếu.

Họ TEA phát triển để khắc phục các điểm yếu được phát hiện: XTEA (1997) giải quyết các cuộc tấn công khóa liên quan trong TEA bằng cách thiết kế lại lịch trình khóa để hoán vị bốn từ khóa 32-bit theo cách khác nhau mỗi vòng. XXTEA (1998) mở rộng thiết kế sang các khối độ dài tùy ý bằng kỹ thuật trộn Feistel trên toàn bộ thông điệp. Cả ba biến thể chia sẻ kích thước khóa 128-bit và cấu trúc hằng số vòng dựa trên δ, nhưng khác nhau đáng kể về tính năng bảo mật và linh hoạt kích thước khối.

So sánh thuật toán

Thuật toán Kích thước khối Độ dài khóa Vòng Bảo mật
TEA 64 bits 128 bits 64
XTEA 64 bits 128 bits 64 Tốt
XXTEA Thay đổi (≥64 bit) 128 bits Thay đổi (6+52/n) Tốt

Đặc điểm chính

  • Vòng lặp lõi TEA: chỉ 7 dòng C — mật mã khối nhỏ gọn nhất phù hợp cho sản xuất
  • Khóa 128-bit chia thành bốn từ 32-bit; mỗi vòng sử dụng hoán vị khóa con khác nhau (XTEA/XXTEA)
  • 32 double-round (64 thao tác single-round), dùng δ = 0x9E3779B9 làm hằng số vòng
  • XXTEA hỗ trợ khối độ dài tùy ý — lợi thế chính để mã hóa dữ liệu kích thước bất kỳ không cần padding

Chế độ mã hóa (chỉ TEA/XTEA)

  • CBC: Chuỗi khối mật mã — mỗi khối TEA/XTEA 64-bit được XOR với khối mật mã trước trước 32 double-round. IV 64-bit liên kết các khối; dữ liệu giống nhau ở vị trí khác nhau tạo ra mật mã khác nhau.
  • ECB: Sổ mã điện tử — mỗi khối 64-bit được xử lý độc lập qua 32 double-round với cùng khóa. Hai khối văn bản gốc giống nhau luôn tạo ra mật mã giống nhau, tiết lộ cấu trúc dữ liệu. Không khuyến nghị ngoại trừ trường hợp một khối duy nhất.
  • CFB: Phản hồi mật mã — TEA/XTEA hoạt động như bộ tạo luồng khóa; văn bản mật trước được xử lý bởi TEA/XTEA rồi XOR với phân đoạn văn bản gốc tiếp theo. Chuyển đổi mật mã khối 64-bit thành mật mã luồng độ hạt byte, hữu ích cho luồng dữ liệu game độ dài tùy ý.
  • OFB: Phản hồi đầu ra — luồng khóa được tạo bằng cách lặp mã hóa TEA/XTEA trên IV, độc lập với văn bản gốc. Không lan truyền lỗi có nghĩa là một byte bị hỏng chỉ ảnh hưởng đúng một byte văn bản gốc khôi phục — phù hợp cho telemetry nhúng nơi lỗi bit cần được giới hạn.
  • RAW: Khối thô - Mã hóa trực tiếp khối đơn không có chế độ chuỗi. Không yêu cầu IV.

Cân nhắc bảo mật

  • TEA gốc: David Wagner (1997) chứng minh tấn công khóa liên quan; tránh dùng TEA khi kẻ tấn công có thể chọn khóa liên quan — dùng XTEA hoặc XXTEA cho mọi triển khai mới
  • XTEA khắc phục lỗ hổng khóa liên quan của TEA, nhưng kích thước khối 64-bit vẫn giới hạn bảo mật ở 2³² khối (~32 GB) mỗi khóa trước khi va chạm sinh nhật trở nên có khả năng xảy ra
  • Trộn toàn bộ thông điệp của XXTEA cần ít nhất 2 lần duyệt để đảm bảo tính đúng đắn; với các khối rất nhỏ (≤ 2 từ), số bước trộn giảm làm yếu bảo mật — đệm dữ liệu ngắn lên ít nhất 3 từ
  • Cả ba biến thể TEA đều không phù hợp cho ứng dụng mới mục đích chung; với hệ thống nhúng hiện đại, ưu tiên ChaCha20 hoặc AES-128-CTR — dành họ TEA cho tương thích định dạng kế thừa hoặc môi trường cực kỳ hạn chế tài nguyên

Các trường hợp sử dụng phổ biến

  • Bảo vệ file save game Xbox và Xbox 360: Xbox gốc của Microsoft sử dụng XTEA nội bộ để ký và xác minh dữ liệu save console, ngăn chặn giả mạo qua thẻ nhớ
  • Tin nhắn tức thời QQ: giao thức QQ đầu của Tencent dùng biến thể XTEA sửa đổi để mã hóa dữ liệu phiên giữa client và server (được ghi lại trong các dự án reverse engineering giao thức QQ mã nguồn mở)
  • Mã hóa tài sản game Cocos2d-x và Unity: TEA/XTEA được ưa dùng trong engine game để làm rối file tài nguyên (texture, âm thanh, script) nhờ code nhỏ gọn trong bản build mobile thu gọn
  • Triển khai trên vi điều khiển và FPGA nơi ROM tính bằng kilobyte: vòng lõi 7 dòng của TEA biên dịch thành dưới 100 byte mã máy ARM Thumb-2, khả thi trên MCU với flash rất hạn chế

Tham khảo

Menu Nhanh

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