Почему запись в/dev/random не делает параллельное чтение из/dev/random быстрее?

Сделайте следующее

vim /home/<username>/.gconf/apps/panel/toplevels/bottom_panel/%gconf.xml

или

vim /home/<username>/.gconf/apps/panel/toplevels/top_panel/%gconf.xml

Если Вы переименовали свою панель, изменение top_panel или bottom_panel соответственно.

Искать orientation раздел

<entry name="orientation" mtime="1356417211" type="string">
    <stringvalue>bottom</stringvalue>
</entry>

Изменение bottom кому: top, left или right.

24
09.07.2014, 13:08
3 ответа

Можно написать в /dev/random, так как это часть способа предоставления дополнительных случайных байтов в /dev/random, но этого недостаточно, вы также должны уведомить систему о наличии дополнительной энтропии с помощью вызова ioctl().

Мне нужна была такая же функциональность для тестирования моей программы настройки смарт-карты , так как я не хотел ждать, пока моя мышь/клавиатура сгенерирует достаточно для нескольких вызовов gpg, которые были сделаны для каждого тестового запуска. Что я сделал, так это запустил программу на Python, которая выполняется параллельно с моими тестами. Естественно, она должна не вообще использоваться для реальной генерации ключей gpg, так как случайная строка вовсе не случайна (генерируемая системой случайная информация все равно будет чередоваться). Если у вас есть внешний источник для установки строки для random, то вы должны иметь высокую энтропию. Проверить энтропию можно с помощью:

cat /proc/sys/kernel/random/entropy_avail

The program:

#!/usr/bin/env python
# For testing purposes only 
# DO NOT USE THIS, THIS DOES NOT PROVIDE ENTROPY TO /dev/random, JUST BYTES

import fcntl
import time
import struct

RNDADDENTROPY=0x40085203

while True:
    random = "3420348024823049823-984230942049832423l4j2l42j"
    t = struct.pack("ii32s", 8, 32, random)
    with open("/dev/random", mode='wb') as fp:
        # as fp has a method fileno(), you can pass it to ioctl
        res = fcntl.ioctl(fp, RNDADDENTROPY, t)
    time.sleep(0.001)

(Не забудьте убить программу после завершения)

.
21
27.01.2020, 19:41

Обычно он разрабатывается разработчиками ядра и документируется в man 4 random:

Writing to /dev/random or /dev/urandom will update the entropy pool
with the data written, but this will not result in a higher entropy
count.  This means that it will impact the contents read from both
files, but it will not make reads from /dev/random faster.
14
27.01.2020, 19:41

Энтони уже объяснил, что запись в / dev / random не увеличивает счетчик энтропии, и показал, как RNDADDENTROPY ioctl (см. ] random (4) ) можно использовать для оценки энтропии. Очевидно, что это не совсем безопасно, поэтому есть альтернатива, когда доступен аппаратный генератор случайных чисел.

Следующие реализации берут 512 байт (4096 бит) случайности из / dev / hwrng и направляют его в пул энтропии (зачисляя 4 бита энтропии на байт, это мой произвольный выбор) . После этого он вызовет системный вызов select (2) для блокировки при заполнении пула энтропии (описано в справочной странице random (4) ).

Версия Python:

import fcntl, select, struct
with open('/dev/hwrng', 'rb') as hw, open('/dev/random') as rnd:
    while True:
        d = hw.read(512)
        fcntl.ioctl(rnd, 0x40085203, struct.pack('ii', 4 * len(d), len(d)) + d)
        select.select([], [rnd], [])

Поскольку в iso Arch Linux не был установлен Python, вот и версия Perl:

open my $hw, "</dev/hwrng" and open my $rnd, "</dev/random" or die;
for (;;) {
    my $l = read $hw, my $d, 512;
    ioctl $rnd, 0x40085203, pack("ii", 4 * $l, $l) . $d or die;
    vec(my $w, fileno $rnd, 1) = 1;
    select undef, $w, undef, undef
}

Вероятно, это программа rngd (часть rng-tools ) имеет (непроверенный), за исключением того, что он использует инструменты (Python или Perl), которые уже широко доступны.

1
27.01.2020, 19:41

Теги

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