Я новичок в PKI и надеялся, что кто-нибудь сможет мне помочь с моей ситуацией. В настоящее время я использую Laravel 5.6 для разработки своего сайта, и я использую elibyy/tcpdf-laravel
Пакет для создания PDF. В настоящее время, когда мои пользователи создают PDF-файл, он шифруется с помощью AES 256 и защищен паролем, но я хотел бы добавить шифрование с открытым ключом.
Вот процесс, контракт создается с помощью HTML, пользователь подписывает контракт, после подписания появляется флажок и кнопка завершения. Они ставят флажок и нажимают «Готово». Затем веб-страница преобразуется в PDF и сохраняется на AWS S3.
Ниже приведена документация для TCPDF о шифровании с открытым ключом:
Possible encryption modes are:
0 = RSA 40 bit
1 = RSA 128 bit
2 = AES 128 bit
3 = AES 256 bit
NOTES:
- To create self-signed signature: openssl req -x509 -nodes -days 365000 -newkey rsa:1024 -keyout tcpdf.crt -out tcpdf.crt
- To export crt to p12: openssl pkcs12 -export -in tcpdf.crt -out tcpdf.p12
- To convert pfx certificate to pem: openssl pkcs12 -in tcpdf.pfx -out tcpdf.crt -nodes
*/
$pdf->SetProtection(array('print', 'copy'), '', null, 0, null);
// Example with public-key
// To open the document you need to install the private key (tcpdf.p12) on the Acrobat Reader. The password is: 1234
//$pdf->SetProtection($permissions=array('print', 'copy'), $user_pass='', $owner_pass=null, $mode=1, $pubkeys=array(array('c' => 'file://../config/cert/tcpdf.crt', 'p' => array('print'))));
// *********************************************************
Вопрос первый: где я храню открытый и закрытый ключи? В моем приложении Laravel? На AWS S3?
Вопрос второй: нужно ли создавать открытый ключ для каждого контракта?
Вопрос третий. В нем говорится, что для открытия документа необходимо установить закрытый ключ в Acrobat Reader. Я полагаю, что это будет что-то, что нужно сделать пользователю, чтобы открыть PDF-файл?
Я надеялся, что есть учебник по этому вопросу, но я не могу найти его. Любая помощь с благодарностью. Спасибо!
Шифрование, как симметричное, так и асимметричное, является очень увлекательной темой. Тем не менее, вы лучше это знаете, иначе очень легко создавать уязвимости, которые очень легко взломать.
Для того, что вы хотите сделать, придерживайтесь симметричного шифрования или даже лучше используйте библиотеку PKZIP, которая включает шифрование. Поскольку вы упоминаете PHP, есть несколько библиотек zip и encrypt для PHP, которые вы найдете через Google.
PKI (асимметричное шифрование) гораздо сложнее понять. Например, вы хотите использовать PKI. Это означает, что вы зашифруете свой документ с помощью своего закрытого ключа, а клиент расшифрует документ с помощью вашего открытого ключа. Это означает, что любой может расшифровать, так как открытые ключи — это просто открытые ключи. Вы никогда не раскрываете закрытый ключ.
Управление вашими открытыми и закрытыми ключами — это целые сервисы — взгляните на AWS Key Management Service (KMS) и AWS Certificate Manager (ACM).
Существует только один открытый ключ для каждого закрытого ключа. Эти ключи математически связаны (через простые числа) друг с другом.
Других решений пока нет …