# RSAとは RSAは公開鍵暗号(非対称鍵暗号)の代表例です。 RSAでは以下の3つの値が重要です。 | 名前 | 記号 | 役割 | | ---------- | ---- | ---------------------------- | | モジュラス | N | 公開鍵・秘密鍵で共通 | | 公開指数 | e | 公開鍵側(暗号化・署名検証) | | 秘密指数 | d | 秘密鍵側(復号・署名生成) | ## RSAの基本的な使い方 ### 機密情報の暗号化 ``` 暗号化: C = M^e mod N 復号: M = C^d mod N ``` * 公開鍵(e, N)で暗号化 * 秘密鍵(d, N)で復号 第三者は復号できない ```plantuml @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 ``` 秘密鍵で「暗号化」して公開鍵で「復号」 → 本人が署名したことを証明。 ```plantuml @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 | 長期利用向け |