RSAアルゴリズム(a)のCTFで

    私は最近、頭痛のC O(≧口≦)O、とても遅い書き込みを停止し、遅く、いくつかのブログ、それを見ました。
RSAのいくつかの基本的な知識を学ぶための赤教師李ウイング-LOKビデオのよく知られたネットワークでの私たちの最初の一見の話をする前に、再びそれ以外の場合は、以下の書き込み、私たちはこのビデオを理解する必要があります覚えて、二回、二回、三回は見ていないそれを上に読んでいませんおそらく読んでいないだろう。暗号と数学の相関素晴らしいが、一歩一歩と学ぶことは難しいことではないが、私の数学は良くありませんが、これはこれらのトピックの暗号化を行うために私を防ぐことはできません、私はゆっくりと学ぶことができます。覚えているが、まだあきらめ始めていません。
    動画のリンク:https://www.bilibili.com/video/av26639065/

    基本的な導入:
    RSA 1977ロナルド・リベスト(ロナルド・リベスト)、アディ・シャミア(アディ・シャミア)とレオナルド・エーデルマン(レオナルド・エーデルマン)によっては、一緒に発表しました。その時にそれらの3つがMITで働いています。RSAは、一緒に作品を作曲文字で始まる姓三人です。
    RSAの暗号化アルゴリズムは、非対称暗号化アルゴリズムです。
    素因数分解大きな困難を行うには、RSAアルゴリズムの信頼性を決定します。言い換えれば、より困難な大きな整数の因数分解を行い、RSAアルゴリズムは、より信頼性があります。誰かが速い因数分解アルゴリズムを見つけた場合、その後、確かに大幅に低下してしまう情報のRSA暗号の信頼性を使用します。しかし、このようなアルゴリズムの可能性を見つけることは非常に小さいです。今日、唯一の短いRSA鍵は、ブレーク前の溶液の強力な方法することができます。これまでのところ、信頼性の高い世界** RSAアルゴリズムのアプローチ。限り、キーの長さが十分に長くなるように、情報が実際に使用されているRSA暗号化ソリューションが破損することはできません。
    公開鍵と秘密鍵を生成する:
(1)暗号化の前に、最初の二つの異なる大きな素数pを見つけ、Q
(2)= P算出N-
Q
(3)オイラー関数に従って、(n)は、φを得るため= (1-P)、φ(P)、φ(Q)=(Q-1)
(4)(1 <E <φ(N)、およびeの整数をので、φ公開鍵Eを同定するために、Eが満足しますN)プライム。
(5)E * dがφを分割する剰余(n)は、秘密鍵dを見つけるために、1です。
そして、公開鍵は(n、e)は、秘密鍵である(nは、D)

暗号==> nで割っメートル^ Eの残りの部分は、cの数(暗号文)された
00
n分割==> C ^ Dの残りを解読するためには、数m(平文)である
01
今、原則はあなたが練習するために行う必要がある問題ではないことそのワークアウト
02
タイトル2つの奇数P = 5、Q = 3、E = 7の公開鍵を選択する際にRSAアルゴリズムによれば、dが秘密鍵の数は?(ヘクタールを解決する直接の回答では覗かないでください)
A.6 B.7 C.8 D.9

分析:P = 5、Q = 3、 E = 7、 N - = P分かる。、Φ(N)=(P-1)(Q-1)= 8、Q = 15
      、Eによって
(N)のDφで割った余り1だった、D = 7 * 1(8 MOD)
      MOD演算子(モジュロ)は、ほとんどの人はそれは、あなたが百度に行くことができていないはずです。
