メモめもメモ

環境構築やプログラミングに関するメモ

Python3でpyopensslを使ってRSA秘密鍵ファイルを生成する

インストール

まず、下記コマンドでpyOpenSSLパッケージをインストールします。 cryptographyパッケージも同時にインストールされます。

$ pip install pyopenssl

環境によってはpipではなくpip3を使ってインストールを行います。

コード

鍵長4096bitのRSA暗号秘密鍵を生成し、PKCS#8形式のPEMエンコーディングのファイルとして保存します。

import OpenSSL.crypto
import cryptography.hazmat.primitives.serialization

# RSA-4096の秘密鍵を生成
bits = 4096
key_type = OpenSSL.crypto.TYPE_RSA
pk = OpenSSL.crypto.PKey()
pk.generate_key(key_type, bits)
key = pk.to_cryptography_key()

# 秘密鍵をPEMエンコーディングで出力
encoding = cryptography.hazmat.primitives.serialization.Encoding.PEM # PEMエンコーディング
format = cryptography.hazmat.primitives.serialization.PrivateFormat.PKCS8 # PKCS #8 形式
encryption_algorithm = cryptography.hazmat.primitives.serialization.NoEncryption()
pem = key.private_bytes(encoding, format, encryption_algorithm)

# ファイルに保存
with open("private.key", "wb") as file:
    file.write(pem)

実行結果

private.keyが生成されたので、openssl(pythonではない)を使って中身を見てみました。 下記の様にしっかり生成されています。

$ openssl rsa -text -noout -in private.key
Private-Key: (4096 bit)
modulus:
    00:e5:72:53:0a:d1:05:45:32:a9:13:5b:14:f2:1a:
    50:73:c8:ed:82:26:e5:a3:93:b9:58:ff:f8:5f:30:
    84:27:81:6d:d7:37:f0:ce:a0:11:3b:f4:e2:e7:b9:
    6e:25:7c:36:e5:d7:e6:4c:bd:46:06:e4:8a:7b:a9:
    41:95:8a:ae:a1:ef:d9:61:f7:e6:72:df:2c:0a:cd:
    86:25:81:6d:7d:e5:db:21:67:f9:5b:5f:d0:1a:11:
    af:d5:c9:66:d7:b2:b7:d1:35:60:32:ff:35:39:9b:
    e0:cb:b0:69:7d:ab:92:1c:9b:d1:69:bb:7c:05:74:
    98:43:ea:39:13:15:8f:58:7f:c5:f5:fe:dd:6a:09:
    43:f2:b7:25:18:97:74:f6:d8:f1:aa:62:f9:8f:89:
    83:54:0a:a5:a1:e0:1d:be:55:9e:fe:f6:59:93:c4:
    42:85:db:01:f4:07:91:bf:38:24:f6:10:cf:16:84:
    cd:9f:be:76:a7:15:03:57:c9:c9:94:dd:6a:81:1a:
    b3:bf:b9:4b:97:cb:3d:ce:ab:1f:46:92:ec:81:95:
    2d:20:ea:39:48:26:e7:3c:68:a6:22:8e:03:94:f9:
    15:da:c5:bc:9a:38:e7:ea:6e:96:c1:b5:55:95:e6:
    e5:02:1a:7d:14:cb:b3:7e:af:b0:fb:8b:e3:70:b0:
    28:2d:47:e1:ec:87:0e:06:c8:0b:f5:61:e2:5b:16:
    02:1c:f6:cb:36:ff:55:c3:21:62:1b:11:f5:c1:f1:
    04:ae:69:96:d2:8b:ce:bb:0d:78:c5:89:dd:f6:d1:
    af:38:f2:a7:d7:b3:35:d8:dc:f9:00:79:a0:54:30:
    1f:97:e4:30:95:5a:71:15:51:13:42:49:59:18:03:
    fa:a1:19:8a:8d:2f:20:56:e1:9e:9b:97:fe:81:33:
    b7:b3:2e:8c:49:a5:e1:ac:29:a2:4f:b1:01:62:87:
    a0:ac:6b:53:a6:14:08:9e:0a:90:9b:c5:7a:fc:dd:
    bb:b0:60:4c:9a:42:d4:e6:82:7a:da:1c:45:c6:2c:
    fb:d8:a2:79:45:6f:63:b6:9c:6f:f3:b0:a0:0b:56:
    3d:f4:03:a2:07:ef:37:d2:53:31:be:44:6b:2b:fa:
    ab:79:83:06:18:1d:17:7f:fc:13:06:00:b5:1e:f5:
    64:8c:e1:d2:81:73:26:b2:4a:6b:80:e5:a6:68:7c:
    2a:bd:e1:31:d8:6b:f9:8d:05:5d:9a:1a:f0:bd:a8:
    e9:34:96:4f:2d:69:ae:a2:6d:80:19:c9:94:e1:1e:
    63:6f:69:e2:a2:b7:4c:82:23:2b:3a:ae:ee:44:64:
    a2:01:f7:1a:5f:74:e7:dc:4a:50:78:23:de:c7:b6:
    f5:8a:bd
