コンテンツにスキップ

署名と暗号化のセキュリティモデル

このページでは、コアエンジンが公開する 2 つの暗号機能、すなわちドキュメントの 暗号化(AES-256)とドキュメントの 署名(CMS/PAdES)について、セキュリティモデルを説明します。各メカニズムが何を保護し、何を保護しないか、また信頼境界がどこにあるかを示します。

境界。 暗号メカニズムをサポートしていることは、お客様の環境におけるそのセキュリティを保証するものではありません。暗号化されたドキュメントの強度は、 お客様が選択するパスワードと鍵の管理に依存します。署名の意味は、 証明書、トラストアンカー、タイムスタンプ機関、および検証者のポリシーに依存します。 証明書、トラストアンカー、タイムスタンプ機関、および検証者のポリシーはすべて、 このライブラリの外部にあります。このページはメカニズムを説明するものであり、 その結果を認証するものではありません。

Terminal window
composer require nextpdf/core:^3

ext-openssl は、署名および CMS のパスに必要です。

暗号化 は、コアエンジンでは ISO 32000-2 §7.6 の AES-256 セキュリティハンドラー(AESV3、Revision 6)です(iso32000_2_sec7#x1.x65.p29)。これは 機密性 を提供します。パスワードを持たない者は、文字列やストリームの内容を読み取ることができません。完全性や真正性は 提供しません。暗号文は、依然として切り詰められたり差し替えられたりする可能性があります。切り詰められた、または差し替えられた暗号文を検出するのは、署名またはドキュメント MAC の役割であり、暗号化ハンドラーの役割ではありません。

権限(印刷、コピー、変更)は別の概念であり、信頼に関するよくある落とし穴です。ISO 32000-2 の権限フラグは リーダー協調的 です(iso32000_2_sec7#x1.x71.p27)。準拠したリーダーはこれらを尊重しますが、これらは助言的なメタデータであり、暗号的なアクセス制御ではありません。非協調的なツールはこれらを無視できます。エンジンはこれらを忠実に出力しますが、強制することはできません。

署名 は、ISO 32000-2 §12.8 に従って埋め込まれる CMS SignedData 構造です。署名対象のバイト範囲は直接オブジェクトであり、ダイジェストは署名の 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 に 1 つの 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 に対して、RFC 3161、RFC 5652、および ISO 32000-2 §12.8 と併せて検証されます。これは、EN 319 142 が PAdES ファミリーのために参照によりインポートする CAdES の基盤です (etsi_en_319_122_1#6.x40.p96)。B-T プロファイルをサポートしていることは、適合性または法的有効性の認証ではありません。その判断は独立した検証者が行います。

  • 暗号化 ≠ 完全性。 ドキュメントを開けるリーダーでも、改ざんされたコピーを渡される可能性があります。それを検出できるのは署名(またはドキュメント MAC)だけです。「改ざん不可能」は暗号化ハンドラーが提供する性質ではなく、この用語を製品上の主張として使用することはありません。
  • 署名が存在することは、その有効性を意味しません。 ドキュメントに署名辞書があるという事実は、証明書が信頼されているか、有効期限内であるか、失効していないかについては何も示しません。有効性の確立は、署名者ではなく、依拠当事者のポリシーによって規定される検証者側の操作です。
  • タイムスタンプの信頼は外部にあります。 B-T タイムスタンプの意味は、それを発行したタイムスタンプ機関に検証者が置く信頼を超えることはありません。ライブラリはトークンを取得して埋め込みます。TSA を保証することはありません。
  • FIPS の位置づけは環境に依存します。 FIPS 検証済みの暗号モジュール上で実行しているかどうかは、動作環境とモジュールの性質であり(fips_140_3#x12)、PHP ライブラリが呼び出し側に代わって主張できるものではありません。

署名パスは、1 つのバイト範囲ダイジェストと 1 つの CMS 構造を計算します。B-T 拡張は、タイムスタンプ機関への 1 回の同期ラウンドトリップを追加します。暗号化は 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)、ライブラリの主張ではありません。適合性または法的有効性の判断は、独立した検証者または評価者が行います。