Como adicionar assinatura digital (RSA, certificado, etc) a qualquer arquivo, usando PHP?

Preciso de saber se algum tipo de ficheiro pode ser assinado digitalmente, usando RSA, um certificado, e essas coisas, ou se apenas um certo tipo de Ficheiros pode ser assinado. Tudo isto, usando PHP.

por exemplo: um ficheiro de texto simples pode ser assinado digitalmente?, E as imagens (png, jpeg, bmp)?

Não preciso de "anexar" uma imagem com uma assinatura gráfica.

Obrigado pela ajuda.

Author: lanoxx, 2012-05-02

3 answers

Usando phpseclib, uma implementação RSA de PHP pura (actualizado aqui):

<?php
include('Crypt/RSA.php');

$rsa = new Crypt_RSA();
extract($rsa->createKey());

$plaintext = 'terrafrost';

$rsa->loadKey($privatekey);
$signature = $rsa->sign($plaintext);

$rsa->loadKey($publickey);
echo $rsa->verify($plaintext, $signature) ? 'verified' : 'unverified';
?>

O analógico com o CLI openssl é o seguinte:

openssl dgst -sha1 -sigopt rsa_padding_mode:pss -sigopt rsa_pss_saltlen:-1 -out signature.txt -sign privatekey.txt plaintext.txt 
openssl dgst -sha1 -sigopt rsa_padding_mode:pss -sigopt rsa_pss_saltlen:-1 -prverify privatekey.txt -signature signature.txt plaintext.txt 
 8
Author: neubert, 2018-06-01 23:43:22

Re: qualquer tipo de arquivo pode ser assinado digitalmente, usando RSA, um certificado, e essas coisas, ou se apenas determinado tipo de arquivos podem ser assinados?

A: Sim e não. Por um lado, uma assinatura digital padrão pode ser computada para qualquer pacote de bits, incluindo um arquivo de texto simples, Arquivos de imagem, arquivos binários, qualquer coisa que você possa imaginar. Mas depois as perguntas tornam-se:
  1. Como associar a assinatura digital (que é em si uma execução binária de bits) com o arquivo de dados? O formato do arquivo de dados permite adicionar a assinatura digital aos dados? Ou você mesmo precisa gerenciar a assinatura digital, talvez como um arquivo separado, talvez usando seu próprio formato de dados inventado?

  2. Uma vez que você tem os dados assinados digitalmente e sua assinatura, como é que um destinatário verifica os dados e sua assinatura para garantir ao destinatário de quem assinou os dados (identidade) e que os dados não foram alterados desde que foi assinado (integridade)?

Formatos de ficheiros que suportam assinaturas digitais

A grande vantagem dos formatos de ficheiros que suportam intrinsecamente assinaturas digitais é que os destinatários podem verificar a assinatura digital e a integridade do ficheiro simplesmente recebendo o ficheiro assinado e, em seguida, usando o seu próprio software de verificação. O destinatário não precisa de instalar nada do remetente.

Existem muitos formatos de ficheiros capazes que suportam assinatura. Eg, pdf, Word .documento, .docx. Destacar .xls .xlsx. Existe um padrão para assinar ficheiros xml . Seu benefício é que xml pode ser usado como um envelope para qualquer tipo de dados. Por exemplo, um arquivo pdf pode ser assinado digitalmente e enviado para alguém. O destinatário pode então usar o leitor Adobe padrão / livre para abrir o pdf e verificar a(s) Sua (s) Assinatura (s) digital (S).

O" formato " para ficheiros de texto simples (ficheiro preenchido com caracteres) não suporta assinaturas digitais. Para que precisasses de um envelope para o texto e a sua assinatura digital ou tratar separadamente da assinatura digital. Em qualquer caso, o destinatário precisaria de seu software para verificar os dados. (Ou teria de escrever o seu próprio depois de fornecer uma especificação para o texto simples e a assinatura.)

O S / MIME oferece uma forma normal de assinar digitalmente texto ou outros dados organizados por e-mail/mime. Ver rfc 5751 . Mas não é amplamente utilizado para além dos agentes de E-mail que podem gerar ou receber/verificar e-mail assinado mensagem. O Outlook apoia isso.

 9
Author: Larry K, 2013-03-28 13:18:21
Porque quer assinar digitalmente estes ficheiros?

Não existe um padrão para alterar de facto ficheiros de texto ou imagens para que os próprios ficheiros contenham algum tipo de assinatura digital.

Se quiser assegurar aos utilizadores que os ficheiros não foram adulterados, poderá dar-lhes um hash MD5 do ficheiro. Eles podem usar ferramentas gratuitas para verificar o hash MD5 de um arquivo que eles baixaram e compará-lo com o que você deu para se certificar de que seu arquivo não foi alterado. Isto normalmente ser usado para pacotes de software / binários em que um terceiro poderia inserir código malicioso.

Outra possibilidade é que você quer que os usuários sejam capazes de verificar a autenticidade de certos arquivos. Neste caso, um usuário pode querer ter certeza de que um arquivo de texto ou imagem veio de você especificamente. Isto funciona quase como obter um hash MD5 de um ficheiro com uma chave privada conhecida apenas por si para que o utilizador final possa comparar a assinatura do ficheiro com a sua chave pública para garantir que o ficheiro tem não foi adulterado e vem de uma fonte específica. O PGP (pretty good privacy) fornece um framework para isso.

Sugiro que verifique os documentos de introdução do PGP para mais informações sobre isto. http://www.pgpi.org/doc/pgpintro/

 1
Author: nvuono, 2012-05-02 05:08:43