4

Я пытаюсь сгенерировать ключи для блокировки моего диска (используя DM-Crypt с LUKS), извлекая данные из /dev/random и затем шифруя их с помощью GPG.

В руководстве, которое я использую, предлагается использовать следующую команду:

dd if=/dev/random count=1 | gpg --symmetric -a >./[drive]_key.gpg

Если вы сделаете это без канала и загрузите файл, появится всплывающее окно (n?)curses предложит вам ввести пароль. Однако, когда я передаю данные по конвейеру, он повторяет следующее сообщение четыре раза и останавливается:

pinentry-curses: no LC_CTYPE known assuming UTF-8

Он также говорит, что can't connect to '/root/.gnupg/S.gpg-agent': File or directory doesn't exist , однако я предполагаю, что это не имеет к этому никакого отношения, так как он обнаруживается даже если ввод из файла.

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

2 ответа2

10

Убедитесь, что у вас есть tty:

# ls -l $(tty)
crw--w----. 1 foo tty 136, 0 Mar  1 16:53 /dev/pts/0
# chown root $(tty)

Установить GPG_TTY:

# export GPG_TTY=$(tty)

gpg/pinentry должен работать после этих шагов.

3

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

Тем не менее, для справки любого, кто найдет этот вопрос (и для закрепления идеи в моей голове), я напишу процедуру, которую я нашел, которая сработала бы намного позже, чем я узнал при создании initramfs.

Что вам нужно сделать, это вернуться к версии gpg, прежде чем они начали использовать внешнюю программу pinentry для ввода пароля. Насколько я знаю, это случилось с версией 2. Предполагая, что у вас установлена рабочая версия Linux, вам нужно получить статически скомпилированную версию gpg <2.0.

Это очень легко сделать с Gentoo, требуя только следующей команды:

USE="static" emerge -a1 "<gnupg-2"

Просто убедитесь, что вы используете ldd чтобы убедиться, что они на самом деле статичны, прежде чем копировать их на флэш-накопитель, чтобы вы могли использовать их во время установки.

В других дистрибутивах я предлагаю вам посмотреть @ ваш менеджер пакетов, и если это не сработает, то я попробую загрузить исходные коды и скомпилировать их.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .