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
330
RSA暗号から学ぶ公開鍵暗号の仕組み
Yusuke Inai
May 17, 2021
Tweet
Share
More Decks by Yusuke Inai
See All by Yusuke Inai
で、エンジニアになって1年経ったけどどう?
youliangdao
1
310
人よりアウトプットができるようになるためのコツ
youliangdao
0
170
Next.jsから見る Webフロントエンドの歴史
youliangdao
1
1.1k
SaaSスタートアップで3ヶ月働いてみて感じた現実(リアル)
youliangdao
0
470
個人開発で挫折する人を救いたい
youliangdao
2
3.5k
Qiitaでバズりやすい記事の書き方を伝授する
youliangdao
0
3.6k
React って本当に使う意味あるの? 〜SPA と React の「キホン」の「キ」〜
youliangdao
1
220
PumaとUnicornって結局何なん!?
youliangdao
0
1.1k
"ぼくのかんがえたさいきょうの"勉強法
youliangdao
0
370
Other Decks in Programming
See All in Programming
PostgreSQLのRow Level SecurityをPHPのORMで扱う Eloquent vs Doctrine #phpcon #track2
77web
2
290
今ならAmazon ECSのサービス間通信をどう選ぶか / Selection of ECS Interservice Communication 2025
tkikuc
18
3.3k
datadog dash 2025 LLM observability for reliability and stability
ivry_presentationmaterials
0
110
CursorはMCPを使った方が良いぞ
taigakono
1
170
明示と暗黙 ー PHPとGoの インターフェイスの違いを知る
shimabox
2
280
「ElixirでIoT!!」のこれまでとこれから
takasehideki
0
370
AWS CDKの推しポイント 〜CloudFormationと比較してみた〜
akihisaikeda
3
310
プロダクト志向なエンジニアがもう一歩先の価値を目指すために意識したこと
nealle
0
110
ReadMoreTextView
fornewid
1
470
生成AIコーディングとの向き合い方、AIと共創するという考え方 / How to deal with generative AI coding and the concept of co-creating with AI
seike460
PRO
1
330
Deep Dive into ~/.claude/projects
hiragram
7
1.3k
すべてのコンテキストを、 ユーザー価値に変える
applism118
2
720
Featured
See All Featured
Into the Great Unknown - MozCon
thekraken
39
1.9k
Understanding Cognitive Biases in Performance Measurement
bluesmoon
29
1.8k
Faster Mobile Websites
deanohume
307
31k
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
PRO
181
53k
Rebuilding a faster, lazier Slack
samanthasiow
81
9k
Learning to Love Humans: Emotional Interface Design
aarron
273
40k
The Straight Up "How To Draw Better" Workshop
denniskardys
233
140k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
194
16k
Docker and Python
trallard
44
3.4k
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
7
700
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
657
60k
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
31
1.2k
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法が多い)