Режим CTR изначально предназначен для PRF.
Любой PRF* можно превратить в потоковый шифр с режимом CTR.Однако не рекомендуется использовать сложную функцию, созданную для MAC, для использования в качестве потокового шифра. Используйте ChaCha для потокового шифра, созданного из PRF, или используйте прямой потоковый шифр, такой как Trivium.
Если вы действительно хотите использовать, используйте ввод как $$F_k(\text{nonce_block}\mathbin\|\text{counter_block})$$ как режим CTR и зашифровать как
$$c_i = m_i \oplus F_k(\text{nonce_block}\mathbin\|\text{counter_i})$$
Убедись в том, что
- $\text{counter_i}$ никогда не превышайте размер $\text{counter_block}$,
- никогда не возвращаться в исходное состояние, если счетчик достигает максимума $2^{\text{counter_block_size}}-1$
- не усложняйте возобновление счетчика для другого шифрования.
- Под выше, новее пусть $(IV,ключ)$ появиться снова, где $IV = (\text{nonce_block}\mathbin\|\text{counter_i})$
* На самом деле для криптографии любого недостаточно, важен размер ключа и размер ввода и вывода. Сегодня мы предпочитаем xChaCha20, так как он позволяет использовать 192-битные одноразовые номера, чтобы избежать коллизии одноразовых номеров под одним и тем же ключом, и имеет 512-битные размеры ввода/вывода. 128-битной защиты Chaskey достаточно для легковесной криптографии, однако для других целей она недостаточно надежна.