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
420
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
RSA暗号から学ぶ公開鍵暗号の仕組み
Yusuke Inai
May 17, 2021
More Decks by Yusuke Inai
See All by Yusuke Inai
で、エンジニアになって1年経ったけどどう?
youliangdao
1
380
人よりアウトプットができるようになるためのコツ
youliangdao
0
230
Next.jsから見る Webフロントエンドの歴史
youliangdao
1
1.2k
SaaSスタートアップで3ヶ月働いてみて感じた現実(リアル)
youliangdao
0
520
個人開発で挫折する人を救いたい
youliangdao
2
3.8k
Qiitaでバズりやすい記事の書き方を伝授する
youliangdao
0
4.7k
React って本当に使う意味あるの? 〜SPA と React の「キホン」の「キ」〜
youliangdao
1
260
PumaとUnicornって結局何なん!?
youliangdao
0
1.6k
"ぼくのかんがえたさいきょうの"勉強法
youliangdao
0
430
Other Decks in Programming
See All in Programming
Vue × Nuxt × Oxc どこまで使える?実運用の現在地
andpad
0
220
その問い、本当に正しいですか?AI時代のエンジニアに必要な哲学と認知科学 / ai-philosophy-cognitive-science
minodriven
6
4.1k
生成AI時代にこそ効くGo | Why Go Works in the Age of Generative AI
mom0tomo
8
3.2k
メソッドのジェネリクスでGoの夢は広がるか? / Kyoto.go #65
utgwkk
3
690
キャリア迷子上等 ─ "ない道"は自分で作ればいい
16bitidol
3
2k
技術記事、 専門家としてのプログラマ、 言語化
mizchi
9
3.6k
RTSPクライアントを自作してみた話
simotin13
0
580
AIチームを指揮するOSS「TAKT」活用術 / How to Use “TAKT,” an OSS Tool for Orchestrating AI Teams
nrslib
6
880
Hunting Vulnerabilities in Symfony with LLMs
vinceamstoutz
0
540
These Five Tricks Can Make Your Apps Greener, Cheaper, & Nicer
hollycummins
0
280
Datadog × OpenTelemetry 入門と実践のあいだ
kn_to_maxpno
1
150
Skillsは効率化、Agentsは"自分の拡張"——Builder時代のエージェント編成(CC Night 2026)
wemra
1
120
Featured
See All Featured
Designing for humans not robots
tammielis
254
26k
Public Speaking Without Barfing On Your Shoes - THAT 2023
reverentgeek
1
420
WENDY [Excerpt]
tessaabrams
11
38k
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
21
1.5k
The MySQL Ecosystem @ GitHub 2015
samlambert
251
13k
Mobile First: as difficult as doing things right
swwweet
225
10k
The Hidden Cost of Media on the Web [PixelPalooza 2025]
tammyeverts
2
330
The Straight Up "How To Draw Better" Workshop
denniskardys
239
140k
Practical Orchestrator
shlominoach
191
11k
The innovator’s Mindset - Leading Through an Era of Exponential Change - McGill University 2025
jdejongh
PRO
1
200
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
55
3.4k
Digital Ethics as a Driver of Design Innovation
axbom
PRO
1
310
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法が多い)