Рейтинг:1

Имеет ли значение Endianness в тесте NIST SP800-22?

флаг cn

Меня интересует набор тестов Randomness.

Один из известных наборов тестов на случайность, ДИХАРДЕР, сказал, что Endianness не имеет значения для «ХОРОШЕГО» генератора случайных чисел.

Обратите внимание, что это не то же самое, что запись необработанных чисел с плавающей запятой (которые вообще не будут случайными как битовый поток), и что «порядок байтов» uint не должен иметь значения для нулевой гипотезы «хорошего» генератора, поскольку случайные байты случайны в любом порядке.

Просто грубое предположение, я думаю, что нет никакой разницы между прямым порядком байтов и прямым порядком байтов в тесте на случайность. Поскольку тест случайности заключается в подсчете числа 0 или 1, проверке шаблона битового потока и т. Д. (Я прочитал всю статью, NIST SP800-22 редакция 1a.)

Но в NIST SP800-22 нет письменного документа о том, что «порядок байтов не влияет на цель теста случайности».

Вопрос.

  1. Есть ли какая-либо недостающая часть, в которой говорится, что «порядок байтов не имеет значения» в документе NIST SP800-22?

  2. Могу ли я проверить случайность, не думая о порядке следования байтов?

Почему у меня возник этот вопрос.

Есть хороший пример Входной файл Dieharder и входной файл NIST SP800-22 в данные/data.pi с символом ASCII.

А также я узнал, что Dieharder читает файл (ASCII) как Little-Endian, а NIST читает файл (ASCII) как Big-Endian. Вы можете увидеть в stackoverflow, как я узнал.

Однако из-за Endianness мне нужно сделать два выходных файла. Один с прямым порядком байтов, а другой с прямым порядком байтов. Это может быть пустой тратой времени и памяти. Поэтому я задаюсь вопросом: «Имеет ли значение Endianness в наборе тестов NIST SP800-22?»

Рейтинг:1
флаг ng

Порядок следования байтов¹ может повлиять на результат теста на случайность и изменить результат с "пройдено" на "не пройдено" или наоборот (вызов другого запуска генератора может иметь тот же эффект, но в несколько меньшей степени). Однако, если порядок байтов существенно влияет на результат теста, то (при условии, что тест правильный и правильно используется)

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

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

Скорее, поставьте под вопрос мотивацию запуска Dieharder или NIST SP800-22. Это принято в некачественных статьях по криптографии, особенно в тех, которые наглядно иллюстрируют, что шифрование делает с Лена. Но успех такого теста не является аргументом или (хуже доказательством/демонстрацией) качества какого-либо шифрования, или ГПСЧ, или ГПСЧ, включающего состояние постобработки. В связи с этим проводится анализ метод используется в шифровании, PRNG или исходной + постобработке TRNG.


¹ Это большой-порядок байтов, прямой или другой порядок битов в байтах, словах или целых числах на выходе тестируемого генератора и/или на входе тестовой программы. Например, функция набора статистических тестов NIST конвертировать в биты (файл src/utilities.c здесь) преобразует байты в биты по соглашению с обратным порядком байтов (в отличие от наиболее распространенного порядка в асинхронная последовательная связь). Это важно в теории если реализация генератора, который математически определен для вывода битового потока (например, А5-1) его продукция прошла этот тест в байтовом режиме для эффективности.

