Как я должен генерировать вектор инициализации?

Иногда необходимо возвращать 2 значения из функции, и это часто - излишество, чтобы пойти и создать класс только для этого.

std:pair пригождается в тех случаях.

я думаю, что boost:compressed_pair в состоянии оптимизировать далеко членов размера 0. Который главным образом полезен для тяжелого шаблонного оборудования в библиотеках.

при управлении типами непосредственно это не важно.

14
задан Gemini Girl 14 May 2018 в 08:31
поделиться

4 ответа

Для некоторых реализаций класс SecureRandom поможет вам, создав истинные случайные числа:

Многие реализации SecureRandom являются в виде псевдослучайного числа генератор (PRNG), что означает, что они используют детерминированный алгоритм для получения псевдослучайная последовательность из истинного случайное зерно. Другие реализации могут производят истинные случайные числа, и все же другие могут использовать комбинацию обоих

Он имеет два метода, getProvider () и getAlgorithm () , которые должны предоставить вам некоторую информацию о том, какая реализация используется. Из этой страницы кажется, что псевдослучайный генератор SHA1PRNG (который заполняется истинными случайными данными) является одним из них или даже единственным доступным в настоящее время.

7
ответ дан 1 December 2019 в 10:02
поделиться

Это зависит от режима, в котором вы используете свой шифр. Если вы используете CBC, байты из SecureRandom являются самыми простыми и, вероятно, наиболее безопасными… пока ваш RNG исправен.

Большинство поставщиков Java генерируют необходимые параметры автоматически, но по порядку Чтобы понять, что было выбрано, вам необходимо понять шифр и режим. Например, если вы используете режим, требующий IV, вы должны сделать что-то вроде этого:

cipher.init(Cipher.ENCRYPT_MODE, secret);
IvParameterSpec spec = 
   cipher.getParameters().getParameterSpec(IvParameterSpec.class);
byte[] iv = spec.getIV();

Это позволяет провайдеру выбрать подходящий метод для создания самого IV. Но если бы вы использовали тот же метод для шифрования в режиме ECB, это не удалось бы.

Использование режима счетчика, очевидно, требует большой осторожности, чтобы избежать повторного использования счетчика.

13
ответ дан 1 December 2019 в 10:02
поделиться

Как подразумевали другие ответы, используйте безопасный генератор случайных чисел для создания IV.

Также как и в случае, вам не нужно отправлять IV через безопасный канал - обычно просто добавляется к сообщению. Помните, что гораздо важнее, чтобы вы использовали свежий IV для каждого сообщения, чем то, что вы держали IV в секрете. Предварительное использование IV одновременно с ключом означает, что вы либо повторно используете IV (плохо), либо имеете ограничение на количество сообщений, которые вы можете отправить.

6
ответ дан 1 December 2019 в 10:02
поделиться

Если вы используете графический интерфейс или у вас есть доступ к системным вызовам оборудования для ввода данных пользователя (предпочтительно с помощью мыши), вы можете создать вектор пар координат указателя мыши по мере его перемещения пользователем. Добавьте их в какую-нибудь строку. Затем используйте вашу любимую хеш-функцию в строке, чтобы создать полностью случайный IV с высокой энтропией.

1
ответ дан 1 December 2019 в 10:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: