/dev/urandom
има ли за еквивалент CryptGenRandom (което се използва от RNGCryptoServiceProvider) в Windows? Видях, че всъщност devurandom в OpenBSD може и да е по- добро от в повечето Linux. Според зависи източниците на ентропия. Имало ли е значение за някой, така че да мине на OpenBSD? Според секюрити аудиторите ми, CentOS и Windows Server 2016, с последни ъпдейти е ОК. Вероятно е, но има ли нужда в определени ситуации да го мисля?
Ами не, няма причина да го мислиш.
С изключение на това кой точно генератор да използваш /dev/random
или /dev/urandom
.
По този въпрос текат постоянни спорове. Едни казват, че за криптография не трябва да се използва urandom
, други, обратно, че именно той трябва да се използва и нищо друго.
много зависи къде ти е софтуера :) аз съм виждал зависнали вмки в клауда, защото на /dev/random му беше свършила ентропията и съответно всички ВМи чакаха именно там
Да, вчера попаднах на един такъв. urandom имало консистентно поведение на всички nix системи и било по-добре да не ти увисне инвокацията, отколкото няколко процеса да чакат за резултат, ако random блокира инвокацията. Т.е. разбрах го, че е по-добре да разчитам на малко ентропия, отколкото да изчакам да се генерира достатъчно ентропия, защото тогава ентропията била по-предвидима. А и на виртуалки източниците на ентропия били по-малко, защото не влизат тайминги на клавиатури и т.н., които имало на нормално желязо. Но корпоративно винаги съм на виртуалки. Само дома съм на истинско желязо.
Тук имам да дълбая още, не претендирам, че го разбирам добре на толкова low level. В netcore ще ползвам RngCrypto,което би трябвало да съобрази на каква операционна система е и ако е на линукс да си инвокира, например /dev/urandom
Не работят така нещата. Примерно в джава SecureRandom, което се ползва за крипто, ползва по дефолт /dev/random. Няма такова нещо като съобразяване. Твойта работа е да съобразиш, а компа прави само каквото му кажеш.
Сега търся какво използва RNGCryptoServiceProvider
. Имам доказателства, че не използва /dev/random
, но нямам доказателства, че използва /dev/urandom
. Порових даже малко в сорса на неткора, обаче още не го намерих. Открих, че за Линукс се ползва RandomNumberGeneratorImplementation.Unix.cs по- конкретно, което инвокира Interop.Crypto.GetRandomBytes(...)
. То, от своя страна, ще си извика OpenSSL
. Сега имам работа, после ще продължа с търсенето
Значи, отговорът е, че ще ползват каквото намерят за добре, но по- скоро ще е /dev/urandom
System.Security.Cryptography.Native По- сложно, back to the books....
/dev/random
vs /dev/urandom/
> Myths about /dev/urandom
by Thomas Hühn.