Перейти к содержимому

Модель безопасности для подписи и шифрования

На этой странице описана модель безопасности для двух криптографических поверхностей, которые предоставляет базовый движок: шифрования документа с помощью Advanced Encryption Standard 256-bit (AES-256) и подписания документа с помощью Cryptographic Message Syntax (CMS)/PDF Advanced Electronic Signatures (PAdES). Здесь поясняется, что защищает каждый механизм, что он не защищает и где проходит граница доверия.

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

Окно терминала
composer require nextpdf/core:^3

ext-openssl требуется для путей подписания и работы с CMS.

В базовом движке шифрование выполняется через обработчик безопасности AES-256 (AESV3, Revision 6) из ISO 32000-2 §7.6 (iso32000_2_sec7#x1.x65.p29). Он обеспечивает конфиденциальность: сторона без пароля не может прочитать содержимое строк и потоков. Он не обеспечивает целостность или подлинность. Шифротекст всё равно может быть усечён или заменён. Такие изменения должны выявляться подписью или кодом аутентификации сообщения (MAC) документа; обработчик шифрования этого не делает.

Разрешения (печать, копирование, изменение) — это отдельный механизм, который часто понимают неверно. Флаги разрешений ISO 32000-2 предполагают сотрудничество программы чтения (iso32000_2_sec7#x1.x71.p27). Совместимая программа чтения соблюдает их, но это рекомендательные метаданные, а не криптографический контроль доступа. Инструмент, не следующий этому соглашению, может их игнорировать. Движок добросовестно записывает их, но не может обеспечить их принудительное соблюдение.

Для подписания движок встраивает структуру CMS SignedData, как описано в ISO 32000-2 §12.8. Диапазон подписываемых байтов является прямым объектом, а дайджест намеренно исключает значение Contents подписи (iso32000_2_sec12#x1.x121.p45), поэтому подпись охватывает документ, но не саму себя.

Эта страница не повторяет справочник по подписанию. Точки входа шифрования и оркестратор подписания описаны в /modules/core/security/ и /modules/core/security/signing/. Эта модель посвящена смыслу механизмов и их границам, а не сигнатурам методов.

Шифрование защищает конфиденциальность от сторон без пароля — и только её:

<?php
declare(strict_types=1);
require_once __DIR__ . '/vendor/autoload.php';
use NextPDF\Core\Document;
$doc = new Document();
// AES-256 (AESV3 R6). The owner/user passwords gate read access only.
// Permission flags below are advisory: a conforming reader honors them.
$doc->encrypt(
userPassword: 'open-secret',
ownerPassword: 'owner-secret',
);
$doc->save('confidential.pdf');

Продакшен-процесс подписания использует базовую подпись CMS/PAdES с ключом, хранимым программно. Редакция Core формирует уровень PAdES B-B. Когда вы настраиваете службу меток времени, редакция Core формирует PAdES B-T, то есть B-B плюс один неподписанный атрибут RFC 3161 signature-time-stamp:

<?php
declare(strict_types=1);
require_once __DIR__ . '/vendor/autoload.php';
use NextPDF\Core\Document;
use NextPDF\Security\Signature\CertificateInfo;
use NextPDF\Security\Signature\SignatureLevel;
$cert = CertificateInfo::fromPkcs12('signer.p12', 'pin');
$doc = new Document();
// B-B is the default. B-T adds a trusted timestamp over the signature value.
$doc->setSignature($cert, SignatureLevel::PAdES_B_B);
$doc->save('signed.pdf');

PAdES B-T — это ровно B-B плюс один неподписанный атрибут RFC 3161 signature-time-stamp, переносимый в CMS SignerInfo (rfc5652#p603). Метка времени привязывает значение подписи к доверенному времени от службы меток времени (rfc3161#p208). Этот уровень не добавляет словарь данных проверки, структуру информации об отзыве или цикл архивных меток времени. Это отдельные долгосрочные уровни с собственной областью применения, которые не входят в поверхность B-B/B-T и выходят за рамки этой страницы.

U-1. NextPDF не заявляет о независимой сертификации ETSI EN 319 142-1 для PAdES B-T. EN 319 142-1 не включён в корпус проверки, используемый здесь. Требование B-T signature-time-stamp проверяется по ETSI EN 319 122-1 §5.3 — основе CMS Advanced Electronic Signatures (CAdES), которую семейство EN 319 142 PAdES импортирует по ссылке (etsi_en_319_122_1#6.x40.p96) — вместе с RFC 3161, RFC 5652 и ISO 32000-2 §12.8. Поддержка профиля B-T не является сертификацией соответствия или сертификацией юридической действительности. Соответствие и юридическую действительность определяет независимый валидатор.

  • Шифрование ≠ целостность. Программе чтения, способной открыть документ, всё равно можно передать поддельную копию. Только подпись (или MAC документа) выявляет это. «Защита от подделки» — это не свойство, которое обеспечивает обработчик шифрования, и этот термин не используется как заявление о продукте.
  • Наличие подписи не означает её действительность. То, что документ содержит словарь подписи, ничего не говорит о том, является ли сертификат доверенным, действующим по сроку или неотозванным. Проверка действительности выполняется на стороне проверяющего и определяется политикой доверяющей стороны, а не подписывающим.
  • Доверие к метке времени является внешним. Метка времени B-T значима лишь настолько, насколько проверяющий доверяет выдавшей её службе меток времени (TSA). Библиотека получает и встраивает токен. Она не ручается за TSA.
  • Соответствие FIPS определяется средой. Использование криптографического модуля, прошедшего валидацию FIPS, — это свойство операционной среды и модуля (fips_140_3#x12), а не то, что PHP-библиотека может заявлять от имени вызывающей стороны.

Путь подписания вычисляет один дайджест диапазона байтов и одну структуру CMS. Расширение B-T добавляет один синхронный обмен запросом и ответом со службой меток времени. Шифрование выполняет симметричную операцию per-string/per-stream. Ни один из этих шагов не доминирует в типичной отрисовке. Сетевой обмен для B-T — переменная составляющая затрат, и она зависит от выбора TSA вызывающей стороной.

Ниже те же утверждения о границах, переформулированные как обязательные правила для рецензентов:

  1. Только конфиденциальность. Шифрование AES-256 защищает содержимое от сторон без пароля. Оно не обеспечивает целостность, подлинность или контроль доступа (iso32000_2_sec7#x1.x65.p29).
  2. Разрешения носят рекомендательный характер. Флаги разрешений предполагают сотрудничество программы чтения и не обеспечиваются криптографически (iso32000_2_sec7#x1.x71.p27). Формулировки в продукте не должны утверждать, что они предотвращают какое-либо действие.
  3. На этой странице только B-B и B-T. Документированная здесь поверхность подписания core/Pro охватывает B-B и её расширение метки времени B-T, причём каждое упоминание B-T сопровождается оговоркой U-1 выше. Уровни долгосрочного архивного хранения — это отдельная поверхность платной редакции, и поэтому здесь они намеренно не описаны. На этой странице не заявляется о наличии возможностей данных проверки, информации об отзыве или архивных меток времени.
  4. Никаких заявлений о юридической действительности. Созданная подпись — это криптографический артефакт. Является ли она юридически действительной, зависит от юрисдикции, политики сертификата и доверяющей стороны, а не от этой библиотеки.

Поддержка функции — не то же самое, что соответствие. Движок формирует вывод, в котором используются упомянутые конструкции ISO 32000-2, RFC 3161, RFC 5652 и ETSI EN 319 122-1. Движок не заявляет о соответствии PAdES, CAdES или eIDAS. Валидация FIPS 140-3 — это свойство module/environment (fips_140_3#x12), а не заявление библиотеки. Любое заключение о соответствии или юридической действительности даёт независимый валидатор или оценщик.