SlideShare a Scribd company logo
1 of 17
Download to read offline
RSA鍵生成脆弱性ROCAの紹介
2017/11/13
光成滋生
• 論文
• The Return of Coppersmith's Attack Practical Factorization of
Widely Used RSA Moduli
• https://acmccs.github.io/papers/p1631-nemecA.pdf
• 主な内容
• 主要な暗号ハードウェアメーカで使われているライブラリ
(RSALib)の鍵生成アルゴリズムの欠陥を見つけた
• そのRSALibで作られた1024~2048bit RSAの公開鍵のみで
復号可能なアルゴリズムの提案
• OpenSSLで作ったものは大丈夫
• RSALibで作られた鍵かどうかを公開鍵のみで高速に判定可能
• TPMやeIDなどで利用されていることを調査
概要
2 / 17
• 今回の手法を適用したときの解読コスト
• p.10 Table 2
• 2048bit RSAの解読が現実的
Nの素因数分解にかかるコスト評価
3 / 17
• 異なる41個のPCのうち6個のTPM製品に脆弱性
• https://www.kb.cert.org/vuls/id/307015
• エストニアeIDのランダムサンプリングの54%に脆弱性
影響を受けるもの
4 / 17
• 異なる2個の素数𝑝と𝑞を選ぶ
• 𝑁 = 𝑝𝑞, 𝜙 𝑁 = (𝑝 − 1)(𝑞 − 1)とする
• 𝜙(𝑁)と互いに素な𝑒 < 𝜙(𝑁)を選ぶ
• 𝑑 = 𝑒−1 mod 𝜙(𝑁)とする
• mod 𝑥は𝑥で割った余り
• (𝑒, 𝑁)が公開鍵
• 𝑑が秘密鍵
RSA暗号
5 / 17
• 素数定理
• 𝑥以下の素数の個数𝜋(𝑥)はおおよそ𝑥/log(𝑥)である
• ガウスが15歳のとき素数を数えてその予想を立てたらしい
• 𝑛 bit素数なら
• 2 𝑛−1 ≤ 𝑝 < 2 𝑛
• この範囲の素数は𝜋 2 𝑛 − 𝜋 2 𝑛−1 =
2 𝑛
0.7𝑛
−
2 𝑛−1
0.7 𝑛−1
~2 𝑛−1/𝑛
• 512-bit RSAなら𝑛 = 256なので2247個程度
• 結構たくさんある
素数の個数
6 / 17
• 𝑝 = 𝑘𝑀 + (65537 𝑎 mod 𝑀)の形をしていた(と推測)
• ここで𝑎, 𝑘が動くパラメータ
• 𝑀はRSA暗号の鍵長のみに依存する定数
• 𝑃𝑛# ≔ 2 ∗ 3 ∗ ⋯ ∗ 𝑃𝑛 ; 素数を小さい順にn個掛けたもの
• 2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67,
71, 73, 79, 83, 89, 97, 101, 103, 107, 109, 113, 127, 131, 137,
139, 149, 151, 157, 163, 167, ...
• 512bit RSAなら𝑀 = 𝑃39#
• 1024bit RSAなら𝑀 = 𝑃71#
• 2028bit RSAなら𝑀 = 𝑃126#
• 512bit RSAなら𝑘の範囲は37bit, 𝑎は62bitらしい
• エントロピー(自由度は)37+62=99bit
• 本来の素数の個数247bitに比べてずっと少ない
RSALibが生成する素数
7 / 17
• 𝑝 = 𝑘𝑀 + 65537 𝑎 mod 𝑀
• 𝑞 = 𝑙𝑀 + (65537 𝑏 mod 𝑀), 𝑎, 𝑏, 𝑘, 𝑙 ∈ ℤなので
• 𝑝 ≡ 65537 𝑎
(mod 𝑀), 𝑞 ≡ 65537 𝑏
(mod 𝑀)
• よって𝑁 = 𝑝𝑞 ≡ 65537 𝑐(mod 𝑀), 𝑐 = 𝑎 + 𝑏の形となる
• この論文の一つ目の貢献
• 𝑁が与えられたときに
𝐷𝐿𝑃 𝑁 ≔
𝑁 = 65537 𝑐 mod 𝑀となる𝑐
存在しない
を高速に求める方法
• 𝐷𝐿𝑃(𝑁)が求まるなら無視できる確率を除いて
𝑁はRSALibで生成されたもの
• 公開鍵をみて脆弱だと分かってから攻撃可能
RSALibが生成する素数の指紋
8 / 17
• 年齢当てクイズ
• あなたの年齢の3で割った余り、5で割った余り、7で割った余
りを教えてください
• 𝑥 % 3, 𝑦 % 5, 𝑧 % 7から0 ≤ 𝑥 < 3 ∗ 5 ∗ 7 = 105の範囲で求まる
• 105は3と5と7の最小公倍数
• 中国剰余定理(CRT : Chinese Remainder Theorem)
• 𝑛1, … , 𝑛 𝑘を互いに素, 𝑥が未知, 𝑎1, … , 𝑎 𝑘が既知のとき
𝑥 ≡ 𝑎1 mod 𝑛1 ,
...
𝑥 ≡ 𝑎 𝑘 mod 𝑛 𝑘 ,
が与えられると𝑥 mod 𝑛1 ⋯ 𝑛 𝑘 を容易に求められる
百五減算
9 / 17
• 𝑦 = 𝑔 𝑥 mod 𝑀のDLPは𝜙(𝑀)の素因数ごとにDLPを解い
てCRTでくっつければよい
• ElGamal暗号などでは大きな素因数を持たせるため解けない
• 詳細は『クラウドを支えるこれからの暗号技術』をみてね
• 𝑀が𝐵 −smooth(DLPの解きやすさを表す指標)
• ⟺ある定数𝐵に対して𝑀の素因数は全て𝐵より小さい
• 𝑀 = 𝑃𝑛#は素数を小さいものから順に掛けていた
• 𝑀, 𝜙(𝑀)は(その大きさに比べて)とてもsmooth
• 効率よくDLPを求められる
• RSALibが生成した公開鍵である⟹ DLP(𝑁)が容易
Pohlig-Hellmanアルゴリズム
10 / 17
• その逆
一般の𝑁でDLP(𝑁)が容易なのはどれぐらいあるのか?
• (答え)とても少ない
• 𝐺 = {65537𝑖 mod 𝑀|𝑖 = 0,1, … }の大きさ
• 𝑜𝑟𝑑 𝑀 65537 =「65537𝑖 ≡ 1 mod 𝑀 となる最小の𝑖 > 0」
• 512bit RSAで62bit
• 262/2216程度の確率(無視できる)
• RSALibが生成した公開鍵である⟺ DLP(𝑁)が容易
• 𝐷𝐿𝑃(𝑁)を計算することで脆弱だと判定可能
擬陽性
11 / 17
• 鍵が脆弱化かどうかを判定するツール
• https://github.com/crocs-muni/roca
• 肝はhas_fingerprint_moduli()
ROCA detection tool
# modulusが公開鍵N
primes = [3, 5, 7, 11, ...
prints = [6, 30, 126, 1026, ...
def has_fingerprint_moduli(modulus):
for i in range(0, len(primes)):
if (1 << (modulus % primes[i])) & prints[i] == 0:
return False
return True
12 / 17
• 各𝑝に対して𝑔 = 65537 % 𝑝としてG = {𝑔𝑖} を求める
• 𝑁 % 𝑝が𝐺に入っていなければ脆弱でない
• prints[i] = calcG(primes[i])
prints[]は何?
def calcG(p):
g = 65537 % p
y = 1
G = set()
for i in range(p):
y = (y * g) % p
G.add(y)
r = 0
for x in G:
r = r | (1 << x)
return r
13 / 17
• Coppersmith法の応用
• 法つき整数係数1変数多項式𝑓 𝑥 ≡ 0(mod 𝑁)の解法
• Howgrave-Graham, Alexander Mayなどによる様々な改良
• 今回は𝑝 = 𝑘𝑀 + (65537 𝑎 mod 𝑀)の𝑎を固定するごとに決まる
𝑘に関する1変数多項式の求解にCoppersmith法を利用
• ただし𝑎の種類は𝑜𝑟𝑑 = 𝑜𝑟𝑑 𝑀(65537)だけあり、とても無理
• これを減らす手法も提案
• p.5 Table 1
この論文のメインの解読アイデア
提案手法による𝑎の種類の削減
14 / 17
• 𝑥と𝑝|𝑁が未知で多項式𝑓 𝑥 ≡ 0 (mod 𝑝)を解きたい
• 𝑥0 < 𝑋という範囲制約パラメータ𝑋を導入
• 𝑓(𝑥)から𝑥 = 𝑥0を解に含む方程式𝑔 𝑥 = 0を沢山構成
• 𝑓から適切な多項式𝑓𝑖を作り𝐿 = {𝑔 𝑥 = 𝑎𝑖 𝑓𝑖(𝑥)𝑖 }を作る
• 𝑔1, 𝑔2 ∈ 𝐿なら𝑔1 ± 𝑔2 ∈ 𝐿という性質がある
• 𝐿は格子点の集合
• 𝐿の中からLLLアルゴリズムを使ってよい𝑔(𝑥)を見つける
• その𝑔は 𝑔 𝑥0 < 𝑝となるので𝑔 𝑥0 = 0
• 𝑔 𝑥 = 0を解いて𝑥 = 𝑥0を求める
• Berlekamp-Zassenhause法など
この論文のCoppersmith法
15 / 17
• 𝑝 = 𝑘𝑀 + (65537 𝑎 mod 𝑀) ---☆なので
𝑓 𝑥 = 𝑥 + 𝑀−1
mod 𝑀 ∗ (65537 𝑎
mod 𝑀)とすると
𝑘は𝑓 𝑥 = 0(mod 𝑝)の解
• 𝑝, 𝑞は𝑁の半分なので𝛽 = 0.5として𝑝 < 𝑁 𝛽
• ☆の性質を満たす𝑀の小さい約数𝑀′を選ぶ
• 解の上限は𝑋 = 2𝑁 𝛽/𝑀′
• for 𝑎′ ←ある固定範囲
• 𝑘′ ← 𝐶𝑜𝑝𝑝𝑒𝑟𝑠𝑚𝑖𝑡ℎ 𝑓 𝑥 , 𝑁, 𝛽, 𝑋
• 𝑝 ← 𝑘′ 𝑀′ + (65537 𝑎′
mod 𝑀′)
• 𝑁 mod 𝑝 = 0なら見つかった/無ければ次の𝑎′
アルゴリズム
16 / 17
• 総計算時間 𝑇𝑖𝑚𝑒 = 𝑜𝑟𝑑 𝑀′ 65537 ∗ 𝑇(𝑀′)
• 𝑇(𝑀′) : Coppersmithを解く時間
• 𝑀′
が大きいほど速い・log2 𝑀′
> log2(𝑁)/4が必要
• ループ回数𝑜𝑟𝑑 𝑀′(65537)
• 𝑀′が小さいほど速い
• 𝑇𝑖𝑚𝑒が小さくなるように𝑀′を選ぶ
• ヒューリスティック
• 他にも改良パラメータ𝑚, 𝑡(略)
• これらのパラメータは
鍵サイズにのみ依存
• よいところを選んで実際に解く
パラメータの選び方
17 / 17

More Related Content

What's hot

プログラミングコンテストでのデータ構造
プログラミングコンテストでのデータ構造プログラミングコンテストでのデータ構造
プログラミングコンテストでのデータ構造Takuya Akiba
 
指数時間アルゴリズム入門
指数時間アルゴリズム入門指数時間アルゴリズム入門
指数時間アルゴリズム入門Yoichi Iwata
 
Rolling Hashを殺す話
Rolling Hashを殺す話Rolling Hashを殺す話
Rolling Hashを殺す話Nagisa Eto
 
暗号化したまま計算できる暗号技術とOSS開発による広がり
暗号化したまま計算できる暗号技術とOSS開発による広がり暗号化したまま計算できる暗号技術とOSS開発による広がり
暗号化したまま計算できる暗号技術とOSS開発による広がりMITSUNARI Shigeo
 
プログラミングコンテストでのデータ構造 2 ~平衡二分探索木編~
プログラミングコンテストでのデータ構造 2 ~平衡二分探索木編~プログラミングコンテストでのデータ構造 2 ~平衡二分探索木編~
プログラミングコンテストでのデータ構造 2 ~平衡二分探索木編~Takuya Akiba
 
プログラミングコンテストでの乱択アルゴリズム
プログラミングコンテストでの乱択アルゴリズムプログラミングコンテストでの乱択アルゴリズム
プログラミングコンテストでの乱択アルゴリズムTakuya Akiba
 
暗号技術の実装と数学
暗号技術の実装と数学暗号技術の実装と数学
暗号技術の実装と数学MITSUNARI Shigeo
 
プログラミングコンテストでの動的計画法
プログラミングコンテストでの動的計画法プログラミングコンテストでの動的計画法
プログラミングコンテストでの動的計画法Takuya Akiba
 
色々なダイクストラ高速化
色々なダイクストラ高速化色々なダイクストラ高速化
色々なダイクストラ高速化yosupo
 
『データ解析におけるプライバシー保護』勉強会 秘密計算
『データ解析におけるプライバシー保護』勉強会 秘密計算『データ解析におけるプライバシー保護』勉強会 秘密計算
『データ解析におけるプライバシー保護』勉強会 秘密計算MITSUNARI Shigeo
 
AtCoder Regular Contest 037 解説
AtCoder Regular Contest 037 解説AtCoder Regular Contest 037 解説
AtCoder Regular Contest 037 解説AtCoder Inc.
 
SAT/SMTソルバの仕組み
SAT/SMTソルバの仕組みSAT/SMTソルバの仕組み
SAT/SMTソルバの仕組みMasahiro Sakai
 
プログラミングコンテストでのデータ構造 2 ~動的木編~
プログラミングコンテストでのデータ構造 2 ~動的木編~プログラミングコンテストでのデータ構造 2 ~動的木編~
プログラミングコンテストでのデータ構造 2 ~動的木編~Takuya Akiba
 
Union find(素集合データ構造)
Union find(素集合データ構造)Union find(素集合データ構造)
Union find(素集合データ構造)AtCoder Inc.
 

What's hot (20)

プログラミングコンテストでのデータ構造
プログラミングコンテストでのデータ構造プログラミングコンテストでのデータ構造
プログラミングコンテストでのデータ構造
 
指数時間アルゴリズム入門
指数時間アルゴリズム入門指数時間アルゴリズム入門
指数時間アルゴリズム入門
 
Rolling Hashを殺す話
Rolling Hashを殺す話Rolling Hashを殺す話
Rolling Hashを殺す話
 
暗号化したまま計算できる暗号技術とOSS開発による広がり
暗号化したまま計算できる暗号技術とOSS開発による広がり暗号化したまま計算できる暗号技術とOSS開発による広がり
暗号化したまま計算できる暗号技術とOSS開発による広がり
 
プログラミングコンテストでのデータ構造 2 ~平衡二分探索木編~
プログラミングコンテストでのデータ構造 2 ~平衡二分探索木編~プログラミングコンテストでのデータ構造 2 ~平衡二分探索木編~
プログラミングコンテストでのデータ構造 2 ~平衡二分探索木編~
 
プログラミングコンテストでの乱択アルゴリズム
プログラミングコンテストでの乱択アルゴリズムプログラミングコンテストでの乱択アルゴリズム
プログラミングコンテストでの乱択アルゴリズム
 
暗認本読書会11
暗認本読書会11暗認本読書会11
暗認本読書会11
 
暗号技術の実装と数学
暗号技術の実装と数学暗号技術の実装と数学
暗号技術の実装と数学
 
プログラミングコンテストでの動的計画法
プログラミングコンテストでの動的計画法プログラミングコンテストでの動的計画法
プログラミングコンテストでの動的計画法
 
明日使えないすごいビット演算
明日使えないすごいビット演算明日使えないすごいビット演算
明日使えないすごいビット演算
 
Convex Hull Trick
Convex Hull TrickConvex Hull Trick
Convex Hull Trick
 
色々なダイクストラ高速化
色々なダイクストラ高速化色々なダイクストラ高速化
色々なダイクストラ高速化
 
『データ解析におけるプライバシー保護』勉強会 秘密計算
『データ解析におけるプライバシー保護』勉強会 秘密計算『データ解析におけるプライバシー保護』勉強会 秘密計算
『データ解析におけるプライバシー保護』勉強会 秘密計算
 
AtCoder Regular Contest 037 解説
AtCoder Regular Contest 037 解説AtCoder Regular Contest 037 解説
AtCoder Regular Contest 037 解説
 
SAT/SMTソルバの仕組み
SAT/SMTソルバの仕組みSAT/SMTソルバの仕組み
SAT/SMTソルバの仕組み
 
プログラミングコンテストでのデータ構造 2 ~動的木編~
プログラミングコンテストでのデータ構造 2 ~動的木編~プログラミングコンテストでのデータ構造 2 ~動的木編~
プログラミングコンテストでのデータ構造 2 ~動的木編~
 
最大流 (max flow)
最大流 (max flow)最大流 (max flow)
最大流 (max flow)
 
Union find(素集合データ構造)
Union find(素集合データ構造)Union find(素集合データ構造)
Union find(素集合データ構造)
 
双対性
双対性双対性
双対性
 
目指せグラフマスター
目指せグラフマスター目指せグラフマスター
目指せグラフマスター
 

Similar to RSA鍵生成脆弱性ROCAの紹介

ペアリングベースの効率的なレベル2準同型暗号(SCIS2018)
ペアリングベースの効率的なレベル2準同型暗号(SCIS2018)ペアリングベースの効率的なレベル2準同型暗号(SCIS2018)
ペアリングベースの効率的なレベル2準同型暗号(SCIS2018)MITSUNARI Shigeo
 
楕円曲線入門 トーラスと楕円曲線のつながり
楕円曲線入門トーラスと楕円曲線のつながり楕円曲線入門トーラスと楕円曲線のつながり
楕円曲線入門 トーラスと楕円曲線のつながりMITSUNARI Shigeo
 
今日からはじめる微分方程式
今日からはじめる微分方程式今日からはじめる微分方程式
今日からはじめる微分方程式Ryo Kaji
 
Kink: invokedynamic on a prototype-based language
Kink: invokedynamic on a prototype-based languageKink: invokedynamic on a prototype-based language
Kink: invokedynamic on a prototype-based languageTaku Miyakawa
 
PRML復々習レーン#10 7.1.3-7.1.5
PRML復々習レーン#10 7.1.3-7.1.5PRML復々習レーン#10 7.1.3-7.1.5
PRML復々習レーン#10 7.1.3-7.1.5sleepy_yoshi
 
大規模グラフアルゴリズムの最先端
大規模グラフアルゴリズムの最先端大規模グラフアルゴリズムの最先端
大規模グラフアルゴリズムの最先端Takuya Akiba
 
AtCoder Beginner Contest 020 解説
AtCoder Beginner Contest 020 解説AtCoder Beginner Contest 020 解説
AtCoder Beginner Contest 020 解説AtCoder Inc.
 
リテラル文字列型までの道
リテラル文字列型までの道リテラル文字列型までの道
リテラル文字列型までの道Satoshi Sato
 
位置情報を使ったサービス「スマポ」をPostgreSQLで作ってみた db tech showcase 2013 Tokyo
位置情報を使ったサービス「スマポ」をPostgreSQLで作ってみた db tech showcase 2013 Tokyo位置情報を使ったサービス「スマポ」をPostgreSQLで作ってみた db tech showcase 2013 Tokyo
位置情報を使ったサービス「スマポ」をPostgreSQLで作ってみた db tech showcase 2013 TokyoYoshiyuki Asaba
 
第21回アルゴリズム勉強会
第21回アルゴリズム勉強会第21回アルゴリズム勉強会
第21回アルゴリズム勉強会Yuuki Ono
 
Web本文抽出 using crf
Web本文抽出 using crfWeb本文抽出 using crf
Web本文抽出 using crfShuyo Nakatani
 
Approximate Scalable Bounded Space Sketch for Large Data NLP
Approximate Scalable Bounded Space Sketch for Large Data NLPApproximate Scalable Bounded Space Sketch for Large Data NLP
Approximate Scalable Bounded Space Sketch for Large Data NLPKoji Matsuda
 
DSIRNLP #3 LZ4 の速さの秘密に迫ってみる
DSIRNLP #3 LZ4 の速さの秘密に迫ってみるDSIRNLP #3 LZ4 の速さの秘密に迫ってみる
DSIRNLP #3 LZ4 の速さの秘密に迫ってみるAtsushi KOMIYA
 
Graph Clustering on Missing Data
Graph Clustering on Missing DataGraph Clustering on Missing Data
Graph Clustering on Missing DataYuma Inoue
 
Groups-Keeping Solution Path Algorithm For Sparse Regression
Groups-Keeping Solution Path Algorithm For Sparse RegressionGroups-Keeping Solution Path Algorithm For Sparse Regression
Groups-Keeping Solution Path Algorithm For Sparse RegressionTakahiro Yoshinaga
 
並行プログラミングと継続モナド
並行プログラミングと継続モナド並行プログラミングと継続モナド
並行プログラミングと継続モナドKousuke Ruichi
 
岩波データサイエンス_Vol.5_勉強会資料02
岩波データサイエンス_Vol.5_勉強会資料02岩波データサイエンス_Vol.5_勉強会資料02
岩波データサイエンス_Vol.5_勉強会資料02goony0101
 

Similar to RSA鍵生成脆弱性ROCAの紹介 (19)

ペアリングベースの効率的なレベル2準同型暗号(SCIS2018)
ペアリングベースの効率的なレベル2準同型暗号(SCIS2018)ペアリングベースの効率的なレベル2準同型暗号(SCIS2018)
ペアリングベースの効率的なレベル2準同型暗号(SCIS2018)
 
楕円曲線入門 トーラスと楕円曲線のつながり
楕円曲線入門トーラスと楕円曲線のつながり楕円曲線入門トーラスと楕円曲線のつながり
楕円曲線入門 トーラスと楕円曲線のつながり
 
今日からはじめる微分方程式
今日からはじめる微分方程式今日からはじめる微分方程式
今日からはじめる微分方程式
 
Kink: invokedynamic on a prototype-based language
Kink: invokedynamic on a prototype-based languageKink: invokedynamic on a prototype-based language
Kink: invokedynamic on a prototype-based language
 
PRML復々習レーン#10 7.1.3-7.1.5
PRML復々習レーン#10 7.1.3-7.1.5PRML復々習レーン#10 7.1.3-7.1.5
PRML復々習レーン#10 7.1.3-7.1.5
 
大規模グラフアルゴリズムの最先端
大規模グラフアルゴリズムの最先端大規模グラフアルゴリズムの最先端
大規模グラフアルゴリズムの最先端
 
AtCoder Beginner Contest 020 解説
AtCoder Beginner Contest 020 解説AtCoder Beginner Contest 020 解説
AtCoder Beginner Contest 020 解説
 
Omega test and beyond
Omega test and beyondOmega test and beyond
Omega test and beyond
 
リテラル文字列型までの道
リテラル文字列型までの道リテラル文字列型までの道
リテラル文字列型までの道
 
位置情報を使ったサービス「スマポ」をPostgreSQLで作ってみた db tech showcase 2013 Tokyo
位置情報を使ったサービス「スマポ」をPostgreSQLで作ってみた db tech showcase 2013 Tokyo位置情報を使ったサービス「スマポ」をPostgreSQLで作ってみた db tech showcase 2013 Tokyo
位置情報を使ったサービス「スマポ」をPostgreSQLで作ってみた db tech showcase 2013 Tokyo
 
第21回アルゴリズム勉強会
第21回アルゴリズム勉強会第21回アルゴリズム勉強会
第21回アルゴリズム勉強会
 
Web本文抽出 using crf
Web本文抽出 using crfWeb本文抽出 using crf
Web本文抽出 using crf
 
Approximate Scalable Bounded Space Sketch for Large Data NLP
Approximate Scalable Bounded Space Sketch for Large Data NLPApproximate Scalable Bounded Space Sketch for Large Data NLP
Approximate Scalable Bounded Space Sketch for Large Data NLP
 
DSIRNLP #3 LZ4 の速さの秘密に迫ってみる
DSIRNLP #3 LZ4 の速さの秘密に迫ってみるDSIRNLP #3 LZ4 の速さの秘密に迫ってみる
DSIRNLP #3 LZ4 の速さの秘密に迫ってみる
 
Graph Clustering on Missing Data
Graph Clustering on Missing DataGraph Clustering on Missing Data
Graph Clustering on Missing Data
 
Groups-Keeping Solution Path Algorithm For Sparse Regression
Groups-Keeping Solution Path Algorithm For Sparse RegressionGroups-Keeping Solution Path Algorithm For Sparse Regression
Groups-Keeping Solution Path Algorithm For Sparse Regression
 
並行プログラミングと継続モナド
並行プログラミングと継続モナド並行プログラミングと継続モナド
並行プログラミングと継続モナド
 
岩波データサイエンス_Vol.5_勉強会資料02
岩波データサイエンス_Vol.5_勉強会資料02岩波データサイエンス_Vol.5_勉強会資料02
岩波データサイエンス_Vol.5_勉強会資料02
 
KDD2014 勉強会
KDD2014 勉強会KDD2014 勉強会
KDD2014 勉強会
 

More from MITSUNARI Shigeo

範囲証明つき準同型暗号とその対話的プロトコル
範囲証明つき準同型暗号とその対話的プロトコル範囲証明つき準同型暗号とその対話的プロトコル
範囲証明つき準同型暗号とその対話的プロトコルMITSUNARI Shigeo
 
暗認本読書会13 advanced
暗認本読書会13 advanced暗認本読書会13 advanced
暗認本読書会13 advancedMITSUNARI Shigeo
 
Intel AVX-512/富岳SVE用SIMDコード生成ライブラリsimdgen
Intel AVX-512/富岳SVE用SIMDコード生成ライブラリsimdgenIntel AVX-512/富岳SVE用SIMDコード生成ライブラリsimdgen
Intel AVX-512/富岳SVE用SIMDコード生成ライブラリsimdgenMITSUNARI Shigeo
 
深層学習フレームワークにおけるIntel CPU/富岳向け最適化法
深層学習フレームワークにおけるIntel CPU/富岳向け最適化法深層学習フレームワークにおけるIntel CPU/富岳向け最適化法
深層学習フレームワークにおけるIntel CPU/富岳向け最適化法MITSUNARI Shigeo
 
WebAssembly向け多倍長演算の実装
WebAssembly向け多倍長演算の実装WebAssembly向け多倍長演算の実装
WebAssembly向け多倍長演算の実装MITSUNARI Shigeo
 
Lifted-ElGamal暗号を用いた任意関数演算の二者間秘密計算プロトコルのmaliciousモデルにおける効率化
Lifted-ElGamal暗号を用いた任意関数演算の二者間秘密計算プロトコルのmaliciousモデルにおける効率化Lifted-ElGamal暗号を用いた任意関数演算の二者間秘密計算プロトコルのmaliciousモデルにおける効率化
Lifted-ElGamal暗号を用いた任意関数演算の二者間秘密計算プロトコルのmaliciousモデルにおける効率化MITSUNARI Shigeo
 
BLS署名の実装とその応用
BLS署名の実装とその応用BLS署名の実装とその応用
BLS署名の実装とその応用MITSUNARI Shigeo
 
LazyFP vulnerabilityの紹介
LazyFP vulnerabilityの紹介LazyFP vulnerabilityの紹介
LazyFP vulnerabilityの紹介MITSUNARI Shigeo
 
Intro to SVE 富岳のA64FXを触ってみた
Intro to SVE 富岳のA64FXを触ってみたIntro to SVE 富岳のA64FXを触ってみた
Intro to SVE 富岳のA64FXを触ってみたMITSUNARI Shigeo
 

More from MITSUNARI Shigeo (20)

範囲証明つき準同型暗号とその対話的プロトコル
範囲証明つき準同型暗号とその対話的プロトコル範囲証明つき準同型暗号とその対話的プロトコル
範囲証明つき準同型暗号とその対話的プロトコル
 
暗認本読書会13 advanced
暗認本読書会13 advanced暗認本読書会13 advanced
暗認本読書会13 advanced
 
暗認本読書会12
暗認本読書会12暗認本読書会12
暗認本読書会12
 
暗認本読書会10
暗認本読書会10暗認本読書会10
暗認本読書会10
 
暗認本読書会9
暗認本読書会9暗認本読書会9
暗認本読書会9
 
Intel AVX-512/富岳SVE用SIMDコード生成ライブラリsimdgen
Intel AVX-512/富岳SVE用SIMDコード生成ライブラリsimdgenIntel AVX-512/富岳SVE用SIMDコード生成ライブラリsimdgen
Intel AVX-512/富岳SVE用SIMDコード生成ライブラリsimdgen
 
暗認本読書会8
暗認本読書会8暗認本読書会8
暗認本読書会8
 
暗認本読書会7
暗認本読書会7暗認本読書会7
暗認本読書会7
 
暗認本読書会6
暗認本読書会6暗認本読書会6
暗認本読書会6
 
暗認本読書会5
暗認本読書会5暗認本読書会5
暗認本読書会5
 
暗認本読書会4
暗認本読書会4暗認本読書会4
暗認本読書会4
 
深層学習フレームワークにおけるIntel CPU/富岳向け最適化法
深層学習フレームワークにおけるIntel CPU/富岳向け最適化法深層学習フレームワークにおけるIntel CPU/富岳向け最適化法
深層学習フレームワークにおけるIntel CPU/富岳向け最適化法
 
私とOSSの25年
私とOSSの25年私とOSSの25年
私とOSSの25年
 
WebAssembly向け多倍長演算の実装
WebAssembly向け多倍長演算の実装WebAssembly向け多倍長演算の実装
WebAssembly向け多倍長演算の実装
 
Lifted-ElGamal暗号を用いた任意関数演算の二者間秘密計算プロトコルのmaliciousモデルにおける効率化
Lifted-ElGamal暗号を用いた任意関数演算の二者間秘密計算プロトコルのmaliciousモデルにおける効率化Lifted-ElGamal暗号を用いた任意関数演算の二者間秘密計算プロトコルのmaliciousモデルにおける効率化
Lifted-ElGamal暗号を用いた任意関数演算の二者間秘密計算プロトコルのmaliciousモデルにおける効率化
 
HPC Phys-20201203
HPC Phys-20201203HPC Phys-20201203
HPC Phys-20201203
 
BLS署名の実装とその応用
BLS署名の実装とその応用BLS署名の実装とその応用
BLS署名の実装とその応用
 
LazyFP vulnerabilityの紹介
LazyFP vulnerabilityの紹介LazyFP vulnerabilityの紹介
LazyFP vulnerabilityの紹介
 
Intro to SVE 富岳のA64FXを触ってみた
Intro to SVE 富岳のA64FXを触ってみたIntro to SVE 富岳のA64FXを触ってみた
Intro to SVE 富岳のA64FXを触ってみた
 
ゆるバグ
ゆるバグゆるバグ
ゆるバグ
 

Recently uploaded

論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A surveyToru Tamaki
 
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Yuma Ohgami
 
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)Hiroki Ichikura
 
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNetToru Tamaki
 
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものですiPride Co., Ltd.
 
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...Toru Tamaki
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムsugiuralab
 
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdfTSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdftaisei2219
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略Ryo Sasaki
 

Recently uploaded (9)

論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey
 
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
 
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
 
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet
 
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものです
 
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システム
 
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdfTSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdf
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
 

RSA鍵生成脆弱性ROCAの紹介

  • 2. • 論文 • The Return of Coppersmith's Attack Practical Factorization of Widely Used RSA Moduli • https://acmccs.github.io/papers/p1631-nemecA.pdf • 主な内容 • 主要な暗号ハードウェアメーカで使われているライブラリ (RSALib)の鍵生成アルゴリズムの欠陥を見つけた • そのRSALibで作られた1024~2048bit RSAの公開鍵のみで 復号可能なアルゴリズムの提案 • OpenSSLで作ったものは大丈夫 • RSALibで作られた鍵かどうかを公開鍵のみで高速に判定可能 • TPMやeIDなどで利用されていることを調査 概要 2 / 17
  • 3. • 今回の手法を適用したときの解読コスト • p.10 Table 2 • 2048bit RSAの解読が現実的 Nの素因数分解にかかるコスト評価 3 / 17
  • 4. • 異なる41個のPCのうち6個のTPM製品に脆弱性 • https://www.kb.cert.org/vuls/id/307015 • エストニアeIDのランダムサンプリングの54%に脆弱性 影響を受けるもの 4 / 17
  • 5. • 異なる2個の素数𝑝と𝑞を選ぶ • 𝑁 = 𝑝𝑞, 𝜙 𝑁 = (𝑝 − 1)(𝑞 − 1)とする • 𝜙(𝑁)と互いに素な𝑒 < 𝜙(𝑁)を選ぶ • 𝑑 = 𝑒−1 mod 𝜙(𝑁)とする • mod 𝑥は𝑥で割った余り • (𝑒, 𝑁)が公開鍵 • 𝑑が秘密鍵 RSA暗号 5 / 17
  • 6. • 素数定理 • 𝑥以下の素数の個数𝜋(𝑥)はおおよそ𝑥/log(𝑥)である • ガウスが15歳のとき素数を数えてその予想を立てたらしい • 𝑛 bit素数なら • 2 𝑛−1 ≤ 𝑝 < 2 𝑛 • この範囲の素数は𝜋 2 𝑛 − 𝜋 2 𝑛−1 = 2 𝑛 0.7𝑛 − 2 𝑛−1 0.7 𝑛−1 ~2 𝑛−1/𝑛 • 512-bit RSAなら𝑛 = 256なので2247個程度 • 結構たくさんある 素数の個数 6 / 17
  • 7. • 𝑝 = 𝑘𝑀 + (65537 𝑎 mod 𝑀)の形をしていた(と推測) • ここで𝑎, 𝑘が動くパラメータ • 𝑀はRSA暗号の鍵長のみに依存する定数 • 𝑃𝑛# ≔ 2 ∗ 3 ∗ ⋯ ∗ 𝑃𝑛 ; 素数を小さい順にn個掛けたもの • 2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97, 101, 103, 107, 109, 113, 127, 131, 137, 139, 149, 151, 157, 163, 167, ... • 512bit RSAなら𝑀 = 𝑃39# • 1024bit RSAなら𝑀 = 𝑃71# • 2028bit RSAなら𝑀 = 𝑃126# • 512bit RSAなら𝑘の範囲は37bit, 𝑎は62bitらしい • エントロピー(自由度は)37+62=99bit • 本来の素数の個数247bitに比べてずっと少ない RSALibが生成する素数 7 / 17
  • 8. • 𝑝 = 𝑘𝑀 + 65537 𝑎 mod 𝑀 • 𝑞 = 𝑙𝑀 + (65537 𝑏 mod 𝑀), 𝑎, 𝑏, 𝑘, 𝑙 ∈ ℤなので • 𝑝 ≡ 65537 𝑎 (mod 𝑀), 𝑞 ≡ 65537 𝑏 (mod 𝑀) • よって𝑁 = 𝑝𝑞 ≡ 65537 𝑐(mod 𝑀), 𝑐 = 𝑎 + 𝑏の形となる • この論文の一つ目の貢献 • 𝑁が与えられたときに 𝐷𝐿𝑃 𝑁 ≔ 𝑁 = 65537 𝑐 mod 𝑀となる𝑐 存在しない を高速に求める方法 • 𝐷𝐿𝑃(𝑁)が求まるなら無視できる確率を除いて 𝑁はRSALibで生成されたもの • 公開鍵をみて脆弱だと分かってから攻撃可能 RSALibが生成する素数の指紋 8 / 17
  • 9. • 年齢当てクイズ • あなたの年齢の3で割った余り、5で割った余り、7で割った余 りを教えてください • 𝑥 % 3, 𝑦 % 5, 𝑧 % 7から0 ≤ 𝑥 < 3 ∗ 5 ∗ 7 = 105の範囲で求まる • 105は3と5と7の最小公倍数 • 中国剰余定理(CRT : Chinese Remainder Theorem) • 𝑛1, … , 𝑛 𝑘を互いに素, 𝑥が未知, 𝑎1, … , 𝑎 𝑘が既知のとき 𝑥 ≡ 𝑎1 mod 𝑛1 , ... 𝑥 ≡ 𝑎 𝑘 mod 𝑛 𝑘 , が与えられると𝑥 mod 𝑛1 ⋯ 𝑛 𝑘 を容易に求められる 百五減算 9 / 17
  • 10. • 𝑦 = 𝑔 𝑥 mod 𝑀のDLPは𝜙(𝑀)の素因数ごとにDLPを解い てCRTでくっつければよい • ElGamal暗号などでは大きな素因数を持たせるため解けない • 詳細は『クラウドを支えるこれからの暗号技術』をみてね • 𝑀が𝐵 −smooth(DLPの解きやすさを表す指標) • ⟺ある定数𝐵に対して𝑀の素因数は全て𝐵より小さい • 𝑀 = 𝑃𝑛#は素数を小さいものから順に掛けていた • 𝑀, 𝜙(𝑀)は(その大きさに比べて)とてもsmooth • 効率よくDLPを求められる • RSALibが生成した公開鍵である⟹ DLP(𝑁)が容易 Pohlig-Hellmanアルゴリズム 10 / 17
  • 11. • その逆 一般の𝑁でDLP(𝑁)が容易なのはどれぐらいあるのか? • (答え)とても少ない • 𝐺 = {65537𝑖 mod 𝑀|𝑖 = 0,1, … }の大きさ • 𝑜𝑟𝑑 𝑀 65537 =「65537𝑖 ≡ 1 mod 𝑀 となる最小の𝑖 > 0」 • 512bit RSAで62bit • 262/2216程度の確率(無視できる) • RSALibが生成した公開鍵である⟺ DLP(𝑁)が容易 • 𝐷𝐿𝑃(𝑁)を計算することで脆弱だと判定可能 擬陽性 11 / 17
  • 12. • 鍵が脆弱化かどうかを判定するツール • https://github.com/crocs-muni/roca • 肝はhas_fingerprint_moduli() ROCA detection tool # modulusが公開鍵N primes = [3, 5, 7, 11, ... prints = [6, 30, 126, 1026, ... def has_fingerprint_moduli(modulus): for i in range(0, len(primes)): if (1 << (modulus % primes[i])) & prints[i] == 0: return False return True 12 / 17
  • 13. • 各𝑝に対して𝑔 = 65537 % 𝑝としてG = {𝑔𝑖} を求める • 𝑁 % 𝑝が𝐺に入っていなければ脆弱でない • prints[i] = calcG(primes[i]) prints[]は何? def calcG(p): g = 65537 % p y = 1 G = set() for i in range(p): y = (y * g) % p G.add(y) r = 0 for x in G: r = r | (1 << x) return r 13 / 17
  • 14. • Coppersmith法の応用 • 法つき整数係数1変数多項式𝑓 𝑥 ≡ 0(mod 𝑁)の解法 • Howgrave-Graham, Alexander Mayなどによる様々な改良 • 今回は𝑝 = 𝑘𝑀 + (65537 𝑎 mod 𝑀)の𝑎を固定するごとに決まる 𝑘に関する1変数多項式の求解にCoppersmith法を利用 • ただし𝑎の種類は𝑜𝑟𝑑 = 𝑜𝑟𝑑 𝑀(65537)だけあり、とても無理 • これを減らす手法も提案 • p.5 Table 1 この論文のメインの解読アイデア 提案手法による𝑎の種類の削減 14 / 17
  • 15. • 𝑥と𝑝|𝑁が未知で多項式𝑓 𝑥 ≡ 0 (mod 𝑝)を解きたい • 𝑥0 < 𝑋という範囲制約パラメータ𝑋を導入 • 𝑓(𝑥)から𝑥 = 𝑥0を解に含む方程式𝑔 𝑥 = 0を沢山構成 • 𝑓から適切な多項式𝑓𝑖を作り𝐿 = {𝑔 𝑥 = 𝑎𝑖 𝑓𝑖(𝑥)𝑖 }を作る • 𝑔1, 𝑔2 ∈ 𝐿なら𝑔1 ± 𝑔2 ∈ 𝐿という性質がある • 𝐿は格子点の集合 • 𝐿の中からLLLアルゴリズムを使ってよい𝑔(𝑥)を見つける • その𝑔は 𝑔 𝑥0 < 𝑝となるので𝑔 𝑥0 = 0 • 𝑔 𝑥 = 0を解いて𝑥 = 𝑥0を求める • Berlekamp-Zassenhause法など この論文のCoppersmith法 15 / 17
  • 16. • 𝑝 = 𝑘𝑀 + (65537 𝑎 mod 𝑀) ---☆なので 𝑓 𝑥 = 𝑥 + 𝑀−1 mod 𝑀 ∗ (65537 𝑎 mod 𝑀)とすると 𝑘は𝑓 𝑥 = 0(mod 𝑝)の解 • 𝑝, 𝑞は𝑁の半分なので𝛽 = 0.5として𝑝 < 𝑁 𝛽 • ☆の性質を満たす𝑀の小さい約数𝑀′を選ぶ • 解の上限は𝑋 = 2𝑁 𝛽/𝑀′ • for 𝑎′ ←ある固定範囲 • 𝑘′ ← 𝐶𝑜𝑝𝑝𝑒𝑟𝑠𝑚𝑖𝑡ℎ 𝑓 𝑥 , 𝑁, 𝛽, 𝑋 • 𝑝 ← 𝑘′ 𝑀′ + (65537 𝑎′ mod 𝑀′) • 𝑁 mod 𝑝 = 0なら見つかった/無ければ次の𝑎′ アルゴリズム 16 / 17
  • 17. • 総計算時間 𝑇𝑖𝑚𝑒 = 𝑜𝑟𝑑 𝑀′ 65537 ∗ 𝑇(𝑀′) • 𝑇(𝑀′) : Coppersmithを解く時間 • 𝑀′ が大きいほど速い・log2 𝑀′ > log2(𝑁)/4が必要 • ループ回数𝑜𝑟𝑑 𝑀′(65537) • 𝑀′が小さいほど速い • 𝑇𝑖𝑚𝑒が小さくなるように𝑀′を選ぶ • ヒューリスティック • 他にも改良パラメータ𝑚, 𝑡(略) • これらのパラメータは 鍵サイズにのみ依存 • よいところを選んで実際に解く パラメータの選び方 17 / 17