publicExponent: 65537 (0x10001)
privateExponent:
    79:15:38:df:97:68:99:98:df:82:d8:69:18:4e:6c:
    b0:7d:93:61:40:d7:a4:d8:3b:52:cd:5a:2c:19:b5:
    54:07:c8:88:6f:fc:03:7e:93:39:b9:c4:d8:96:91:
    9a:f4:8f:20:02:2c:85:c8:c8:a0:b0:90:a8:2b:ac:
    f1:96:cb:0b:a8:40:66:a3:e5:18:2f:cf:d5:2f:9a:
    a0:46:4a:1a:cb:67:35:9c:e2:09:a7:69:71:a8:6d:
    cb:7b:4a:6b:7f:e3:e3:62:b0:8e:99:01:64:92:6f:
    31:ee:b9:ec:d8:d2:f5:88:01:1e:34:13:81:e9:82:
    c5:2c:60:cc:42:6f:70:3b:95:a3:78:c9:2d:c1:0f:
    fb:91:4c:e1:4a:64:2e:34:54:6c:1f:69:25:a7:63:
    07:c1:ca:a0:bf:5d:d2:e8:ea:4c:10:83:3b:28:b2:
    16:63:7a:07:66:cb:32:47:15:b2:49:32:8f:e6:ab:
    80:a6:89:85:28:e0:a7:be:54:43:dc:08:ed:72:c2:
    f2:e5:7d:0f:f0:f0:80:14:ec:1f:59:3f:b8:2e:9a:
    2f:29:8b:eb:18:a4:a4:cb:71:09:01:3a:c0:ae:26:
    2b:5a:78:6a:46:a7:94:9e:a1:ae:3d:dc:99:8b:cc:
    c4:ac:67:df:c6:93:c5:c2:3f:ba:af:9a:ea:07:fc:
    5a:d1:2b:6e:3b:4d:0e:93:4e:90:0b:2f:b5:c3:55:
    70:57:a9:01:80:df:22:36:6c:0e:eb:71:22:13:03:
    8a:be:78:fc:f4:9c:f6:01:2f:5b:90:c0:62:a0:83:
    8f:88:c5:87:37:d6:63:ba:3c:97:09:0d:d2:31:b4:
    35:94:8f:20:81:1d:2f:14:c3:4d:04:67:7b:4e:a3:
    d5:04:93:31:c5:82:56:e6:ce:76:d8:61:f6:b3:33:
    84:39:06:24:9a:fc:6d:a7:45:16:5b:3a:18:c0:c0:
    db:27:63:c3:13:77:cf:d2:54:c1:f8:f3:a5:7a:83:
    93:78:03:9d:33:d6:36:2c:4f:36:77:4c:83:be:60:
    85:25:57:a2:ce:66:30:09:4c:5f:54:e0:a7:07:a7:
    3d:dd:7c:88:66:6b:b2:5f:fd:22:5c:1e:5a:64:24:
    29:8b:2f:b1:02:38:b1:eb:f0:13:99:c3:14:59:1d:
    99:ca:5f:a5:64:95:9f:3d:ab:5c:64:de:ae:8d:86:
    c0:24:eb:02:b4:0e:39:e0:4b:3d:85:d4:17:12:c7:
    d8:e2:ed:a9:77:a7:b8:24:55:b9:cb:a3:aa:62:95:
    4d:e2:09:55:29:f3:75:53:48:26:88:20:e7:df:f8:
    df:4d:d3:b9:76:00:ea:3f:51:5f:b7:e1:a6:bd:26:
    4a:21
