Лучший скрипт шифрования / дешифрования PGP / GPG


2

Есть ли хороший Python по умолчанию или простой сценарий оболочки, который я могу использовать для шифрования и дешифрования файлов через PGP / GPG? Я буду запускать этот скрипт каждые 5 минут.

Ответы:


9

Вы не хотите симметричный шифр

Если вам нужно автоматически запустить шифрование, вы не хотите использовать симметричный шифр с парольной фразой (это то, что делает gpg -ac ). Хранить парольную фразу в скрипте или в cron недопустимо и бессмысленно (серьезно, это звучит грубо, но вы можете также сгнить 13).

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

В этом случае вам нужна криптография с открытым ключом. Вы генерируете закрытый ключ (который снова шифруется симметричным шифром с паролем) и открытый ключ. Открытый ключ может распространяться где угодно. Любой может зашифровать данные, которые вы можете прочитать с помощью вашего закрытого ключа. Никто не должен иметь доступ к вашему личному ключу. Так что для того типа шифрования, который вам нужен, он идеален. Вы можете хранить свой открытый ключ на сервере и шифровать все свои данные, используя его. Если у злоумышленника есть ваш открытый ключ и зашифрованные данные, он ничего не может сделать.

Ваш закрытый ключ должен быть частью головоломки, которую потенциальный злоумышленник всегда упускает. Вы должны это скрыть. т.е. шифрование данных, которые вы можете прочитать, легко. Расшифровывать это должно быть сложно. С симметричным шифром сложность обоих одинакова (если вы хотите думать об этом в этих терминах, это, вероятно, не самая лучшая аналогия).

GPG делает общедоступную криптографию относительно безболезненной, но, во-первых, вам нужно сгенерировать пару ключей (это не делается на вашем сервере, но на вашем рабочем столе или в другом безопасном месте вы счастливы, имея свой закрытый ключ):

$ gpg --gen-key

Пробежись по вопросам там.

Затем вы хотите экспортировать ваш открытый ключ GPG, скопировать и вставить его на свой сервер:

$ gpg --list-keys
$ gpg --armor --export me@mydomain.com > pub.key

Скопируйте pub.key на ваш сервер и затем импортируйте с помощью:

$ gpg --import pub.key

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


0
#!/bin/bash
gpg -ac passphrase="secret" < $1

Кажется, немного ненужным, чтобы сделать его собственным сценарием.


Мне нужно автоматически запускать шифрование файлов каждые 5 минут.
Даниил

Тогда вы можете просто бежать gpg -ac passphrase="secret" < fileиз cron. Как сказал Тайлерл, здесь действительно нет необходимости в сценарии.
EEAA

2
Должен быть лучший способ защитить «секрет», чем просто засовывать его в cron или прямо в командной строке. В противном случае любой может прочесть «секрет» прямо из ps -ef.
Дэвид Макинтош

2
Если вам не нужна парольная фраза в скрипте, вы можете прочитать ее из другого файла или настроить gpg-agent. gnupg.org/documentation/manuals/gnupg/… Если вы помещаете его в файл или включаете в сценарий, убедитесь, что вы соответствующим образом ограничили доступ как к файлу, так и к сценарию, который может прочитать файл.
Дж. Циммерман

0

Следующая crontabстрока будет вызывать secretfileшифрование каждые 5 минут с указанной парольной фразой без раскрытия парольной фразы ps auxи аналогичных запросов. Конечно, вы, вероятно, также захотите что-то сделать с исходным файлом и зашифрованным результатом, но это ваше дело.

*/5 * * * * gpg -c --passphrase-fd 3 secretfile 3<<<"passphrase"
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.