Criptografar arquivo apenas com SSH -priv-key?

21

Suponha que eu queira criptografar um arquivo para que apenas eu possa lê-lo, conhecendo minha senha de chave privada SSH. Estou compartilhando um repositório onde desejo criptografar ou ofuscar informações confidenciais. Com isso, quero dizer que o repositório conterá as informações, mas só as abri em casos especiais.

  1. Suponha que eu esteja usando o SSH-agent, existe alguma maneira fácil de criptografar o arquivo para que eu possa abri-lo depois?

  2. Não consigo ver por que devo usar o GPG para isso, pergunta aqui ; basicamente eu sei a senha e quero apenas descriptografar o arquivo com a mesma senha da minha chave SSH. Isso é possível?

por Community 16.12.2011 / 21:45

3 respostas

26

Eu acho que sua exigência é válida, mas por outro lado também é difícil, porque você está misturando criptografia simétrica e assimétrica. Por favor, corrija-me se estiver errado.

Raciocínio:

  1. A frase secreta da sua chave privada é proteger sua chave privada e nada mais.
  2. Isso leva à seguinte situação: você deseja use sua chave privada para criptografar algo que só você pode descriptografar. Sua chave privada não é destinada para isso, sua chave pública está lá fazer isso. Tudo o que você criptografar com sua chave privada pode ser descriptografado pela sua chave pública (assinatura), isso certamente não é o que você quer. (O que quer que seja criptografado por sua chave pública só pode ser descriptografada pela sua chave privada.
  3. Você precisa usar sua chave pública para criptografar seus dados, mas, para isso, não precisa da sua chave secreta para isso. Só se você quiser descriptografá-lo você precisaria de sua chave privada e da frase secreta.

Conclusão: Basicamente, você deseja reutilizar sua senha para criptografia simétrica. O único programa que você gostaria de dar a sua senha é o ssh-agent e este programa não faz a criptografia / decriptografia apenas com a frase secreta. A frase secreta só está lá para desbloquear sua chave privada e depois ser esquecida.

Recomendação: Use openssl enc ou gpg -e --symmetric com arquivos-chave protegidos por frase-senha para criptografia. Se você precisar compartilhar as informações, poderá usar a infra-estrutura de chave pública de ambos os programas para criar uma PKI / Web of Trust.

Com o openssl, algo assim:

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

e descriptografia algo como

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

Atualização: É importante notar que os comandos openssl acima NÃO impedem que os dados sejam violados. Um simple flip bit no arquivo enc resultará em dados descriptografados corrompidos também. Os comandos acima não podem detectar isso, você precisa verificar isso, por exemplo, com uma boa soma de verificação como SHA-256. Existem maneiras criptográficas de fazer isso de forma integrada, isso é chamado de HMAC (Código de Autenticação de Mensagem baseado em Hash).

    
por 01.03.2012 / 08:15
21

Eu preferiria usar o utilitário openssl , pois parece ser bastante onipresente.

Converta chave pública e chave privada RSA no formato 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

Criptografando um arquivo com sua chave pública:

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

Descriptografar o arquivo com sua chave privada:

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

Mas, como Gilles comentou acima, isso é adequado apenas para criptografar arquivos menores que sua chave pública, para que você possa fazer algo assim:

Gere uma senha, criptografe o arquivo com ela simetricamente e criptografe a senha com sua chave pública, salvando-a no arquivo:

$ 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

Descriptografe a frase secreta com sua chave privada e use-a para descriptografar o arquivo:

$ 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

Você terminará com dois arquivos, seu arquivo criptografado e sua senha criptografada, mas será colocado em um script que funcionará bem.

Você pode até adicionar um tar cvf file file.enc file.enc.key para arrumar.

Na melhor das hipóteses, você maximizaria o tamanho da sua senha e também alteraria rand 64 para o tamanho da sua chave pública.

    
por 02.03.2012 / 23:39
6

Olhe para luks / dm-crypt . Você pode usar sua chave privada ssh como chave de criptografia usando a opção apropriada.

Atualização: Exemplo de criptografia usando LUKS com um dispositivo de bloco LV (teste LV no sistema VG):

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

Isto deve gerar um dispositivo de bloco / dev / mapper / test_crypt que você pode usar para armazenar seus dados (depois de formatá-lo com um sistema de arquivos de sua escolha).

Para se livrar dele, desmonte-o e use cryptsetup luksClose test_crypt .

    
por 16.12.2011 / 22:24