prime1:
    00:f3:f3:4f:3f:b8:82:54:92:b3:38:84:53:3d:b5:
    b0:f0:56:bb:4f:b5:23:b2:a7:d9:c1:42:8a:42:eb:
    44:c7:50:59:f3:2b:70:de:cb:65:4f:4f:e6:0b:23:
    b7:d4:f3:d2:cb:e1:67:7a:34:f8:77:d1:34:7f:69:
    2c:af:59:ec:fa:35:6c:61:69:56:97:be:83:38:84:
    b7:f9:5e:d6:fd:55:00:22:81:a8:31:ad:34:49:c7:
    60:5e:5e:17:f5:71:ba:19:79:0b:76:86:2c:da:3c:
    41:d2:a7:b5:5b:e3:85:e2:95:42:be:58:24:36:65:
    80:cf:e7:0f:f4:dd:7f:0e:a1:3c:59:ac:5a:ed:b8:
    3c:d5:8c:5b:29:10:5d:f4:08:27:93:2b:1b:d1:14:
    28:50:6f:29:a7:69:31:a0:c4:c2:dd:f0:52:c4:b4:
    bc:25:b7:9d:91:f7:99:99:35:49:14:3a:e0:a4:5c:
    6e:33:75:da:fa:c3:42:10:d9:03:8e:1d:33:9d:72:
    fc:af:32:96:48:81:5e:c3:d1:7d:f4:66:30:38:f6:
    b5:d2:57:a4:0d:f5:51:4b:17:78:fd:55:2b:fa:30:
    d8:07:c9:ea:a9:90:09:c3:04:a7:7c:11:e4:10:1d:
    dd:e9:73:d2:92:c3:1d:1c:0b:52:88:9e:e7:8f:ac:
    c9:b5
prime2:
    00:f0:c7:9e:0c:ea:37:d8:33:24:c3:32:d7:0c:dd:
    cc:fa:00:8e:f2:74:b2:c8:e7:9e:aa:8d:9e:60:04:
    91:fb:7c:9f:0f:6d:36:94:a3:49:eb:0a:de:65:df:
    6b:cb:b0:20:31:3a:3a:62:48:42:71:06:a6:f3:96:
    4e:7b:12:44:17:53:3b:e7:82:e2:45:ec:27:6b:cf:
    6b:36:b7:40:ac:9f:85:e7:68:3b:73:d0:1c:9f:21:
    cb:b1:2f:72:a2:44:fe:7e:50:25:15:ef:1a:90:90:
    6c:1a:c5:4f:a4:3b:f5:08:4a:12:e1:7a:2f:f5:ad:
    f9:69:e5:e0:1c:fb:e5:a7:57:e1:d3:5d:76:45:03:
    77:47:9f:9d:49:23:6d:fa:c3:dc:01:63:68:83:09:
    6f:ff:7b:37:7f:6e:cf:45:e4:9e:6b:d7:51:8c:ba:
    02:18:ec:b5:ff:54:e5:c8:2d:96:5c:38:a5:47:13:
    8a:ba:a3:81:23:d7:92:0a:ef:51:7b:aa:31:c0:8f:
    40:c9:74:ee:7c:ca:61:88:9b:2c:ab:e2:79:8c:86:
    f4:05:e8:63:97:36:7a:d0:a1:bd:cb:e0:16:72:6a:
    db:b9:4c:6d:9f:b8:e8:64:8d:27:6e:1c:6d:1d:48:
    af:7c:ee:ce:99:ce:d2:68:d8:69:14:e8:2b:e6:6f:
    41:e9
exponent1:
    1a:0f:5e:e2:e6:b9:fd:80:e2:66:62:34:66:3e:37:
    95:a5:1e:43:68:8d:54:b3:7b:9e:9a:96:1c:89:f7:
    81:f7:42:74:a8:aa:59:12:8f:53:06:ad:03:79:a0:
    54:be:6b:41:5e:65:e8:77:2a:27:da:90:6a:1f:f9:
    27:0e:4b:33:7b:6b:85:88:74:38:a7:a0:6a:f4:3a:
    97:08:1b:9d:5a:6c:36:43:75:8d:40:fc:79:f9:33:
    81:41:39:fb:fd:57:2d:0b:72:3f:0a:1c:56:7f:e3:
    64:36:88:38:35:b9:02:b8:81:35:c6:42:b0:10:ed:
    ce:c7:d7:3b:88:41:df:75:37:f6:38:64:4a:4a:c9:
    2c:e2:de:86:27:7a:71:ec:41:16:06:9f:e5:18:eb:
    29:94:86:75:9c:d6:31:5f:73:95:b3:eb:93:99:df:
    13:84:66:ef:c5:ec:81:a2:60:99:29:a4:ff:c9:e3:
    f7:d9:5a:38:39:8d:a0:31:1e:a1:1a:db:7d:b1:5f:
    ee:f3:4f:7c:95:5d:63:3b:c8:e1:c7:dc:d4:e8:fe:
    09:67:55:5e:2c:5b:af:d2:e5:18:e2:f5:5c:b7:c5:
    0c:27:f4:ca:82:59:98:9c:b1:ab:9e:59:a7:a3:19:
    26:ac:39:cd:75:cc:71:47:80:5c:99:e5:10:c3:1b:
    95
