SlideShare a Scribd company logo
1 of 28
Download to read offline
最終成果発表
セキュリティキャンプ2020 L-1ゼミ 佐々木智大 129
セキュリティキャンプでやったこと
ElGamal暗号の実装
一般ElGamal暗号の実装
楕円ElGamal暗号の実装
SECCON2020 this_is_rsa の解読
ポーリッヒヘルマンのアルゴリズムの実装
Baby-step Giant-step アルゴリズムの実装
ElGamal暗号の実装
ElGamal暗号 keygen
1. 素数𝑝と𝑍/𝑝𝑍の原子元𝑔をランダムに生成(1 < 𝑔 < 𝑝)
2. 0 ≤ 𝑥 ≤ 𝑝 − 2となる整数𝑥をランダムに選ぶ
3. 𝑦 = 𝑔 𝑥
(𝑚𝑜𝑑 𝑝) を計算し、公開鍵を(𝑝, 𝑔, 𝑦)として秘密鍵
を𝑥とする
一般に十分大きな素数𝑝に対して、 𝑦 = 𝑔 𝑥
𝑚𝑜𝑑 𝑝 を𝑥につい
て解くのはのは困難であり、これを離散対数問題という。
ElGamal暗号 encrypto
1. 整数𝑟をランダムに選ぶ (0 ≤ 𝑟 ≤ 𝑝 − 2)
2. 𝑐1 = 𝑔 𝑟
𝑚𝑜𝑑 𝑝 , 𝑐2 = 𝑚𝑦 𝑟
(𝑚𝑜𝑑 𝑝)を計算し、暗号
文として(𝑐1, 𝑐2)を出力
𝑚が数列の場合は𝑐2のみリストとなる
ElGamal暗号 decrypto
1. 𝑚′
= 𝑐2 𝑐1
𝑝−1−𝑥
(𝑚𝑜𝑑 𝑝)を計算し、出力
ElGamal暗号の問題点
位数𝑝 − 1が合成数であり、この離散対数問題は、ポー
リッヒヘルマンのアルゴリズムにより、𝜙 𝑝 = 𝑝 − 1
の最も大きな素因数を𝑞として𝑂( 𝑞)で解ける
𝑝 = 2𝑞 + 1 (𝑞は十分大きな素数)の形の𝑝を採用すると
よい
ElGamal暗号の拡張
ElGamal暗号の拡張
位数が素数の巡回群を構築し、その上で離散対数問題
を考えれば先ほどのような問題は発生しない
離散対数問題を一般化すると、位数が𝑞(十分大きな素
数)の巡回群𝐺 = {1, 𝑔1
, 𝑔2
, … , 𝑔 𝑞−1
}に対して、𝑦 = 𝑔 𝑥
を
𝑥について解くというふうになる
→ では、どのように位数𝑞の巡回群を構成するか?
位数𝑞の巡回群の構成
𝑝 = 2𝑞 + 1の形の素数として𝑔を𝑍/𝑝𝑍の原始元として
𝛼 = 𝑔
𝑝−1
𝑞 = 𝑔2
(𝑚𝑜𝑑 𝑝)とすると、これは位数が𝑞の巡
回群の生成元となっている
(証明) 以下、𝑚𝑜𝑑 𝑝で、
𝛼 𝑞
= 𝑔
𝑝−1
𝑞
𝑞
= 𝑔 𝑝−1
= 1
一般ElGamal暗号 keygen
1. 𝑝 = 2𝑞 + 1 (𝑞は素数)となる素数𝑝をランダムに生成し、
𝑍/𝑝𝑍の原始元を𝑔とする
2. 𝛼 = 𝑔2
を計算する
3. 整数𝑥 (0 ≤ 𝑥 ≤ 𝑞 − 1)をランダムに選ぶ
4. 𝑦 = 𝑔 𝑥
(𝑚𝑜𝑑 𝑞)を計算する
5. 公開鍵として(𝐺 =< 𝛼 >, 𝑞, 𝑔)、秘密鍵として𝑥を出力
ElGamal暗号 encrypto
1. 整数𝑟をランダムに選ぶ (0 ≤ 𝑟 ≤ 𝑞 − 2)
2. 𝑐1 = 𝑔 𝑟
𝑚𝑜𝑑 𝑞 , 𝑐2 = 𝑚𝑦 𝑟
(𝑚𝑜𝑑 𝑞)を計算し、暗号
文として(𝑐1, 𝑐2)を出力
𝑚が数列の場合は𝑐2のみリストとなる
ElGamal暗号 decrypto
1. 𝑚′
= 𝑐2 𝑐1
−𝑥
(𝑚𝑜𝑑 𝑞)を計算し、出力
楕円曲線暗号の実装
楕円曲線暗号とは?
楕円曲線(𝑦2
= 𝑥3
+ 𝑎𝑥 + 𝑏 (𝑚𝑜𝑑 𝑝)の(𝑥, 𝑦)をプロットした
もの)上に*ある加算演算*を定義すると、𝑚𝑜𝑑のように楕円
曲線上の点とその加算演算の組は巡回群となる
その加算演算を用いて楕円曲線上の一点を𝑃 = (𝑥, 𝑦)とし、
𝑌 = 𝑃 + 𝑃 + ⋯ 𝑃(𝑑回加算) = 𝑑 ∗ 𝑃となるような𝑑を求める
ようなことを楕円曲線上の離散対数問題といい、これを
使った暗号を楕円曲線暗号(楕円ElGamal暗号)という
楕円曲線上の加算(1)
楕円曲線𝐶上の二点を𝑃 𝑥1, 𝑦1 , 𝑄(𝑥2, 𝑦2)とし𝑃 + 𝑄を定
義する
(𝑖)𝑥1≠ 𝑥2のとき、直線𝑃𝑄と𝐶との𝑃, 𝑄以外の交点を𝑅
とし、𝑅と𝑥軸対称の位置にある点を𝑅′として、𝑃 +
𝑄 = 𝑅′と定義する
(𝑖𝑖)𝑥1= 𝑥2かつ𝑦1 ≠ 𝑦2のとき、直線𝑃𝑄は𝐶と交わらな
いので、無限遠点を𝑂とし、𝑃 + 𝑄 = 𝑂と定義する
楕円曲線上の加算(2)
(𝑖𝑖𝑖)𝑃と 𝑄 が一致する場合、 𝑃 を接点とする接線を引き、
𝐶と交わる𝑃以外の点を𝑅とし、それと𝑥軸対称の位置
にある点を𝑅′として、𝑃 + 𝑃 = 𝑅′と定義する
(𝑖𝑣)𝑃が無限遠点または𝑄が無限遠点の場合、𝑃 + 𝑂 =
𝑃と定義する
加算のイメージ
P
𝑄
𝑅
𝑅′
𝑃
𝑄
𝑂
𝑃, 𝑄
𝑅
𝑅′
(i)のとき (ii)のとき (iii)のとき
楕円ElGamal暗号 keygen
1. 素数𝑝 = 2𝑞 + 1をランダムに生成
2. 楕円曲線の係数𝑎, 𝑏 (1 ≤ 𝑎, 𝑏 ≤ 𝑝 − 1)をランダムに選ぶ(𝐷 =
4𝑎3
+ 27𝑏2
≠ 0を満たす)
3. 楕円曲線上の点を列挙する
4. 基準点𝑃をランダムに選び、その位数𝑞2を求める
5. 整数𝑥 (0 ≤ 𝑥 ≤ 𝑞2 − 2)をランダムに選び、𝑌 = 𝑥 ∗ 𝑃を計算す
る
6. 公開鍵として(𝑝, 𝑎, 𝑏, 𝑃, 𝑌)、秘密鍵として𝑥を出力
ElGamal暗号 encrypto
1. 整数𝑟をランダムに選ぶ (0 ≤ 𝑟 ≤ 𝑞2 − 2)
2. 平文𝑚に楕円曲線上の点𝑀を割り当てる
3. 𝑐1 = 𝑟 ∗ 𝑃, 𝑐2 = 𝑀 + 𝑟 ∗ 𝑌を計算し、暗号文として
(𝑐1, 𝑐2)を出力
ElGamal暗号 decrypto
1. 𝑀′
= 𝑐2 − 𝑥𝑐1を計算し、出力
ElGamal暗号に対する
攻撃手法の実装
ポーリッヒヘルマンのアルゴリズム
• 離散対数問題𝑦 = 𝑔 𝑥
(𝑚𝑜𝑑 𝑝)を𝑂 𝑟 (𝑟は𝜙(𝑝)
の一番大きい素因数)でとけるアルゴリズム
1. 𝜙 𝑝 = 𝑝1 ⋅ 𝑝2 ⋅ … ⋅ 𝑝 𝑘と素因数分解できたとすると、𝑥 =
𝑎𝑖 𝑝𝑖 + 𝑏𝑖とすれば𝑦
𝜙 𝑝
𝑝 𝑖 = 𝑔 𝑥
𝜙 𝑝
𝑝 𝑖 = 𝑔 𝑎 𝑖 𝑝 𝑖+𝑏 𝑖
𝜙 𝑝
𝑝 𝑖 =
𝑔 𝜙 𝑝 𝑎𝑖
𝑔
𝜙 𝑝
𝑝 𝑖
𝑏 𝑖
= 𝑔
𝜙 𝑝
𝑝 𝑖
𝑏 𝑖
となり、この𝑏𝑖を求める(元
の離散対数問題より規模が小さい)
2. 各𝑖に対して𝑏𝑖を求めたら、𝑥 = 𝑏1 𝑚𝑜𝑑 𝑝1 , 𝑥 =
𝑏2 𝑚𝑜𝑑 𝑝2 , … 𝑥 = 𝑏 𝑘 (𝑚𝑜𝑑 𝑝 𝑘)という連立方程式ができ、
中国剰余定理を用いれば𝑥が求まる
Baby-step Giant-step アルゴリズム
ポーリッヒヘルマンのアルゴリズムのステップ1の𝑏𝑖を
求めるところを高速化するアルゴリズム
𝑦 = 𝑔 𝑥
(𝑚𝑜𝑑 𝑝)において、𝑥 = 𝑖𝑚 + 𝑗 (𝑚 = ⌈ 𝑝⌉)
とすると 、 gim+j
= 𝑦 ⇔ 𝑔 𝑗
= 𝑦 𝑔−𝑚 𝑖
(𝑚𝑜𝑑 𝑝) となり、
総当たりで𝑖, 𝑗を求める
楕円ElGamal暗号に対しても同様にできる
ElGamal暗号の解読
HelloWorld!!という文字列をElGamal暗号で暗号
化し、その公開鍵からsolve.pyで秘密鍵を求めて
いる様子
ElGamal暗号の解読
HelloWorld!!という文字列を楕円ElGamal暗号で
暗号化し、その公開鍵からsolve2.pyで秘密鍵を
求めている様子
これからやりたいこと
楕円曲線暗号の解読を位数も未知の状態でやる
Schoof法の理解、実装
楕円曲線暗号の点への写像の部分の理解を深める
ポーリッヒヘルマンで楕円エルガマル暗号の解読
CryptoHackの問題を解く
CTFにどんどん出る
@ntaso_2051
今回作成したコード
• https://github.com/ntaso2051/seccamp2020L1/
参考文献
[1] 暗号技術のすべて (著:IPUSIRON)
[2] http://sonickun.hatenablog.com/entry/2016/11/20/192743
[3] https://ja.wikipedia.org/wiki/ポラード・ロー離散対数アルゴリズム
[4] https://qiita.com/drken/items/ae02240cd1f8edfc86fd

