PHPで鍵ペアを作成する方法

提供: セキュリティ
移動: 案内検索
スポンサーリンク

PHPOpenSSL(php-openssl)を使用して、鍵ペア(プライベート鍵公開鍵)の作り方を紹介します。

読み方

鍵ペア
かぎ ぺあ

概要

OpenSSLコマンドを用いて、鍵ペアを作成できますが、ここでは、PHPで生成する方法を説明します。 鍵長の長さを変更すると、プログラムの実行時間が変わります。

# 1024 bit
php keypair.php  0.06s user 0.00s system 99% cpu 0.064 total
# 2048 bit
php keypair.php  0.59s user 0.00s system 99% cpu 0.593 total
# 4096 bit
php keypair.php  3.13s user 0.01s system 99% cpu 3.138 total

PHPの関数

resource openssl_pkey_new

resource openssl_pkey_new ([ array $configargs ] )

新しいプライベート鍵公開鍵鍵ペアを作成します。 引数の配列で、鍵の仕様を指定できます。

openssl_pkey_export

openssl_pkey_export ( mixed $key, string $out, [, string $passphrase [, array $configargs ]])

エクスポート可能な形式で、キー文字列を取得します。PEMエンコードした文字列を取得し、第2引数に格納します。プライベート鍵の取得に利用します。 第3引数でパスフレーズを指定できます。

openssl_pkey_get_details

array openssl_pkey_get_details ( resource $key )

キーの詳細(bits, key, type)を返します。

インストール

FreeBSDにインストールする場合

pkgコマンドでインストールする場合

sudo pkg install php55-openssl

シンプルな鍵ペアの作成

ソースコード

<?php
/**
 * Short description for keypair.php
 *
 * @package keypair
 * @author kaoru <kaoru@bsd>
 * @version 0.1
 * @copyright (C) 2014 kaoru <kaoru@bsd>
 */
// Create the keypair
$res=openssl_pkey_new();
 
// Get private key
openssl_pkey_export($res, $privatekey);
 
// Get public key
$publickey=openssl_pkey_get_details($res);
$publickey=$publickey["key"];
 
echo "--- private key --- PHP_EOL;
echo $privatekey, PHP_EOL;
echo "--- public key --- PHP_EOL;
echo $publickey, PHP_EOL;
?>

使い方

デフォルトでは、プライベート鍵は、1024bitで作成されます。

$ php keypair.php
--- private key ---
-----BEGIN PRIVATE KEY-----
MIICeAIBADANBgkqhkiG9w0BAQEFAASCAmIwggJeAgEAAoGBAORECfP6aMmHOOIZ
GQcgz0fbcLC1FvGK6oq1ml5TNKCeOg/6qlHZqte8OWvlLd3fssCTPX6Bj19MaRez
msIbK+ZAOu74jmZrzdbcp5Zc9rXqPqPM+7/3a7zUt048Vz8OdBDXOxU4PgwxMH3u
IaCknvoCXmGfZnTG9x6xENeriAmzAgMBAAECgYEA3ZFlj9sa57NH9b+i2ZZxXTCV
/BBrSt4qt6V7R9/AD8BGX8hSlsyP1oSvwBlfIiTHH8JMSIV+I2TKBeWibJNvUWSl
v81BM2X81Lg7TPDcGxj0QFsnZreuia812LusEO7K0Y6mWyZLhJTfD4SgXCOlyEvT
a5F3yrJ2beaJhTcgRZECQQD6aw63H/vVjZAX6IkxYJSL4K472Boy2jFJQD83Aaga
2DK293DarhYWK4efe+WJM7mY1nBlBMnnyljHIoyPYb/HAkEA6VqTIWLS5jhxPpXG
F8p2TwVlVual7KlMhIVksxMz7UqwTL2mlZHI62Gp51Y3XEhQKCE0gJNPakgINKwD
v7z+tQJBAMhPMKMtM128ciGdwXg84DYPkG+QSkyZGkmU2bwfWB+5BsAyqBRUopgz
U7Yv/gjE1lY6WgeEUBlYU7Feon7i2usCQQCTdd8f69kmDmjRicfiZNiaWuiNH7ee
c+WcoMbfurTHsLjz5ayNO9DhnZfGTl8xe6jbkxAgZ/Z5TQeScVj1IzM5AkBYAGyO
zXnulzsQvlq3y8eb0oSBweCAMTUIzV8+PzQPv8lS4ANKclH4GhhXrR4hfk1+tHxr
6V83whuIeTHLbl/l
-----END PRIVATE KEY-----
 
