Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: ГПСЧ
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > Программирование
toweroff
Добрый нень всем

Возник такой вопрос. Имеем ГПСЧ последовательность, в районе килобайта. Последовательность тупо генерится через rand()
В этой последовательности заменяем некоторые значения, длина 8 байт, количество замен - 4 по 8 байт

Можно ли какими-то математическими методами определить, что есть эти области, которые "не укладываются" в общую последовательность чисел?
Если есть, где почитать, примеры реализации, в общем любая информация

Спасибо
zombi
пытаетесь в блоке случ. данных спрятать 32 байта?
или хотите найти спрятанные кем то другим?
kovigor
Цитата(toweroff @ Feb 1 2013, 17:35) *
Если есть, где почитать, примеры реализации, в общем любая информация

Самый простой способ выяснить это - разбить последовательность на блоки и посчитать для них энтропию. У "испорченных" вами блоков она будет недопустимо низкой. У Кнута во втором томе подробнейшим образом расписаны способы получения случайных чисел и методики оценки качества их последовательностей. Мало того, есть целые системы очень серьезных тестов, вроде того же NIST (ссылки в тексте статьи):
http://habrahabr.ru/post/62237/
Только я вот не пойму, зачем портить последовательностей вставкой в нее посторонних чисел ?
toweroff
Цитата(zombi @ Feb 1 2013, 19:39) *
пытаетесь в блоке случ. данных спрятать 32 байта?
или хотите найти спрятанные кем то другим?

спрятать, в том числе оценить возможность поиска

Цитата(kovigor @ Feb 1 2013, 19:41) *
Самый простой способ выяснить это - разбить последовательность на блоки и посчитать для них энтропию. У "испорченных" вами блоков она будет недопустимо низкой. У Кнута во втором томе подробнейшим образом расписаны способы получения случайных чисел и методики оценки качества их последовательностей. Мало того, есть целые системы очень серьезных тестов, вроде того же NIST (ссылки в тексте статьи):
http://habrahabr.ru/post/62237/
Только я вот не пойму, зачем портить последовательностей вставкой в нее посторонних чисел ?

Кнут - это хорошо. В каком томе? страницы ? sm.gif
>Только я вот не пойму, ...
Хотелось бы вставить туда свои значения. Просто нужно.


Хорошо, перефразирую.
Хочется, чтобы пользователь прислал мне некий шум, в котором есть важные значения, но нужно оценить возможность поиска этим пользователем значения в шуме

_Pasha
Я правильно понимаю, что задача подпадает под термин Digital Watermark?
toweroff
Цитата(_Pasha @ Feb 1 2013, 21:27) *
Я правильно понимаю, что задача подпадает под термин Digital Watermark?

да, что-то вроде того
Только нет потока, есть некий кусок данных
kovigor
Цитата(toweroff @ Feb 1 2013, 21:21) *
Кнут - это хорошо. В каком томе? страницы ? sm.gif

Во втором, я выше написал. Страницы найдите сами, их там около сотни этому вопросу посвящено ...
zombi
Цитата(toweroff @ Feb 1 2013, 21:21) *
спрятать, в том числе оценить возможность поиска

Хочется, чтобы пользователь прислал мне некий шум, в котором есть важные значения, но нужно оценить возможность поиска этим пользователем значения в шуме

Сделайте какую либо функцию важных данных (байт) со случайными данными этого же блока (самое простое XOR но можно и поизголяться).
Место положения важных данных можно тоже сделать зависящим от неких случайных байтов в блоке.
Даже если кто и заподозрит что данные не совсем случайные не зная алгоритма хрен найдёт.
toweroff
Цитата(zombi @ Feb 1 2013, 22:03) *
Сделайте какую либо функцию важных данных (байт) со случайными данными этого же блока (самое простое XOR но можно и поизголяться).
Место положения важных данных можно тоже сделать зависящим от неких случайных байтов в блоке.
Даже если кто и заподозрит что данные не совсем случайные не зная алгоритма хрен найдёт.

в общем да..
со случайным расположением тоже хорошо
да и шифрануть блок тоже гуд sm.gif

итого

Случайное расположение
Шифрование (AES, наверное не потянуть, RTEA)

