Como criptografar um arquivo com chave privada

1

Eu quero criptografar um arquivo com uma chave privada e descriptografá-lo com uma chave pública. Uma chave pública será incorporada no meu aplicativo. Então eu quero ter uma garantia de que o arquivo foi criado por mim. Como posso usar gpg ou openssl para implementá-lo.

    
por rewardealer 18.07.2016 / 21:17

3 respostas

3

Não faz sentido criptografar um arquivo com uma chave privada .

O uso de uma chave privada para anexar uma tag a um arquivo que garanta que o arquivo foi fornecido pelo proprietário da chave privada é chamado assinatura , e a tag é chamada assinatura .

Existe um criptossistema popular (RSA de livro didático) onde um algoritmo simplificado (inseguro) usa chaves públicas e privadas do mesmo tipo, e a descriptografia é idêntica à assinatura e a criptografia é idêntica à verificação. Esse não é o caso em geral: até mesmo a RSA usa mecanismos diferentes para descriptografia e assinatura (respectivamente criptografia e verificação) com modos de preenchimento adequados e seguros; e muitos outros algoritmos têm chaves privadas e públicas que nem são do mesmo tipo de objetos matemáticos.

Então você quer assinar o arquivo. A ferramenta padrão de fato para isso é GnuPG .

Para assinar um arquivo com sua chave secreta:

gpg -s /path/to/file

Use a opção --local-user para selecionar uma chave secreta se você tiver várias (por exemplo, sua chave do aplicativo versus sua chave pessoal).

Transfira file.gpg para o local onde você deseja usar o arquivo. Transfira também a chave pública (presumivelmente dentro do pacote de aplicativos). Para extrair o texto original e verificar a assinatura, execute

gpg file.gpg

Se for mais conveniente, você pode transferir file e criar um arquivo de assinatura separado chamado de assinatura separada. Para produzir a assinatura destacada:

gpg -b /path/to/file

Para verificar:

gpg file.gpg file

Você também pode criptografar o arquivo com a opção -e . Claro que isso significa que você precisa de um par de chaves separado, onde o destinatário (especificado com a opção -r ) tem a chave privada e o produtor tem a chave pública.

    
por 19.07.2016 / 02:13
5

Use o OpenSSL para fazer isso. Siga um exemplo simples:

Para criptografar um arquivo:

openssl rsautl -encrypt -inkey public_key.pem -pubin -in <decrypted file> -out <encrypted file>

Para descriptografar um arquivo:

openssl rsautl -decrypt -inkey private_key.pem -in <encrypted file> -out <decrypted file>
    
por 18.07.2016 / 22:09
0

Você está falando de um aplicativo. Isso significa que você provavelmente quer usar uma biblioteca, não uma linha de comando. Como fazer isso está fora do escopo para UNIX & Linux SE (e você nem sequer nos disse em qual idioma seu aplicativo está escrito), mas existem várias bibliotecas que podem fazer o que você quer:

  • O libcrypto do OpenSSL tem várias primitivas para lidar com a verificação de assinaturas
  • GPGME é uma biblioteca escrita pelo autor do GnuPG, que permite muitas coisas, entre elas verificação de assinatura.
  • O GnuTLS também expõe suas primitivas criptográficas internas, mas elas não são exibidas. não recomendo.

Tenho certeza de que existem mais, essas são apenas as soluções mais populares. A maioria dessas bibliotecas tem ligações para outros idiomas também, caso você não esteja usando C.

    
por 19.07.2016 / 08:50