exponent2:
    67:fb:dd:6e:f8:6b:db:ab:e2:b1:86:30:47:77:36:
    81:b5:62:06:a5:8d:5c:a4:62:ea:87:34:a1:84:f7:
    c2:a3:44:52:36:39:3f:21:f1:d7:57:1f:4a:e1:9d:
    3d:1f:38:17:ea:6c:b2:6b:40:7e:6d:80:06:6c:a0:
    42:18:56:5d:b8:6d:83:83:0b:d3:64:b4:75:a3:e3:
    4a:83:03:a4:49:54:5b:e6:b0:de:48:3f:44:1e:25:
    48:c5:13:fd:ae:4c:36:22:c8:91:5b:6c:9e:88:30:
    97:b3:24:bc:e9:c3:dd:ab:97:d1:d6:a2:05:b8:f7:
    a0:db:4c:d9:57:94:0b:9c:31:83:c5:b6:41:01:c9:
    2e:9e:69:1f:df:f4:2c:3b:0f:b5:6d:c8:01:e7:3e:
    7e:18:29:94:98:37:5d:98:e9:2d:eb:94:65:71:23:
    5c:be:45:af:1a:6c:0d:f2:5a:20:43:ba:65:22:b4:
    63:fc:1e:d6:6a:cf:c0:77:30:3a:76:fa:fb:8d:22:
    4e:9e:78:2c:5e:7e:96:af:65:30:6a:23:52:24:2a:
    18:af:0e:eb:8b:f4:a8:4b:61:9b:3d:90:94:23:3f:
    f7:1b:61:b0:7b:fb:a9:09:28:c1:2d:f7:95:91:01:
    70:b3:f5:77:89:51:67:44:26:c5:87:ab:05:de:80:
    99
coefficient:
    00:a0:7a:49:9e:fb:db:86:83:c0:3c:57:b2:d6:64:
    23:7e:94:74:41:9a:9c:55:7e:a8:0c:1c:bd:03:97:
    6b:19:f2:3b:ba:cd:17:06:17:40:4a:17:60:5f:ef:
    a0:cd:34:7d:29:e6:a6:39:56:2c:77:61:f2:b8:cf:
    97:5e:5c:2c:a9:67:c5:90:a3:64:2f:5c:30:de:81:
    c1:77:db:09:28:c3:e1:87:c5:3c:9f:8f:b7:93:31:
    08:42:c3:29:bc:4f:53:72:ec:0f:e9:b3:42:f0:00:
    8d:4d:6b:c8:f8:82:ba:9a:07:93:9b:e9:27:6f:4e:
    a9:a9:df:f6:31:7d:e6:95:19:aa:15:5d:59:39:9a:
    dc:c3:4a:c0:10:70:bf:79:1e:de:c1:1d:1c:60:48:
    5e:b1:5c:1e:53:8d:7f:69:8b:1b:cf:69:a8:c0:ae:
    c9:c0:aa:3c:03:30:22:c5:bc:78:34:11:ef:ce:c6:
    66:03:15:02:20:a4:4e:d8:bc:0f:f9:43:ec:94:d5:
    9d:04:81:2f:27:fc:7c:2c:f9:f3:ec:59:c5:59:6f:
    bf:0a:56:12:0e:13:5c:73:bb:43:d1:ff:0c:5e:b3:
    c2:9f:b1:c6:e1:d2:03:7c:5c:84:1d:5c:be:68:06:
    50:d7:23:64:f6:b3:5d:1b:9e:6b:a5:27:5f:ad:9e:
    b6:45

注意

一度でもネット上に公開してしまった秘密鍵は破棄してください。