Каково влияние виртуализации на криптографически сильных генераторах случайных чисел?

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

extension Array {
    public func removeNilElements<T>() -> [T] where Element == T?    {
        let noNils = self.compactMap { [110] }
        return noNils
    }
}

Пример:

let a = [1, 2, nil, 3, nil, 4]   // The type of a is [Int?]
let b = a.removeNilElements()    // The type of b is [Int]
print(b) // [1, 2, 3, 4]

В вашем коде [112] имеет (необязательный) тип Element, и это только что обернутый компилятором в необязательный для соответствия типу аргумента compactMap().

9
задан Scott W 21 April 2009 в 07:59
поделиться

3 ответа

По определению случайность криптографически сильного PRNG не должна быть затронута виртуализацией. Как Вы упоминаете, различие между/dev/random и/dev/urandom [касательно: http://en.wikipedia.org/wiki/Urandom/] - то, что операция чтения на/dev/random заблокируется, если система собрала недостаточную энтропию для создания желаемого объема случайных данных. Можно также записать в/dev/random для смешивания собственных данных в энтропийный пул.

0
ответ дан 3 November 2019 в 08:21
поделиться

Спасибо.

Из того, что я понимаю, что система, которая полагается на сеть I/O для энтропии, восприимчива к человеку в средних нападениях. Я нашел следовать статью, которая обсуждает соответствующие источники энтропии. Их предложение состоит в том, чтобы удалить сеть I/O из ядра Linux из-за его чувствительности.

Я думаю, что означает, что существует возможность для использования общих аппаратных средств в виртуализированной среде. Шанс увеличен, если сеть I/O используется. Иначе это достаточно низко для не вызывания беспокойство для всех кроме самого безопасного из приложений. В таких экземплярах это, вероятно, более безопасный разместить Ваше собственное приложение так или иначе.

0
ответ дан 3 November 2019 в 08:21
поделиться

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

[РЕДАКТИРОВАНИЕ] После заглядывания на источник ядра (на самом деле исправляют историю), похоже, что Linux, по крайней мере, собирает энтропию из нажатий клавиатуры, действия мыши, синхронизации прерывания (но не все прерывания), и времена окончания запроса блочного устройства. В виртуализированной системе я подозреваю, что мышь/события клавиатуры была бы довольно низкой и таким образом не способствовала бы собранной энтропии. По-видимому, это было бы смещено дополнительным действием прерывания сети I/O, но это не ясно. В этом отношении я не думаю, что это отличается очень от сервера non-VM.

3
ответ дан 3 November 2019 в 08:21
поделиться
Другие вопросы по тегам:

Похожие вопросы: