コンテンツにスキップ
getnextpdf.com

Pro エディション

セキュリティ

NextPDF Pro は、NextPDF Core の上にセキュリティサーフェスを追加します。生成時のコンテンツマスキング、テキストレイヤーの PII 検出、リモートおよびクラウド KMS の署名ストラテジー、そして複数当事者による逐次署名です。NextPDF Core は PAdES B-B および B-T レベルを生成します。Pro は同じレベルを生成し、その上にこれらの署名ワークフローを追加します(B-T の場合は、B-B 署名に加えて、署名値に対する 1 つの RFC 3161 signature-time-stamp)。このページは挙動レベルの内容です。各部分が何を行うか、何を行わないか、そして Enterprise の境界がどこから始まるかを記載します。

この機能は NextPDF Pronextpdf/pro)に同梱され、Pro ティアのライセンスエンベロープで有効化されます。そのエンタイトルメントを持たないデプロイメントでは、この機能のクラスはロードされません。エディションを比較してライセンスを取得

Core はソフトウェア CMS 署名者、RFC 3161 タイムスタンプクライアント、RFC 5280 パス検証、そして OCSP と CRL の失効チェックを同梱します。Pro は、マスキング、PII 検出、そしてリモート/クラウド KMS/逐次署名のワークフローを追加します。これらのワークフローは、Core の RFC 3161 スタックを通じて Core と同じ B-B および B-T レベルを生成します(B-T の場合は、署名値に対する 1 つの signature-time-stamp)。有効な Pro エンタイトルメントを持たないデプロイメントでは、これらのクラスはロードされません。Core の署名コントラクトは変更なく動作し続けます。

Terminal window
composer require nextpdf/pro:^3

マスキングエンジンは、ページが書き込まれる前にテキストへ順序付きのルールリストを適用します。各ルールは正規表現にマッチします。ルールは、3 つの方法のいずれかでマッチを置換します。テキストをコンテンツストリームから削除する black-box の塗りつぶし、同じ文字数のアスタリスク列、または [REDACTED] のような固定ラベルです。エンジンは、テスト済みのとおり、black-box モードでは基となるテキストオブジェクトを削除します。あらゆる形態の機密コンテンツが見つかることを主張するものではありません。検出は、設定したルールに依存します。

PII サーフェスは、リダクションの保証ではなく検出ツールです。テキストレイヤーを抽出し、次にメールアドレス、電話番号、米国の社会保障番号、クレジットカード番号に対する組み込みパターンを適用します。テキストのマスクされたビューとマッチ数を返します。ページ画像内のレンダリングされたグリフを上書きすることはありません。テキストレイヤーを持たないスキャン済みページではマッチは得られません。結果は、完全な個人データ削除ではなく、設定されたタイプのパターンマッチによる検出として扱ってください。

署名サーフェスは、Core の署名者の上にリモートおよび非同期のワークフローを追加します。セッションはドキュメントダイジェストを計算し、CMS の署名付き属性を構築し、署名付き属性のバイト列を署名ストラテジーへ渡します。ストラテジーは、クラウド KMS、遅延された外部署名者、または既存の CAdES もしくは XAdES 署名をラップする取り込みパスにできます。次にセッションは CMS SignedData を組み立て、それを署名ディクショナリの Contents エントリに DER エンコードして格納します — ISO 32000-2 §12.8.1。SignerInfo は content-type と message-digest の署名付き属性を保持します。メッセージダイジェスト計算プロセスは RFC 5652 §5.4 です。検証者は発信者が計算したダイジェストに依存してはなりません。独立してコンテンツダイジェストを再計算し、それを message-digest 属性と比較します。署名が有効であるためには、この比較が一致しなければなりません — RFC 5652 §5.6 の署名検証プロセス。

NextPDF Core は PAdES B-B および B-T レベルを生成します。NextPDF Pro は同じレベルを生成し、その上に署名ワークフローを追加します。B-B の場合、セッションは B-B の署名付き属性セットを持つ CMS SignedData を組み立て、タイムスタンプは適用しません。B-T の場合、セッションは署名値に対して、ちょうど 1 つの RFC 3161 signature-time-stamp を CMS の 署名なし 属性として追加します。signature-time-stamp は、署名者のデジタル署名値に対して計算された 1 つの time-stamp token を保持する署名なし属性であり — ETSI EN 319 122-1 §5.3 — その MessageImprint は SignerInfo signature フィールド値のハッシュで、id-aa-timeStampToken OID によって識別されます — RFC 3161 Appendix A。タイムスタンプの genTime は、トークンが作成された UTC 時刻です — RFC 3161 §2.4.2。タイムスタンプは署名なし属性であるため、B-B の署名付きダイジェスト、SignerInfo の signature 値、そして PDF の /ByteRange は変更されません。CMS が大きくなるだけです。RFC 3161 トークンは、設定されたタイムスタンププロバイダー(デフォルトの Core RFC 3161 クライアント、または呼び出し元が提供するプロバイダー)から取得されます。B-T はデフォルトプロバイダーのパスで SHA-256 のメッセージ imprint を使用します。NextPDF Pro は、ETSI EN 319 122-1 §5.3、RFC 3161、RFC 5652、RFC 5816 に従って PAdES B-T 署名サポートを実装しています。これはフィクスチャで検証されています。NextPDF Pro は、独立した ETSI EN 319 142-1 認証を主張するものではなく、ドキュメントの法的有効性も主張しません。B-LT と B-LTA は、長期アーカイブ検証のために Document Security Store とドキュメントタイムスタンプを追加します — ETSI EN 319 142-2 §5.5。それらのレベルは Enterprise のケーパビリティ(nextpdf/enterprise)であり、Pro によって生成されることはありません。以下の Enterprise 境界 を参照してください。

署名サーフェスは、秘密鍵を保持するのではなく、署名付き属性のバイト列を SigningStrategy へ渡します。この 1 つの決定が要となっています。クラウド KMS、遅延された外部署名者、または CAdES/XAdES 取り込みパスはすべて同じコントラクトを満たすため、呼び出し側のコードは同一のままで、鍵素材が NextPDF に入ることは決してありません。セッションを RemoteSigningSession::prepare()RemoteSigningSession::complete() に分割することで、鍵に到達する前にダイジェストが固定されるため、署名を非同期に返すことができます。タイムスタンプは CMS の 署名なし 属性として付加されるため、B-T は追加的なままです。B-B の署名付きダイジェスト、SignerInfo の signature 値、そして /ByteRange は変更されません。暗黙のうちに劣化する署名パスは、停止する署名パスよりも悪いため、すべての接合部はフェイルクローズです。設計の背景: 妥協なきスケール署名

TypeKindRoleStabilitySince
RemoteSigningSessionclass2 フェーズのリモートまたは非同期署名セッションstable1.9.0
RemoteSigningConfigclassPAdES レベルを含む、イミュータブルなセッション設定stable1.9.0
SequentialSignerclassDocMDP サポートを備えた複数当事者の逐次署名stable1.9.0
SigningStrategyinterfaceセッションが呼び出す署名メカニズムのコントラクトstable1.9.0
PadesWrapperclassPAdES 埋め込みのために既存の CAdES または XAdES 署名をラップstable1.9.0
KmsSignerInterfaceinterface (SPI)サードパーティの HSM および KMS ドライバーコントラクトstable2.1.0
GenerationTimeMaskerclassページが書き込まれる前に適用されるルール駆動マスキングstable1.9.0
MaskingConfig / MaskingRule / MaskingModetypesマスキングの設定、ルール、置換モードstable1.9.0

RemoteSigningConfig は、その列挙が Core の SignatureLevel である PAdES レベルフィールドを保持します。Pro の署名パスは B-B ベースラインと B-T レベルを生成します。RemoteSigningConfig::default()->withLevel(SignatureLevel::PAdES_B_T) を設定し(または SequentialSigner::withTimestamping() を使用し)、タイムスタンププロバイダーを供給すると、セッションは RFC 3161 signature-time-stamp 署名なし属性を追加します。トークンが収まるように B-T の予約済み /Contents スペースは自動的に引き上げられます。サイズ不足の設定済みスペースは、切り詰めるのではなく型付き設定エラーでフェイルクローズします。設定に保持された B-T より上のレベル(B-LT または B-LTA)は、Pro が動作しない前方宣言された値です。その長期プロデューサーは、Core コントラクトを通じて実行時に解決され、nextpdf/enterprise パッケージに同梱されます。

