2012-05-02 22 views
6

Necesito saber si algún tipo de fila se puede firmar digitalmente, utilizando RSA, un certificado y esas cosas, o si solo se pueden firmar ciertos tipos de archivos. Todo esto, usando PHP.¿Cómo agregar una firma digital (RSA, Certificado, etc.) a cualquier archivo, usando PHP?

Ejemplo: ¿Se puede firmar un archivo de texto sin formato digital ?, ¿Qué pasa con las imágenes (png, jpeg, bmp)?

No es necesario "adjuntar" una imagen con una firma gráfica.

Gracias por su ayuda.

Respuesta

8

Usando phpseclib, a pure PHP RSA implementation:

<?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'; 
?> 

El análogo al que con el openssl CLI es la siguiente:

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 
+0

Gracias por su respuesta. Probé la firma digital para un archivo de texto plano, y funciona bien. Todavía no he probado en archivos binarios, porque no estoy seguro de si la firma digital romperá el archivo. Voy a intentar phpseclib. –

+0

¿Puedo usar esto para archivos de alguna manera? Decir como una imagen cargada? Gracias de antemano –

+0

Claro - simplemente haga '$ plaintext = file_get_contents ('filename.ext')' – neubert

1

¿Por qué quieres firmar digitalmente estos archivos diferentes?

No existe un estándar para modificar archivos de texto o imágenes, de modo que los archivos mismos contengan algún tipo de firma digital.

Si desea garantizar a los usuarios que los archivos no se han alterado, puede darles un hash MD5 del archivo. Pueden usar herramientas gratuitas para verificar el hash MD5 de un archivo que descargaron y compararlo con el que usted proporcionó para asegurarse de que su archivo no haya sido alterado. Esto normalmente se usaría para paquetes de software/binarios en los que un tercero podría insertar código malicioso.

Otra posibilidad es que desee que los usuarios puedan verificar la autenticidad de ciertos archivos. En este caso, un usuario puede querer estar seguro de que un archivo de texto o una imagen provienen de USTED específicamente. Esto funciona casi como obtener un hash MD5 de un archivo con una clave privada conocida solo para usted, de modo que el usuario final pueda comparar la firma del archivo con su clave pública para asegurarse de que el archivo no haya sido alterado y proceda de una fuente específica. PGP (bastante buena privacidad) proporciona un marco para esto.

Le sugiero que consulte los documentos de introducción de PGP para obtener más información al respecto. http://www.pgpi.org/doc/pgpintro/

8

Re: puede cualquier tipo de archivo de ser firmado digitalmente, utilizando RSA, una certificado, y esas cosas, o si solo ciertos tipos de archivos se pueden firmar?

A: Sí y no. Por un lado, se puede calcular una firma digital estándar para cualquier paquete de bits, incluyendo un archivo de texto plano, archivos de imágenes, archivos binarios, cualquier cosa que pueda imaginar.

Pero entonces las preguntas se convierten en:

  1. ¿Cómo se asocia la firma digital (que en sí es una carrera binaria de bits) con el archivo de datos? ¿El formato del archivo de datos permite agregar la firma digital a los datos? ¿O necesita administrar la firma digital usted mismo, quizás como un archivo separado, tal vez usando su propio formato de datos inventado?

  2. Una vez que tiene los datos firmados digitalmente y su firma, cómo un destinatario verifica los datos y su firma para asegurar al destinatario de quién firmó los datos (identidad) y que los datos no se han modificado desde que se firmó (integridad)?

formatos de archivo que soportan firmas digitales

La gran ventaja de los formatos de archivo que, intrínsecamente, soportan firmas digitales es que los destinatarios puedan verificar la firma digital y la integridad del archivo, simplemente al recibir el archivo firmado y luego usar su propio software de verificación. El destinatario no necesita instalar nada del remitente.

Hay muchos formatos de archivos compatibles que admiten firmas digitales. Por ejemplo, pdf, Word .doc, .docx. Excel .xls, .xlsx. Hay un standard for signing xml files. Su ventaja es que xml puede usarse como un sobre para cualquier tipo de datos. Por ejemplo, un archivo pdf se puede firmar digitalmente y enviarse a alguien. El destinatario puede usar el Adobe Reader estándar/gratuito para abrir el pdf y verificar su (s) firma (s) digital (es).

El "formato" para archivos de texto sin formato (archivo lleno de caracteres) no admite firmas digitales. Por lo tanto, necesitaría un sobre para el texto y su firma digital o tratar con la firma digital por separado. En cualquier caso, el destinatario necesitaría su software para verificar los datos. (O tendría que escribir el suyo después de proporcionar una especificación para el texto sin formato y la firma.)

S/MIME ofrece una forma estándar de firmar digitalmente texto u otro correo electrónico/mimo de datos organizados. Ver rfc 5751. Pero no se usa ampliamente más allá de los agentes de correo electrónico que pueden generar o recibir/verificar mensajes de correo electrónico firmados. Outlook no es compatible con esto.

Cuestiones relacionadas