Upgrade to Pro — share decks privately, control downloads, hide ads and more …

RSA暗号を手計算したくなること、ありますよね?? (20260615_orestudy6_rsa)

RSA暗号を手計算したくなること、ありますよね?? (20260615_orestudy6_rsa)

2026年6月15日に開催された「俺の勉強会 #6」の発表資料です

https://ore-no-benkyoukai.connpass.com/event/394501/

#orestudy

Avatar for Koki Senda

Koki Senda

June 15, 2026

More Decks by Koki Senda

Other Decks in Technology

Transcript

  1. 暗号化 (encryption) ▪ メッセージ (平文) を、意味が読み取れない文章 (暗号文) に変換する 9 通信経路

    暗号文 (ciphertext) 暗号文 (ciphertext) 送信者 受信者 攻撃者 盗聴 暗号文 (ciphertext) 内容 分からん
  2. 公開鍵暗号とは ▪ 「暗号化に使う鍵」と「復号に使う鍵」が異なる ▪ 両方の鍵を、受信者が事前に作り、公開鍵を配る 12 公開鍵 (public key) 秘密鍵

    (private key) 暗号文 (ciphertext) 暗号文 (ciphertext) 送信者 受信者 平文 (plaintext) 平文 (plaintext) 公開鍵で 暗号化 秘密鍵で 復号 送信
  3. RSA暗号とは ▪ 公開鍵暗号のひとつ! ▪ Rivest / Shamir / Adleman の3人が提唱した

    ▪ 「掛け算」と「素因数分解」の難しさの非対称性に依拠する手法 13
  4. RSA暗号とは ▪ 公開鍵暗号のひとつ! ▪ Rivest / Shamir / Adleman の3人が提唱した

    ▪ 「掛け算」と「素因数分解」の難しさの非対称性に依拠する手法。 ここで問題です。 「187」を素因数分解すると? 14
  5. RSA暗号とは ▪ 公開鍵暗号のひとつ! ▪ Rivest / Shamir / Adleman の3人が提唱した

    ▪ 「掛け算」と「素因数分解」の難しさの非対称性に依拠する手法。 ここで問題です。 「187」を素因数分解すると? では「11 x 17」は? 15
  6. 事前準備: 鍵生成 ▪ 2つ素数からnを用意します • p = 11 • q

    = 17 • → n = pq = 11 x 17 = 187 ▪ 鍵が決まります • e = 7 • d = 23 • ここで、eとdは e d ≡ 1 (mod (p-1)(q-1)) を満たす数の組み合わせ ▪ 公開鍵: (n, e) = (187, 7) ▪ 秘密鍵: (n, d) = (187, 23) 16
  7. RSA暗号における暗号化 ▪ plaintext (送りたいメッセージ) を「5」とする ▪ 公開鍵: (n, e) =

    (187, 7) ▪ ciphertext = plaintext^e (mod n) • = 5^7 (mod 187) • = 5^4 x 5^3 • ≡ 64 x 125 • = 8000 • ≡ 146 (mod 187) => できあがった暗号文: 「146」 17 ここで、 5^4 = 625 ≡ 64 (mod 187)
  8. RSA暗号における復号 ▪ 受け取った暗号文: 「146」 ▪ 秘密鍵: (n, d) = (187,

    23) ▪ plaintext = ciphertext^d (mod n) • = 146^23 (mod 187) • = 146^(16+4+2+1) • ≡ 69 x 4 x (-2) x 146 • ≡ 5 (mod 187) => 復元された平文: 「5」 18 ここで、 146^2 = 21316 ≡ -2 (mod 187) 146^4 ≡ (-2)^2 = 4 (mod 187) 146^16 ≡ 4^4 = 256 ≡ 69 (mod 187)
  9. RSA暗号の破り方 ▪ 公開鍵は持っています • (n, e) = (187, 7) ▪

    nを構成する p, qを見つける 💡 • n = pq • 187 = pq • p = 11, q = 17 ▪ p, qが分かったので、dを計算します • ed ≡ 1 (mod (p-1)(q-1)) • d ≡ 187^(-1) (mod 160) • d ≡ 23 (mod 160) ▪ 秘密鍵ゲット! : (187, 23) ▪ => あとはこれを使って通常通りの手順で復号すればよい 19 💡通常はこの素因数分解が めちゃくちゃ大変 サマーウォーズで 健二くんが解いていたのも この素因数分解! (とされているはず)