SlideShare uma empresa Scribd logo
1 de 10
00. First


RSA 暗号で学ぶ初めての CommonLisp

    # 素因数分解(試行除算)


        2012-05-12
01. Profile


  Akiko Terada (@pgf2)

Work : software developer
02. Attention!!



すべてはフィーリングで!!
03. Index

●RSA 暗号

● 試行除算による素因数分解

● 参考
04. RSA
複合鍵 : p, q
暗号鍵 : n = p*q

1. 異なる素数 p, q を選ぶ
2. メッセージ(平文)を n で暗号化する
3. メッセージ(暗号文)を p, q で複合化する

安全性は効率的に
 ・与えられた整数 n を素因数分化する方法
 ・ある整数が素数であることを証明する方法
に依存する
05. Trial division - algorithm
Input: 正の整数 n
Output: 素因数

Step1: op = 2
Step2: n ≡ 0 (mod op)
    → true: op は n の素因数 End
    → false: Step3
Step3: op++
Step4: op >= floor(√n)
    → true: n は素数 End
    → false: Step2
05. Trial division - program
(defun prime-factor(n)
 (cond ((= n 1) (list nil 1))
       (t
         (labels ((pf (&optional (op 2))
                    (cond ((> op (sqrt n)) (list t n))
                           ((zerop (rem n op)) (list nil op))
                           (t (pf (+ op 1))))))
           (pf)))))

(defun trial-division(n)
 (let ((prime-factors nil))
   (cond ((= n 1) (setq prime-factors (list n)))
          (t
            (labels ((td (&optional (op n))
                       (let ((lst (prime-factor op)))
                         (setq prime-factors (cons (car (cdr lst)) prime-factors))
                         (unless (car lst)
                           (td (/ op (car (cdr lst))))))))
              (td))
           prime-factors))))
05. Trial division - efficiency


      素因数分解したい整数 n が

小さい素数で割り切れるときのみ効率的となる!



                → フェルマーの素因数分解へ続く
    整数 n が√ n より余り大きくない因数を持つときに
                   効率が良くなるアルゴリズム
06. Reference


ISBN-13: 978-4627847613

ISBN-13: 978-4431709442
ISBN-13: 978-4621062869
07. Last



ご清聴ありがとうございました!

Mais conteúdo relacionado

Semelhante a RSA暗号で学ぶ初めてのCommonLisp #素因数分解(試行除算)

Vanishing Component Analysis
Vanishing Component AnalysisVanishing Component Analysis
Vanishing Component AnalysisKoji Matsuda
 
行列およびテンソルデータに対する機械学習(数理助教の会 2011/11/28)
行列およびテンソルデータに対する機械学習(数理助教の会 2011/11/28)行列およびテンソルデータに対する機械学習(数理助教の会 2011/11/28)
行列およびテンソルデータに対する機械学習(数理助教の会 2011/11/28)ryotat
 
東京都市大学 データ解析入門 5 スパース性と圧縮センシング 2
東京都市大学 データ解析入門 5 スパース性と圧縮センシング 2東京都市大学 データ解析入門 5 スパース性と圧縮センシング 2
東京都市大学 データ解析入門 5 スパース性と圧縮センシング 2hirokazutanaka
 
How to study stat
How to study statHow to study stat
How to study statAk Ok
 
Material
MaterialMaterial
Material_TUNE_
 
Deep learning _linear_algebra___probablity___information
Deep learning _linear_algebra___probablity___informationDeep learning _linear_algebra___probablity___information
Deep learning _linear_algebra___probablity___informationtakutori
 
第一回Data mining勉強会 -第二章
第一回Data mining勉強会 -第二章第一回Data mining勉強会 -第二章
第一回Data mining勉強会 -第二章Tomonobu_Hirano
 
公開鍵暗号1: RSA暗号
公開鍵暗号1: RSA暗号公開鍵暗号1: RSA暗号
公開鍵暗号1: RSA暗号Joe Suzuki
 
Sparse estimation tutorial 2014
Sparse estimation tutorial 2014Sparse estimation tutorial 2014
Sparse estimation tutorial 2014Taiji Suzuki
 
第一回Data mining勉強会 -第二章 - 原案
第一回Data mining勉強会 -第二章 - 原案第一回Data mining勉強会 -第二章 - 原案
第一回Data mining勉強会 -第二章 - 原案yushin_hirano
 
Sparse Codingをなるべく数式を使わず理解する(PCAやICAとの関係)
Sparse Codingをなるべく数式を使わず理解する(PCAやICAとの関係)Sparse Codingをなるべく数式を使わず理解する(PCAやICAとの関係)
Sparse Codingをなるべく数式を使わず理解する(PCAやICAとの関係)Teppei Kurita
 
StanとRでベイズ統計モデリング 11章 離散値をとるパラメータ
StanとRでベイズ統計モデリング 11章 離散値をとるパラメータStanとRでベイズ統計モデリング 11章 離散値をとるパラメータ
StanとRでベイズ統計モデリング 11章 離散値をとるパラメータMiki Katsuragi
 
公開鍵暗号(1): RSA暗号
公開鍵暗号(1): RSA暗号公開鍵暗号(1): RSA暗号
公開鍵暗号(1): RSA暗号Joe Suzuki
 
KDD'17読み会:Anomaly Detection with Robust Deep Autoencoders
KDD'17読み会:Anomaly Detection with Robust Deep AutoencodersKDD'17読み会:Anomaly Detection with Robust Deep Autoencoders
KDD'17読み会:Anomaly Detection with Robust Deep AutoencodersSatoshi Hara
 
Icml yomikai 07_16
Icml yomikai 07_16Icml yomikai 07_16
Icml yomikai 07_16Yo Ehara
 