--- public key ---
-----BEGIN PUBLIC KEY-----
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDkRAnz+mjJhzjiGRkHIM9H23Cw
tRbxiuqKtZpeUzSgnjoP+qpR2arXvDlr5S3d37LAkz1+gY9fTGkXs5rCGyvmQDru
+I5ma83W3KeWXPa16j6jzPu/92u81LdOPFc/DnQQ1zsVOD4MMTB97iGgpJ76Al5h
n2Z0xvcesRDXq4gJswIDAQAB
-----END PUBLIC KEY-----

鍵ペアの設定を変更する例

ソースコード

<?php
/**
 * Short description for keypair.php
 *
 * @package keypair
 * @author kaoru <kaoru@bsd>
 * @version 0.1
 * @copyright (C) 2014 kaoru <kaoru@bsd>
 */
 
$config = array (
        "digst_alg" => "sha512",
        "private_key_bits" => 4096,
        "private_key_type" => OPENSSL_KEYTYPE_RSA,
);
// Create the keypair
$res=openssl_pkey_new($config);
 
// Get private key
openssl_pkey_export($res, $privatekey);
 
// Get public key
$publickey_detail=openssl_pkey_get_details($res);
$publickey=$publickey_detail["key"];
 
echo "--- private key --- PHP_EOL;
echo $privatekey, PHP_EOL;
echo "--- public key --- PHP_EOL;
echo $publickey, PHP_EOL;
echo "--- detail --- PHP_EOL;
echo $publickey_detail['bits'], PHP_EOL;
echo $publickey_detail['type'], PHP_EOL;
?>

実行例

--- private key ---
-----BEGIN PRIVATE KEY-----
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
iJejEtOH9NZXq5VBowqI5ppbpQM5o1oS
-----END PRIVATE KEY-----
 
--- public key ---
-----BEGIN PUBLIC KEY-----
MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA8kI372WvQfqhncCoShpu
2LQRW70B1hF89Z9gIzfPFvlasXqtlJy/WsASArsBKetpOIzA+o99apXWMQPdjFIq
6t4SFnyH4cVT8ANzb4wEb0eq4slquOeYmhwnTCwZT7Qu1luSTzKhTIdvMMmtSWH/
xrSEeWSG0tMWL4vAphfxCIILFjK+H+g1KXbcSzKcCfwPT7v8VG1MuBPxdBaIwffi
f5IVOcEgbegT73ShnWEMeoPjtiunroGaE9dYGb2qTuYcINLW1tNqSBg91E8jXMAp
uUdbCgs38kmwQfembm0nawwfvkbekqEEp+yiklK8QqQOeUKlf8QCFp6X4olFSqq7
ZRXF27ZYWkMv+CBblr/NgHEe4lyP52CSmJvuy464ZxrDr+4dWIwdKLvQhoJNv4eN
VCHiCWEqrQqIP86u+CnN+RNxQQNC+q9tLH8dk7uMbq4TFXXjwauBpWRPsoB/uzjk
sJ4+Hpt54tEMwA0BW6al8Tu0iEte5SksMm6qyZHfNN+001bHBPBkremMPH0GmSP7
e/NnXXd1uXC7Fl8CulgP49nzBOct7mJRsR8coyEHMqAn+2E85opX5vziIAW/vlVL
vCNVqRkUPZWpZuNZ9eMtnfm8WWi9bvGHjB32d3MbHbvCPe0FKDhfWGKdSK0pcTDm
IIZvrR0j6fsPqPfhkha9j18CAwEAAQ==
-----END PUBLIC KEY-----
 
--- detail ---
4096
0

関連項目




スポンサーリンク