Как добавить цифровую подпись (RSA, сертификат и т. Д.) В любой файл, используя PHP?

Мне нужно знать, может ли какой-либо тип fila быть подписан в цифровом виде, используя RSA, сертификат и т. Д., Или если только некоторые типы файлов могут быть подписаны. Все это, используя PHP.

В примере: Можно ли записать текстовый файл в цифровом виде ?, Что относительно изображений (png, jpeg, bmp)?

Мне не нужно «прикреплять» изображение графической подписью.

Спасибо за помощь.

Использование phpseclib, чистой реализации PHP RSA :

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

Аналогом с аналоговым интерфейсом CLI открывается следующим образом:

 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 

Re: может ли какой-либо файл подписываться в цифровом виде, используя RSA, сертификат и т. Д., Или можно подписывать только определенные типы файлов?

A: Да и нет. С одной стороны, стандартная цифровая подпись может быть вычислена для любого набора битов, включая простой текстовый файл, файлы изображений, двоичные файлы, все, что вы можете себе представить.

Но тогда вопросы становятся:

  1. Как вы связываете цифровую подпись (которая сама по себе является бинарным запуском бит) с файлом данных? Имеет ли формат файла данных возможность добавления цифровой подписи к данным? Или вам нужно самому управлять цифровой подписью, возможно, в виде отдельного файла, возможно, используя свой собственный формат данных?

  2. Как только у вас есть данные с цифровой подписью и ее подпись, как получатель проверяет данные и их подпись, чтобы гарантировать, что получатель подписывает данные (личность) и что данные не были изменены с момента его подписания (целостности)?

Форматы файлов, поддерживающие цифровые подписи

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

Существует много форматов файлов, поддерживающих цифровые подписи. Например, pdf, Word .doc, .docx. Excel .xls, .xlsx. Существует стандарт для подписи файлов xml . Его преимущество заключается в том, что xml можно использовать в качестве конверта для любого типа данных. Например, файл PDF может быть подписан цифровой подписью и отправлен кому-то. Получатель может затем использовать стандартный / бесплатный Adobe Reader, чтобы открыть pdf-файл и проверить его цифровую подпись.

«Формат» для текстовых файлов (файл, заполненный символами) не поддерживает цифровые подписи. Таким образом, вам понадобится конверт для текста и его цифровой подписи или отдельно для цифровой подписи. В любом случае получателю потребуется ваше программное обеспечение для проверки данных. (Или нужно будет написать его после того, как вы предоставите спецификацию для обычного текста и подписи).

S / MIME предлагает стандартный способ цифровой подписи текста или других организованных данных электронной почты / мим. См. Rfc 5751 . Но он широко не используется вне агентов электронной почты, которые могут генерировать или получать / проверять подписанные сообщения электронной почты. Outlook поддерживает это.

Почему вы хотите подписывать эти разные файлы в цифровой форме?

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

Если вы хотите уверить пользователей, что файлы не были подделаны, вы можете дать им хэш MD5 файла. Они могут использовать бесплатные инструменты для проверки хэша MD5 загруженного им файла и сравнить его с тем, который вы указали, чтобы убедиться, что их файл не был изменен. Обычно это будет использоваться для программных / двоичных пакетов, которые третья сторона может вставить вредоносный код.

Другая возможность заключается в том, что вы хотите, чтобы пользователи могли проверять подлинность определенных файлов. В этом случае пользователь может захотеть убедиться, что текстовый файл или изображение пришли именно от вас. Это почти похоже на получение хэша MD5 файла с секретным ключом, известным только вам, чтобы конечный пользователь мог сравнить подпись файла с вашим открытым ключом, чтобы гарантировать, что файл не был подделан и исходит из определенного источника. PGP (довольно хорошая конфиденциальность) обеспечивает основу для этого.

Я предлагаю вам ознакомиться с интро-документами PGP для получения дополнительной информации об этом. http://www.pgpi.org/doc/pgpintro/