ENN ......上記のトピック場合は、それを自分で行って、または解決するための答えを読んで、あなたはまだ高価精通カザフスタンすることができました。
?この質問は以下であること、それO(∩_∩)O〜
03
からのトピック:ジャービスOJ -基本- VeryEasyRSA( )
04
    はい(⊙O⊙)!手のリズムああO(≧口≦)Oを廃棄することがあるんどのように大きな数、
    ENN ......そう口で言うことができるか、タイトル名を見て--- VeryEasyRSAは、今、私たちは--pythonに当社のツールを持っています。ことわざとして、行く「工欲善其事必先利其器。」
    以下は、一般的にRSAモジュールのインストールに使用されている、私のいくつかの試みの後、最終的にはここで、迂回せずにインストールする方法を発見したのpython3モジュールがインストールされている場合でもこと、さまざまな問題が存在しますので、python2ですモジュールのpython3は、エラーが少ないときpython2をインストールすること、そして私がのpython3、見すべて-python2でない対象のRSAギャングを持っているものでしょうではありません。

  前提条件:Linux環境ベースのインストール、あなたがwgetをしていることを確認して、GCC、ソフトウェア意志の基本的なLinuxのコマンドを作ります。
  私たちは(私が出てくるのに長い時間をジャンプしてピットにいたとき、私は次のソースコードがインストール用のコンパイラオプションのモジュール変更バージョンを保証し、ENNことができない、モジュールのバージョンのダウンロードリンクを変更しないでください。)6つのモジュールの合計をインストールする必要があります

  1. M4モジュールがインストールされているかどうか確認してください
        :コマンドラインは、コマンドをman m4
        インストールしていない場合は、あなたが最初にそれをインストールし、情報のオンラインのほとんどが取り付けられたを書くために、ソースコードを使用するように書かれているが、常にM4のソースをインストールし、ソフトウェアの問題のバージョンをコンパイルすることができますインストールが失敗し、これが最初の穴であり、そして最終的には直接あまりにもハードこれ、インストールするには、apt-getのコマンドを使用することができました:apt-get install m4
  2. GMPモジュールのインストール
    wget https://gmplib.org/download/gmp/gmp-6.1.2.tar.bz2
    tar -xf gmp-6.1.2.tar.bz2 

    フォルダのCDにファイルを解凍します

    ./configure --prefix=$HOME/static --enable-static --disable-shared --with-pic

    再実行の実装が完了した後

    make && make check && make install
  3. MPFRのインストールモジュール(解凍は、書かないで何カタログするには、次のコマンドを入力し、2)(同じ。)
    wget https://www.mpfr.org/mpfr-current/mpfr-4.0.2.tar.bz2 
    ./configure --prefix=$HOME/static --enable-static --disable-shared --with-pic --with-gmp=$HOME/static
    make && make check && make install
  4. MPCモジュールのインストール
    wget https://ftp.gnu.org/gnu/mpc/mpc-1.1.0.tar.gz
    ./configure --prefix=$HOME/static --enable-static --disable-shared --with-pic --with-gmp=$HOME/static --with-mpfr=$HOME/static
    make && make check && make install
  5. インストールgmpy2モジュール
    git clone https://github.com/aleaxit/gmpy.git
    sudo python setup.py build_ext --static=$HOME/static install
  6. インストールlibnumモジュール
    git clone https://github.com/hellman/libnum
    sudo python setup.py install 

        さて、ここで一般的に使用されるRSA復号モジュールはほぼ同じにインストールされています。トピックに戻る以上、私たちはどのようにVeryEasyRSA法を見てください。
        問題解決のスクリプト:

#!/usr/bin/python
#coding:utf-8
#@Author:醉清风

import gmpy2
p = 3487583947589437589237958723892346254777
q = 8767867843568934765983476584376578389
e = 65537
phi = (p-1)*(q-1)       #φ(n)在写的时候多用phi代替,因为键盘不好敲出来。
d = gmpy2.invert(e,phi) #e模phi的逆为d, (e*d)%phi==1 原理上面讲过
print d

若しくは

#!/usr/bin/python
#coding:utf-8
#@Author:醉清风

import libnum
p = 3487583947589437589237958723892346254777
q = 8767867843568934765983476584376578389
e = 65537
phi = (p-1)*(q-1)
d = libnum.invmod(e,phi) #e模phi的逆为d,(e*d)%phi==1 
print d

    上記の解決策だけで別のモジュールコールの両方が、その効果は同じ計算で、後者のタイトルはしばしば、これらのモジュールを使用しますが、特にモジュールは以下のようにしていると自分の感情を見たかったです。
    今では継続する、の後ろ、より興味深いまだ始まったばかりです......

おすすめ

転載: blog.51cto.com/13400543/2413968