Re[4]: Придумал способ получать действительно случайные числ
От: Нахлобуч Великобритания https://hglabhq.com
Дата: 25.10.07 07:39
Оценка:
Здравствуйте, Cyberax, Вы писали:

C>Почитайте, например, как американцы вскрывали наши one-time pad'ы из-за дефектного ГСЧ.


Шай-бу! Шай-бу! (зачеркнуто) Ссыл-ку! Ссыл-ку!
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
HgLab: Mercurial Server and Repository Management for Windows
Re: Придумал способ получать действительно случайные числа
От: sikorsky Украина  
Дата: 25.10.07 08:20
Оценка:
Искренне рад, что всех вас так повеселил )

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

Каждая идея имеет право на жизнь. Верно? Мне все-равно, правильно работает этот алгоритм или нет. Сейчас у меня вообще нет такой задачи. Т.е. лично мне он не нужен.

Все что я хотел узнать, выкладывая его сюда, это его теоретическая пригодность. Чтобы ее присутсвие или отсутствие доказали. А получаю кучу высококонструктивных и взвешенных высказываний типа "Аффтар..." уровня 10го класса (как в анекдоте про "Я креведко?!", просто смешно). Вроде взрослые все люди.

Возвращаясь к вчерашнему обещанию, привожу немного измененный код:

(и прошу на кусок текста внизу обратить внимание)

Использование:


using System;

namespace Random
{
    class Program
    {
        static void Main(string[] args)
        {
            RealRnd rnd;

            rnd = new RealRnd();
            rnd.Compute();
            Console.WriteLine(rnd.RandomizedHash);
        }
    }
}


Класс:



using System;
using System.Text;
using System.Threading;
using System.Security.Cryptography;

namespace Random
{
    public class RealRnd
    {
        private bool _cumputed;
        private StringBuilder _rnd;
        private readonly int _factor;

        internal string RandomizedString
        {
            get
            {
                if (this._cumputed == false)
                    return string.Empty;

                lock (this._rnd)
                {
                    return this._rnd.ToString();
                }
            }
        }

        public string RandomizedHash
        {
            get
            {
                MD5 md5 = MD5.Create();

                byte[] hash = md5.ComputeHash(Encoding.UTF8.GetBytes(this.RandomizedString));
                return Encoding.UTF8.GetString(hash);
            }
        }

        public RealRnd()
        {
            this._rnd = new StringBuilder();
            this._factor = 100000;
        }

        public RealRnd(int factor)
            : this()
        {
            this._factor = factor;
        }

        public void Compute()
        {
            Thread t = new Thread(this._Compute);

            t.Start();

            for (int i = 0; i != this._factor; i++)
                lock (this._rnd) { this._rnd.Append('0'); }

            this._cumputed = true;
        }

        private void _Compute()
        {
            for (int i = 0; i != this._factor; i++)
                lock (this._rnd) { this._rnd.Append('1'); }
        }
    }
}


...кусок текста внизу...