Sign with a cloud-KMS strategy
<?php
declare(strict_types=1);
require_once __DIR__ . '/vendor/autoload.php';
use NextPDF\Pro\Security\Signing\RemoteSigningSession;
use NextPDF\Pro\Security\Signing\SigningStrategy;
/**
* Produce a signed PDF using any signing strategy.
*
* @param string $pdfWithPlaceholder PDF bytes with a signature placeholder.
* @param SigningStrategy $strategy A cloud-KMS, deferred, or ingest strategy.
*
* @return string The signed PDF bytes.
*/
function signWithStrategy(string $pdfWithPlaceholder, SigningStrategy $strategy): string
{
$session = RemoteSigningSession::create($pdfWithPlaceholder);
$session->prepare(
certDer: $strategy->getCertificateDer(),
chainDer: $strategy->getCertificateChainDer(),
algorithmOid: $strategy->getSignatureAlgorithmOid(),
digestAlgorithm: $strategy->getDigestAlgorithm(),
contentsHexStart: 0,
contentsHexEnd: 0,
);
return $session->complete($strategy);
}

呼び出し元は SigningStrategy コントラクトに依存します。クラウド KMS ストラテジーと CAdES 取り込みストラテジーはどちらもこれを満たすため、このコードはストラテジー間で変わりません。

Multi-party sequential signing with audit logging
<?php
declare(strict_types=1);
require_once __DIR__ . '/vendor/autoload.php';
use NextPDF\Pro\Security\Signing\SequentialSigner;
use NextPDF\Pro\Security\Signing\SigningStrategy;
use Psr\Log\LoggerInterface;
final readonly class ApprovalWorkflow
{
public function __construct(private LoggerInterface $logger) {}
/**
* Sign a PDF with two parties in sequence.
*
* @param string $pdfData The PDF bytes to sign.
* @param SigningStrategy $approver The first-party strategy.
* @param SigningStrategy $reviewer The second-party strategy.
*
* @return string The signed PDF bytes.
*/
public function run(string $pdfData, SigningStrategy $approver, SigningStrategy $reviewer): string
{
try {
$result = SequentialSigner::create($pdfData)
->addSigner($approver, 'Approver', reason: 'Approved')
->addSigner($reviewer, 'Reviewer', reason: 'Reviewed')
->sign();
$this->logger->info('Sequential signing complete', [
'signatures' => $result->signatureCount,
]);
return $result->pdfData;
} catch (\Throwable $e) {
$this->logger->error('Sequential signing failed', ['error' => $e->getMessage()]);
throw $e;
}
}
}

各署名者は別々の差分リビジョンです。catch ブロックはログを記録して再スローします。失敗を握りつぶさないため、署名パスはフェイルクローズに保たれます。

  • 生成された署名は検証済みの署名ではありません。パス検証は、検証者のトラストアンカーを用いて検証者側で実行されます — RFC 5280 §6.1。生成者はその結果を主張できません。
  • マスキングの検出は、設定されたルールに依存します。値にマッチしないルールセットはそれをマスクしません。エンジンは、すべての機密コンテンツが見つかることを主張しません。
  • PII 検出はテキストレイヤーのみです。テキストレイヤーを持たないスキャン済みページではマッチは得られません。ツールはレンダリングされたページのグリフを上書きしません。
  • CMS 構造は予約された Contents スペースに収まらなければなりません。完全な証明書チェーンを持つ B-B SignedData にはサイズがあります。それに応じて予約スペースをサイジングしてください。さもなければセッションはオーバーフローエラーを発生させます。
  • クラウド KMS ストラテジーは、ネットワーク到達性とプロバイダーの可用性に依存します。ネットワークまたはプロバイダーのエラーは型付き例外を発生させます。セッションは、未署名のドキュメントを暗黙のうちに生成することはありません。
  • OCSP の unknowngood ではありません。unknown は判定不能として扱ってください — RFC 6960 §2.2。

