Обсуждая порочность предложения инженеров из компании Intel об использовании в качестве энтропии для генератора случайных чисел ядра Linux только инструкции RDRAND (http://ru.wikipedia.org/wiki/RdRand), Theodore Ts'o обнаружил (https://plus.google.com/u/0/117091380454742934025/posts/SDco... существенную проблему в безопасности (https://lists.openwrt.org/pipermail/openwrt-devel/2013-Septe... проявляющуюся на процессорах с архитектурой MIPS. Энтропия для многих генераторов псевдослучайных чисел формируется на основе вызова get_cycles(), который на деле не работает для систем MIPS и вместо числа отработанных циклов CPU всегда возвращает ноль. Таким образом, на системах MIPS, используемых во многих беспроводных маршрутизаторах, выдаются заведомо предсказуемые случайные числа, что в свою очередь приводит к генерации предсказуемых ключей шифрования.
URL: https://lists.openwrt.org/pipermail/openwrt-devel/2013-Septe...
Новость: http://www.opennet.me/opennews/art.shtml?num=37869
Не надо использовать "многих генераторов псевдослучайных чисел" - используйте один проверенный.
http://www.zazzle.com/14_is_a_random_number_t_shirts-2350463...
http://dilbert.com/strips/comic/2001-10-25/
> Таким образом, на системах MIPS, используемых во многих беспроводных маршрутизаторах, выдаются заведомо предсказуемые случайные числа, что в свою очередь приводит к генерации предсказуемых ключей шифрования.На КикСтартере начат сбор средств на производство "Вангователя" для систем MIPS. Разработчики "Вангователя", не имеющего аналогов в мире, и кстати основанного на последних достижениях нанотехнологий, обещают 99,99 процентную вероятность и распределение имени Гаусса. Вносите деньги господа !
Из описания "Вангователя":"Однако не следует думать, что здесь какое-либо колдовство или чудеса. Ничего подобного, ибо чудес не существует. Все построено исключительно на силах природы с разрешения месткома и культурно-просветительной комиссии и представляет собою виталлопатию на основе гипнотизма по учению индийских факиров, угнетенных английским империализмом."(С)
> используйте один проверенный.Это какой? Одобренный АНБ? Как-то так?
int random()
{
return 4; //chosen by fair dice roll - guaranteed to be random
}
Ха! Вот вам и закладка от АНБ. Хорошо, что обнаружили. А сколько их ещё осталось...?
Осталось ≈ (∞-1)
подпись: ♘☃ (snowman on white horse)
Попыткой всучить закладку от АНБ смотрится:> только инструкции RDRAND
... а потом окажется что не такой уж он и RAND - и вот это будет весело.
Угу, вот на это больше шансов. А баги - они были, есть и будут.
> Угу, вот на это больше шансов. А баги - они были, есть и будут.Да как делать нефиг - засунуть PRNG, например, и выдавать его вывод. Без знания алгоритма качественный PRNG вполне сойдет за "рандом".
без знания алгоритма этот PRNG — плохой. а проанализировать его всё равно можно, просто открытый менее трудозатратно.
И не тлько в MIPS, почти половины поддерживаемых архитектур в timex.h функция выглядит так:
static inline cycles_t get_cycles (void)
{
return 0;
}
как временное решение - возвращать там jiffies
> как временное решение - возвращать там jiffiesЕщо один криптограф!
jiffies ^ jiffies будет 0, а то точно пи....ц! :)
ok, jiffies + n, где n каждое обращение прибавляется из некоей таблицы с нормальным распределением, которая сформирована при включении устройства на основании системного времени - достаточно случайно? и это в добавок к srand от системного времени
Блин, переводчика надо покромсать на маленьких тузиков...
Да и Тцо тоже, чтоб шухер не поднимал.
void add_device_randomness(const void *buf, unsigned int size)
{
unsigned long time = get_cycles() ^ jiffies; // В случае МИПСа, time будет равен jiffies;
// Эти функции пихают size байт по адресу из второго аргумента
// и пихают в общий пул (первый арг.)
mix_pool_bytes(&input_pool, buf, size, NULL);
mix_pool_bytes(&input_pool, &time, sizeof(time), NULL);
mix_pool_bytes(&nonblocking_pool, buf, size, NULL);
mix_pool_bytes(&nonblocking_pool, &time, sizeof(time), NULL);
}mix_pool_bytes - развернуто, это вот такая шняга.
static void _mix_pool_bytes(struct entropy_store *r, const void *in, int nbytes, __u8 out[64]) {
unsigned long i, j, tap1, tap2, tap3, tap4, tap5;
int input_rotate;
int wordmask = r->poolinfo->poolwords - 1;
const char *bytes = in;
__u32 w;
tap1 = r->poolinfo->tap1;
tap2 = r->poolinfo->tap2;
tap3 = r->poolinfo->tap3;
tap4 = r->poolinfo->tap4;
tap5 = r->poolinfo->tap5;
smp_rmb();
input_rotate = ACCESS_ONCE(r->input_rotate);
i = ACCESS_ONCE(r->add_ptr);
/* mix one byte at a time to simplify size handling and churn faster */
while (nbytes--) {
w = rol32(*bytes++, input_rotate & 31);
i = (i - 1) & wordmask;
/* XOR in the various taps */
w ^= r->pool[i];
w ^= r->pool[(i + tap1) & wordmask];
w ^= r->pool[(i + tap2) & wordmask];
w ^= r->pool[(i + tap3) & wordmask];
w ^= r->pool[(i + tap4) & wordmask];
w ^= r->pool[(i + tap5) & wordmask];
/* Mix the result back in with a twist */
r->pool[i] = (w >> 3) ^ twist_table[w & 7];
/*
* Normally, we add 7 bits of rotation to the pool.
* At the beginning of the pool, add an extra 7 bits
* rotation, so that successive passes spread the
* input bits across the pool evenly.
*/
input_rotate += i ? 7 : 14;
}
ACCESS_ONCE(r->input_rotate) = input_rotate;
ACCESS_ONCE(r->add_ptr) = i;
smp_wmb();
if (out)
for (j = 0; j < 16; j++)
((__u32 *)out)[j] = r->pool[(i - j) & wordmask];
}Вращения с семью побайтными XOR это необратимая ж...а. Входной аргумент у этой
функции это так сказать "волшебный пендаль", чтоб оно закрутилось. Достаточно различия
в один байт от предыдущего значения. А jiffies это такая клёвая штука - она два раза себя
одинаковой не возвращает, как бы не тужились.И опять же, это всего лишь функция наполнения пула энтропии, для генерации чисел оттуда ещё выбирать нужно.
Без get_cycles() знтропия на MIPS получается зависима только от времени, т.е. вполне предсказуема за разумное число попыток перебора. Время загрузки известно, прошивка и условия загрузки неизменны, поэтому становятся применимы соответствующие техники атаки.
> Вращения с семью побайтными XOR это необратимая ж...а.Проблема нерандомного рандома даже не в необратимости а в возможности предсказать каким он был. Дебианщики на этом разочек очень больно налетели, когда оказалось что любой желающий может сгенерить привкей "пряом как у Васи с его Дебианом" просто ... просто угадав хреновый "рандом".
Вот это порадовало:> Sure, I could imagine an option where the user specifies random.i_trust_the_intel_RDAND_hasnt_been_teampered_by_the_nsa=1 on the boot command line which routes RDRAND directly into /dev/random, where we blindly trust that RDRAND has full, completely trusted entropy.
> ... by_the_nsa=1Массовая шиза от NSA
Не шиза, а паранойя.
И да, паранойя не смертельна. В отличие от недостатка контрацепции.Зыж
Цитату Дольфа Лунгрена приводить?
> Не шиза, а паранойя.При том паранойя - профессиональное заболевание криптографов. Если криптограф не параноик - гнать его взашей, сс@нами тряпками и ср@ной метлой. В криптографии не бывает мелочей. А криптография второго сорта - это тухлятина.
>При том паранойя - профессиональное заболевание криптографов.Скорее всё же это его проф. обязанности.
Поэтому легко спутать.
> Sure, I could imagine an option where the user specifies random.i_trust_the_intel_RDAND_hasnt_been_teampered_by_the_nsa=1 on the boot command line which routes RDRAND directly into /dev/random, where we blindly trust that RDRAND has full, completely trusted entropy.В мемориз адназначна.
давайте лучше параноиков тролить, например так: "Theodore Ts'o обнаружил закладку АНБ во всех mips-роутерах мира"
> давайте лучше параноиков тролить,У тебя мозг хиловат будет чтобы криптографов затроллить. Ты с твоим IQ можешь затроллить как максимум амеб в пробирке. Если сильно повезет - дождевых червяков. И то не факт.
зато местных оналитегов - аж бигом
Молодец какой, сам себя затролил :)
> закладку АНБ во
> всех mips-роутерах мира"Есть мнение, что так оно и есть.
ХоулиШиит.
Заглянул в исходники паршивки своего домашнего древнего SOHO routera MIPS(ADP), и там такого нет - там эсть код.
З.Ы.
Скачал потому как обновлений прошивок уже не будет, а подправить кое-чего нужно было, там даже всё с тулчейном и инструкции есть.
> З.Ы.
> Скачал потому какНе надо стесняться! Тут тебя Понимают. </:-P>