Вот 10 случайных последовательностей, сгенерированных подряд:
0.;n<C˘yz8
1.NQ*U`A
2.㼀下␫๕賙
3.h~ 锈
4.g.1IK^
5.cw|K
6.l}eU_
7.,o@CF
8.V3+aY^y.
9.b<!W

Теперь еще 9. А 10ю прошу "угадать" тех кто говорит что этот алгоритм, который у вас перед глазами, такой предсказуемый:

0.NqƔw(W%
1. 3ʗ~I
2.>Į¡A<
3.N<hTeޓ1V
4.+?>
5.?lpxܝ!Yr
6.$nEsOe<Tv,
7.OM<1
8.pEᵞT_:
9. ??? угадай

ЗЫ. БОЛЬШЕ ВСЕГО не люблю когда люди говорят что-то просто для того чтобы сказать. Без обоснования. Потому прошу свое мнение чем-то подкреплять.
Re[2]: Придумал способ получать действительно случайные числ
От: CreatorCray  
Дата: 25.10.07 09:17
Оценка:
Здравствуйте, sikorsky, Вы писали:

S>Этот алгоритм -- всего лишь на скорую руку реализованная идея, которая пришла мне в голову под конец рабочего дня.


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

В таком случае тему надо было назвать не "Придумал способ получать действительно случайные числа", что звучит как претензия на качественный ГСЧ.

S>Все что я хотел узнать, выкладывая его сюда, это его теоретическая пригодность.

Непригоден ни для чего серьезного.

S> Чтобы ее присутсвие или отсутствие доказали.

Оплачивай анализ. Просто так тебе никто серьезно доказывать применимость твоего алго как ГСЧ не будет. Равно как никто не берется за доказательства непригодности алгоритмов "шифрования", коими нередко пытаются осчастливить сообщество разные личности. Впрочем негодность большинства этих алгоритмов видна сразу.

S> А получаю кучу высококонструктивных и взвешенных высказываний типа "Аффтар..." уровня 10го класса (как в анекдоте про "Я креведко?!", просто смешно). Вроде взрослые все люди.

Угу, потому и советуют в результате одно и то же: иди почитай учебники по теме. А стебутся потому, что еслиб ты их все таки прочитал то этого топика бы не было бы вообще.

S>Возвращаясь к вчерашнему обещанию, привожу немного измененный код:

Ну добавил MD5. А толку то. С таким же успехом можно брать MD5 от результата GetTickCount() или rdtcs

S>0.;n<C˘yz8

S>1.NQ*U`A
S>2.㼀下␫๕賙
S>3.h~ 锈
S>4.g.1IK^
S>5.cw|K
S>6.l}eU_
S>7.,o@CF
S>8.V3+aY^y.
S>9.b<!W
Ох матерь тетерь! Что такое HEX наверное не в курсе...

Вот тебе ссылка http://en.wikipedia.org/wiki/Diehard_tests Выполни хотя бы их.
В следующих сообщениях ждемс анализа твоего ГСЧ.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[2]: Придумал способ получать действительно случайные числ
От: Ravlyk Австралия http://stitcharteasy.com
Дата: 25.10.07 09:28
Оценка: 1 (1)
Здравствуйте, sikorsky, Вы писали:

Во-первых, в начале метода Compute() поставте:
    _rnd.Length = 0;

Ато строка в StringBuilder растет при каждом запросе вычисляемого "случайного" значения.

Во-вторых, я позапускал вот такой код:
    internal class Program
    {
        private static void Main()
        {
            RealRnd rnd;
            rnd = new RealRnd();
            List<int> values = new List<int>();
            for (int i = 0; i < 100; i++)
            {
                rnd.Compute();
                int hashCode = rnd.RandomizedHash.GetHashCode();
                if (!values.Contains(hashCode))
                    values.Add(hashCode);
            }
            Console.WriteLine(values.Count.ToString());
            Console.ReadLine();
        }
    }

Если бы это был нормальных ГСЧ, то на экран вывело бы 100 (ну ладно еще 99),
а выводило числа от 60 до 95, что говорит об ОЧЕНЬ частой повторяемости ваших "случайных" значений.
Re[5]: Придумал способ получать действительно случайные числ
От: Cyberax Марс  
Дата: 25.10.07 09:32
Оценка: 16 (2)
Здравствуйте, Нахлобуч, Вы писали:

C>>Почитайте, например, как американцы вскрывали наши one-time pad'ы из-за дефектного ГСЧ.

Н>Шай-бу! Шай-бу! (зачеркнуто) Ссыл-ку! Ссыл-ку!
http://en.wikipedia.org/wiki/VENONA_project

Подробности я читал давно в бумажном журнале. Если кратко: СССР часто использовал для генерации шифроблокнотов машинстку, которая просто случайно набирала на печатающей машинке буквы. Однако, это часто приводило к образованию предсказуемых последовательностей. А этого оказывалось часто вполне достаточно, чтобы восстановить текст, используя знание о структуре русского языка.
Sapienti sat!
Re[3]: Придумал способ получать действительно случайные числ
От: sikorsky Украина  
Дата: 25.10.07 09:42
Оценка:
Здравствуйте, CreatorCray, Вы писали:

CC>Ох матерь тетерь! Что такое HEX наверное не в курсе...


Да уж... Куда мне...

CC>Вот тебе ссылка http://en.wikipedia.org/wiki/Diehard_tests Выполни хотя бы их.


