Обнаружил в мсдн информацию про датчик случайных чисел
rand_s()
Однако заставить его работать, следуя указаниям мсдн, мне не удалось. Мож кто знает, как это сделать?
И еще вопрос.
При создании динамического массива выражение-размер может быть дробным и даже отрицательным.
Дотнет 2005 никаких сообщений не выдает. Тут случайно не UB?
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Здравствуйте, LaptevVV, Вы писали:
LVV>Обнаружил в мсдн информацию про датчик случайных чисел LVV>rand_s() LVV>Однако заставить его работать, следуя указаниям мсдн, мне не удалось. Мож кто знает, как это сделать?
Этот пример у меня работает http://msdn2.microsoft.com/en-us/library/sxtz2fa8(VS.80).aspx
LVV>При создании динамического массива выражение-размер может быть дробным и даже отрицательным.
В std::vector тип размера — size_t — целой беззнаковое число.
LVV>При создании динамического массива выражение-размер может быть дробным и даже отрицательным. LVV>Дотнет 2005 никаких сообщений не выдает. Тут случайно не UB?
Тут конверсия из double в size_t (или из signed int в size_t).
int* i = new int[1.4];
c:\documents and settings\left.avalanche\my documents\visual studio 2008\projects\tst\tst\tst.cpp(67) : warning C4244: 'initializing' : conversion from 'double' to 'unsigned int', possible loss of data
Здравствуйте, LaptevVV, Вы писали:
LVV>Обнаружил в мсдн информацию про датчик случайных чисел LVV>rand_s() LVV>Однако заставить его работать, следуя указаниям мсдн, мне не удалось. Мож кто знает, как это сделать?
Странно, у меня пример из MSDN нормально работает. Вообще, в MSDN указано, что rand_s() работает только на WinXP и более "новых" системах. Может, в этом дело?
Здравствуйте, Mr.Cat, Вы писали:
MC>Здравствуйте, LaptevVV, Вы писали:
LVV>>Обнаружил в мсдн информацию про датчик случайных чисел LVV>>rand_s() LVV>>Однако заставить его работать, следуя указаниям мсдн, мне не удалось. Мож кто знает, как это сделать?
MC>Странно, у меня пример из MSDN нормально работает. Вообще, в MSDN указано, что rand_s() работает только на WinXP и более "новых" системах. Может, в этом дело?
Понял! У меня 2000 с сервис-паками стоит. Спасибо!
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Здравствуйте, Left2, Вы писали:
LVV>>При создании динамического массива выражение-размер может быть дробным и даже отрицательным. LVV>>Дотнет 2005 никаких сообщений не выдает. Тут случайно не UB? L>Тут конверсия из double в size_t (или из signed int в size_t).
L>
L>int* i = new int[1.4];
L>
L>c:\documents and settings\left.avalanche\my documents\visual studio 2008\projects\tst\tst\tst.cpp(67) : warning C4244: 'initializing' : conversion from 'double' to 'unsigned int', possible loss of data
L>a Warning level у тебя какой стоит?
Спасибо за напоминание. Понятно, что преобразование идет, только я забыл выставить уровень предупреждений высокий.
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Оказывается, в ней security enhancements as described in Security Enhancements in the CRT.
В чем они заключаются ? А вот в чем
the function invokes an invalid parameter handler, as described in Parameter Validation.
Ну да, конечно. У прежней rand никаких параметров не было, так что в чем она провинилась перед Security Enhancements — сказать трудно. А у этой параметр появился, да еще указатель — как тут без Validation!
Но это еще не все. Иду по странице
rand_s depends on the RtlGenRandom API, which is only available in Windows XP and later
захожу на ссылку по RtlGenRandom и...
Content cannot be found
Во как! Ладно, иду в online MSDN
RtlGenRandom
[The RtlGenRandom function is available for use in the operating systems listed in the Requirements section. It may be altered or unavailable in subsequent versions. Instead, use the CryptGenRandom function.]
The RtlGenRandom function generates a pseudo-random number.
Note This function has no associated import library. This function is available as a resource named SystemFunction036 in Advapi32.dll. You must use the LoadLibrary and GetProcAddress functions to dynamically link to Advapi32.dll.
Здравствуйте, Pavel Dvorkin, Вы писали:
LVV>>rand_s() PD>Жуткая функция! PD>Зашел на этот линк PD>http://msdn2.microsoft.com/en-us/library/sxtz2fa8(VS.80).aspx PD>Оказывается, в ней security enhancements as described in Security Enhancements in the CRT. PD>В чем они заключаются ? А вот в чем PD>the function invokes an invalid parameter handler, as described in Parameter Validation. PD>Ну да, конечно. У прежней rand никаких параметров не было, так что в чем она провинилась перед Security Enhancements — сказать трудно. А у этой параметр появился, да еще указатель — как тут без Validation! PD>Но это еще не все. Иду по странице PD>rand_s depends on the RtlGenRandom API, which is only available in Windows XP and later PD>захожу на ссылку по RtlGenRandom и... PD>Content cannot be found PD>Во как! Ладно, иду в online MSDN PD>RtlGenRandom PD>[The RtlGenRandom function is available for use in the operating systems listed in the Requirements section. It may be altered or unavailable in subsequent versions. Instead, use the CryptGenRandom function.] PD>The RtlGenRandom function generates a pseudo-random number. PD>Note This function has no associated import library. This function is available as a resource named SystemFunction036 in Advapi32.dll. You must use the LoadLibrary and GetProcAddress functions to dynamically link to Advapi32.dll.
PD>Кошмар!
Спасибо за исследования!
Я на своей 2000 добился отсутствия ошибок трансляции. Но прога завершалась при обращении к этой функции. Теперь понятно, почему.
Дома инета не было, поэтому по линкам пройти не мог. Но первая ссылка в MSDN такая же, как и на сайте.
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Здравствуйте, Pavel Dvorkin, Вы писали:
PD>Здравствуйте, LaptevVV, Вы писали:
LVV>>rand_s()
PD>Жуткая функция!
PD>Кошмар!
Я склонен думать, что эту функцию назвали Secure не из-за её параметров, а из-за того, что она использует системный датчик случайных чисел, а не самописный (который используется в rand и оставляет желать лучшего). Т.е. под Secure имеется в виду то, что её можно использовать при решении криптографических задач.
N>Я склонен думать, что эту функцию назвали Secure не из-за её параметров, а из-за того, что она использует системный датчик случайных чисел, а не самописный (который используется в rand и оставляет желать лучшего).
Я таки очень извиняюсь, но чем системный отличается от самописного, если речь идет о продукции Микрософт ?
>Т.е. под Secure имеется в виду то, что её можно использовать при решении криптографических задач.
Не стоит
[The RtlGenRandom function is available for use in the operating systems listed in the Requirements section. It may be altered or unavailable in subsequent versions. Instead, use the CryptGenRandom function.]
Здравствуйте, Pavel Dvorkin, Вы писали:
PD>Я таки очень извиняюсь, но чем системный отличается от самописного, если речь идет о продукции Микрософт ?
Извиняюсь за оффтоп, но складывается чувство, что здесь собрались сплошь латентные микрософтофобы Не подумайте, что я являются проповедником микрософта — там _s функции в проектах не использую почти никогда, первым же делом всегда дефайню _CRT_SECURE_NO_DEPRECATE
Извиняюсь за оффтоп, но складывается чувство, что здесь собрались сплошь латентные микрософтофобы Не подумайте, что я являются проповедником микрософта — сам _s функции в проектах не использую почти никогда, первым же делом всегда дефайню _CRT_SECURE_NO_DEPRECATE
Здравствуйте, Roman Odaisky, Вы писали: RO>И правильно. Всё намного проще. Читай байты из /dev/random, и будет тебе счастье. RO>(Чем одно платформеннозависимое решение лучше другого?)
Не понимаю иронии. /dev/random — платформозависимое решение, а rand_s() — решение, которое по сути не рекомендует использовать сам разработчик.
Здравствуйте, Mr.Cat, Вы писали:
MC>Здравствуйте, Roman Odaisky, Вы писали: RO>>И правильно. Всё намного проще. Читай байты из /dev/random, и будет тебе счастье. RO>>(Чем одно платформеннозависимое решение лучше другого?)
MC>Не понимаю иронии. /dev/random — платформозависимое решение, а rand_s() — решение, которое по сути не рекомендует использовать сам разработчик.
Гм, боюсь спросить, а где именно написано, что не рекомендует?
Здравствуйте, Mr.Cat, Вы писали:
MC>Здравствуйте, Nazik, Вы писали: N>>Т.е. под Secure имеется в виду то, что её можно использовать при решении криптографических задач.
MC>Эм... Самостоятельно почитав то, что написано про RtlGenRandom, я вообще побоялся бы rand_s использовать.
Здравствуйте, lifrsdn, Вы писали: L>Гм, боюсь спросить, а где именно написано, что не рекомендует? здесь
...хотя тут вот товарищ вовсю RtlGenRandom рекламирует.
Ситуация такая:
On a default Windows XP and later install, CryptGenRandom calls into a function named ADVAPI32!RtlGenRandom, which does not require you load all the CryptAPI stuff.
то бишь
По умолчанию, начиная с Windows XP и CryptGenRandom обращается к функции ADVAPI32!RtlGenRandom, которая не требует загрузки CryptoAPI.
Вот. Идея заключается в том, чтобы не загружая CryptoAPI получить "сильные" случайные числа. Только способ получается платформозависимым. Правда я сомневаюсь, что MS уберет RtlGenRandom из будущих версий винды.
Здравствуйте, Mr.Cat, Вы писали:
MC>Здравствуйте, lifrsdn, Вы писали: L>>Гм, боюсь спросить, а где именно написано, что не рекомендует? MC>здесь
MC>...хотя тут вот товарищ вовсю RtlGenRandom рекламирует.
MC>Ситуация такая: MC>
MC>On a default Windows XP and later install, CryptGenRandom calls into a function named ADVAPI32!RtlGenRandom, which does not require you load all the CryptAPI stuff.
MC>то бишь MC>
MC>По умолчанию, начиная с Windows XP и CryptGenRandom обращается к функции ADVAPI32!RtlGenRandom, которая не требует загрузки CryptoAPI.
MC>Вот. Идея заключается в том, чтобы не загружая CryptoAPI получить "сильные" случайные числа. Только способ получается платформозависимым. Правда я сомневаюсь, что MS уберет RtlGenRandom из будущих версий винды.
CryptGenRandom требует HCRYPTPROV. Чтобы её вызвать нужно всё равно загрузить CryptoAPI получается.
Здравствуйте, lifrsdn, Вы писали:
L>CryptGenRandom требует HCRYPTPROV. Чтобы её вызвать нужно всё равно загрузить CryptoAPI получается.
CryptGenRandom использует ADVAPI32!RtlGenRandom для генерации. Т.е. можно пользоваться тем же генератором случайных чисел, но без криптопровайдера
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Здравствуйте, CreatorCray, Вы писали:
L>>CryptGenRandom требует HCRYPTPROV. Чтобы её вызвать нужно всё равно загрузить CryptoAPI получается. CC>CryptGenRandom использует ADVAPI32!RtlGenRandom для генерации. Т.е. можно пользоваться тем же генератором случайных чисел, но без криптопровайдера
Рядом написал, что можно и с провайдером, для получения самого провайдера crypt32 не нужна.
Здравствуйте, Nazik, Вы писали:
N>Я склонен думать, что эту функцию назвали Secure не из-за её параметров, а из-за того, что она использует системный датчик случайных чисел, а не самописный (который используется в rand и оставляет желать лучшего).
Именно так. Все известный случаи фаторизации RSA1024 были сдаланы из-за слабости библиотечных rand.
N>Т.е. под Secure имеется в виду то, что её можно использовать при решении криптографических задач.
Возможно, но это всё равно чёрныё ящик.
Лучше взять например быстрый и надёжный rrand от Marcos el Ruptor.
People who are more than casually interested in computers should have at least some idea of what the underlying hardware is like. Otherwise the programs they write will be pretty weird (c) D.Knuth
Здравствуйте, gear nuke, Вы писали: GN>Возможно, но это всё равно чёрныё ящик.
Скорее серый. Не помню точно где, где-то был указан алгоритм, по которому работает RtlGenRandom. Хотя код, к сожалению, можно только ассемблерный выдрать...
Здравствуйте, Nazik, Вы писали:
N>Здравствуйте, Pavel Dvorkin, Вы писали:
PD>>Здравствуйте, LaptevVV, Вы писали:
LVV>>>rand_s()
PD>>Жуткая функция!
PD>>Кошмар!
N>Я склонен думать, что эту функцию назвали Secure не из-за её параметров, а из-за того, что она использует системный датчик случайных чисел, а не самописный (который используется в rand и оставляет желать лучшего). Т.е. под Secure имеется в виду то, что её можно использовать при решении криптографических задач.
есть слова случайный и псевдослучайный. только случаййный для криптографии. Источники — таймер, мышь, экран и чегото там внутри виндовс. Насчет качества rand — используется rand =rand *а+б. они конечно случайные, но нужен то диапазон не 2^16 ? 2^32 а свой, поэтому берется операция / и % , а тут уже как будет с кореляцией последовательных значений.
Здравствуйте, Mr.Cat, Вы писали:
MC>Здравствуйте, gear nuke, Вы писали: GN>>Возможно, но это всё равно чёрныё ящик.
MC>Скорее серый. Не помню точно где, где-то был указан алгоритм, по которому работает RtlGenRandom. Хотя код, к сожалению, можно только ассемблерный выдрать...
Есть еще из исходников win 2000 сурс на С
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Здравствуйте, Programador, Вы писали:
P>есть слова случайный и псевдослучайный. только случаййный для криптографии. Источники — таймер, мышь, экран и чегото там внутри виндовс. Насчет качества rand — используется rand =rand *а+б. они конечно случайные, но нужен то диапазон не 2^16 ? 2^32 а свой, поэтому берется операция / и % , а тут уже :xz: как будет с кореляцией последовательных значений.
Уже достаточно давно есть Yarrow генератор (и его улучшение — не помню название), который на основании правильно подготовленной энтропии делает псевдослучайные данные, пригодные для практически любой современной криптографии (может быть, кроме военных и особо секретных назначений). Реализация которая у меня под рукой — 1700 строк, 50K кода (не знаю, сколько из них ушло на сугубо внутриядерные примочки). Для настольной или серверной системы это копейки, а пользы — вагон.
Здравствуйте, gear nuke, Вы писали:
GN>Лучше взять например быстрый и надёжный rrand от Marcos el Ruptor.
Надежность вообще то доказывать надо. По тестам — равномерность распределения хорошая. А вот касательно надежности с точки зрения предсказуемости — это уже автору бы озаботиться об анализе своего детища, все таки Sean O'Neil (АКА Marcos el Ruptor) — криптоаналитик...
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Здравствуйте, CreatorCray, Вы писали:
CC>Надежность вообще то доказывать надо.
Ну, чего не знаю, того не знаю.. Доказана ли надёжность того же RSA? Лично для меня авторитет автора сомнений не вызывает: когда я делал white box AES, анализ закончился на том, что у заказчика на Ruptor'а денег не хватило Потому, кстати, в апреле сорцы генератора помещу в public domain.
People who are more than casually interested in computers should have at least some idea of what the underlying hardware is like. Otherwise the programs they write will be pretty weird (c) D.Knuth
Здравствуйте, gear nuke, Вы писали:
CC>>Надежность вообще то доказывать надо. GN>Ну, чего не знаю, того не знаю.. Доказана ли надёжность того же RSA?
И давно RSA — генератор случайных чисел?
GN> Лично для меня авторитет автора сомнений не вызывает: когда я делал white box AES, анализ закончился на том, что у заказчика на Ruptor'а денег не хватило
Интересный критерий оценки авторитета, однако
То, что Sean хорошо разбирается в теме сомнений не вызывает. Сомнения вызывают достаточно спорные заявления, приводимые без доказательств. Кроме того, его теория "заговора" в криптосообществе у меня например вызывает подозрения в его адекватности.
GN> Потому, кстати, в апреле сорцы генератора помещу в public domain.
+1
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Забанили по IP, значит пора закрыть эту страницу.
Всем пока