Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
RSA暗号から学ぶ公開鍵暗号の仕組み
Search
Yusuke Inai
May 17, 2021
Programming
1
310
RSA暗号から学ぶ公開鍵暗号の仕組み
Yusuke Inai
May 17, 2021
Tweet
Share
More Decks by Yusuke Inai
See All by Yusuke Inai
で、エンジニアになって1年経ったけどどう?
youliangdao
1
290
人よりアウトプットができるようになるためのコツ
youliangdao
0
160
Next.jsから見る Webフロントエンドの歴史
youliangdao
1
1k
SaaSスタートアップで3ヶ月働いてみて感じた現実(リアル)
youliangdao
0
450
個人開発で挫折する人を救いたい
youliangdao
2
3.3k
Qiitaでバズりやすい記事の書き方を伝授する
youliangdao
0
3.4k
React って本当に使う意味あるの? 〜SPA と React の「キホン」の「キ」〜
youliangdao
1
210
PumaとUnicornって結局何なん!?
youliangdao
0
980
"ぼくのかんがえたさいきょうの"勉強法
youliangdao
0
350
Other Decks in Programming
See All in Programming
Lambda(Python)の リファクタリングが好きなんです
komakichi
4
240
Empowering Developers with HTML-Aware ERB Tooling @ RubyKaigi 2025, Matsuyama, Ehime
marcoroth
2
960
一緒に働きたくなるプログラマの思想 #QiitaConference
mu_zaru
78
20k
20250429 - CNTUG Meetup #67 / DevOps Taiwan Meetup #69 - Deep Dive into Tetragon: Building Runtime Security and Observability with eBPF
tico88612
0
170
GitHub Copilot for Azureを使い倒したい
ymd65536
1
310
設計の本質:コード、システム、そして組織へ / The Essence of Design: To Code, Systems, and Organizations
nrslib
10
3.7k
Designing Your Organization's Test Pyramid ( #scrumniigata )
teyamagu
PRO
2
180
エンジニアが挑む、限界までの越境
nealle
1
310
Road to RubyKaigi: Making Tinny Chiptunes with Ruby
makicamel
4
540
Deoptimization: How YJIT Speeds Up Ruby by Slowing Down / RubyKaigi 2025
k0kubun
2
1.9k
開発者フレンドリーで顧客も満足?Platformの秘密
algoartis
0
170
KawaiiLT 登壇資料 キャリアとモチベーション
hiiragi
0
160
Featured
See All Featured
Site-Speed That Sticks
csswizardry
6
530
Optimising Largest Contentful Paint
csswizardry
37
3.2k
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
32
2.3k
VelocityConf: Rendering Performance Case Studies
addyosmani
329
24k
Faster Mobile Websites
deanohume
306
31k
Stop Working from a Prison Cell
hatefulcrawdad
268
20k
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
32
5.5k
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
227
22k
Music & Morning Musume
bryan
47
6.5k
StorybookのUI Testing Handbookを読んだ
zakiyama
30
5.7k
Typedesign – Prime Four
hannesfritz
41
2.6k
4 Signs Your Business is Dying
shpigford
183
22k
Transcript
RSA暗号から学ぶ 公開鍵暗号の仕 組み 〜大切なことは全部、公開鍵警察から教わっ た〜
〜とある日〜
ワイ「おっしゃ、公開鍵暗号の仕組みなんとなく理 解でけた!」 ワイ「復習も兼ねてアウトプット代わりにちょっとツイー トでもすっか」
None
〜数分後〜
ワイ「お、こんな自己満ツイートに珍しくリプ来とる。 ありがたいなぁ。どんなリプやろ?」
None
None
None
※※警察からの注意喚起※※ ①「南京錠のイメージ」はやめろ! ②「鍵の意味」をちゃんと理解しろ!
①「南京錠のイメージ」はやめ ろ!
よくある公開鍵暗号のイメー ジ
None
None
None
一般的な「暗号」「鍵」のイメージに引っ張られてしまってい る
これは「機密性の担保」しか 示していない (「鍵」「暗号」が名前についているためそっち に引っ張られてしまう。。)
出典:「総務省 国民のための情報セキュリティサイト」より引用
これらもあくまで「機密性の担保」のイメージ!
残りのイメージを反映 できていない!!
公開鍵暗号の正しい認識 ①機密性を担保(盗聴防止) ②完全性を担保(改竄防止) ③真正性を担保(なりすまし防止) →正確には上記3つくらいの役割を担うことが可能
None
②「鍵の意味」をちゃんと理解 しろ!
公開鍵暗号
公開鍵暗号の歴史 ①1960年以前 共通鍵暗号が普及する中で「鍵配送問題」が出現 ②1960年代 イギリスの政府通信本部の暗号学者ジェームズ・エリスが鍵配送問 題の解決案を提示。 →公開鍵暗号の元アイデア ③1973年 エリスの後輩コックス、具体的案として「一方向関数の使用」を思い つく
④1976年 米国のホイットフィールド・ディフィーとマーティン・ヘルマンが、実用 的な一方向関数を見つけて、公開鍵暗号の具体的な理論を構築。 (=DH法) ⑤1977年 リベスト、シャミア、エーデルマンの3人が、素因数分解の困難性を元 に2種類の機能を実現する公開鍵暗号の方式を発表。 (=RSA暗号)。今でも ( 主に署名の方が ) 広く使われている
①鍵配送問題の出現
具体的問題点 鍵を受け渡したいなら、鍵に鍵をかけて送ればいいと思うが… •メッセージに鍵をかける ◦メッセージを守る鍵を安全に受け渡す必要がある •鍵に鍵をかける ◦鍵を守る鍵を安全に受け渡す必要がある ...…
None
②鍵配送問題の解決案=公開鍵暗号の元アイデ ア
「保護の仕組みは公開してはいけないもの」という発想から、「保護 を "解除する" 仕組みは公開してはいけないもの」という発想に転 換させることで、鍵配送問題を見事にクリア。
出典:「対称性 - Wikipedia」より引用
③−1 エリスのアイデア実現に必要なもの
③−2 一方向関数 相互に変換可能な関数であり、かつある方向への変換は簡単な のに、逆方向の変換は大変な関数 →具体例として、 ハッシュ関数・素因数分解・離散対数問題 etc……が存在
None
④公開鍵暗号の具体的理論の実装 具体的暗号方式 使用している一方向関数 DH法 離散対数問題 RSA暗号 素因数分解
RSA暗号
RSA暗号とは? 「『桁数が大きい合成数の素因数分解問題』が困 難であること」 を安全性の根拠とした公開鍵暗号の一つである。
素因数分解の困難性 【例題①】 (1) 125×227を計算しなさい。 (2) 221を素因数分解しなさい。 (3) 25651を素因数分解しなさい。
RSA暗号の仕組み 【例題②】 という2つの素数を用いて、X=8という情 報をRSA暗号化しなさい
フェルマーの小定理 を相異なる素数とすると、 が成り立つ。Xは任意の自然数。 (※ただし厳密には、少し条件が異なる)
p=3、q=2の場合(Xは任意の数をイメージ) 全ての数は0から5に集約 元の値 0 1 2 3 4 5 6で割った時の余り
6 12 18 … 7 13 19 … 8 14 20 … 9 15 21 … 10 16 22 … 11 17 23 … 元の値を各列の乗数した値を 6で割った余り 1 2 3 4 5 6 7 … 0 0 0 0 0 0 0 … 1 1 1 1 1 1 1 … 2 4 2 4 2 4 2 … 3 3 3 3 3 3 3 … 4 4 4 4 4 4 4 … 5 1 5 1 5 1 5 …
例題の解法の流れ Step1 2つの素数p,qを用意する Step2 受信側が を満たす整数P,Qを見つけ、Pを公 開鍵、Qを秘密鍵と決める Step3 送信側が
を送り、受信側が と複合して完了
Step1:2つの素数p,qを用意する 本問では予め と用意されているので、これを利用する。 (※ただし実際には、もっと大きな数の素数を準備する必要がある。 100桁以上が目安)
Step2:公開鍵と秘密鍵の設定 p=3、q=11であるので となる。 つまり、PQ=21を満たすような鍵のペアを決める。 今回は例として 公開鍵P→3、秘密鍵Q→7 とする
Step3:暗号化して情報を送信 送りたい情報がX=8、公開鍵がP=3なので と計算する。 次に、もう一つ公開されている情報のpq=33を用いて、合同式 を計算する。
つまり、X=8 という情報が X’=17 に暗号化された
Step3:復号化して情報を受け取る 受け取った情報 X’=17を復号する ここでは17を、最初に設定した秘密鍵Q(=7)乗してみると 最後に、pq=33 を法として計算すると となる
つまり、元の情報 X=8 が復号でき た
まとめ
補足(時間的に余裕があれば …)
RSA暗号の安全性 RSA暗号は前方秘匿性の問題が存在 =現実的時間で秘密鍵の解読が可能な場合がある。 (さっきの例だとpq=33の素因数分解が簡単にできる? …というイメージ) →そのため現在では ハイブリット暗号(共通鍵+公開鍵) が使用されている (また、ハイブリット暗号で用いられるものとしては DH法が多い)