OpenSSLを使用したRSAとSM2の鍵ペア生成およびPKCS形式の変換

OpenSSLは暗号化ツールキットとして広く使用されており、GmSSL(SM2/SM3/SM4/SM9/ZUC/SSLをサポートする暗号ツールキット)とともに使用されることもあります。 OpenSSLのバージョンを確認するには以下のコマンドを使用します:
openssl version

1.1 使用例

Java開発者は、PKCS#8形式のヘッダーや改行、空白を取り除き、キーをロードすることが多いです。一方で、.NETやPHPの開発者はPKCS#8のコマンドライン操作を必要としない場合があります。

1.2 PKCS#1とPKCS#8

PKCS#1とPKCS#8は、RSA密钥ペアを含む暗号システムで広く使用される2つの標準です。主な違いはエンコード形式と使用例にあります。
  • PKCS#1 (公開鍵暗号標準 #1) は、RSA鍵ペアを特徴づけます。
  • PKCS#8 (公開鍵暗号標準 #8) は、RSAだけでなくDSAやECCなどの他の種類の鍵にも適用可能な汎用的な私鍵表現標準です。

1.2.1 PKCS#1

PKCS#1は、PKCS#8の鍵オブジェクト部分のみを含み、バージョンやアルゴリズム識別子がありません。
-----BEGIN RSA PRIVATE KEY-----
base64文字列、64バイトごとに改行。
-----END RSA PRIVATE KEY-----

-----BEGIN RSA PUBLIC KEY-----
base64文字列、64バイトごとに改行。
-----END RSA PUBLIC KEY-----

1.2.2 PKCS#8

PKCS#8は、追加情報(バージョンやアルゴリズム識別子など)も含みます。
-----BEGIN PRIVATE KEY-----
base64文字列、64バイトごとに改行。
-----END PRIVATE KEY-----

-----BEGIN PUBLIC KEY-----
base64文字列、64バイトごとに改行。
-----END PUBLIC KEY-----

1.2.3 PKCS#1とPKCS#8の区別

PKCS#1はヘッダーにRSAと記載されますが、PKCS#8ではそのような特定の識別子がありません。

1.3 PEMとDER

PEMとDERは、密鍵と証明書を保存および転送するための標準的な形式で、相互に変換可能です。
  • DER: 二進制形式、ASN.1構造の直接エンコード、よりコンパクト。
  • PEM: Base64エンコーディング、読みやすいためファイルサイズは大きくなります。

1.3.1 PEMからDERへの変換

openssl rsa -in rsa_private.pem -outform DER -out rsa_private.der

1.3.2 DERからPEMへの変換

openssl rsa -inform DER -in rsa_private.der -outform PEM -out rsa_private2.pem

2. RSA

2.1 私鍵の生成

# 1024ビットの秘密鍵生成
openssl genrsa -out private.pem 1024

# 秘密鍵情報を表示
openssl rsa -in private.pem -text

2.2 公開鍵の生成

# PKCS1秘密鍵から公開鍵を抽出
openssl rsa -in private_pkcs1.pem -pubout -out public_pkcs8.pem

3. SM2(楕円曲線暗号)

SM2は中国の国家暗号局(OSCCA)によって定義された楕円曲線暗号です。

3.1 私鍵の生成

# SM2に基づいた秘密鍵生成
openssl ecparam -genkey -name SM2 -out sm2_private_ec.key

# 秘密鍵情報を表示
openssl ec -in sm2_private_ec.key -text

3.2 公開鍵の生成

# EC秘密鍵から公開鍵を抽出
openssl ec -in sm2_private_ec.key -pubout -out sm2_public_pkcs8.key

3.3 署名と検証

# ファイルの署名
openssl dgst -sign private.key -sha1 -out sm2_file.sign plain.txt

# 署名の検証
openssl dgst -verify pub.key -sha1 -signature sm2_file.sign plain.txt

4. 数字証明書

4.1 証明書のシリアル番号を表示

openssl x509 -in xx.cer -noout -serial

4.2 証明書から公開鍵を取得

openssl x509 -in xx.cer -pubkey  -noout > xx.pem

5. 拡張

5.1 OpenSSLのインストール

5.1.1 Linux

# ソースコードの解凍
tar -zxvf openssl-3.2.1.tar.gz

# インストールディレクトリへ移動
cd openssl-3.2.1

# 設定
./Configure

# コンパイル
make

# インストール
make install

5.1.2 Windows

Windowsの場合、バイナリファイルのパスを通すだけで使用できます。

タグ: OpenSSL RSA SM2 PKCS PEM

9月10日 14:15 投稿