RSA暗号は冪乗の余りが持つ性質を利用した暗号
二つの素数pとqを選び、その二つをかけてn = pxqとする
整数2を選ぶ e.g. e=65537
e x d = (p-1)x(q-1)で割ったあまりとなるような整数dを探す
dが秘密鍵で nとeのペア(n, e)が公開鍵
nの素因数分解ができような大きなnを選ぶ必要がある
落としどつき一方向関数という
RSA暗号の基本方式は安全ではないとされ、RSA-OAEPが推奨されている
### OpenSSLによるRSA暗号の鍵の作り方
$ openssl version
OpenSSL 1.1.1f 31 Mar 2020
秘密鍵ファイルの作成
$ openssl genrsa 2048 > sec-test-key.txt
Generating RSA private key, 2048 bit long modulus (2 primes)
…………+++++
………………………………………..+++++
e is 65537 (0x010001)
公開鍵の作成
$ openssl rsa -pubout < sec-test-key.txt > pub-test-key.txt
writing RSA key
確認方法
$ openssl rsa -text -pubin -noout < pub-test-key.txt
RSA Public-Key: (2048 bit)
Modulus:
00:ac:d4:b1:05:d5:86:6d:83:4a:34:65:62:b9:b9:
d3:08:eb:23:ec:8f:11:4b:5d:f1:90:59:cd:b0:0f:
83:15:a5:90:09:f2:d6:13:9f:89:b4:98:cb:7c:1d:
// 省略
df:5b:ce:c4:03:55:14:b8:d2:30:7d:f3:99:03:96:
df:eb:cb:69:79:e3:b8:12:e4:80:b3:b3:7a:71:e9:
09:b9
Exponent: 65537 (0x10001)
$ openssl rsa -text -noout < sec-test-key.txt
RSA Private-Key: (2048 bit, 2 primes)
※privateExponentが秘密鍵を示す
Pythonによる動作確認
def convert_to_int(s): return int("".join(s.split()).replace(":",""),16)
n=convert_to_int("""
00:ac:d4:b1:05:d5:86:6d:83:4a:34:65:62:b9:b9:
d3:08:eb:23:ec:8f:11:4b:5d:f1:90:59:cd:b0:0f:
83:15:a5:90:09:f2:d6:13:9f:89:b4:98:cb:7c:1d:
81:13:d6:f8:f2:b7:b0:ac:03:3d:d5:00:f6:10:0f:
// 省略
14:0a:71:96:e1:0d:48:ee:8b:b1:74:ed:3b:c2:15:
3e:47:d9:1b:8c:5a:d3:a3:89:7a:20:37:6d:42:23:
3b:d2:3f:7a:5b:e4:75:c2:b7:89:d7:6b:48:8e:bd:
df:5b:ce:c4:03:55:14:b8:d2:30:7d:f3:99:03:96:
df:eb:cb:69:79:e3:b8:12:e4:80:b3:b3:7a:71:e9:
09:b9
""")
d=convert_to_int("""
00:8d:04:d6:94:2e:0f:8b:97:ce:9a:46:07:72:07:
7f:7c:0d:70:b8:7a:5b:e0:24:fd:0f:8d:56:d9:4b:
2e:e8:20:b9:10:85:05:cb:e9:26:d1:26:c3:11:b8:
79:33:98:fa:74:01:11:b4:a8:c8:70:de:61:e7:e4:
// 省略
b1:a2:ae:51:87:38:48:4b:70:ce:90:9b:3c:10:d0:
37:8b:84:73:56:c7:25:e2:f7:7e:ca:9a:eb:09:47:
42:52:6a:3b:d4:c3:04:87:27:8e:54:93:af:4b:04:
4e:02:23:1b:24:0a:49:63:ce:b8:5d:fd:7b:5d:c6:
13:26:3a:00:75:9c:51:bd:1d:cb:f2:40:c3:a2:6c:
ad:01
""")
e=65537
m=123456789
c=pow(m,e,n)
c
x=pow(c,d,n)
x