zerobean's archive

[Crypto] SageMath 본문

crypto

[Crypto] SageMath

zerobean 2025. 9. 22. 09:30

SageMath 다시 설치하는 김에 정리하려고 합니다.

드림핵의 강의를 참고하였습니다.

SageMath install

https://doc.sagemath.org/html/en/installation/conda.html#install-from-conda-forge

여기 나온 대로

$ curl -L -O "https://github.com/conda-forge/miniforge/releases/latest/download/Miniforge3-$(uname)-$(uname -m).sh"
$ bash Miniforge3-$(uname)-$(uname -m).sh

 

입력하면 약관 동의하라고 나오고 설치가 완료됩니다.

conda가 없으면 shell 껐다가 켜면 됩니다.

그리고 python3 --version 명령어를 통해 버전 확인하고

$ conda create -n sage sage python=3.12.3

이런 식으로 해주면 됩니다.

$ conda activate sage
$ sage

이렇게 하고 좀 기다리면 sage terminal이 열리게 됩니다.

$ vi ~/.bashrc

로 파일 열어서 conda activate sage를 입력하면 shell을 열 때마다 입력하지 않아도 됩니다.

$ conda config --set changeps1 false

이러면 (base)가 사라집니다.

 

이러면 설치는 완료되고 사용하면 됩니다.

정리하는 김에 사용법과 자주 쓰는 함수들도 정리해 보겠습니다.

SageMath 사용법

설치를 했으면 기본적으로 file.sage 이렇게 파일을 만들고 sage file.sage로 실행할 수 있습니다.

또는 그냥 terminal에서 사용할 수 있습니다.

sage.py 안 생기게 하는 방법

여기서 불편한 게 file.sage.py 파일이 생긴다는 것인데

$ vi ~/.bashrc

.bashrc 을 열어서

sage() {
  local sagefile=""
  for arg in "$@"; do
    if [[ "$arg" == *.sage ]]; then
      sagefile="$arg"
      break
    fi
  done

  command sage "$@"

  if [[ -n "$sagefile" ]]; then
    local py="${sagefile%.sage}.sage.py"
    [[ -f "$py" ]] && rm -f -- "$py"
  fi
}

이 코드를 넣으면 됩니다.

python에서 사용하고 싶은 경우

그리고 만약 python에서 sagemath의 함수만 사용하고 싶은 경우엔

from sage.all import *

이렇게 import 하면 됩니다.

자주 쓰는 함수들

크립토 문제를 풀 때 자주 사용하는 함수들을 몇 가지만 적어보겠습니다.

ECC

E = EllipticCurve(GF(p), [a, b])
E.order()
E.gens()[0]

polynomial

PR.<x> = PolynomialRing(GF(p))

만약 python에서 불러와서 쓰고 싶다면

PR = PolynomialRing(GF(p),'x').gen()

이런 식으로 사용하면 됩니다.

Lattice

v = vector([a,b])
u = vector([c,d])
M = Matrix(ZZ, [v,u])

이렇게 vector와 matrix를 만들 수 있고

s = A.solve_right(b)

$b = A\cdot s$ 일 때 solve_right 함수를 사용하면 바로 s를 구할 수 있습니다.

L = M.LLL()

그리고 LLL도 있습니다.

그리고 모듈러에서의 연산과, field에서의 연산을 위한 함수들

Zn = Zmod(n)
Fp = GF(p)

그 외에 gcd, crt 등 유용한 함수가 많습니다.