Submit Search
Upload
RSA暗号運用でやってはいけない n のこと #ssmjp
•
54 likes
•
59,980 views
sonickun
Follow
2017/02/21 の #ssmjp で発表した際のスライドです。
Read less
Read more
Technology
Report
Share
Report
Share
1 of 32
Download now
Download to read offline
Recommended
暗号文のままで計算しよう - 準同型暗号入門 -
暗号文のままで計算しよう - 準同型暗号入門 -
MITSUNARI Shigeo
初心者向けCTFのWeb分野の強化法
初心者向けCTFのWeb分野の強化法
kazkiti
Rustに触れて私のPythonはどう変わったか
Rustに触れて私のPythonはどう変わったか
ShunsukeNakamura17
明日使えないすごいビット演算
明日使えないすごいビット演算
京大 マイコンクラブ
CyberChefの使い方(HamaCTF2019 WriteUp編)
CyberChefの使い方(HamaCTF2019 WriteUp編)
Shota Shinogi
Pythonによる黒魔術入門
Pythonによる黒魔術入門
大樹 小倉
Marp Tutorial
Marp Tutorial
Rui Watanabe
katagaitai CTF勉強会 #5 Crypto
katagaitai CTF勉強会 #5 Crypto
trmr
Recommended
暗号文のままで計算しよう - 準同型暗号入門 -
暗号文のままで計算しよう - 準同型暗号入門 -
MITSUNARI Shigeo
初心者向けCTFのWeb分野の強化法
初心者向けCTFのWeb分野の強化法
kazkiti
Rustに触れて私のPythonはどう変わったか
Rustに触れて私のPythonはどう変わったか
ShunsukeNakamura17
明日使えないすごいビット演算
明日使えないすごいビット演算
京大 マイコンクラブ
CyberChefの使い方(HamaCTF2019 WriteUp編)
CyberChefの使い方(HamaCTF2019 WriteUp編)
Shota Shinogi
Pythonによる黒魔術入門
Pythonによる黒魔術入門
大樹 小倉
Marp Tutorial
Marp Tutorial
Rui Watanabe
katagaitai CTF勉強会 #5 Crypto
katagaitai CTF勉強会 #5 Crypto
trmr
組み込み関数(intrinsic)によるSIMD入門
組み込み関数(intrinsic)によるSIMD入門
Norishige Fukushima
暗号技術の実装と数学
暗号技術の実装と数学
MITSUNARI Shigeo
Pythonの理解を試みる 〜バイトコードインタプリタを作成する〜
Pythonの理解を試みる 〜バイトコードインタプリタを作成する〜
Preferred Networks
プログラムを高速化する話
プログラムを高速化する話
京大 マイコンクラブ
AVX-512(フォーマット)詳解
AVX-512(フォーマット)詳解
MITSUNARI Shigeo
Oss貢献超入門
Oss貢献超入門
Michihito Shigemura
SAT/SMTソルバの仕組み
SAT/SMTソルバの仕組み
Masahiro Sakai
本当は恐ろしい分散システムの話
本当は恐ろしい分散システムの話
Kumazaki Hiroki
高速な倍精度指数関数expの実装
高速な倍精度指数関数expの実装
MITSUNARI Shigeo
Docker Compose 徹底解説
Docker Compose 徹底解説
Masahito Zembutsu
TRICK 2022 Results
TRICK 2022 Results
mametter
分散システムの限界について知ろう
分散システムの限界について知ろう
Shingo Omura
プログラミングコンテストでのデータ構造 2 ~平衡二分探索木編~
プログラミングコンテストでのデータ構造 2 ~平衡二分探索木編~
Takuya Akiba
いまさら聞けない!CUDA高速化入門
いまさら聞けない!CUDA高速化入門
Fixstars Corporation
Glibc malloc internal
Glibc malloc internal
Motohiro KOSAKI
ネットストーカー御用達OSINTツールBlackBirdを触ってみた.pptx
ネットストーカー御用達OSINTツールBlackBirdを触ってみた.pptx
Shota Shinogi
【メタサーベイ】基盤モデル / Foundation Models
【メタサーベイ】基盤モデル / Foundation Models
cvpaper. challenge
テスト文字列に「うんこ」と入れるな
テスト文字列に「うんこ」と入れるな
Kentaro Matsui
冬のLock free祭り safe
冬のLock free祭り safe
Kumazaki Hiroki
C++ マルチスレッド 入門
C++ マルチスレッド 入門
京大 マイコンクラブ
ARPスプーフィングによる中間者攻撃
ARPスプーフィングによる中間者攻撃
sonickun
ダークネットのはなし #ssmjp
ダークネットのはなし #ssmjp
sonickun
More Related Content
What's hot
組み込み関数(intrinsic)によるSIMD入門
組み込み関数(intrinsic)によるSIMD入門
Norishige Fukushima
暗号技術の実装と数学
暗号技術の実装と数学
MITSUNARI Shigeo
Pythonの理解を試みる 〜バイトコードインタプリタを作成する〜
Pythonの理解を試みる 〜バイトコードインタプリタを作成する〜
Preferred Networks
プログラムを高速化する話
プログラムを高速化する話
京大 マイコンクラブ
AVX-512(フォーマット)詳解
AVX-512(フォーマット)詳解
MITSUNARI Shigeo
Oss貢献超入門
Oss貢献超入門
Michihito Shigemura
SAT/SMTソルバの仕組み
SAT/SMTソルバの仕組み
Masahiro Sakai
本当は恐ろしい分散システムの話
本当は恐ろしい分散システムの話
Kumazaki Hiroki
高速な倍精度指数関数expの実装
高速な倍精度指数関数expの実装
MITSUNARI Shigeo
Docker Compose 徹底解説
Docker Compose 徹底解説
Masahito Zembutsu
TRICK 2022 Results
TRICK 2022 Results
mametter
分散システムの限界について知ろう
分散システムの限界について知ろう
Shingo Omura
プログラミングコンテストでのデータ構造 2 ~平衡二分探索木編~
プログラミングコンテストでのデータ構造 2 ~平衡二分探索木編~
Takuya Akiba
いまさら聞けない!CUDA高速化入門
いまさら聞けない!CUDA高速化入門
Fixstars Corporation
Glibc malloc internal
Glibc malloc internal
Motohiro KOSAKI
ネットストーカー御用達OSINTツールBlackBirdを触ってみた.pptx
ネットストーカー御用達OSINTツールBlackBirdを触ってみた.pptx
Shota Shinogi
【メタサーベイ】基盤モデル / Foundation Models
【メタサーベイ】基盤モデル / Foundation Models
cvpaper. challenge
テスト文字列に「うんこ」と入れるな
テスト文字列に「うんこ」と入れるな
Kentaro Matsui
冬のLock free祭り safe
冬のLock free祭り safe
Kumazaki Hiroki
C++ マルチスレッド 入門
C++ マルチスレッド 入門
京大 マイコンクラブ
What's hot
(20)
組み込み関数(intrinsic)によるSIMD入門
組み込み関数(intrinsic)によるSIMD入門
暗号技術の実装と数学
暗号技術の実装と数学
Pythonの理解を試みる 〜バイトコードインタプリタを作成する〜
Pythonの理解を試みる 〜バイトコードインタプリタを作成する〜
プログラムを高速化する話
プログラムを高速化する話
AVX-512(フォーマット)詳解
AVX-512(フォーマット)詳解
Oss貢献超入門
Oss貢献超入門
SAT/SMTソルバの仕組み
SAT/SMTソルバの仕組み
本当は恐ろしい分散システムの話
本当は恐ろしい分散システムの話
高速な倍精度指数関数expの実装
高速な倍精度指数関数expの実装
Docker Compose 徹底解説
Docker Compose 徹底解説
TRICK 2022 Results
TRICK 2022 Results
分散システムの限界について知ろう
分散システムの限界について知ろう
プログラミングコンテストでのデータ構造 2 ~平衡二分探索木編~
プログラミングコンテストでのデータ構造 2 ~平衡二分探索木編~
いまさら聞けない!CUDA高速化入門
いまさら聞けない!CUDA高速化入門
Glibc malloc internal
Glibc malloc internal
ネットストーカー御用達OSINTツールBlackBirdを触ってみた.pptx
ネットストーカー御用達OSINTツールBlackBirdを触ってみた.pptx
【メタサーベイ】基盤モデル / Foundation Models
【メタサーベイ】基盤モデル / Foundation Models
テスト文字列に「うんこ」と入れるな
テスト文字列に「うんこ」と入れるな
冬のLock free祭り safe
冬のLock free祭り safe
C++ マルチスレッド 入門
C++ マルチスレッド 入門
Viewers also liked
ARPスプーフィングによる中間者攻撃
ARPスプーフィングによる中間者攻撃
sonickun
ダークネットのはなし #ssmjp
ダークネットのはなし #ssmjp
sonickun
Kali LinuxとMetasploitable2で遊ぼう
Kali LinuxとMetasploitable2で遊ぼう
monochrojazz
脆弱性検査ツールってどうよ
脆弱性検査ツールってどうよ
Masakazu Ikeda
進化するWebトラッキングの話 #ssmjp
進化するWebトラッキングの話 #ssmjp
sonickun
Metasploitでペネトレーションテスト
Metasploitでペネトレーションテスト
super_a1ice
コンピュータエンジニアへのFPGAのすすめ
コンピュータエンジニアへのFPGAのすすめ
Takeshi HASEGAWA
Viewers also liked
(7)
ARPスプーフィングによる中間者攻撃
ARPスプーフィングによる中間者攻撃
ダークネットのはなし #ssmjp
ダークネットのはなし #ssmjp
Kali LinuxとMetasploitable2で遊ぼう
Kali LinuxとMetasploitable2で遊ぼう
脆弱性検査ツールってどうよ
脆弱性検査ツールってどうよ
進化するWebトラッキングの話 #ssmjp
進化するWebトラッキングの話 #ssmjp
Metasploitでペネトレーションテスト
Metasploitでペネトレーションテスト
コンピュータエンジニアへのFPGAのすすめ
コンピュータエンジニアへのFPGAのすすめ
Similar to RSA暗号運用でやってはいけない n のこと #ssmjp
楕円曲線入門トーラスと楕円曲線のつながり
楕円曲線入門トーラスと楕円曲線のつながり
MITSUNARI Shigeo
公開鍵暗号1: RSA暗号
公開鍵暗号1: RSA暗号
Joe Suzuki
暗号技術入門 秘密の国のアリス 総集編
暗号技術入門 秘密の国のアリス 総集編
京大 マイコンクラブ
公開鍵暗号(1): RSA暗号
公開鍵暗号(1): RSA暗号
Joe Suzuki
katagaitai workshop #7 crypto ナップサック暗号と低密度攻撃
katagaitai workshop #7 crypto ナップサック暗号と低密度攻撃
trmr
ペアリングベースの効率的なレベル2準同型暗号(SCIS2018)
ペアリングベースの効率的なレベル2準同型暗号(SCIS2018)
MITSUNARI Shigeo
Javascript で暗号化
Javascript で暗号化
suno88
Similar to RSA暗号運用でやってはいけない n のこと #ssmjp
(7)
楕円曲線入門トーラスと楕円曲線のつながり
楕円曲線入門トーラスと楕円曲線のつながり
公開鍵暗号1: RSA暗号
公開鍵暗号1: RSA暗号
暗号技術入門 秘密の国のアリス 総集編
暗号技術入門 秘密の国のアリス 総集編
公開鍵暗号(1): RSA暗号
公開鍵暗号(1): RSA暗号
katagaitai workshop #7 crypto ナップサック暗号と低密度攻撃
katagaitai workshop #7 crypto ナップサック暗号と低密度攻撃
ペアリングベースの効率的なレベル2準同型暗号(SCIS2018)
ペアリングベースの効率的なレベル2準同型暗号(SCIS2018)
Javascript で暗号化
Javascript で暗号化
Recently uploaded
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet
Toru Tamaki
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdf
taisei2219
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システム
sugiuralab
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
Toru Tamaki
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey
Toru Tamaki
Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Daniel
danielhu54
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Yuma Ohgami
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
Ryo Sasaki
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものです
iPride Co., Ltd.
Recently uploaded
(9)
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdf
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システム
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey
Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Daniel
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものです
RSA暗号運用でやってはいけない n のこと #ssmjp
1.
RSA暗号運用で やってはいけない のこと #ssmjp 2017/02 sonickun 𝒏
2.
sonickun (@y_hag) 大学院生(4月から就職)
#ssmjpで過去に2度発表しました 「ダークネットの話」 #ssmjp 2015/02 http://www.slideshare.net/sonickun/ss-44926963 「進化するWebトラッキングの話」 #ssmjp 2015/07 http://www.slideshare.net/sonickun/web-51132299 自己紹介
3.
RSA暗号 インターネット上で最もよく用いられている暗号方式の ひとつ(SSL/TLS、SSH、IPsecなど) 数学的に安全性が示されている 運用を間違えると暗号が解読される可能性がある 今日話すこと RSA暗号の運用において 気を付けるべきことを紹介します
4.
Ron Rivest、Adi
Shamir、Leonard Adleman によって 発明された公開鍵暗号方式 桁数が大きな合成数の素因数分解が困難であること を安全性の根拠としている RSA暗号とは 平文 暗号文 公開鍵 秘密鍵
5.
鍵生成 素数𝒑, 𝒒を選ぶ
𝒏 = 𝒑 ∗ 𝒒, 𝝋(𝒏) = (𝒑 − 𝟏) ∗ (𝒒 − 𝟏) 𝝋(𝒏) と互いに素となるような 𝒆 を選ぶ 𝒅 ∗ 𝒆 ≡ 𝟏 (𝒎𝒐𝒅 𝝋(𝒏)) となる最小の 𝒅 を求める 𝒏, 𝒆 を公開鍵,𝒑, 𝒒, 𝒅 を秘密鍵とする RSA暗号のアルゴリズム 平文 𝒎 暗号文 𝒄 𝒄 = 𝒎^𝒆 𝒎𝒐𝒅 𝒏 𝒎 = 𝒄^𝒅 𝒎𝒐𝒅 𝒏
6.
RSA暗号運用で やってはいけない のこと𝒏
7.
攻撃が成立する厳密な条件までは言及しません たまに現実的でないシチュエーションも出てきます (暗号学者ががんばって考えたので許して) もちろん悪用厳禁で
8.
RSA暗号運用でやってはいけない 𝒏 のこと その 𝒏
= 𝒑 ∗ 𝒒, 𝝋 𝒏 = 𝒑 − 𝟏 ∗ 𝒒 − 𝟏 , 𝝋 𝒏 ⊥ 𝒆, 𝒅 ∗ 𝒆 ≡ 𝟏 (𝒎𝒐𝒅 𝝋(𝒏)) 暗号化: 𝒄 = 𝒎^𝒆 𝒎𝒐𝒅 𝒏 復号: 𝒎 = 𝒄^𝒅 𝒎𝒐𝒅 𝒏 RSA暗号運用でやってはいけない 𝒏 のこと その 1 𝒏 = 𝒑 ∗ 𝒒, 𝝋 𝒏 = 𝒑 − 𝟏 ∗ 𝒒 − 𝟏 , 𝝋 𝒏 ⊥ 𝒆, 𝒅 ∗ 𝒆 ≡ 𝟏 (𝒎𝒐𝒅 𝝋(𝒏)) 暗号化: 𝒄 = 𝒎^𝒆 𝒎𝒐𝒅 𝒏 復号: 𝒎 = 𝒄^𝒅 𝒎𝒐𝒅 𝒏 公開鍵 𝒏 のビット数(鍵長)が 小さくてはいけない 𝑛 が小さいと容易に素因数分解できてしまう 最新の計算機環境では768bitの整数の素因数分解 に成功している (RSA Factoring Challenge) 2017年時点で1024bit以下は非推奨 (NIST)
9.
RSA暗号運用でやってはいけない 𝒏 のこと その 𝒏
= 𝒑 ∗ 𝒒, 𝝋 𝒏 = 𝒑 − 𝟏 ∗ 𝒒 − 𝟏 , 𝝋 𝒏 ⊥ 𝒆, 𝒅 ∗ 𝒆 ≡ 𝟏 (𝒎𝒐𝒅 𝝋(𝒏)) 暗号化: 𝒄 = 𝒎^𝒆 𝒎𝒐𝒅 𝒏 復号: 𝒎 = 𝒄^𝒅 𝒎𝒐𝒅 𝒏 2 𝒑, 𝒒 の片方が小さい値になってはいけない 𝑛 の大きさが十分であっても、片方の素数が小さい と、𝑛 を小さい素数から順に割っていくと素因数 分解できてしまう
10.
RSA暗号運用でやってはいけない 𝒏 のこと その 𝒏
= 𝒑 ∗ 𝒒, 𝝋 𝒏 = 𝒑 − 𝟏 ∗ 𝒒 − 𝟏 , 𝝋 𝒏 ⊥ 𝒆, 𝒅 ∗ 𝒆 ≡ 𝟏 (𝒎𝒐𝒅 𝝋(𝒏)) 暗号化: 𝒄 = 𝒎^𝒆 𝒎𝒐𝒅 𝒏 復号: 𝒎 = 𝒄^𝒅 𝒎𝒐𝒅 𝒏 3 近い値の素数 𝒑, 𝒒 を使ってはいけない フェルマー法で素因数分解可能 𝑝, 𝑞 の値が近いと、それらの値は 𝑛 の平方根の周辺 に限定される
11.
RSA暗号運用でやってはいけない 𝒏 のこと その 𝒏
= 𝒑 ∗ 𝒒, 𝝋 𝒏 = 𝒑 − 𝟏 ∗ 𝒒 − 𝟏 , 𝝋 𝒏 ⊥ 𝒆, 𝒅 ∗ 𝒆 ≡ 𝟏 (𝒎𝒐𝒅 𝝋(𝒏)) 暗号化: 𝒄 = 𝒎^𝒆 𝒎𝒐𝒅 𝒏 復号: 𝒎 = 𝒄^𝒅 𝒎𝒐𝒅 𝒏 素数 𝒑, 𝒒 を有名な素数(メルセンヌ素数など) にしてはいけない 𝟐^𝒏 − 𝟏(𝑛 は自然数)で表される自然数をメルセ ンヌ数といい、そのうち素数のものをメルセンヌ 素数という 現在見つかっているメルセンヌ素数は49個のみ 4
12.
RSA暗号運用でやってはいけない 𝒏 のこと その 𝒏
= 𝒑 ∗ 𝒒, 𝝋 𝒏 = 𝒑 − 𝟏 ∗ 𝒒 − 𝟏 , 𝝋 𝒏 ⊥ 𝒆, 𝒅 ∗ 𝒆 ≡ 𝟏 (𝒎𝒐𝒅 𝝋(𝒏)) 暗号化: 𝒄 = 𝒎^𝒆 𝒎𝒐𝒅 𝒏 復号: 𝒎 = 𝒄^𝒅 𝒎𝒐𝒅 𝒏 公開鍵 𝒏 の生成時に 同じ素数を使いまわしてはいけない 𝑛 = 𝒑 ∗ 𝑞, 𝑛’ = 𝒑 ∗ 𝑟 のとき、𝑛 と 𝑛’ の公約数を 計算することで 𝑝 が求まる 5
13.
RSA暗号運用でやってはいけない 𝒏 のこと その 𝒏
= 𝒑 ∗ 𝒒, 𝝋 𝒏 = 𝒑 − 𝟏 ∗ 𝒒 − 𝟏 , 𝝋 𝒏 ⊥ 𝒆, 𝒅 ∗ 𝒆 ≡ 𝟏 (𝒎𝒐𝒅 𝝋(𝒏)) 暗号化: 𝒄 = 𝒎^𝒆 𝒎𝒐𝒅 𝒏 復号: 𝒎 = 𝒄^𝒅 𝒎𝒐𝒅 𝒏 𝒆 の値が小さすぎてはいけない Low Public Exponent Attack が適用可能 𝑒 と 𝑛 が共に小さく( 𝑒 = 3など)、 𝑚^𝑒 < 𝑛 のとき、 𝑐 の 𝑒 乗根を計算することで m が求まる 6
14.
RSA暗号運用でやってはいけない 𝒏 のこと その 𝒏
= 𝒑 ∗ 𝒒, 𝝋 𝒏 = 𝒑 − 𝟏 ∗ 𝒒 − 𝟏 , 𝝋 𝒏 ⊥ 𝒆, 𝒅 ∗ 𝒆 ≡ 𝟏 (𝒎𝒐𝒅 𝝋(𝒏)) 暗号化: 𝒄 = 𝒎^𝒆 𝒎𝒐𝒅 𝒏 復号: 𝒎 = 𝒄^𝒅 𝒎𝒐𝒅 𝒏 𝒆 の値が大きすぎてはいけない Wiener‘s Attack が適用可能 𝑒 が大きいと相対的に 𝑑 が小さくなることを利用 して 𝑒 と 𝑛 から秘密鍵が求まる 𝑒 の値は 65537 (0x10001) が選ばれるのが一般的 7
15.
RSA暗号運用でやってはいけない 𝒏 のこと その 𝒏
= 𝒑 ∗ 𝒒, 𝝋 𝒏 = 𝒑 − 𝟏 ∗ 𝒒 − 𝟏 , 𝝋 𝒏 ⊥ 𝒆, 𝒅 ∗ 𝒆 ≡ 𝟏 (𝒎𝒐𝒅 𝝋(𝒏)) 暗号化: 𝒄 = 𝒎^𝒆 𝒎𝒐𝒅 𝒏 復号: 𝒎 = 𝒄^𝒅 𝒎𝒐𝒅 𝒏 同一の平文を異なる 𝒆 で暗号化した 暗号文を与えてはいけない Common Modulus Attack が適用可能 𝑚, 𝑛 が共通で 𝑒 が異なる 𝑒, 𝑐 の組があるとき、 拡張ユークリッド互除法を用いて平文𝑚を計算 できる 8
16.
RSA暗号運用でやってはいけない 𝒏 のこと その 𝒏
= 𝒑 ∗ 𝒒, 𝝋 𝒏 = 𝒑 − 𝟏 ∗ 𝒒 − 𝟏 , 𝝋 𝒏 ⊥ 𝒆, 𝒅 ∗ 𝒆 ≡ 𝟏 (𝒎𝒐𝒅 𝝋(𝒏)) 暗号化: 𝒄 = 𝒎^𝒆 𝒎𝒐𝒅 𝒏 復号: 𝒎 = 𝒄^𝒅 𝒎𝒐𝒅 𝒏 同一の平文を異なる 𝒏 で暗号化した 暗号文を与えてはいけない Håstad‘s Broadcast Attack が適用可能 同一の 𝑚 を異なる 𝑛 で暗号化した 𝑐 が 𝑒 個 得られ たとき、中国人剰余定理を用いて 𝑚 が求まる 9
17.
RSA暗号運用でやってはいけない 𝒏 のこと その 𝒏
= 𝒑 ∗ 𝒒, 𝝋 𝒏 = 𝒑 − 𝟏 ∗ 𝒒 − 𝟏 , 𝝋 𝒏 ⊥ 𝒆, 𝒅 ∗ 𝒆 ≡ 𝟏 (𝒎𝒐𝒅 𝝋(𝒏)) 暗号化: 𝒄 = 𝒎^𝒆 𝒎𝒐𝒅 𝒏 復号: 𝒎 = 𝒄^𝒅 𝒎𝒐𝒅 𝒏 任意の暗号文を復号した結果の 偶奇 (下位1bit) を知られてはいけない LSB Decryption Oracle Attack が適用可能 𝑐 に対して 𝑚 の偶奇がわかるとき、二分探索に よって 𝑚 が求まる 10
18.
RSA暗号運用でやってはいけない 𝒏 のこと その 𝒏
= 𝒑 ∗ 𝒒, 𝝋 𝒏 = 𝒑 − 𝟏 ∗ 𝒒 − 𝟏 , 𝝋 𝒏 ⊥ 𝒆, 𝒅 ∗ 𝒆 ≡ 𝟏 (𝒎𝒐𝒅 𝝋(𝒏)) 暗号化: 𝒄 = 𝒎^𝒆 𝒎𝒐𝒅 𝒏 復号: 𝒎 = 𝒄^𝒅 𝒎𝒐𝒅 𝒏 上位ビットが共通する二つの平文に対する 暗号文を知られてはいけない Franklin-Reiter Related Message Attack が 適用可能 二つの平文 𝑚1, 𝑚2 = 𝑎 ∗ 𝑚1 + 𝑏 と、それぞれの 暗号文が得られるとき、𝑚1を導出可能 11
19.
RSA暗号運用でやってはいけない 𝒏 のこと その 𝒏
= 𝒑 ∗ 𝒒, 𝝋 𝒏 = 𝒑 − 𝟏 ∗ 𝒒 − 𝟏 , 𝝋 𝒏 ⊥ 𝒆, 𝒅 ∗ 𝒆 ≡ 𝟏 (𝒎𝒐𝒅 𝝋(𝒏)) 暗号化: 𝒄 = 𝒎^𝒆 𝒎𝒐𝒅 𝒏 復号: 𝒎 = 𝒄^𝒅 𝒎𝒐𝒅 𝒏 素数 𝒑 の上位ビットまたは下位ビットが 知られてはいけない Coppersmith‘s Attack が適用可能 Coppersmithの定理を用いて素数 𝑝 の一部の情報 ( 𝑝 のビット数の1/2程度) から 𝑝 を特定できる 12
20.
RSA暗号運用でやってはいけない 𝒏 のこと その 𝒏
= 𝒑 ∗ 𝒒, 𝝋 𝒏 = 𝒑 − 𝟏 ∗ 𝒒 − 𝟏 , 𝝋 𝒏 ⊥ 𝒆, 𝒅 ∗ 𝒆 ≡ 𝟏 (𝒎𝒐𝒅 𝝋(𝒏)) 暗号化: 𝒄 = 𝒎^𝒆 𝒎𝒐𝒅 𝒏 復号: 𝒎 = 𝒄^𝒅 𝒎𝒐𝒅 𝒏 秘密鍵 𝒅 の下位ビットが知られてはいけない Coppersmith‘s Attack (Partial Key Exposure Attack) が適用可能 Coppersmithの定理を用いて秘密鍵 𝑑 の一部の情報 ( 𝑑 のビット数の1/4程度) から 𝑑 を特定できる 13
21.
RSA暗号運用でやってはいけない 𝒏 のこと その 𝒏
= 𝒑 ∗ 𝒒, 𝝋 𝒏 = 𝒑 − 𝟏 ∗ 𝒒 − 𝟏 , 𝝋 𝒏 ⊥ 𝒆, 𝒅 ∗ 𝒆 ≡ 𝟏 (𝒎𝒐𝒅 𝝋(𝒏)) 暗号化: 𝒄 = 𝒎^𝒆 𝒎𝒐𝒅 𝒏 復号: 𝒎 = 𝒄^𝒅 𝒎𝒐𝒅 𝒏 平文 𝒎 の上位ビットまたは下位ビットが 知られてはいけない Coppersmith‘s Attack が適用可能 Coppersmithの定理を用いて平文 𝑚 の一部の情報 ( 𝑚 のビット数の 1 − 1/𝑒 程度) から 𝑚 を特定できる 14
22.
以上! ※ ホントは他にもあります RSA-CRT Fault
Attack 適応的選択暗号文攻撃 Coppersmith's Short Pad Attack Boneh-Durfee Attack 乱数生成器の偏りを利用した攻撃 など…
23.
公開鍵 𝒏 のビット数(鍵長)が小さくてはいけない・𝒑,
𝒒 の片方が 小さい値になってはいけない・近い値の素数 𝒑, 𝒒 を使ってはいけ ない・素数 𝒑, 𝒒 を有名な素数(メルセンヌ素数など)にしてはいけ ない・公開鍵 𝒏 の生成時に同じ素数を使いまわしてはいけない・ 𝒆 の値が小さすぎてはいけない・𝒆 の値が大きすぎてはいけない・ 同一の平文を異なる 𝒆 で暗号化した暗号文を与えてはいけない ・同一の平文を異なる 𝒏 で暗号化した暗号文を与えてはいけな い・任意の暗号文を復号した結果の偶奇 (下位1bit) を知られては いけない・上位ビットが共通する二つの平文に対する暗号文を知 られてはいけない・素数 𝒑 の上位ビットまたは下位ビットが知ら れてはいけない・秘密鍵 𝒅 の下位ビットが知られてはいけない・ 平文 𝒎 の上位ビットまたは下位ビットが知られてはいけない RSA暗号運用でやってはいけない 14 のこと
24.
RSA暗号 の 運用は難しい??
25.
OpenSSL インターネット上で標準的に利用される暗号プロトコルを 実装したオープンソースのライブラリ 疑似乱数生成器を用いて安全なRSA鍵を生成してくれる OpenSSL
で安全な鍵を作ろう コマンド例 秘密鍵の生成 公開鍵の生成 $ openssl genrsa 2048 > private-key.pem $ openssl rsa -pubout < private-key.pem > public-key.pem
26.
こまめにアップデートを OpenSSLの脆弱性は頻繁に見つかる(2016年で34件*)
少し昔のバージョンではデフォルトの鍵長が短い 疑似乱数生成器の seed (種) は予測不可能なものに UNIX系であれば /dev/random または /dev/urandom EGD (UNIX) やEGADS (UNIX+Windows) などのエントロピー 収集ツール 望ましくない seed 例:時刻、特定のファイル、スクリーン ショット画像、キーストロークなど OpenSSL 使用上の注意点 *Openssl : CVE security vulnerabilities, versions and detailed reports http://www.cvedetails.com/product/383/Openssl-Openssl.html?vendor_id=217
27.
RSA暗号の運用の際には気を付けるべきことが たくさんある OpenSSLを正しく使えば安全な鍵が作れる まとめ
28.
つくってみた Cryptools -
RSA実装+攻撃 Pythonライブラリ https://github.com/sonickun/cryptools CTF暗号問題Writeupまとめ https://github.com/sonickun/ctf-crypto-writeups おまけ
29.
さいごに… QUIZ‼ 次に示すRSA鍵は安全といえるでしょうか?
30.
Secure or Vulnerable ? 暗号文 0x1cfc3c2be23b692c3627c0fd7ad2f6b c829c1d488107eaa6c76f2ed81d0cdd7 e16ee2794f1569efa4eb6b9526e98ef0 196d3a7d2e22aad9d4c8b6c603ac568 77db1f92d7b5885324f2fb2d2000e892 3402861ceb31f4ef63c7a2c950160717 d7195fb7fd4de794fd0b116e06ca5bff1 f964d79e1276291d2bb1e403371b971 eb n e
31.
Secure or Vulnerable ? 暗号文 0x1cfc3c2be23b692c3627c0fd7ad2f6b c829c1d488107eaa6c76f2ed81d0cdd7 e16ee2794f1569efa4eb6b9526e98ef0 196d3a7d2e22aad9d4c8b6c603ac568 77db1f92d7b5885324f2fb2d2000e892 3402861ceb31f4ef63c7a2c950160717 d7195fb7fd4de794fd0b116e06ca5bff1 f964d79e1276291d2bb1e403371b971 eb n e 𝑒 の値が極端に大きい →
Wiener’s Attack 適当なkに対して𝑘/𝑑が𝑒/𝑛で 近似できるため、𝑒/𝑛を連分数 展開して得られる近似分数の 中から𝑑を見つけられる d = 30273e11cbe5ae0cf9054376c7645 2f5ef9642c4a0d485fbe6ae6e808ff0e011
32.
Secure or Vulnerable ?n e 𝑒 の値が極端に大きい →
Wiener’s Attack 適当なkに対して𝑘/𝑑が𝑒/𝑛で 近似できるため、𝑒/𝑛を連分数 展開して得られる近似分数の 中から𝑑を見つけられる d = 30273e11cbe5ae0cf9054376c7645 2f5ef9642c4a0d485fbe6ae6e808ff0e011 平文 “Thank you !”
Download now