More Related Content

Similar to Seccamp2020L1

Variational autoencoder
Variational autoencoderVariational autoencoder
Variational autoencoderMikio Shiga
 
これならわかる最適化数学8章_動的計画法
これならわかる最適化数学8章_動的計画法これならわかる最適化数学8章_動的計画法
これならわかる最適化数学8章_動的計画法kenyanonaka
 
Computing for Isogeny Kernel Problem by Groebner Basis
Computing for Isogeny Kernel Problem by Groebner BasisComputing for Isogeny Kernel Problem by Groebner Basis
Computing for Isogeny Kernel Problem by Groebner BasisYasu Math
 
グレブナー基底輪読会 #1 ―準備体操の巻―
グレブナー基底輪読会 #1 ―準備体操の巻―グレブナー基底輪読会 #1 ―準備体操の巻―
グレブナー基底輪読会 #1 ―準備体操の巻―Yutaka Nagahata
 
魔女のお茶会.pdf
魔女のお茶会.pdf魔女のお茶会.pdf
魔女のお茶会.pdfTaikyaki 8926
 
witchs_key_party.pptx
witchs_key_party.pptxwitchs_key_party.pptx
witchs_key_party.pptxTaikyaki 8926
 
070 統計的推測 母集団と推定
070 統計的推測 母集団と推定070 統計的推測 母集団と推定
070 統計的推測 母集団と推定t2tarumi
 
