Tôi đang cố gắng xoay quanh khái niệm SIV trong bối cảnh mã hóa. Tôi hiểu khía cạnh của việc lạm dụng nonce, v.v. Và tôi hiểu rằng tính năng chính của SIV là họ đảm bảo rằng khi mã hóa cùng một thông điệp bằng cùng một khóa sẽ tiết lộ rằng nó giống hệt nhau, nó sẽ không tiết lộ bất kỳ điều gì khác.
Đặc biệt, việc sử dụng cùng một khóa trên các thông báo khác nhau sẽ không gặp phải vấn đề nghiêm trọng với việc tái sử dụng nonce trong hệ thống khác.
Nếu tôi hiểu chính xác, bạn có thể xây dựng chế độ hoạt động SIV bằng cách sử dụng:
mã hóa def (tin nhắn, khóa):
siv = hash_shake256(bit=192, msg)
trả về xchacha20(key, siv, msg), siv
Nói cách khác, trước tiên, chúng tôi tính toán hàm băm có khóa trên tin nhắn, sau đó sử dụng giá trị đó làm giá trị ban đầu cho quá trình mã hóa thực tế.
Đầu ra là văn bản mật mã cũng như được tạo siv
, cả hai đều an toàn để chia sẻ mà không tiết lộ bất cứ điều gì cho đối thủ.
Tính bảo mật đến từ tính chất không thể đảo ngược của hàm băm có khóa và thực tế là đối với mỗi tin nhắn
chúng tôi chuyển làm đầu vào, chúng tôi được đảm bảo rằng chúng tôi sẽ không có nonce trùng lặp.
- Tôi có hiểu mọi thứ một cách chính xác không?
- Có an toàn không khi sử dụng cùng một khóa cho cả hàm băm và mã hóa có khóa?
- tôi cho rằng thực tế
siv
sử dụng nhiều hơn một chút so với chỉ băm đầu vào?