Mã hóa / giải mã AES

Dán văn bản và cụm mật khẩu để mã hóa hoặc giải mã nhanh bằng cipher PHP OpenSSL đã chọn. AES là block cipher đối xứng được NIST chuẩn hóa trong FIPS 197 và được dùng trong nhiều hệ thống TLS, WPA2, VPN và mã hóa ổ đĩa, nhưng trang này là tiện ích cho văn bản rủi ro thấp, không phải kho bí mật đã được kiểm toán. Với file nhạy cảm hoặc bí mật cần lưu lâu, hãy dùng công cụ offline như age, GnuPG hoặc 7-Zip.

Cách mã hóa văn bản bằng AES

  1. 1

    Chọn cipher OpenSSL

    Các tùy chọn hiện có gồm biến thể CBC, CTR và GCM. CBC và CTR không được xác thực, còn công cụ này không lưu hoặc kiểm tra tag xác thực GCM.

  2. 2

    Nhập cụm mật khẩu

    Cụm mật khẩu được băm một lần bằng SHA-256 để tạo khóa AES. Không có PBKDF2, salt, Argon2 hay work factor, nên hãy dùng cụm mật khẩu dài và ngẫu nhiên.

  3. 3

    Dán văn bản rủi ro thấp

    Đây là tiện ích Livewire/PHP OpenSSL chạy phía máy chủ. Đừng dán mật khẩu, khóa production, tài liệu riêng tư hoặc bí mật mà bạn không muốn gửi cho trang này.

  4. 4

    Sao chép kết quả Base64

    Khi mã hóa, công cụ tạo IV ngẫu nhiên, đặt trước bản mã thô rồi mã hóa các byte kết hợp thành Base64. Giải mã cần cùng cipher và cùng cụm mật khẩu.

Công cụ này thật sự xuất ra gì

Triển khai này dùng PHP OpenSSL. Khi mã hóa, nó băm cụm mật khẩu bằng SHA-256, tạo IV ngẫu nhiên có độ dài mà cipher đã chọn yêu cầu, mã hóa văn bản rồi trả về:

Base64(IV || bản mã)

Đầu ra không gồm salt, tham số PBKDF2, HMAC hay tag xác thực GCM. Nó không tương thích với định dạng do Web Crypto, age, GnuPG, các công thức dòng lệnh OpenSSL hoặc 7-Zip tạo ra.

Các tùy chọn AES trong ngữ cảnh

AES có kích thước block cố định 128 bit (16 byte) và các kích thước khóa chuẩn 128, 192, 256 bit. Điểm khác biệt bảo mật quan trọng ở đây không chỉ là kích thước khóa, mà còn là thông điệp mã hóa có được xác thực hay không.

Tùy chọn cipher Điều cần biết trong công cụ này
AES-128-CBC / AES-192-CBC / AES-256-CBC Chế độ block phổ biến với IV ngẫu nhiên và padding PKCS#7. Cần MAC riêng như HMAC-SHA-256 để phát hiện chỉnh sửa.
AES-256-CTR Biến AES thành chế độ giống stream. Cũng cần xác thực riêng và không bao giờ được dùng lại cùng IV/counter với cùng khóa.
AES-128-GCM / AES-256-GCM GCM thường là chế độ AEAD, nhưng chỉ khi tag xác thực được lưu và kiểm tra. Đầu ra của công cụ này không chứa tag đó, nên đừng dựa vào nó cho mã hóa có xác thực.

Nhắc nhở bảo mật

Hướng dẫn lưu trữ mật mã của OWASP khuyến nghị mã hóa có xác thực khi có thể, hoặc mã hóa kèm MAC riêng. Hãy ghi nhớ điều đó khi dùng tiện ích này:

  • Đây là mã hóa đối xứng - cùng cụm mật khẩu dùng để giải mã. Hãy chia sẻ nó qua kênh khác với bản mã.
  • Cụm mật khẩu yếu sẽ thành khóa yếu ở đây - SHA-256 nhanh và không có salt, nên kẻ tấn công có thể thử đoán rất nhanh nếu có đầu ra.
  • CBC và CTR cần xác thực - nếu không có HMAC hoặc MAC khác, kẻ tấn công có thể chỉnh bản mã mà không bị phát hiện.
  • Không dùng lại IV hoặc nonce với cùng khóa - công cụ tạo IV ngẫu nhiên mới khi mã hóa, nhưng dữ liệu bên ngoài được dán vào cũng phải tuân theo quy tắc này.
  • Dùng công cụ đã được kiểm toán cho bí mật thật sự - age, GnuPG và 7-Zip xử lý định dạng file, metadata và xác thực cẩn thận hơn.

Câu hỏi thường gặp

Component hiện tại băm cụm mật khẩu bằng SHA-256 và dùng các byte kết quả làm vật liệu khóa cho OpenSSL. Nó không dùng PBKDF2, salt, scrypt hay Argon2, nên cụm mật khẩu ngắn hoặc dùng lại sẽ rủi ro.

Không. CBC và CTR cần MAC riêng như HMAC-SHA-256. Dù GCM thường cung cấp xác thực AEAD, công cụ này không lưu hoặc kiểm tra tag GCM trong đầu ra Base64.

Trên máy chủ của trang khi action Livewire chạy PHP OpenSSL. Đây không phải công cụ Web Crypto chỉ chạy trong trình duyệt, nên đừng dán bí mật giá trị cao, khóa riêng hoặc tài liệu nhạy cảm.

Kết quả Base64 chứa IV ngẫu nhiên theo sau là bản mã thô. Padding CBC có thể thêm byte, và Base64 làm dữ liệu nhị phân lớn hơn khoảng một phần ba. Định dạng được lưu không có salt hoặc tag xác thực.

Công cụ này chỉ xử lý văn bản và nên giới hạn cho các đoạn rủi ro thấp. Với file hoặc bí mật quan trọng, hãy dùng tiện ích mã hóa offline đã được kiểm toán như age, GnuPG hoặc 7-Zip.

Công cụ liên quan