Đối tượng chính cần được chức năng này chấp nhận là gì?
Một mảng byte.
làm thế nào bạn có được điều đó từ mật khẩu có độ dài ngẫu nhiên của người dùng?
Phương pháp thông thường là sử dụng Hàm dẫn xuất khóa dựa trên mật khẩu (PBKDF) như PBKDF2, Bcrypt, Argon2, BalloonHash, v.v. Hãy nhớ rằng chúng không thể tăng độ mạnh của đầu vào. Do đó, người dùng phải chọn một mật khẩu tốt có đủ độ mạnh như mật khẩu được tạo bằng phương pháp dicewire.
Trong một số ứng dụng như mã hóa đĩa, một khóa ngẫu nhiên thống nhất được tạo để mã hóa đĩa và khóa này được mã hóa từ khóa lấy từ mật khẩu của người dùng. Tuy nhiên, bảo mật phụ thuộc vào chất lượng của mật khẩu.
Ngoài ra, tài liệu chính có thể là nguồn trao đổi khóa như DHKE, trong trường hợp này, Hàm dẫn xuất khóa như HKDF phải được áp dụng cho tài liệu chính để lấy khóa AES (byte).
PKCS7 đã được chạy để khóa được đệm chưa?
Không thể nào, điều đó không an toàn. Nếu bạn đang thiết kế thư viện, hãy từ chối đầu vào của người dùng (lập trình viên) nếu đầu vào đó ngắn hơn kích thước khóa mục tiêu.
điều này cho thấy rằng khóa đã nhập thực tế của người dùng là một phần của lịch trình khóa hay tất cả các khóa trong lịch trình đều được lấy từ khóa đầu vào thô thực tế của người dùng?
Mật khẩu của người dùng phải được xử lý bằng PBKDF để lấy khóa. Lịch trình khóa cần một mảng khóa có kích thước tùy thuộc vào AES ưu tiên (128,192,256). Các lịch trình chính không phân biệt chất lượng của vật liệu chính và nó không phải là một phần của thiết kế của nó. Người sử dụng và thư viện chịu trách nhiệm về chất lượng của tài liệu chính. Các thư viện mã hóa lẽ ra phải xử lý mật khẩu bằng PBKDF tốt và nhập đầu ra vào lịch trình khóa. Quá trình này phải độc lập với người dùng - ngoại trừ một số cảnh báo về chất lượng của mật khẩu.
Tất cả hợp lại thành một;
- Nhận mật khẩu từ người dùng và cảnh báo người dùng nếu mật khẩu ngắn.
- lấy được mảng byte khóa mong muốn từ mật khẩu bằng PBKDF
- Cung cấp lịch trình khóa với mảng byte khóa dẫn xuất.