LINUX.ORG.RU

GnuPG: шифрование несекретным ключом, расшифровка паролем

 ,


0

2

Привет, all.

Я чайник в теме шифрования, но мне интересно, можно ли с GnuPG шифровать файлы несекретным ключом, но расшифровывать обычным секретным паролем?

Зачем это нужно? Я старый пердун, далёкий от современных мод и технологий, по историческим причинам делаю бекап /home и прочих важных файлов простым .sh скриптом по крону, который архивирует всё в .tar.gz, который я потом руками шифрую gpg -c и заливаю на облачный диск (яндекс.диск). Расшифровка паролем удобна тем, что не нужно таскать с собой секретный ключ и беспокоится о его безопасности, пароль же всегда в голове и достать и расшифровать свои файлы я могу откуда угодно. Но я задолбался вручную шифровать, хочу прописать это в скрипт, но не хочу палить пароль. Собственно и отсюда вопрос сабжа.

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

xaizek ★★★★★ ()

можно использовать этот пароль как сид при генерации секретного ключа. Безопасности тогда конечно крышка и так никто не делает, но в принципе, почему нет)

Lrrr ★★★ ()
Ответ на: комментарий от xaizek

Насколько я знаю, GnuPG всегда защищает приватный ключ паролем. То есть даже при наличии приватного ключа необходим ещё пароль.

Интересно, каким образом GnuPG защищает паролем приватный ключ? Симметрично шифрует? Я пытался почитать man, но там чёрт голову сломает.

Я к чему, насколько безопасно просто открыто хранить приватный ключ?

P.S. Я, конечно, понимаю, что мы живём в реальном мире, поэтому даже хранить все данные на облаке в открытом виде абсолютно безопасно, если только твой враг не Моссад. Но меня интересует теоретическая сторона.

meduza ()
Последнее исправление: meduza (всего исправлений: 2)

Можно добавить в скрипт команду gpg по шифрованию файла архива, которая запросит пароль. При расшифровке архива тоже надо будет ввести пароль. В чем собственно проблема?

mxfm ★★ ()
Ответ на: комментарий от mxfm

В том, что скрипт выполняется кроном, и мне не хочется видеть окно «Enter passphrase» в случайное (для меня) время. Я гарантирую, что оно всегда будет выводится посреди самого интересного момента самого интересного фильма, а обе руки будут в жире от самой вкусной курицы.

meduza ()
Последнее исправление: meduza (всего исправлений: 1)
Ответ на: комментарий от meduza

В таком случае можно сделать так: сгенерить пароль-файл, выставить права на чтение root, в скрипте дать команду на шифрование через рута, который сможет прочитать пароль. Думаю очевидно, что в таком случае взлом root даст возможность прочитать файл.

Ещё идея - зашифровать пароль в файле. Работа скрипта начинается сразу с запроса пароля на расшифровку файла с паролем которым будет прикрыт архив. После работы скрипта расшифрованный файл удаляется. Тут пробой безопасности заключается в том, что пароль будет доступен в течение всего времени работы скрипта. Плюс в том, что запрос пароля идёт сразу после запуска скрипта, т. е. в детерминированное время.

mxfm ★★ ()
Ответ на: комментарий от meduza

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

xaizek ★★★★★ ()
Последнее исправление: xaizek (всего исправлений: 1)
Ответ на: комментарий от meduza

не хочется видеть окно «Enter passphrase»

Твой приватный ключ зашифрован симметричным. Если бы он не шифровался, то взлом рута приводил бы к утечке приватного ключа.

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

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

anonymous ()
Ответ на: комментарий от Lrrr

можно использовать этот пароль как сид при генерации секретного ключа

:)

$ echo Secret message > secret.txt

$ ./meduza.py -k > key.pub
Enter new passphrase: ***

$ ./meduza.py secret.txt key.pub > secret.txt.enc

$ file secret.txt.enc 
secret.txt.enc: data

$ ./meduza.py secret.txt.enc > secret.txt.dec
Enter passphrase to decrypt: ***

$ cat secret.txt.dec
Secret message

Правда теперь придётся везде таскать с собой файл скрипта и его зависимости xD

Сперва генерируется публичный ключ, который можно хранить открыто. Этим ключом шифруется сессионный рандомный ключ, которым симметрично шифруется файл. Сессионный ключ дописывается в начало зашифрованного файла. Пароль требуется только при создании публичного ключа и при расшифровке файла, во время которой генерируется закрытый ключ для расшифровки сессионного ключа. По скорости — так себе, 5+ секунд на гигабайт.

Для запуска нужны Python 3.6+, PyCryptodome и Linux. На винде не будет нормально работать ввод пароля.

https://pastebin.com/1BiTbqNU

anonymous ()
Ответ на: комментарий от anonymous

Спасибо! Не думал, что кто-то напишет скрипт для меня. Но, видимо, зря.

Правда теперь придётся везде таскать с собой файл скрипта и его зависимости xD

