Skip to content

Commit b916e14

Browse files
committed
Update and fix docs for openssl_open and openssl_seal
php/doc-en@110ac43 php/doc-en@730fd5c
1 parent b77a8b6 commit b916e14

File tree

2 files changed

+52
-54
lines changed

2 files changed

+52
-54
lines changed

reference/openssl/functions/openssl-open.xml

Lines changed: 25 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
<?xml version="1.0" encoding="utf-8"?>
22
<!-- $Revision$ -->
3-
<!-- EN-Revision: 5bc68add3da3cd18c40f851e944b15095d3a26aa Maintainer: hirokawa Status: ready -->
3+
<!-- EN-Revision: 730fd5c3dd1523bb9330762084ce016d4e58e946 Maintainer: hirokawa Status: ready -->
44
<!-- CREDITS: takagi,mumumu -->
55
<refentry xml:id="function.openssl-open" xmlns="http://docbook.org/ns/docbook">
66
<refnamediv>
@@ -20,14 +20,14 @@
2020
<methodparam choice="opt"><type class="union"><type>string</type><type>null</type></type><parameter>iv</parameter><initializer>&null;</initializer></methodparam>
2121
</methodsynopsis>
2222
<para>
23-
<function>openssl_open</function> は、キー ID
24-
<parameter>private_key</parameter> およびエンベロープキー
25-
<parameter>encrypted_key</parameter> に関連する公開鍵を使用して、
23+
<function>openssl_open</function> は、 <parameter>private_key</parameter> を使用して
24+
<parameter>encrypted_key</parameter> から復号されたエンベロープキーによって
2625
<parameter>data</parameter> をオープン(復号)します。
27-
その上で、<parameter>output</parameter> を復号化したデータで埋めます。
28-
エンベロープキーは、データがシール(暗号化)された際に生成され、特定の
29-
一つの公開鍵でのみ使用することが可能です。詳細な情報については、
30-
<function>openssl_seal</function> を参照ください。
26+
復号は <parameter>cipher_algo</parameter> と <parameter>iv</parameter> を使用して行なわれます。
27+
IV は暗号方式が要求する場合にのみ必要です。復号されたデータは <parameter>output</parameter> に
28+
格納されます。エンベロープキーは通常、秘密鍵に関連付けられた公開鍵を用いてデータがシール(暗号化)
29+
されたときに生成されます。
30+
詳細は <function>openssl_seal</function> を参照ください。
3131
</para>
3232
</refsect1>
3333