ソフトウェア署名は 1 桁ミリ秒です。クラウド KMS 署名は、プロバイダーへのネットワークラウンドトリップを 1 回追加します。B-T 署名は、署名操作に加えて、設定されたタイムスタンププロバイダーへのラウンドトリップを 1 回追加します。1500 ms の wall 予算は、ウォームな接続上でリモートプロバイダーを用いた単一の B-B 署名をカバーします。マスキングのコストは、ルール数とテキスト長に応じてスケールします。再現性プロファイルは structural です。B-B の署名付き属性は署名時刻を埋め込み、B-T 署名は追加でタイムスタンプトークンを埋め込むため、2 回の実行は signing-time とタイムスタンプのバイトで相違しますが、署名された構造は同一です。

これは暗号上の境界であるため、脅威モデルは明示的です。バイトレンジはエンジンによって計算され、呼び出し元から受け入れられることは決してありません。署名パスはフェイルクローズです。プリミティブの失敗やケーパビリティのギャップは型付き例外を発生させ、より弱いアルゴリズムへ暗黙のうちにダウングレードすることは決してありません。クラウド KMS ストラテジーは統合ポイントであり、鍵ストアではありません。鍵の保護は、鍵の取り扱い、設定された KMS、そしてデプロイメントに依存します。NextPDF Pro は KMS ストラテジーの秘密鍵を保持しません。Pro は、FIPS 検証済みの KMS または HSM に対して設定された場合、FIPS 互換モードで動作します。NextPDF Pro はそれ自体が FIPS 検証済みの暗号モジュールではありません。このページは暗号署名に関するものです。すべての規範的なソースは言い換えられており、いずれも複製されていません。

マスキングと PII のサーフェスはインプロセスで実行されます。マスキングや PII 検出のためにドキュメントコンテンツがホストを離れることはありません。クラウド KMS ストラテジーは、署名操作のために、ドキュメントではなく署名付き属性のダイジェストをプロバイダーへ送信します。PII 検出は、設定されたタイプに対するパターンマッチであり、テスト済みのとおり、black-box モードでは基となるテキストオブジェクトを削除します。完全な個人データ削除の保証ではなく、規制準拠の表明でもありません。

ライブラリは、構造的なメッセージを持つ型付き例外を発生させます。ドキュメントコンテンツや検出された PII の値を、例外メッセージやログに書き込むことはありません。署名パスの周辺でログを記録するデプロイメントは、本番サンプルに示された構造的なフィールドをログに記録すべきであり、ドキュメントバイト列ではありません。

Pro は、設定された署名アルゴリズムとストラテジーからアルゴリズムを選択します。FIPS 検証済みの KMS または HSM に対して設定された場合、暗号操作はその検証済み境界内で実行されます。NextPDF Pro 自体は構造的な組み立てとダイジェスト計算を実行します。FIPS 検証済みのモジュールではなく、FIPS 認証の主張も行いません。

NextPDF Pro は B-B ベースラインと B-T レベルを生成します。B-T は、署名者のデジタル署名値に対して計算された、1 つの RFC 3161 signature-time-stamp を CMS の署名なし属性として署名値に追加します — ETSI EN 319 122-1 §5.3。NextPDF Pro は、ETSI EN 319 122-1 §5.3、RFC 3161、RFC 5652、RFC 5816 に従ってこれを実装しています。フィクスチャで検証されています。NextPDF Pro は、独立した ETSI EN 319 142-1 認証を主張せず、ドキュメントの法的有効性も主張しません。

B-LT および B-LTA レベルは Enterprise のケーパビリティであり、Pro によって生成されることはありません。B-LT と B-LTA は、長期アーカイブ検証のために Document Security Store とドキュメントタイムスタンプを追加します — ETSI EN 319 142-2 §5.5。Document Security Store または長期アーカイブループを要求する設定は、Core コントラクトを通じて実行時にそのプロデューサーを解決します。そのプロデューサーは nextpdf/enterprise パッケージに同梱されます。Pro のみのデプロイメントでは、B-LT または B-LTA のリクエストは、欠落している Enterprise コンポーネントを名指しするメッセージとともにフェイルクローズします。Pro は Document Security Store、VRI ディクショナリ、ドキュメントタイムスタンプ、アーカイブループを一切生成せず、長期検証 (LTV) の主張も行いません。PKCS#11 によるハードウェアキー保管、および FIPS 140-3 暗号ポリシープロファイルも Enterprise のケーパビリティです。

