có chức năng nào không $f : \text{seed}, \text{range}, \text{state} \mapsto n$,
Đúng; họ được gọi là Mã hóa bảo toàn định dạng chức năng. Đây là các chức năng mật mã khối có kích thước tùy ý:
- Yêu cầu 1: Phạm vi đầu ra có thể nhỏ. Ví dụ. từ $0$ đến $10^6$.
Vâng, họ có thể có phạm vi khá nhỏ. Theo kinh nghiệm của tôi, FPE có xu hướng không thích các phạm vi thực sự nhỏ (ví dụ: phạm vi dưới 100 giá trị); một phạm vi một triệu là rất nhiều cho những người tôi biết về
- Yêu cầu 2: Không có va chạm cho các hạt giống khác nhau
Nếu chúng ta sử dụng khởi đầu làm khóa FPE và trạng thái làm bản rõ FPE, thì điều này được đảm bảo - thao tác FPE là không thể đảo ngược (nghĩa là bằng cách đặt thao tác FPE ở chế độ giải mã và cung cấp cho nó cùng một khóa, nó sẽ chuyển đổi bản mã trở lại bản rõ), do đó hai bản rõ không thể được chuyển đổi thành cùng một bản mã
Yêu cầu 3: Không thể dự đoán số tiếp theo trừ khi người ta gọi hàm $f$
Cũng đúng; FPE được thiết kế để bảo mật (trừ khi bạn biết khóa), do đó, cách duy nhất để dự đoán cách chuyển đổi văn bản gốc là sử dụng khóa.
Các chức năng FPE cũng có một 'tinh chỉnh' (một đầu vào bổ sung không cần ở chế độ riêng tư sẽ thay đổi ánh xạ được xác định bởi mã hóa) - Tôi khuyên bạn nên sử dụng phạm vi như một phần của tinh chỉnh (ngoài việc sửa đổi cách thức hoạt động của chức năng FPE bên trong) - theo cách đó, bạn không phải lo lắng về chức năng với một phạm vi rò rỉ thông tin về chức năng với một phạm vi khác.
Bây giờ, nếu bạn cần lời khuyên về việc nên sử dụng chức năng FPE nào, chức năng tốt nhất tôi tìm thấy là FF1 được xác định tại đây chức năng; từ những gì tôi đã gieo hạt, nó có vẻ khá chắc chắn.