Это главный недостаток. Плюс gpg в том, что его всегда можно скачать, где бы я ни был, на любом компьютере, на любой ОС, без всяких танцев с бубном я могу получить доступ к моим файлам. (Если нужно только симметричное шифрование, то вообще можно использовать какой-нибудь архиватор типа 7-zip или rar, там по-моему, тот же AES-256).

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

meduza ()
Последнее исправление: meduza (всего исправлений: 1)
Ответ на: комментарий от meduza

Не за что :) Мне и самому было интересно. Вроде как тема называется «гибридная криптография», но каких-то вменяемых инструментов я не нашёл.

В принципе скрипт можно залить на какой-нибудь Гитхаб и потом тоже хоть откуда скачивать. Да даже по приведённой ссылке можно (не знаю правда насколько долго просуществует, но в настройках пасты указал вечное хранение). Насколько я знаю, PyCryptodome — это чисто питоновская либа, без строгих зависимостей от других библиотек. То есть на Гитхабе её можно положить рядом со скриптом и таким образом избавиться от зависимостей вообще, кроме питона конечно. За лицензию и авторство Анон с лора не подтянет, поэтому считай что Public Domain ;)

Из серьёзных недоработок: отсутствует проверка целостности данных; при генерации ключа не используется KDF, типа PBKDF2; несовместимость со стандартными инструментами. Из минорных вещей я бы отметил скудные возможности командной строки и отсутствие выбора алгоритмов шифрования. Проблему с вводом пароля на винде решить не сложно, но мне оно не нужно. В целом, с запуском там должно быть всё ок.

Если нужно только симметричное шифрование, то вообще можно использовать какой-нибудь архиватор типа 7-zip

Я, кстати, так и делаю. Делаю бекапы вручную и потом пакую в шифрованный .7z. Пароль записываю в блокнотик :)

Видимо, самое простое решение – это просто симметрично шифровать секретный ключ паролем

Он уже зашифрован, поэтому GPG и спрашивает пароль каждый раз. Если выкладывать секретный ключ, то это ничем не будет отличаться от просто симметричного шифрования. Даже у второго будет преимущество — лёгкая смена пароля, в то время как для асимметричного придётся для каждого случая генерировать новую пару ключей + пароль.

anonymous ()

Я на openssl делал такое. Ничего сложного, два ключа, приватный ключ шифруется паролем и включается в бекап.

Legioner ★★★★★ ()
Ответ на: комментарий от meduza

мы живём в реальном мире

в смысле в противопоставление лунатику-клоуну, награфоманившего бредни по ссылке? ума не приложу, зачем я по ней спросоня сходил, 7:13 а моя толерантность к тупняку уже на нуле.

t184256 ★★★★★ ()
Ответ на: комментарий от t184256

По ссылке был сумбурный перевод. Вот здесь на сайте автора (James Mickens) можете почитать оригинал (статья «This World Of Ours»), а также другие его статьи. На ютубе есть его лекции. Уровень сарказма зашкаливает, но если читать между строк, то чувак пишет очень умные вещи. Рекомендую.

meduza ()
Последнее исправление: meduza (всего исправлений: 1)
Ответ на: комментарий от meduza

Не в переводе дело, там на бытовом уровне тупости. Типа «давайте сведём весь спектр threat models к одной невероятной и одной маловероятно и будем угарать с абсурдности». Кто-то ведь может прочитать и проникнуться.

t184256 ★★★★★ ()
Ответ на: комментарий от t184256

Не стоит принимать ту статью слишком буквально. Мораль её в том, что в реальном мире модель угроз сильно проще.

Даже в контексте данной теме самым простым решением моей проблемы будет… прописать пароль в открытом тексте в скрипте. А самая главная проблема – как этот пароль запомнить! А можно вообще ничего не шифровать.

meduza ()

хз нужно ли тебе решить проблему правильно (тм) , но если вдруг.

бЭкапЪ:

  • генеришь одноразовый симметричный бэкапЪ ключЪ (AES, для простоты)
  • шифруешь его не секретной, известной всем публичной частью асимметричного ключа
  • шифруешь бэкапЪ ключомЪ свои файлики
  • рядом кладешь зашифрованный бэкапЪ ключЪ

разЪбэкаплiванIe:

  • мастер-ключ + PBKDF2 = ключ шифрования приватного ключа (тадаммм, ввод паролика, все как ты хотел)
  • им извлекаем (расшифровываем) приватную часть асимметричного ключа
  • ею расшифровываем бэкапЪ ключЪ
  • разЪбэкаплiваемЪ

спрашивайте ваши вопросы

olelookoe ★★ ()
Ответ на: комментарий от t184256

Оффтопик про статью начали вы.

По поводу замечания tz4678, мне просто интересно, какое именно слово господину непонятно. Лично мне непонятно, как можно не прочитать даже головной вопрос темы, прежде чем писать, мол, просто шифруйте zip-ом.

meduza ()
Ответ на: комментарий от anonymous

Самое веселье, что при взломе рута, тебе можно вместо настоящего окошка по вводу пароля показать липовое и ты сам введёшь всё что надо и всё будет поломано в тот момент когда нажмёшь enter.

peregrine ★★★★★ ()
Для того чтобы оставить комментарий войдите или зарегистрируйтесь.