Шифровать файл только SSH -priv-key?

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

  1. Предположим, я использую SSH-агент, есть ли простой способ зашифровать файл только для того, чтобы открыть его позже?

  2. Я не понимаю, почему я должен использовать GPG для этого, вопрос здесь ; в основном я знаю пароль, и я хочу только расшифровать файл тем же паролем, что и мой SSH-ключ. Это возможно?

3 Solutions collect form web for “Шифровать файл только SSH -priv-key?”

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

Обоснование:

  1. Кодовая фраза для вашего закрытого ключа – это защита вашего закрытого ключа и ничего другого.
  2. Это приводит к следующей ситуации: вы хотите использовать свой секретный ключ для шифрования того, что только вы можете расшифровать. Ваш закрытый ключ не предназначен для этого, ваш открытый ключ должен это сделать. Независимо от того, что вы шифруете с помощью своего закрытого ключа, вы можете расшифровать своим открытым ключом (подписанием), это, безусловно, не то, что вы хотите. (Независимо от того, что шифруется вашим открытым ключом, вы можете расшифровать только ваш закрытый ключ.)
  3. Поэтому вам нужно использовать свой открытый ключ для шифрования ваших данных, но для этого вам не нужна кодовая фраза вашего личного ключа. Только если вы хотите расшифровать его, вам понадобится ваш закрытый ключ и кодовая фраза.

Вывод: в основном вы хотите повторно использовать кодовую фразу для симметричного шифрования. Единственной программой, которую вы хотели бы предоставить кодовую фразу, является ssh-agent, и эта программа не выполняет шифрование / дешифрование только с помощью кодовой фразы. Кодовая фраза только для того, чтобы разблокировать ваш секретный ключ, а затем забыть.

Рекомендация: Используйте openssl enc или gpg -e --symmetric с защищенными паролем gpg -e --symmetric для шифрования. Если вам нужно поделиться информацией, вы можете использовать инфраструктуру открытого ключа для обеих программ для создания PKI / Web of Trust.

С openssl, что-то вроде этого:

 $ openssl enc -aes-256-ctr -in my.pdf -out mydata.enc 

и расшифровать что-то вроде

 $ openssl enc -aes-256-ctr -d -in mydata.enc -out mydecrypted.pdf 

Обновление: важно отметить, что вышеприведенные команды openssl НЕ предотвращают подделки данных. Простой бит флип в файле enc также приведет к повреждению дешифрованных данных. Вышеуказанные команды не могут обнаружить это, вам нужно проверить это, например, с хорошей контрольной суммой, такой как SHA-256. Существуют криптографические способы сделать это интегрированным способом, это называется HMAC (код аутентификации сообщения на основе хаша).

Я бы предпочел использовать утилиту openssl поскольку она кажется довольно вездесущей.

Конвертировать открытый ключ RSA и закрытый ключ в формат PEM:

 $ openssl rsa -in ~/.ssh/id_rsa -outform pem > id_rsa.pem $ openssl rsa -in ~/.ssh/id_rsa -pubout -outform pem > id_rsa.pub.pem 

Шифрование файла с помощью открытого ключа:

 $ openssl rsautl -encrypt -pubin -inkey id_rsa.pub.pem -in file.txt -out file.enc 

Расшифровка файла с помощью закрытого ключа:

 $ openssl rsautl -decrypt -inkey id_rsa.pem -in file.enc -out file.txt 

Но, как отметил Гилл, это подходит только для шифрования файлов, которые меньше вашего открытого ключа, поэтому вы можете сделать что-то вроде этого:

Создайте пароль, зашифруйте файл с ним симметрично и зашифруйте пароль своей публикой, чтобы сохранить его в файл:

 $ openssl rand 64 | tee >(openssl enc -aes-256-cbc -pass stdin -in file.txt -out file.enc) | openssl rsautl -encrypt -pubin -inkey id_rsa.pub.pem -out file.enc.key 

Расшифруйте ключевую фразу своим личным ключом и используйте ее для дешифрования файла:

 $ openssl rsautl -decrypt -inkey id_rsa.pem -in file.enc.key | openssl enc -aes-256-cbc -pass stdin -d -in file.enc -out file.txt 

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

Вы даже можете добавить tar cvf file file.enc file.enc.key чтобы привести в порядок.

Оптимально, вы бы максимизировали размер вашей кодовой фразы, а также меняли rand 64 на размер вашего открытого ключа.

Посмотрите на luks / dm-crypt . Вы можете использовать свой ssh-private-ключ в качестве ключа шифрования, используя соответствующий параметр.

Обновление: пример шифрования с использованием LUKS с LV-блочным устройством (тест LV в системе VG):

 KEY=/home/youraccount/.ssh/id_dsa DEVICE=/dev/system/test cryptsetup luksFormat $DEVICE $KEY cryptsetup luksOpen $DEVICE test_crypt --key-file $KEY 

Это должно привести к созданию блочного устройства / dev / mapper / test_crypt, которое вы можете использовать для хранения ваших данных (после форматирования его с помощью файловой системы по вашему выбору).

Чтобы избавиться от него, umount его и использовать cryptsetup luksClose test_crypt .

  • При использовании шпатлевки alt-left / right отличается, когда byobu запускается автоматически из профиля
  • Проверьте, какие ключи ssh приняты на сервере
  • Как я могу оторваться от сеанса SSH, который разбился?
  • Control-p задерживает сеанс SSH
  • Как сделать sash учетной записи capabele только для sshfs и rsync?
  • невозможно подключиться к перенаправленному порту через ssh
  • Невозможно выполнить регистрацию открытого ключа SSH под зашифрованным домом
  • SSH всегда подключается к одному и тому же IP-адресу
  • Loop в скрипте на удаленном сервере не работает
  • Скрипт оболочки Unison и Incron
  • (SSH) Опасно ли закрывать терминал без «выхода»?
  • Linux и Unix - лучшая ОС в мире.