2.2 KiB
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 | 長期利用向け |