@@ -39,39 +39,42 @@
3939
<term><parameter>data</parameter></term>
4040
<listitem>
4141
<para>
42+
シール(暗号化)されたデータ。
4243
</para>
4344
</listitem>
4445
</varlistentry>
4546
<varlistentry>
4647
<term><parameter>output</parameter></term>
4748
<listitem>
4849
<para>
49-
成功した場合、オープンしたデータをここに返します
50+
成功した場合、オープンしたデータをこのパラメータのリファレンス変数として返します
5051
</para>
5152
</listitem>
5253
</varlistentry>
5354
<varlistentry>
5455
<term><parameter>encrypted_key</parameter></term>
5556
<listitem>
5657
<para>
58+
<parameter>private_key</parameter> を用いて復号できる暗号化された対称鍵。
5759
</para>
5860
</listitem>
5961
</varlistentry>
6062
<varlistentry>
6163
<term><parameter>private_key</parameter></term>
6264
<listitem>
6365
<para>
66+
<parameter>encrypted_key</parameter>の復号に用いられる秘密鍵。
6467
</para>
6568
</listitem>
6669
</varlistentry>
6770
<varlistentry>
6871
<term><parameter>cipher_algo</parameter></term>
6972
<listitem>
7073
<para>
71-
暗号化方式
74+
<parameter>data</parameter>の復号に使用される暗号化方式。
7275
<caution>
7376
<simpara>
74-
デフォルト値 (<literal>'RC4'</literal>) はセキュアでない値です
77+
PHP 8.0 以前のデフォルト値 (<literal>'RC4'</literal>) は安全ではありません
7578
明示的にセキュアな暗号化方式を指定することを強く推奨します。
7679
</simpara>
7780
</caution>
@@ -82,7 +85,9 @@
8285
<term><parameter>iv</parameter></term>
8386
<listitem>
8487
<para>
85-
初期化ベクトル。
88+
データの復号に用いられる初期化ベクトル。暗号方式が IV を要求する場合に必要です。
89+
これは <parameter>cipher_algo</parameter> で <function>openssl_cipher_iv_length</function>
90+
を呼び出すことで確認できます。
8691
</para>
8792
</listitem>
8893
</varlistentry>
@@ -139,24 +144,19 @@
139144
<programlisting role="php">
140145
<![CDATA[
141146
<?php
142-
// $sealed および $env_key に暗号化されたデータおよびエンベロープキー
143-
// が含まれていると仮定。共にシール元(暗号化側)から与えられる。
144147
145-
// ファイルから公開鍵を取得し、使用可能とする
146-
$fp = fopen("/src/openssl-0.9.6/demos/sign/key.pem", "r");
147-
$priv_key = fread($fp, 8192);
148-
fclose($fp);
149-
$pkeyid = openssl_get_privatekey($priv_key);
148+
// $sealed, $env_key および $iv に暗号化されたデータおよびエンベロープキーと
149+
// IV が含まれていると仮定。すべてシール元(暗号化側)から与えられる。
150+
151+
// private_key.pem に置かれたファイルから公開鍵を取得する
152+
$pkey = openssl_get_privatekey("file://private_key.pem");
150153
151154
// データを復号化し、$open に保存
152-
if (openssl_open($sealed, $open, $env_key, $pkeyid)) {
153-
echo "here is the opened data: ", $open;
155+
if (openssl_open($sealed, $open, $env_key, $pkey, 'AES256', $iv)) {
156+
echo "Here is the opened data: ", $open;
154157
} else {
155-
echo "failed to open data";
158+
echo "Failed to open data";
156159
}
157-
158-
// 公開鍵をメモリから開放
159-
openssl_free_key($pkeyid);
160160
?>
161161
]]>
162162
</programlisting>

reference/openssl/functions/openssl-seal.xml

Lines changed: 27 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
<?xml version="1.0" encoding="utf-8"?>
22
<!-- $Revision$ -->
3-
<!-- EN-Revision: 5bc68add3da3cd18c40f851e944b15095d3a26aa Maintainer: hirokawa Status: ready -->
3+
<!-- EN-Revision: 110ac43250fdb3531fe26d4d29292e33df7855e8 Maintainer: hirokawa Status: ready -->
44
<!-- CREDITS: takagi,mumumu -->
55
<refentry xml:id="function.openssl-seal" xmlns="http://docbook.org/ns/docbook">
66
<refnamediv>
@@ -20,15 +20,14 @@
2020
<methodparam choice="opt"><type>string</type><parameter role="reference">iv</parameter><initializer>&null;</initializer></methodparam>
2121
</methodsynopsis>
2222
<para>
23-
<function>openssl_seal</function> は、ランダムに生成された秘密鍵
24-
および指定した <parameter>cipher_algo</parameter> を使用して <parameter>data</parameter> をシール(暗号化)
25-
します。このキーは、<parameter>public_key</parameter> を ID とする
26-
公開鍵で暗号化されます。
27-
それぞれの暗号化されたキーは <parameter>encrypted_keys</parameter> で返されます。
28-
これは、暗号化されたデータを複数の受信者に
29-
送信できることを意味します(この際、各受信者は送信側に公開鍵を
30-
提供します)。各受信者は、暗号化されたデータとその受信者の
31-
公開鍵で暗号化されたエンベロープキーを受け取る必要があります。
23+
<function>openssl_seal</function> は、指定された <parameter>cipher_algo</parameter> を使用して
24+
ランダムに生成された秘密鍵で <parameter>data</parameter> をシール(暗号化)します。
25+
その鍵は続いて <parameter>public_key</parameter> 配列内の各公開鍵で暗号化され、
26+
それぞれ暗号化されたエンベロープキーは <parameter>encrypted_keys</parameter> パラメータの
27+
変数リファレンスに返されます。これによって、(公開鍵が利用可能なら) 複数の受信者にシールされた
28+
データを送信できます。各受信者は、シールされたデータと受信者の公開鍵で暗号化されたエンベロープキー
29+
の両方を受け取らなければいけません。
30+
生成された IV (初期化ベクトル) は <parameter>iv</parameter> パラメータの変数リファレンスに返されます。
3231
</para>
3332
</refsect1>
3433

@@ -76,7 +75,7 @@
7675
暗号化方式
7776
<caution>
7877
<simpara>
79-
デフォルト値 (<literal>'RC4'</literal>) はセキュアでない値です
78+
PHP 8.0 以前のデフォルト値 (<literal>'RC4'</literal>) は安全ではありません
8079
明示的にセキュアな暗号化方式を指定することを強く推奨します。
8180
</simpara>
8281
</caution>
@@ -87,8 +86,15 @@
8786
<term><parameter>iv</parameter></term>
8887
<listitem>
8988
<para>
90-
初期化ベクトル。
89+
データの復号に用いられる初期化ベクトル。暗号方式が IV を要求する場合に必要です。
90+
これは <parameter>cipher_algo</parameter> で <function>openssl_cipher_iv_length</function>
91+
を呼び出すことで確認できます。
9192
</para>
93+
<caution>
94+
<simpara>
95+
初期化ベクトルは明示的に設定できません。設定された値はランダムに生成された値で上書きされます。
96+
</simpara>
97+
</caution>
9298
</listitem>
9399
</varlistentry>
94100
</variablelist>
@@ -151,26 +157,18 @@
151157
<![CDATA[
152158
<?php
153159
// $data には、暗号化されるデータが含まれていると仮定
160+
$data = "test";
154161
155-
// 受信者の公開鍵を取得し、使用可能にする
156-
$fp = fopen("/src/openssl-0.9.6/demos/maurice/cert.pem", "r");
157-
$cert = fread($fp, 8192);
158-
fclose($fp);
159-
$pk1 = openssl_get_publickey($cert);
160-
// 2 番目の受信者についても同様
161-
$fp = fopen("/src/openssl-0.9.6/demos/sign/cert.pem", "r");
162-
$cert = fread($fp, 8192);
163-
fclose($fp);
164-
$pk2 = openssl_get_publickey($cert);
162+
// 公開鍵を取得する
163+
$pk1 = openssl_get_publickey("file://cert1.pem");
164+
$pk2 = openssl_get_publickey("file://cert2.pem");
165165
166166
// メッセージを暗号化。$pk1 および $pk2 の所有者のみが、$sealed を
167-
// データをそれぞれ $ekeys[0] および $ekeys[1] で復号化することが
168-
// 可能
169-
openssl_seal($data, $sealed, $ekeys, array($pk1, $pk2));
170-
171-
// キーをメモリから開放する
172-
openssl_free_key($pk1);
173-
openssl_free_key($pk2);
167+
// データをそれぞれ $ekeys[0] および $ekeys[1] で復号化することが可能
168+
if (openssl_seal($data, $sealed, $ekeys, array($pk1, $pk2), 'AES256', $iv) > 0) {
169+
// $sealed と $iv の値を格納し、後で openssl_open で使用することもできます。
170+
echo "success\n";
171+
}
174172
?>
175173
]]>
176174
</programlisting>

0 commit comments

Comments
 (0)