katagaitai workshop #7 crypto ナップサック暗号と低密度攻撃
katagaitai workshop #7 crypto ナップサック暗号と低密度攻撃katagaitai workshop #7 crypto ナップサック暗号と低密度攻撃
katagaitai workshop #7 crypto ナップサック暗号と低密度攻撃trmr
 
波動方程式
波動方程式波動方程式
波動方程式yu sa
 
SMO徹底入門 - SVMをちゃんと実装する
SMO徹底入門 - SVMをちゃんと実装するSMO徹底入門 - SVMをちゃんと実装する
SMO徹底入門 - SVMをちゃんと実装するsleepy_yoshi
 
スプラトゥーン2 × 数学(訂正版)
スプラトゥーン2 × 数学(訂正版)スプラトゥーン2 × 数学(訂正版)
スプラトゥーン2 × 数学(訂正版)Takunology
 
基礎強化数学 第18回
基礎強化数学 第18回基礎強化数学 第18回
基礎強化数学 第18回studyplace0
 
第15回 配信講義 計算科学技術特論B(2022)
第15回 配信講義 計算科学技術特論B(2022)第15回 配信講義 計算科学技術特論B(2022)
第15回 配信講義 計算科学技術特論B(2022)RCCSRENKEI
 
暗号技術の実装と数学
暗号技術の実装と数学暗号技術の実装と数学
暗号技術の実装と数学MITSUNARI Shigeo
 

