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
300
RSA暗号から学ぶ公開鍵暗号の仕組み
Yusuke Inai
May 17, 2021
Tweet
Share
More Decks by Yusuke Inai
See All by Yusuke Inai
で、エンジニアになって1年経ったけどどう?
youliangdao
1
280
人よりアウトプットができるようになるためのコツ
youliangdao
0
160
Next.jsから見る Webフロントエンドの歴史
youliangdao
1
980
SaaSスタートアップで3ヶ月働いてみて感じた現実(リアル)
youliangdao
0
440
個人開発で挫折する人を救いたい
youliangdao
2
3.2k
Qiitaでバズりやすい記事の書き方を伝授する
youliangdao
0
3.2k
React って本当に使う意味あるの? 〜SPA と React の「キホン」の「キ」〜
youliangdao
1
210
PumaとUnicornって結局何なん!?
youliangdao
0
920
"ぼくのかんがえたさいきょうの"勉強法
youliangdao
0
340
Other Decks in Programming
See All in Programming
ニックトレイン登壇資料
ryotakurokawa
0
140
DomainException と Result 型で作る型安全なエラーハンドリング
karszawa
0
160
Going Structural with Named Tuples
bishabosha
0
170
小さく段階的リリースすることで深夜メンテを回避する
mkmk884
2
130
Day0 初心者向けワークショップ実践!ソフトウェアテストの第一歩
satohiroyuki
0
430
リアクティブシステムの変遷から理解するalien-signals / Learning alien-signals from the evolution of reactive systems
yamanoku
2
1k
体得しよう!RSA暗号の原理と解読
laysakura
3
540
複数ドメインに散らばってしまった画像…! 運用中のPHPアプリに後からCDNを導入する…!
suguruooki
0
430
‘무차별 LGTM~👍’만 외치던 우리가 ‘고봉밥 코드 리뷰’를?
hannah0731
0
530
Firebase Dynamic Linksの代替手段を自作する / Create your own Firebase Dynamic Links alternative
kubode
0
180
RubyKaigiで手に入れた HHKB Studioのための HIDRawドライバ
iberianpig
0
1k
Kubernetesで実現できるPlatform Engineering の現在地
nwiizo
2
1.7k
Featured
See All Featured
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
40
2k
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
102
18k
The World Runs on Bad Software
bkeepers
PRO
67
11k
Designing for Performance
lara
606
69k
The Power of CSS Pseudo Elements
geoffreycrofte
75
5.7k
Automating Front-end Workflow
addyosmani
1369
200k
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
656
60k
Understanding Cognitive Biases in Performance Measurement
bluesmoon
28
1.6k
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
227
22k
A better future with KSS
kneath
238
17k
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
7
620
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
356
30k
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法が多い)