Semelhante a RSA暗号で学ぶ初めてのCommonLisp #素因数分解(試行除算) (20)

Vanishing Component Analysis
Vanishing Component AnalysisVanishing Component Analysis
Vanishing Component Analysis
 
行列およびテンソルデータに対する機械学習(数理助教の会 2011/11/28)
行列およびテンソルデータに対する機械学習(数理助教の会 2011/11/28)行列およびテンソルデータに対する機械学習(数理助教の会 2011/11/28)
行列およびテンソルデータに対する機械学習(数理助教の会 2011/11/28)
 
東京都市大学 データ解析入門 5 スパース性と圧縮センシング 2
東京都市大学 データ解析入門 5 スパース性と圧縮センシング 2東京都市大学 データ解析入門 5 スパース性と圧縮センシング 2
東京都市大学 データ解析入門 5 スパース性と圧縮センシング 2
 
How to study stat
How to study statHow to study stat
How to study stat
 
Material
MaterialMaterial
Material
 
Deep learning _linear_algebra___probablity___information
Deep learning _linear_algebra___probablity___informationDeep learning _linear_algebra___probablity___information
Deep learning _linear_algebra___probablity___information
 
第一回Data mining勉強会 -第二章
第一回Data mining勉強会 -第二章第一回Data mining勉強会 -第二章
第一回Data mining勉強会 -第二章
 
公開鍵暗号1: RSA暗号
公開鍵暗号1: RSA暗号公開鍵暗号1: RSA暗号
公開鍵暗号1: RSA暗号
 
会津合宿2015Day3:D問題
会津合宿2015Day3:D問題会津合宿2015Day3:D問題
会津合宿2015Day3:D問題
 
Sparse estimation tutorial 2014
Sparse estimation tutorial 2014Sparse estimation tutorial 2014
Sparse estimation tutorial 2014
 
Prml9
Prml9Prml9
Prml9
 
Rの高速化
Rの高速化Rの高速化
Rの高速化
 
文字列処理
文字列処理文字列処理
文字列処理
 
第一回Data mining勉強会 -第二章 - 原案
第一回Data mining勉強会 -第二章 - 原案第一回Data mining勉強会 -第二章 - 原案
第一回Data mining勉強会 -第二章 - 原案
 
Sparse Codingをなるべく数式を使わず理解する(PCAやICAとの関係)
Sparse Codingをなるべく数式を使わず理解する(PCAやICAとの関係)Sparse Codingをなるべく数式を使わず理解する(PCAやICAとの関係)
Sparse Codingをなるべく数式を使わず理解する(PCAやICAとの関係)
 
StanとRでベイズ統計モデリング 11章 離散値をとるパラメータ
StanとRでベイズ統計モデリング 11章 離散値をとるパラメータStanとRでベイズ統計モデリング 11章 離散値をとるパラメータ
StanとRでベイズ統計モデリング 11章 離散値をとるパラメータ
 
公開鍵暗号(1): RSA暗号
公開鍵暗号(1): RSA暗号公開鍵暗号(1): RSA暗号
公開鍵暗号(1): RSA暗号
 
KDD'17読み会:Anomaly Detection with Robust Deep Autoencoders
KDD'17読み会:Anomaly Detection with Robust Deep AutoencodersKDD'17読み会:Anomaly Detection with Robust Deep Autoencoders
KDD'17読み会:Anomaly Detection with Robust Deep Autoencoders
 
Icml yomikai 07_16
Icml yomikai 07_16Icml yomikai 07_16
Icml yomikai 07_16
 
Rcppのすすめ
RcppのすすめRcppのすすめ
Rcppのすすめ
 

RSA暗号で学ぶ初めてのCommonLisp #素因数分解(試行除算)

  • 1. 00. First RSA 暗号で学ぶ初めての CommonLisp # 素因数分解(試行除算) 2012-05-12
  • 2. 01. Profile Akiko Terada (@pgf2) Work : software developer
  • 4. 03. Index ●RSA 暗号 ● 試行除算による素因数分解 ● 参考
  • 5. 04. RSA 複合鍵 : p, q 暗号鍵 : n = p*q 1. 異なる素数 p, q を選ぶ 2. メッセージ(平文)を n で暗号化する 3. メッセージ(暗号文)を p, q で複合化する 安全性は効率的に  ・与えられた整数 n を素因数分化する方法  ・ある整数が素数であることを証明する方法 に依存する
  • 6. 05. Trial division - algorithm Input: 正の整数 n Output: 素因数 Step1: op = 2 Step2: n ≡ 0 (mod op)     → true: op は n の素因数 End     → false: Step3 Step3: op++ Step4: op >= floor(√n)     → true: n は素数 End     → false: Step2
  • 7. 05. Trial division - program (defun prime-factor(n) (cond ((= n 1) (list nil 1)) (t (labels ((pf (&optional (op 2)) (cond ((> op (sqrt n)) (list t n)) ((zerop (rem n op)) (list nil op)) (t (pf (+ op 1)))))) (pf))))) (defun trial-division(n) (let ((prime-factors nil)) (cond ((= n 1) (setq prime-factors (list n))) (t (labels ((td (&optional (op n)) (let ((lst (prime-factor op))) (setq prime-factors (cons (car (cdr lst)) prime-factors)) (unless (car lst) (td (/ op (car (cdr lst)))))))) (td)) prime-factors))))
  • 8. 05. Trial division - efficiency 素因数分解したい整数 n が 小さい素数で割り切れるときのみ効率的となる! → フェルマーの素因数分解へ続く 整数 n が√ n より余り大きくない因数を持つときに 効率が良くなるアルゴリズム
  • 9. 06. Reference ISBN-13: 978-4627847613 ISBN-13: 978-4431709442 ISBN-13: 978-4621062869