リソースの署名、検証、復号化、暗号化

XMLリソースは署名することができ、署名は検証、復号化、暗号化を行うことができます。Windows証明書ストアまたは Javaキーストアのキーも使用できます。

任意のユーザーとしてテストするには、以下の要件を満たす必要があります。

  • 秘密鍵はエクスポートできる。

  • ユーザーには管理者権限がある。

  • ユーザー管理は無効になっている(ユーザーアカウントの制御)。

Windows証明書ストアとJavaキーストア

Windows証明書ストアまたはJavaキーストアに保存された証明書(鍵)は、「 CertificateData 」モジュールで使用できます。

ModuleAttribute「 Certificate 」には、以下の2つの特殊化が含まれています: CertificateStoreDataとJavaKeyStoreData 。特殊化は、テストケース(see chapter "一般化と特別化")の作成中に選択されます。

特殊化に関しては、Modules CertificateStoreData と JavaKeyStoreData をご利用ください。

これらのモジュールは標準サブセットの一部です。「 Standard modules」->「Engines」->「Parameter data 」の下にあります。

CertificateStoreData

通常の範囲のタスクでは、証明書ストア(LocalMachineまたはCurrentUser)に「 StoreLocation 」ModuleAttributeが使用されます。一方、ModuleAttribute「 StoreName 」(有効な指定のリストは http://msdn.microsoft.com/en-us/library/system.security.cryptography.x509certificates.storename.aspxにあります)とModuleAttribute「 FindOptions 」は、どの証明書が使用されるかを特定します。

署名や復号などの操作には、秘密鍵へのアクセスが必要です。Windowsではアクセスを制限することができます。現在のユーザーに必要な権限がない場合は、ここで別のユーザーを指定できます。

この例では、ユーザ固有の証明書ストア「 CurrentUser 」内のストア「 My 」にある証明書が指定されています。

これはサムプリントで識別され、ModuleAttribute「 FindType」の値は「 FindByThumbprint 」に設定され、ModuleAttribute「FindValue 」は鍵の具体的な値を用いて指定されます。

Windows証明書ストアの使用例

JavaKeyStoreData

特殊化 JavaKeyStoreData を使用する場合、一意の鍵を選択するには、ModuleAttributeの「 StoreFile 」、「 StorePassword 」、「 KeyAlias」、「KeyPassword 」が必要です。

この例では、テストステップの値「 StoreFile 」を使用して、キーストアのファイルへのパスを指定しています。キーストアのパスワードは「 StorePassword 」で指定し、鍵のアクセスパラメータは「 KeyAlias 」と「 KeyPassword 」で指定します。

Javaキーストアの使用例

XML署名を作成する

XML署名は、データの完全性と作成者を保証するために使用します。Toscaは、xml-dsig標準に準拠したXML署名をサポートしています(http://www.w3.org/TR/xmldsig-core/も参照してください)。署名も秘密鍵を使用して作成されます。データの受取人は、対応する公開鍵を用いてその有効性を確認することができます。

Windows証明書ストアまたは Javaキーストアからの証明書を使用して、SignXML resourceModule でXMLリソースに署名できます。このモジュールは標準サブセットの一部です。「 Standard modules」->「Engines」->「XML 」の下にあります。

署名タイプは、 Enveloped 型と Enveloping 型の両方に対応しています。

Module「 Sign XML Resource 」には、XMLリソースに署名するために必要なすべてのModuleAttributeが含まれています。

これには、ModuleAttribute「 Certificate 」による使用証明書の指定と、ModuleAttribute「 Signature 」による署名の詳細の指定が含まれます。署名鍵の公開鍵は、属性「 IncludeKeyInfo 」からも提供できます。これにより、受信者は署名を確認することができます。

ModuleAttribute「 Certificate 」は、以下の2つの特殊化を受け取ることができます: Javaキーストアには JavaKeyStoreData 、Windows証明書ストアには CertificateStoreData

この例では、リソース「 library 」の最後のブックが署名され、その結果がリソース「 signedLibrary 」に保存されます。さらに、ModuleAttribute「 FindOptions 」の鍵は、サムプリントを介して、ユーザーの証明書ストアから取得されます。署名はenveloping 型で作成されます。署名されたオブジェクトは、XPathの book[last()] を介して見つかった最後のブックです。

テストケースのサンプル

XML署名を確認する

Module「 Verify Signed XML Resource 」は、署名付きXMLを確認する際に使用します。

このモジュールは標準サブセットの一部です。「 Standard modules」->「Engines」->「XML 」の下にあります。

ModuleAttribute「 Certificate 」は、以下の2つの特殊化を受け取ることができます: Javaキーストアには JavaKeyStoreData、Windows証明書ストアにはCertificateStoreData 。両方の特殊化のより正確な説明は、 章に記載されています。属性「 Certificate 」が空のままの場合、Toscaは埋め込み鍵を検索してそれを使用します。

この例では、リソース「 signedLibrary 」が検証されています。検証の期待される結果は、パラメータ「 ExpectedResult 」で指定されます。

テストケースのサンプル

XMLコンテンツの暗号化と復号化

暗号化はデータの安全性を保証します。Toscaは、対称暗号化方式AESと、非対称暗号化方式RSAP-OAEPおよびRSA1.5をサポートしています。W3の「XML Encryption Syntax and Processing(XML暗号化構文と処理)」という題名の勧告に従って、XMLコンテンツは以下の表に示すように暗号化することができます: http://www.w3.org/TR/xmlenc-core/

セッション鍵はRSAP-OAEPまたはRSA 1.5で暗号化され、データはAES-WRAP(http://www.w3.org/TR/xmlenc-core/)で暗号化されます。そのアルゴリズムは以下の表のとおりです。

対称暗号化でサポートされているアルゴリズム

AES-128

AES-192

AES-256

データを暗号化するには、 ModuleEncrypt XML Resource を使用してください。

データを復号するには、 ModuleDecrypt XML Resouce を使用してください。

これらのモジュールは標準サブセットの一部です。「 Standard modules」->「Engines」->「XML」->「Encryption 」の下にあります。

対応している暗号化の粒度

スーパー暗号化を除き、 http://www.w3.org/TR/xmlenc-core/#sec-eg-Granularity に記載されているすべての粒度タイプに対応しています。

  • 要素の暗号化

  • 要素コンテンツの暗号化

  • データとXMLドキュメントの暗号化

ModuleAttribute「 XPath 」を使用して、この粒度を構造化できます。ModuleAttributeが空の場合、ドキュメント全体が自動的に暗号化されます。

鍵は、プレーンテキストまたは16進数で作成することも、Windows証明書ストアからインポートすることもできます。

まず、 TestStepValueEncryptionMethod に対してテストケースで特殊化を選択する必要があります。

暗号化タイプ「 AES-128 」を選択した場合、鍵(PlainTextSymmetricKey)は「 16 」文字(16バイトは128ビットに相当)で構成されている必要があります。

鍵の長さ(ビット単位)

文字数(バイト単位)

AES-128

16

AES-192

24

AES-256

32

プレーンテキストでの暗号化

16進値での暗号化

Windows証明書ストアからインポートした鍵での暗号化

復号化は暗号化と同じように機能します。暗号化されたノードは自動的に識別されるため、テストステップの値「 XPath 」を指定する必要はありません。

ModuleAttribute「 EncryptionMethod 」は、暗号化と同様の方法で使用されます。

モジュール「 Decrypt XML Resource

この例には以下のステップが含まれています。

  1. encr4 」という名前のリソースが作成されます。

  2. 次のXTestStepで、リソース「 encr4 」の内容が指定されます。

  3. XTestStepValue「 XPath 」が作成者の名前を指定します。これは暗号化され、リソース「 encr4out 」に書き込まれます。この例では、XTestStepValue「 EncryptionMethod 」は特殊化 SymmetricKeyEncryption を受け取り、XTestStepValue「 KeyType 」は PlainTextSymmetricKey を受け取ります。

  4. リソース「 encr4out 」は復号化されて、リソース「 decr4out 」に書き込まれます。使用する暗号化技術と鍵を指定する必要があります。特殊化は、前のステップと同じように設定する必要があります。

  5. リソース「 decr4out 」はXMLファイルに保存されます。パスは設定パラメータとして使用できます。

暗号化と復号化のサンプルワークフロー