Vì vậy, có ổn không nếu tôi sử dụng SHA256 để tạo khóa 256 bit thay vì chia chuỗi hex của khóa thành 2 phần bằng nhau và sử dụng phần đầu tiên làm IV trong mã hóa AES 256 bit?
Không, có nhiều cách tốt hơn.
Trước hết, khi bạn tạo khóa, bạn cần một trình tạo số ngẫu nhiên được bảo mật bằng mật mã. nếu bạn lấy được khóa từ bí mật chính - đôi khi được gọi là hạt giống - bạn cần có hàm dẫn xuất khóa hoặc KDF. Trong trường hợp sau, bạn có thể ví dụ: sử dụng HKDF với hàm băm tốt, chẳng hạn như SHA-256. Về nguyên tắc, bạn có thể tạo, ví dụ: Đầu ra 384 bit bằng HKDF - ngay cả khi sử dụng SHA-256, nhưng tôi không nghĩ đó là một ý kiến hay, vì phần sau của câu trả lời.
Thứ hai, sử dụng lại tổ hợp phím / IV không phải là một ý kiến hay; tùy thuộc vào chế độ và tin nhắn, bạn có thể chỉ rò rỉ một số dữ liệu hoặc toàn bộ tin nhắn.
Nói chung, bạn chỉ có thể sử dụng IV hoàn toàn bằng 0 nếu khóa được tạo ngẫu nhiên cho mỗi tin nhắn. Điều đó sẽ tốt hơn là sử dụng lại một phần của chìa khóa. Như đã chỉ ra, IV thường không được coi là bí mật, vì vậy nếu bạn sử dụng dữ liệu chính vì việc triển khai IV rất có thể làm rò rỉ nó.'
Nếu bạn cần mã hóa nhiều tin nhắn bằng cùng một khóa thì bạn có thể sử dụng một tổng hợp IV hoặc SIV. Bằng cách đó, bạn sẽ chỉ bị rò rỉ dữ liệu nếu các tin nhắn hoàn toàn giống nhau, với chi phí là một số hiệu suất, vì các chế độ SIV là nhiều lượt (các tin nhắn cần được xử lý hai lần).
Nói chung, mặc dù vậy, bạn chỉ nên sử dụng IV ngẫu nhiên và gửi nó cùng với bản mã. Không rõ ràng từ câu hỏi nếu điều đó đã được xem xét; nó sẽ là cách phổ biến nhất để xử lý thế hệ IV.
Cuối cùng, các phím không phải là chữ và số; chúng bao gồm các bit. Mỗi khi một khóa được dịch thành văn bản, bạn đang mở một vấn đề bảo mật. Vì vậy, đừng làm điều đó: giữ khóa nhị phân.Tôi muốn sử dụng AES-128 với một khóa hoàn toàn ngẫu nhiên và sử dụng 128 bit khác cho IV hơn là hoàn nguyên về sử dụng hệ thập lục phân.
Hệ thập lục phân chỉ hữu ích cho tiêu dùng của con người, ví dụ: trong quá trình thử nghiệm hoặc gỡ lỗi khi nói đến khóa bí mật.