PAdES levelAddsProducer edition
B-B署名付き属性を持つ CMS 署名Core, Pro, Enterprise
B-T署名値に対する 1 つの RFC 3161 signature-time-stamp 署名なし属性Core, Pro, Enterprise
B-LT検証マテリアルを持つ Document Security StoreEnterprise (nextpdf/enterprise)
B-LTAアーカイブ有効性のためのドキュメントタイムスタンプEnterprise (nextpdf/enterprise)
  • マスキングは、ページが書き込まれる前に設定されたルールを適用し、テスト済みのとおり、black-box モードでは基となるテキストオブジェクトを削除します。
  • PII 検出はテキストレイヤーを抽出し、設定されたパターンを適用し、マスクされたビューとマッチ数を返します。レンダリングされたグリフを上書きすることはありません。
  • リモート署名は 2 フェーズです。prepare はダイジェストを計算して署名付き属性を構築し、complete は CMS を組み立てて埋め込みます。
  • Pro は B-B ベースラインと B-T レベルを生成します。B-T の場合、セッションは署名値に対して 1 つの RFC 3161 signature-time-stamp を CMS の署名なし属性として追加します。B-B の署名付きダイジェストと /ByteRange は変更されません。タイムスタンププロバイダーを伴わない B-T リクエスト、またはサイズ不足の設定済み Contents スペースを伴う B-T リクエストは、型付き設定エラーでフェイルクローズします。Enterprise パッケージを伴わない B-LT または B-LTA のリクエストは、名指しされたエラーでフェイルクローズします。
  • クラウド KMS ストラテジーは、ドキュメントではなく署名付き属性のダイジェストを受け取り、生の署名バイト列を返します。
ClaimStandardClause
CMS 署名は、署名ディクショナリの Contents エントリに DER エンコードされて格納されます。ISO 32000-2§12.8.1
メッセージダイジェスト計算プロセス。署名付き属性は content-type と message-digest を保持します。RFC 5652§5.4
検証者は発信者が計算したダイジェストに依存してはならず、独立して再計算して比較します(署名検証プロセス)。RFC 5652§5.6
PAdES B-T の signature-time-stamp は、署名者のデジタル署名値に対して計算された 1 つの time-stamp token を保持する署名なし属性です(Pro は B-T を生成します)。ETSI EN 319 122-1§5.3
signature-time-stamp の id-aa-timeStampToken トークンの MessageImprint は、SignerInfo signature フィールド値のハッシュです。RFC 3161Appendix A
検証側では、NextPDF は signature-time-stamp の MessageImprint を SignerInfo signature 値に結び付け、不一致、トークンの欠落/重複、または SHA-1 の imprint の場合はフェイルクローズします(厳格な検証であり、認証ではありません)。RFC 3161Appendix A
B-T タイムスタンプトークンは、トークンが作成された時刻である UTC の genTime を保持します。RFC 3161§2.4.2
認証パス検証は、基本制約と、トラストアンカーへのパス入力をチェックします。RFC 5280§6.1
OCSP は certStatus を good、revoked、または unknown として報告します。RFC 6960§2.2
B-LT と B-LTA は、長期検証のために Document Security Store とドキュメントタイムスタンプを追加します(Enterprise 境界)。ETSI EN 319 142-2§5.5

すべての節は言い換えです。NextPDF は規範的なテキストを複製しません。権威ある文言については、公開された標準を参照してください。NextPDF Pro は、ETSI EN 319 122-1 §5.3(signature-time-stamp)、RFC 3161、RFC 5652、RFC 5816 に従って PAdES B-T 署名サポートを実装しており、フィクスチャで検証されています。ETSI EN 319 142-1(PAdES のベースラインレベルに関する部分)は引用した証拠セットの範囲外です。したがって NextPDF Pro は、独立した ETSI EN 319 142-1 の認証、適合性、または準拠を主張せず、ドキュメントの法的有効性も主張しません。このページは、生成される構造、B-T サポートが実装する標準、そして Enterprise の B-LT/B-LTA 境界を記載するものであり、認証された適合性レベルを記載するものではありません。

このページは、外部から観測可能な挙動とサポートされている公開 API サーフェスのみを記載します。内部の名前空間パス、ヘルパークラス、メカニズムのテーブル、ランブックのファイル名、そしてチケットのプレフィックスは対象外です。