как мне построить действительный IV, учитывая одноразовый номер? Какое это имеет отношение к счетчику?
Вы можете этого не ожидать, но это зависит; несколько схем одинаково безопасны (например, с прямым порядком байтов и прямым порядком байтов). Обычно значение счетчика представляет собой 128-битное целое число без знака с обратным порядком байтов. Nonce — это самая значащая (самая левая) часть этого целого числа.
Кроме того, начальная нижняя часть счетчика будет начинаться с (всего) нуля - Не один как в вашем примере.
Итак, у вас будет:
NNNNNNNN NNNNNNNN NNNNNNNN 00000000
в качестве начального значения (в виде шестнадцатеричных чисел, где N представляет некоторую шестнадцатеричную цифру одноразового номера), где левая часть является наиболее значимой частью. Конечно, это относится к 96-битному одноразовому номеру и 32-битному счетчику. Это начальное значение обычно называют IV.
Поскольку размер одноразового номера может варьироваться во многих библиотеках, обычно увеличение счетчика производится по модулю. $2^{128}$, с тем недостатком, что переполнение в самых младших 32 битах повлияет на одноразовый номер. Обычно пользователь библиотеки AES должен проверить это (но вам понадобится $2^{32} * 16 = 64 \text{ГиБ}$ или почти $69 \текст{ГБ}$ попасть туда).
но один и тот же "привет мир" каждый раз шифруется во что-то другое
Да, так что, скорее всего, одноразовый номер меняется каждый раз. Либо так, либо меняется ключ, либо даже и ключ, и одноразовый номер.