『Java 暗号化アーキテクチャー (JCA) リファレンスガイド』で使用されている画像のテキスト説明を、次に示します。
この図は 2 つの説明図で構成されます。最初の図は、プロバイダ名を指定せずに MD5 アルゴリズム実装を要求するアプリケーションを示しています。2 番目の図は、特定のプロバイダから MD5 アルゴリズム実装を要求するアプリケーションを示しています。
この図は 3 列に配置した 5 つの円柱で構成されます。これらの円柱には、上から下の順に次のようなラベルが付いています。
X が付いています)MessageDigest_getInstance("MD5") というラベルが付いた、「プロバイダ B からの MDS メッセージダイジェスト」というラベルが矢尻に付いた矢印が、「アプリケーション」円柱を出発して次のものを通過します。
矢尻は「アプリケーション」円柱を指しています。
この図は 3 列に配置した 5 つの円柱で構成されます。これらの円柱には、上から下の順に次のようなラベルが付いています。
MessageDigest_getInstance("MD5", "ProviderC") というラベルが付いた、「プロバイダ C からの MDS メッセージダイジェスト」というラベルが矢尻に付いた矢印が、「アプリケーション」円柱を出発して次のものを通過します。
矢尻は「アプリケーション」円柱を指しています。
この図は 5 つのボックスで構成されます。
アプリケーション:このボックスには、次の擬似コードがあります。
c:Cipher.getInstance("AES");
JCA/JCE:このボックスには、次のリストがあります。
CSP、CSP2、CSP3:これらのボックスは、暗号サービスプロバイダを表します
5 番目のボックスは CSP3 を表します。これには次の見出しと擬似コードがあります。
Provider.class
"Cipher.AES" -> "com.foo.AESCipher"
com.foo.AESCipher.class
package com.foo:
class AESCipher extends CipherSPi {
.
.
.
}
ボックスは、矢印によって次のように接続されています。
「CSP3」から「Provider.class」と「com.foo.AESCipher.class」の見出しまでが、点線で接続されています
この図は「プロバイダ C」というラベルが付いた円柱と、1 つのボックスで構成されます。プロバイダ C がボックスの内容を含むことを示すための点線が使用されています。このボックスには次の見出しと Java コードがあります。
provider.java
public class fooJCA extends Provider {
.
.
.
put("MessageDigest.MD5", "com.foo.MD5");
.
.
.
{}com.foo.MD5.java
package com.foo;
public class MD5 extends
MessageDigestSpi {
.
.
.
}この図は、次のようなラベルが付いた 3 つのボックスで構成されます。
ラベルの付いた矢印によって、これらのボックスが連結されています。
setSeed(): 「シード」から「SecureRandom (SHA1PRNG)」へdigest() および nextBytes(): 「SecureRandom (SHA1PRNG)」から「データ」へこの図は、次のようなラベルが付いた 3 つのボックスで構成されます。
ラベルの付いた矢印によって、これらのボックスが連結されています。
update(): 「データ」から「Message Digest (MD5)」へdigest(): 「Message Digest (MD5)」から「ダイジェスト/ハッシュ」へこの図は、次のようなラベルが付いたボックスで構成されます。
ラベルの付いた矢印によって、これらのボックスが連結されています。
update(): 「データ」から「Signature (MD5withRSA)」(その 1) へupdate(): 「データ」から「Signature (MD5withRSA)」(その 2) へsign(): 「Signature (MD5withRSA)」(その 1) から「署名バイト」へverify(): 「署名バイト」と「データ」から「Signature (MD5withRSA)」(その 2) へラベルなしの矢印によって、これらのボックスが連結されています。
この図は、次のようなラベルが付いたボックスで構成されます。
ラベルの付いた矢印によって、これらのボックスが連結されています。
update(): 「平文テキスト」から「Cipher (AES)」(その 1) へdoFinal(): 「平文テキスト」から「暗号化」へupdate(): 「暗号テキスト」から「Cipher (AES)」(その 2) へdoFinal(): 「暗号テキスト」から「復号化」へラベルなしの矢印によって、これらのボックスが連結されています。
この図は、次のようなラベルが付いたボックスで構成されます。
ラベルの付いた矢印によって、これらのボックスが連結されています。
update(): 「データ」(その 1) から「MAC (HmacMD5)」(その 1) へdoFinal(): 「データ」(その 1) から「MAC (HmacMD5)」(その 1) へupdate(): 「データ」(その 2) から「MAC (HmacMD5)」(その 2) へdoFinal(): 「データ」(その 2) から「MAC (HmacMD5)」(その 2) へラベルなしの矢印によって、これらのボックスが連結されています。
この図は 2 つの説明図で構成されます。
この説明図には、次のキャプションが付いています。ジェネレータ — 初期化パラメータに基づいて新規オブジェクトを生成します
これは、次のようなラベルが付いたボックスで構成されます。
ラベルなしの矢印によって、これらのボックスが連結されています。
この説明図には、次のキャプションが付いています。ファクトリ — 特定の既存のオブジェクトを別のオブジェクト型に変換します
これは、次のようなラベルが付いたボックスで構成されます。
ラベルなしの矢印によって、これらのボックスが連結されています。
この図は、次のようなラベルが付いたボックスで構成されます。
ラベルの付いた矢印によって、これらのボックスが連結されています。
generatePrivate(): 「Key Factory (RSA)」(その 1) から「非公開鍵」へgeneratePublic(): 「Key Factory (RSA)」(その 1) から「公開鍵」へgetKeySpec(): 「Key Factory (RSA)」(その 2) から「鍵仕様」へラベルなしの矢印によって、これらのボックスが連結されています。
この図は、次のようなラベルが付いたボックスで構成されます。
generateSecret() というサブラベルがありますgetKeySpec() というサブラベルがありますラベルなしの矢印によって、これらのボックスが連結されています。
generateSecret()」へgenerateSecret()」から「秘密鍵」(その 1) へgetKeySpec()」へgetKeySpec()」から「鍵仕様」(その 2) へこの図は、次のようなラベルが付いたボックスで構成されます。
ラベルの付いた矢印によって、これらのボックスが連結されています。
init(): 「鍵の長さ」から「Key Pair Generator (DH)」へinit(): 「AlgorithmParameterSpec」から「Key Pair Generator (DH)」へgenKeyPair(): 「Key Pair Generator (DH)」から「鍵ペア」へgetPrivate(): 「鍵ペア」から「非公開鍵」へgetPublic(): 「鍵ペア」から「公開鍵」へこの図は、次のようなラベルが付いたボックスで構成されます。
ラベルの付いた矢印によって、これらのボックスが連結されています。
init(): 「鍵の長さ」から「Key Generator (AES)」へinit(): 「AlgorithmParameterSpec」から「Key Generator (AES)」へgenerateKey(): 「Key Generator (AES)」から「秘密ペア」へこの図は破線により 2 つの部分にわかれています。上半分には Alice というラベル、下半分には Bob というラベルが付いています。この図は、次のようなラベルが付いたボックスで構成されます。
ラベルの付いた矢印によって、これらのボックスが連結されています。
init(): 「Alice の非公開鍵」から「Key Agreement (DH)」へdoPhase(): 「Bob の公開鍵」から「Key Agreement (DH)」へgenerateSecret(): 「Key Agreement (DH)」から「バイト」へinit(): 「Bob の非公開鍵」から「Key Agreement (DH)」へdoPhase(): 「Alice の公開鍵」から「Key Agreement (DH)」へgenerateSecret(): 「Key Agreement (DH)」から「バイト」へ両矢印によって、Alice 側と Bob 側の「バイト」ボックスが結合されています。この矢印には「同じであることが必要です」というラベルが付いています。
init(): 「鍵の長さ」から「Key Generator (AES)」へinit(): 「AlgorithmParameterSpec」から「Key Generator (AES)」へgenerateKey(): 「Key Generator (AES)」から「秘密鍵」へこの図は「JKS」というラベルが付いた表と、「ファイル」というラベルの付いた円柱で構成されます。
表「JKS」には次の情報が含まれます。
| 別名 | 型 | データ |
|---|---|---|
| Brad | 秘密鍵 | ... |
| Milton | 信頼できる証明書 | ... |
| Duke | 信頼できる証明書 | ... |
store() というラベルが付いた矢印が、表「JKS」から円柱「ファイル」を指しています。load() というラベルが付いた矢印が、円柱「ファイル」から円柱「JKS」を指しています。
この図には、ステップを表す 2 つのリストが互いに隣り合って示されています。左側のリストには、「クライアント」というラベルが付いています。右側のリストには、「サーバー」というラベルが付いています。
「クライアント」リストには、次の項目があります。
「1. Client hello」から「7. Certificate」までの間に 5 行の空白行があります。「11. Finished」から「14. Finished」までの間に 2 行の空白行があります。
「サーバー」リストには、次の項目があります。
「6. Server hello done」から「12. Change cipher spec」までの間に 5 行の空白行があります。
「クライアント」リスト内の各項目から、「サーバー」リスト内の対応する空白行を指す矢印が伸びています。同様に、「サーバー」リスト内の各項目から、「クライアント」リスト内の対応する空白行を指す矢印が伸びています。「クライアント」リストと「サーバー」リストの項目 14 と 15 については、代わりに両矢印によって連結されています。