公開鍵暗号
秘密鍵と公開鍵が異なる暗号方式
同じ鍵を使うものは共通鍵暗号方式
暗号または署名・検証ができる方式
両方できるのはRSA、他の形式ではECDHなどの鍵交換が利用されるらしい
X.509でいろいろ決まり事もある
暗号 (RSA)
公開鍵で暗号化したものは、プライベート鍵(私有鍵 private key)で復号化できる。ブロック暗号などと同じで長さは modules の長さまでという制限がある。ブロック暗号という使い方もできなくはないが低速。
安全強度を保つには鍵長などが長くなるため他のアルゴリズムに移行が進んでいる。
共通鍵(秘密鍵 secret key)を暗号化するために使われたが、Diffie-Hellman鍵共有法、ECDHが利用可能なためTLSの暗号などでは使われなくなった。
暗号に利用できるのは、RSAが有限体で閉じているためモジュラ逆数で元に戻すことができる
証明書の署名・検証用途ではまだ利用しているがECDSA, EdDSAなどへの移行が進んでいる。
署名・検証のみ利用できるのがDSA系
RSAより短いということでECDSA, EdDSAが利用される傾向にある。DSAは古いため廃止の方向。
暗号ハッシュ関数やMACなどと組み合わせる。
DSA系で暗号化はどうするのか説明されていない事が多いので妄想になりがち
暗号化する場合は鍵交換方式のECDH, ECDHE, ECDH-ESなどを利用する。鍵は必要? RFC 9216 にサンプルがあるかも
table:役割
鍵 暗号化(鍵) 鍵交換 署名・検証 拡張子
プライベート鍵 私有鍵 秘密鍵 private key 復号(RSAのみ) ECDH,ECDHE 署名 .p8 .key など
公開鍵 public key 暗号化(RSAのみ) ECDH,ECDHE 検証 .pub
共通鍵 秘密鍵 secret key ○共通鍵暗号 MAC?
速度は遅い
暗号、署名・検証に利用可能
RSA
RSAEP 暗号 (旧式)
RSADP 復号 (旧式)
RSASP1 署名 (旧式)
RSAVP1 検証 (旧式)
暗号化スキーム
RSAES-PKCS1-v1_5 旧
RSAES-OAEP 新
署名・検証スキーム
RSASSA-PKCS1_v1_5 旧
RSASSA-PSS 新
RSAでは秘密鍵と公開鍵の機能(原理)が同じ。
逆の使い方で暗号と署名・検証に使えるが同じ鍵を利用すると脆弱なため、単純な暗号化、署名・検証では安全ではない。
そのためRSAES、RSASSAのスキームで別々の方式になるように使われるのが一般的
table:いろいろ
署名 暗号 鍵転送 鍵交換(DH) RFC
RSA △ △ △ ECDHE?
RSAES-OAEP - ○ ○ -
RSASSA-PSS ○ - - -
DSA ○ ✗ ✗ DH,ECDHE?
DH - - ○
ECDSA ○ ✗ ✗ ECDH 3279,5480,8813
ECDH(ECDSA) ✗ ✗ ECDH 5480,8813
ECMQV ✗ ✗ 5480,8813
EdDSA ○ ✗ ✗ ECDH 8032,8410
ECDH(EdDSA) - - ○ 7748,8410
ECDHE ○
署名・検証のみ利用可能
DSA Digital Signature Algorithm
ECDSA
EdDSA
SM2 (中国)
暗号化の鍵交換
ECDH (リアルタイム)
ECDHE TLS?
ECDH-ES (鍵ラップ)
鍵の形式
RFC 5958 PKCS #8
旧PEM
主な用途
PKI ASN.1な形
TLS
https
SMTP / POP3 / IMAP
etc...
S/MIME
DKIM 1行っぽい形
ssh 1行な形
JOSE JWS/JWE/JWA/JWK
OpenID Connect
COSE
pgp / gpg
鍵の型式はこれくらい
sshとDKIMは認証局を必要としない
DKIMは一部制限あり