0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

uvを使ってCrypto環境の構築

Last updated at Posted at 2024-10-02

はじめに

今回はuvを用いてCrypto環境を構築する方法を紹介します。

Crypto環境を構築しておくと、CTFでCryptoカテゴリの問題を解くときに便利です。

uvとは

uvはPythonのパッケージ管理システムで、pipと比較して高速であるということが特徴となっています。

Windowsでは、以下のようにインストールすることができます。

powershell -c "irm https://astral.sh/uv/install.ps1 | iex"

Linuxでは、以下のようにインストールすることができます。

curl -sL https://astral.sh/uv/install.sh | bash

以下のコマンドで、インストールしたかどうかを確認できます。

uv --version

Crypto環境の構築

ここからは実際にCrypto環境を構築していきます。

まず、以下のコマンドで作業ディレクトリを作成します。名前は任意ですがここではcryptoとします。

uv init crypto

これによって、以下のような構成のディレクトリができます。

crypto/
    .git
    .gitignore
    .python-version
    hello.py
    pyproject.toml
    README.md

ここでは割愛しますが、オプションをつけるとREADMEを省略するなどの設定ができます。gitで公開する必要がなかったりしたら、git関連のディレクトリやファイルを消去するのも手です。

次に、以下のコマンドでPythonのバージョンを指定します。

uv python pin 3.9.6

これによって、Pythonのバージョンが3.9.6になります。特に指定しない場合は最新のバージョンがインストールされます。

次に、以下のコマンドでPythonの仮想環境を作成します。

uv sync

これによって、cryptoディレクトリ内に.venvディレクトリが作成され、実際にPythonの仮想環境が構築されることとなります。

次に、requirements.txtに必要なパッケージを記述します。例えば、Cryptoモジュールを使いたい場合は以下のように記述します。

pycryptodome == 3.20.0

requirements.txtに記述したパッケージをインストールするには以下のコマンドを実行します。

uv add -r requirements.txt

これによって、pycryptodomeがインストールされます。uv addコマンドによって個別にパッケージをインストールすることもできますが、requirements.txtを使うことで管理が楽になります。必要に応じてパッケージのリストを更新するとよいでしょう。

これによって、Crypto環境の構築が完了しました。実際にCrypto問題を解いてみましょう。例えば、WaniCTF 2024のbeginners_rsaという問題を解いてみます。

from Crypto.Util.number import *

#暗号文
#enc = pow(m, e, n)
enc = 127075137729897107295787718796341877071536678034322988535029776806418266591167534816788125330265
#公開鍵
e = 65537
#これを素因数分解すると鍵が求まる
n = 317903423385943473062528814030345176720578295695512495346444822768171649361480819163749494400347
#msieveで素因数分解した結果
p = 9953162929836910171
q=11771834931016130837
r=12109985960354612149
s=13079524394617385153
a=17129880600534041513

#秘密鍵を求める
phi = (p-1)*(q-1)*(r-1)*(s-1)*(a-1)
d = inverse(e, phi)
m = pow(enc, d, n)
flag=long_to_bytes(m).decode()
print(flag)

このプログラムをsolve.pyとして保存し、以下のコマンドを実行します。

uv run solve.py

結果は以下のようになりました。

FLAG{S0_3a5y_1254!!}

おわりに

uvを用いて、Crypto環境を構築する方法を紹介しました。CTFをやっていると環境が汚れやすいので、このように専用の仮想環境を立ててその中で問題を解くとよいと思います。

参考文献

uvを使ってPython実行環境を整理してみた | DevelopersIO

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?