Млин... Ну как объяснить что я не собираюсь никаких тестов устраивать потому как мне это не надо! Я могу потратить время, разработать корректный код, провести тесты. Самостоятельно убедиться работает он или нет. Но мне НЕ НУЖЕН этот класс! Я не могу позволить себе тратить столько времени впустую! Я выложил эту вещь чтобы тот, кому это надо, мог ее попробовать использовать и развивать. НЕвозможно это вам объяснить, я так понимаю. Если я выложил кусок кода, написанный на скорую руку, так сразу что, на докторскую степень претендую? Смешно. Просто смешно.
Re[3]: Придумал способ получать действительно случайные числ
От: sikorsky Украина  
Дата: 25.10.07 09:46
Оценка:
Здравствуйте, Ravlyk, Вы писали:

R>Если бы это был нормальных ГСЧ, то на экран вывело бы 100 (ну ладно еще 99),

R>а выводило числа от 60 до 95, что говорит об ОЧЕНЬ частой повторяемости ваших "случайных" значений.

Та я делал это.. Угу, много совпадений. Но они изчезают если между вызовами есть задержки. Там потоки не синхр., потому могут быть случаи, что второй поток еще работает, а свойство заново считывается... короче, просто недоделка.. это ведь просто проверка, а не "релиз"

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

Re[3]: Придумал способ получать действительно случайные числ
От: sikorsky Украина  
Дата: 25.10.07 09:48
Оценка: :)
Здравствуйте, Ravlyk, Вы писали:


R>Во-первых, в начале метода Compute() поставте:

R>
R>    _rnd.Length = 0;
R>

R>Ато строка в StringBuilder растет при каждом запросе вычисляемого "случайного" значения.

Та это ерунда... Нет времени доделывать
Re[3]: Придумал способ получать действительно случайные числ
От: Flamer Кипр http://users.livejournal.com/_flamer_/
Дата: 25.10.07 10:12
Оценка:
Здравствуйте, CreatorCray, Вы писали:

[]

Мне кажется, хватит стебаться над автором топика. Тем более, что он либо конкретно не понимает, что он нахватался вершков и несёт/постит откровенную чушь, либо просто сам стебается.
<< Не присоединяйся к нашему миру наркоманов: нас много, а наркоты мало. >>
Re[4]: Придумал способ получать действительно случайные числ
От: Ravlyk Австралия http://stitcharteasy.com
Дата: 25.10.07 10:41
Оценка: +1
Здравствуйте, sikorsky, Вы писали:

S>Там потоки не синхр., потому могут быть случаи, что второй поток еще работает, а свойство заново считывается...


Ага, сделал принудительное ожидание до завершения всех потоков — совпадений стало еще больше

S>Но у меня нет времени проверять.


Ну так нечего тогда категорически утверждать что придумали способ который действительно...
Re[4]: Придумал способ получать действительно случайные числ
От: CreatorCray  
Дата: 25.10.07 10:47
Оценка:
Здравствуйте, sikorsky, Вы писали:

S>Млин... Ну как объяснить что я не собираюсь никаких тестов устраивать потому как мне это не надо!

А почему ты думаешь что другие будут тестировать твой алгоритм? На первый взгляд алгоритм говно, как тебе уже сказали. По попыткам использования — говно, о чем написали те кто пробовал. Чтобы сказать более точно надо проводить полноценные тесты. Ты их проводить не хочешь — другим это нафиг не упало.

S>Но мне НЕ НУЖЕН этот класс!

Он никому не нужен.

S>Я не могу позволить себе тратить столько времени впустую!

Не ты один.

S>Я выложил эту вещь чтобы тот, кому это надо, мог ее попробовать использовать и развивать.

Попробовали — говно.

S>НЕвозможно это вам объяснить, я так понимаю. Если я выложил кусок кода, написанный на скорую руку, так сразу что, на докторскую степень претендую? Смешно. Просто смешно.

Чего ж ты тогда так кипятишься когда тебе говорят что код, который ты выложил — лажа?
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[4]: Придумал способ получать действительно случайные числ
От: CreatorCray  
Дата: 25.10.07 10:47
Оценка:
Здравствуйте, Flamer, Вы писали:

F>Мне кажется, хватит стебаться над автором топика.

Ну, в последнем посте я ничуть не стебался...

F> Тем более, что он либо конкретно не понимает, что он нахватался вершков и несёт/постит откровенную чушь

Скорее всего так.

F>либо просто сам стебается.

Вряд ли.

Но в целом да — смысла продолжать нет
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[5]: Придумал способ получать действительно случайные числ
От: Кодт Россия  
Дата: 25.10.07 10:53
Оценка:
Здравствуйте, sikorsky, Вы писали:

S>>>Дело в том, что если два потока одновременно что-то делают, то нет возможности предсказать когда конкретный поток получит свой квант процессорног времени.

CC>>Можно при некоторых условиях.

S>При "некоторых условиях" можно запросто жить на луне. Достаточно добавить атмосферу и т. д.

S>Можно ли более подробно. У вас есть число, полученное этим генератором. Пусть даже есть система, на которой оно получено. Каким образом вы сможете его воссоздать?

Фишка в следующем: а как именно ты собираешься пользоваться случайными числами.

1) Создавать на своей машине ключ
Но твоя последовательность — не совсем белый шум. Это детерминированный шум алгоритмического генератора, на который наложен очень низкочастотный шум планировщика.
Поэтому взломщик может искать ключи среди последовательности, порождаемой генератором, с учётом ноль-, одно- и двукратного переключения.
Либо твоя функция создания ключа должна работать очень долго, чтоб частота запросов каждого бита была сравнима (а то и заведомо меньше) частот планировщика.

2) Гарантировать, что на любой машине каждый запуск твоей программы даст неповторимый результат.
С ходу не могу придумать, зачем эта неповторимость нужна тебе, и зачем она может понадобиться взломщику. Но вдруг.
Тогда взломщик запускает твою программу под отладчиком и тормозит рабочий поток.
В результате программа становится детерминированной.
... << RSDN@Home 1.2.0 alpha rev. 655>>
Перекуём баги на фичи!
Re: Придумал способ получать действительно случайные числа
От: Кодт Россия  
Дата: 25.10.07 10:53
Оценка: 9 (3)
Здравствуйте, sikorsky, Вы писали:

<>

Замечание по коду.

Выглядит издевательством хранить последовательность битов в строке, по символу на бит.
А ещё — реализацию алгоритма вывода бита из строки можно резко упростить (не трогая саму идею).

Ты считаешь баланс количества переходов _- и -_
Но очевидно, что в строке вида _----___-_--....-_-_--- можно сделать сокращения, не влияющие на итог:
1) идущие подряд уровни (серии нулей или единиц) свести к одиночным
2) все внутренние переходы 01 и 10 уравновешены: 0101 == 01,10,01 == 01, 1010 == 10,01,10 == 10.
Таким образом, баланс переходов равен единственному переходу от первого символа к последнему.

Значит,
1) можно хранить только первый и последний символы. Причём первый символ порождается единожды при старте (какой поток успеет это сделать), а второй — перезаписывается обоими потоками.

2) нужно рассмотреть небольшое количество вариантов
"" — запрос бита, когда оба потока ещё ничего не написали. Баланс равен 0, на выходе 1.
"0", "1" — тоже ранний запрос. Баланс равен 0, на выходе 1.
"00". Баланс равен 0, на выходе 1
"01". Баланс равен +1 (b01 > b10), на выходе 0.
"10". Баланс равен -1 (b01 < b10), на выходе 1.
"11". Баланс равен 0, на выходе 1.

Таким образом, если первый бит "1", то на выходе всегда будут 1.
Офигенно случайный алгоритм получился
... << RSDN@Home 1.2.0 alpha rev. 655>>
Перекуём баги на фичи!
Re[2]: Придумал способ получать действительно случайные числ
От: sikorsky Украина  
Дата: 25.10.07 10:55
Оценка: -2
Здравствуйте, Кодт, Вы писали:

К>Здравствуйте, sikorsky, Вы писали:


К><>


К>Замечание по коду.


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