Similar to Seccamp2020L1 (15)

Variational autoencoder
Variational autoencoderVariational autoencoder
Variational autoencoder
 
これならわかる最適化数学8章_動的計画法
これならわかる最適化数学8章_動的計画法これならわかる最適化数学8章_動的計画法
これならわかる最適化数学8章_動的計画法
 
Computing for Isogeny Kernel Problem by Groebner Basis
Computing for Isogeny Kernel Problem by Groebner BasisComputing for Isogeny Kernel Problem by Groebner Basis
Computing for Isogeny Kernel Problem by Groebner Basis
 
グレブナー基底輪読会 #1 ―準備体操の巻―
グレブナー基底輪読会 #1 ―準備体操の巻―グレブナー基底輪読会 #1 ―準備体操の巻―
グレブナー基底輪読会 #1 ―準備体操の巻―
 
魔女のお茶会.pdf
魔女のお茶会.pdf魔女のお茶会.pdf
魔女のお茶会.pdf
 
witchs_key_party.pptx
witchs_key_party.pptxwitchs_key_party.pptx
witchs_key_party.pptx
 
070 統計的推測 母集団と推定
070 統計的推測 母集団と推定070 統計的推測 母集団と推定
070 統計的推測 母集団と推定
 
katagaitai workshop #7 crypto ナップサック暗号と低密度攻撃
katagaitai workshop #7 crypto ナップサック暗号と低密度攻撃katagaitai workshop #7 crypto ナップサック暗号と低密度攻撃
katagaitai workshop #7 crypto ナップサック暗号と低密度攻撃
 
波動方程式
波動方程式波動方程式
波動方程式
 
SMO徹底入門 - SVMをちゃんと実装する
SMO徹底入門 - SVMをちゃんと実装するSMO徹底入門 - SVMをちゃんと実装する
SMO徹底入門 - SVMをちゃんと実装する
 
スプラトゥーン2 × 数学(訂正版)
スプラトゥーン2 × 数学(訂正版)スプラトゥーン2 × 数学(訂正版)
スプラトゥーン2 × 数学(訂正版)
 
基礎強化数学 第18回
基礎強化数学 第18回基礎強化数学 第18回
基礎強化数学 第18回
 
第15回 配信講義 計算科学技術特論B(2022)
第15回 配信講義 計算科学技術特論B(2022)第15回 配信講義 計算科学技術特論B(2022)
第15回 配信講義 計算科学技術特論B(2022)
 
Fourier transform
Fourier transformFourier transform
Fourier transform
 
暗号技術の実装と数学
暗号技術の実装と数学暗号技術の実装と数学
暗号技術の実装と数学
 

Seccamp2020L1