Долго будут думать? sm.gif
zombi
Цитата(toweroff @ Feb 1 2013, 22:08) *
да и шифрануть блок тоже гуд sm.gif

Не знаю зачем всё это ещё и шифровать biggrin.gif

А вот CRC сделал бы обязательно и тоже где нить внутри спрятал. Что б не подсунули какую лабуду.


Цитата(toweroff @ Feb 1 2013, 22:08) *
Долго будут думать? sm.gif

laughing.gif
toweroff
Ну тогда я буду думать sm.gif
если еще будут идеи - большое спасибо

И все-таки, математический метод
Даст какие-то всплески?
kovigor, пока еще не читал, но такое в принципе возможно?
Как-то видится всплеск на ровном графике sm.gif
kovigor
Цитата(toweroff @ Feb 1 2013, 22:36) *
И все-таки, математический метод
Даст какие-то всплески?
kovigor, пока еще не читал, но такое в принципе возможно?
Как-то видится всплеск на ровном графике sm.gif

Что возможно ? Обнаружить испорченную ПСЧ ? Конечно.
Еще раз перечитал ветку и так и не понял, что вы хотите получить. Алгоритмы электронной цифровой подписи давно и успешно применяются. Тот же RSA-1024 чудесно считается на ARM7, есть даже готовые библиотеки. Или вам нужно шифровать данные, чтобы их мог расшифровать только тот, у кого есть секретный ключ ? Так опять же, есть RSA. Или вы хотите посрамить профессиональных криптографов и выдумать свой алгоритм ?
zombi
Цитата(kovigor @ Feb 1 2013, 21:59) *
Что возможно ? Обнаружить испорченную ПСЧ ? Конечно.

Спорить не стану. Но мне не понятно как можно обнаружить замену ?
К примеру, есть 100 байт ПСЧ.
Один любой байт меняем на любой.
Как посторонний пользователь может узнать какой байт поменяли ?
_Pasha
Цитата(zombi @ Feb 2 2013, 01:29) *
Спорить не стану. Но мне не понятно как можно обнаружить замену ?
К примеру, есть 100 байт ПСЧ.
Один любой байт меняем на любой.
Как посторонний пользователь может узнать какой байт поменяли ?

Если чем-то поможет
maksimp
Цитата(toweroff @ Feb 1 2013, 17:35) *
Последовательность тупо генерится через rand()
В этой последовательности заменяем некоторые значения, длина 8 байт, количество замен - 4 по 8 байт

Можно ли какими-то математическими методами определить, что есть эти области, которые "не укладываются" в общую последовательность чисел?

rand() скорее всего использует линейный конгруэнтный генератор
x[i] = (x[i-1] * a + c) mod m
Имея достаточно длинный фрагмент последовательности, этот генератор можно вскрыть, то есть определить x[0], a, c, m. После этого легко найти заменённые байты.
toweroff
Цитата(maksimp @ Feb 2 2013, 23:03) *
rand() скорее всего использует линейный конгруэнтный генератор
x[i] = (x[i-1] * a + c) mod m
Имея достаточно длинный фрагмент последовательности, этот генератор можно вскрыть, то есть определить x[0], a, c, m. После этого легко найти заменённые байты.

Я Вас понял.
вот из описания rand
Цитата
rand uses a multiplicative congruential random number generator with period 2 to the 32nd power to return successive pseudo-random numbers in the range from 0 to RAND_MAX. The symbolic constant RAND_MAX is defined in stdlib.h.

то есть в любом случае повторения после 4ГБ. Отыскать в этой последовательности мой килобайт проще простого sad.gif
Так что остается только шифрование
zombi
Зачем rand() использовать?
Напишите свой гпсч.
toweroff
Цитата(zombi @ Feb 3 2013, 16:09) *
Зачем rand() использовать?
Напишите свой гпсч.

Ну как вариант - да
Только вот, возможно, с шифрованием надежнее будет. Примеров реализации - вагон с тележкой sm.gif
zombi
Цитата(toweroff @ Feb 3 2013, 16:29) *
Ну как вариант - да

А если в приёмнике будет точно токой же гсч и где то в блоке положить статовое значение для него, то можно и сам "мусор" проверить.
Проверка подлинности однако biggrin.gif

Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.