TyeolRik avatar
флаг cn
Благодаря вашему совету ```не обращайте внимания на порядок следования байтов```. Я согласен с "анализ метода, PRNG, необходим" :)
Paul Uszak avatar
флаг cn
Предложите удаление/изменение бита _"TRNG"_. Постобработкой может быть экстрактор vN, CRC-16 или простое матричное умножение. Никакие криптопримитивы не нужны, да и опасны. Таким образом, тест на случайность является окончательным и окончательным арбитром для правильной работы. Я полагаю, что единственными некачественными работами TRNG являются те, в которых нет окончательного теста на случайность. Вот почему все приличные статьи имеют их в конце.
Paul Uszak avatar
флаг cn
Это не может повлиять на этот конкретный пакет, так как SP800-22 не использует слова.
fgrieu avatar
флаг ng
@Paul Uszak: см. новую заметку ¹, написанную после вашего последнего комментария.
Paul Uszak avatar
флаг cn
Эээ, все еще не совсем понимаю вашу точку зрения. Тестовый проход будет происходить с равномерным распределением установленных битов во всех байтах, независимо от порядка следования битов. Данные прохождения теста, передаваемые через RS-232, будут выглядеть так же, как выходные данные `\dev\urandom`...
Рейтинг:0
флаг cn

Точно нет.

Я рекомендую вам писать [так в оригинале] двоичные файлы на Little-Endian.

Это не имеет отношения к набору 800-22. Вы должны рассмотреть, что означает endianness. Endianness — это порядок или последовательность байтов слово цифровых данных. В этом наборе не используются слова. Он использует октеты.

Соответствующая часть тестовой документации:

5.4.1 Ввод данных Ввод данных может осуществляться одним из двух способов. Если у пользователя есть отдельная программа или аппаратное устройство, которое реализует ГСЧ, пользователь может захотеть построить столько файлов произвольной длины по желанию. Файлы должны содержать двоичные последовательности хранятся либо как символы ASCII, состоящие из нулей и единиц, либо как двоичные данные, где каждый байт содержит восемь битов, состоящих из нулей и 1 с. Затем набор статистических тестов NIST может независимо исследовать эти файлы.

и из самого набора тестов: -

   Формат входного файла:
    [0] ASCII — последовательность нулей и единиц ASCII.
    [1] Двоичный — каждый байт в файле данных содержит 8 битов данных.

   Выберите режим ввода:  

Итак, вы видите, что порядок следования байтов не имеет значения. Он не ожидает ни короткие/длинные целые числа, ни числа с плавающей запятой. Хотя другие люксы могут. Вы либо вводите однобайтовые данные ASCII для 0 и 1или вы вводите (будем надеяться) равномерно распределенные биты внутри октетов.


Примечание. Не являюсь экспертом по кодировке UTF, но вы можете генерировать символы ASCII с принудительной кодировкой, отличной от UTF-8. Это может привести к тому, что все тесты сФормат входного файла: [0] ASCII терпеть неудачу.

TyeolRik avatar
флаг cn
Я так не думаю. Ваш ответ касается ASCII, но Endianness отличается от ASCII. Как вы можете видеть в наборе тестов NIST, есть файл ```data/data.pi```, например. И есть 0 и 1, двоичные коды ASCII. Но когда вы конвертируете эти данные в байты (двоичный файл), данные должны быть другими, потому что Endianness - это «Способ записи двоичных файлов». Так что, боюсь, ваш ответ неактуален. Но спасибо за интерес и обсуждение :)
Paul Uszak avatar
флаг cn
@TyeolRik Вы понимаете, что строки `data/data.pi` не являются целыми числами? Есть только нули и единицы, с некоторыми разрывами строк, чтобы это выглядело красиво. Поэтому мой ответ (на мой взгляд) точен.
TyeolRik avatar
флаг cn
// Боюсь, но ```data/data.pi``` не является целым числом. Согласно [этой странице] (https://www.exploringbinary.com/pi-and-e-in-binary/), PI, 3.142592...., составляет ```11.00100100001111...``` в Бинарный. И файл ``data/data.pi`` также ```11.00100100001111...```. Итак, я предполагаю, что двоичные файлы в ```data/data.pi``` представляют собой просто PI, а не целые числа. :)
TyeolRik avatar
флаг cn
Упс. Извините за непонимание ваших слов. (Из-за моего нехватки английского) Мы на странице. Спасибо за ваш совет, который был добавлен. ```запись двоичных файлов на Little-Endian``

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.