Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
Upcoming SlideShare
What to Upload to SlideShare
Next
Download to read offline and view in fullscreen.

0

Share

Download to read offline

Seccamp2020L1

Download to read offline

セキュリティキャンプ2020の最終成果発表物です。

Related Books

Free with a 30 day trial from Scribd

See all

Related Audiobooks

Free with a 30 day trial from Scribd

See all
  • Be the first to like this

Seccamp2020L1

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

セキュリティキャンプ2020の最終成果発表物です。

Views

Total views

501

On Slideshare

0

From embeds

0

Number of embeds

357

Actions

Downloads

0

Shares

0

Comments

0

Likes

0

×