2.2 KiB

RSAとは

RSAは公開鍵暗号(非対称鍵暗号)の代表例です。 RSAでは以下の3つの値が重要です。

名前 記号 役割
モジュラス N 公開鍵・秘密鍵で共通
公開指数 e 公開鍵側(暗号化・署名検証)
秘密指数 d 秘密鍵側(復号・署名生成)

RSAの基本的な使い方

機密情報の暗号化

暗号化:   C = M^e mod N
復号:     M = C^d mod N
  • 公開鍵(e, N)で暗号化
  • 秘密鍵(d, N)で復号

第三者は復号できない

@startuml
title RSA Encryption (Confidentiality)

actor Sender
actor Receiver

participant "Public Key\n(e, N)" as Pub
participant "Private Key\n(d, N)" as Priv

note over Sender,Receiver
公開鍵で暗号化し\n秘密鍵で復号する
end note

Sender -> Pub : Encrypt M\nC = M^e mod N
Pub --> Sender : Ciphertext C
Sender -> Receiver : Send C
Receiver -> Priv : Decrypt C\nM = C^d mod N
Priv --> Receiver : Plaintext M

@enduml

デジタル署名

署名生成: S = M^d mod N
署名検証: M = S^e mod N

秘密鍵で「暗号化」して公開鍵で「復号」 → 本人が署名したことを証明。

@startuml
title RSA Digital Signature

actor Sender
actor Receiver

participant "Private Key\n(d, N)" as Priv
participant "Public Key\n(e, N)" as Pub

note over Sender,Receiver
秘密鍵で署名し\n公開鍵で検証する
end note

Sender -> Priv : Sign H(M)\nSig = H(M)^d mod N
Priv --> Sender : Signature Sig
Sender -> Receiver : Send (M, Sig)
Receiver -> Pub : Verify Sig\nH'(M) = Sig^e mod N
Pub --> Receiver : Recovered hash H'(M)
Receiver -> Receiver : Compare\nH'(M) == H(M)

@enduml

デジタル署名は「暗号化(秘匿)」ではなく、 「正しさ・本人性の保証」なので 中身は隠し手おらず読めます。

ビット数

Nのビット長 現実的な安全性
256bit 一瞬で破られる
512bit 数日〜数週間
1024bit もはや危険
2048bit 現在の標準
3072bit 長期利用向け