Ну что тут скажешь... Вы могли бы прочесть сначала что я писал
Re[5]: Придумал способ получать действительно случайные числ
От: sikorsky Украина  
Дата: 25.10.07 11:03
Оценка: :)))
Здравствуйте, CreatorCray, Вы писали:
CC>Чего ж ты тогда так кипятишься когда тебе говорят что код, который ты выложил — лажа?

Я "кипятишься" потому что ни один не привел хоть сколько нибудь стоящих замечаний. Просто пустые слова. А я люблю конструктивную критику. Люблю. Я бы хотел прочитать что-то вроде "...этот код не работает так как ты ожидаешь, потому как...". Лан, нет смысла продолжать.

А на счет "никому не нужен", так не говори за всех. Такие проблемы стоят перед каждым, кто занимается защитой, моделирование естеств. процессов и т.д. И услышать такую идею могло бы быть полезно для этих людей.

Жаль, что очень мало людей может что-то сказать по теме (не только по этой, а по любой)...
Re[4]: Придумал способ получать действительно случайные числ
От: Константин Россия  
Дата: 25.10.07 11:34
Оценка:
Здравствуйте, sikorsky, Вы писали:

S>Но мне НЕ НУЖЕН этот класс!


Ну собственно на этом дискуссию можно и завершить.
Re[6]: Придумал способ получать действительно случайные числ
От: CreatorCray  
Дата: 25.10.07 11:35
Оценка:
Здравствуйте, sikorsky, Вы писали:

Не удержался...

S>Я "кипятишься" потому что ни один не привел хоть сколько нибудь стоящих замечаний. Просто пустые слова. А я люблю конструктивную критику. Люблю. Я бы хотел прочитать что-то вроде "...этот код не работает так как ты ожидаешь, потому как...". Лан, нет смысла продолжать.

Ок. этот код не работает так как ты ожидаешь, потому как ты понятия не имеешь как надо реализовывать ГСЧ.

S>А на счет "никому не нужен", так не говори за всех. Такие проблемы стоят перед каждым, кто занимается защитой, моделирование естеств. процессов и т.д. И услышать такую идею могло бы быть полезно для этих людей.

Я занимаюсь защитой.
С точки зрения криптографии ты написал абсолютно бесполезный алгоритм. То, что ты даже базовый набор тестов не прогнал говорит о многом.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[3]: Придумал способ получать действительно случайные числ
От: Кодт Россия  
Дата: 25.10.07 11:55
Оценка: +1
Здравствуйте, sikorsky, Вы писали:

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


S>Ну что тут скажешь... Вы могли бы прочесть сначала что я писал


Что именно? Ссылку или цитату покажи, где опровергаются мои утверждения, что у тебя
1) жесточайше расточительная реализация...
2) ...алгоритма, который в половине случаев заклинивается на единице.
... << RSDN@Home 1.2.0 alpha rev. 655>>
Перекуём баги на фичи!
Re[6]: Придумал способ получать действительно случайные числ
От: Кодт Россия  
Дата: 25.10.07 12:30
Оценка: +4
Здравствуйте, sikorsky, Вы писали:

S>Я "кипятишься" потому что ни один не привел хоть сколько нибудь стоящих замечаний. Просто пустые слова. А я люблю конструктивную критику. Люблю. Я бы хотел прочитать что-то вроде "...этот код не работает так как ты ожидаешь, потому как...". Лан, нет смысла продолжать.


Я тебе конструктивно покритиковал в двух местах:
— некачественный ГСЧ сам по себе (в том виде, какой ты предоставил), заклинивающийся в половине всех испытаний
— используешь в качестве источника шума очень низкочастотный, более-менее регулярный и легко компрометируемый сигнал (переключатель потоков)
И что-то не дождался от тебя конструктивных ответов.

S>А на счет "никому не нужен", так не говори за всех. Такие проблемы стоят перед каждым, кто занимается защитой, моделирование естеств. процессов и т.д. И услышать такую идею могло бы быть полезно для этих людей.


Тех, кто занимается этими делами серьёзно, — такое решение своих проблемы заведомо не удовлетворит. Лучше уж /dev/random использовать.
А тех, кто этими вопросами балуется — тем более /dev/random.
... << RSDN@Home 1.2.0 alpha rev. 655>>
Перекуём баги на фичи!
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.