Termux에서 양자 내성 암호 돌려보기
많은 시행 착오 끝에 성공 !
1. Playstore에서 Termux를 설치한다.
2. 양자 내성 암호 라이브러리 빌드를 위한 셋업
pkg update && pkg upgrade -y
pkg install clang cmake ninja python git -y
pip install setuptools
3. 양자내성암호 소스코드 직접 빌드 (pip로 하면 안됨)
git clone -b main https://github.com/open-quantum-safe/liboqs.git
cd liboqs
mkdir build && cd build
- 잦은 에러를 유발 알고리즘 (NTRU Prime) 제외하고 ML-KEM 활성화 설정해서 cmake
cmake -GNinja .. -DBUILD_SHARED_LIBS=ON -DCMAKE_INSTALL_PREFIX=$PREFIX -DOQS_USE_OPENSSL=OFF -DOQS_KEM_DEFAULT=OFF -DOQS_SIG_DEFAULT=OFF -DOQS_KEM_ML_KEM=ON -DOQS_ENABLE_KEM_NTRUPRIME=OFF
- 빌드
ninja install
- 잘 빌드 되었는지 확인
export LD_LIBRARY_PATH=$PREFIX/lib:$LD_LIBRARY_PATH python -c "import oqs; print('ML-KEM 성공 여부:', 'KeyEncapsulation' in dir(oqs))"
4. C로 만든 엔진을 python에서 쓸 수 있도록 연결
pip install liboqs-python
# 파이썬이 라이브러리를 찾을 수 있도록 경로 설정
export LD_LIBRARY_PATH=$PREFIX/lib:$LD_LIBRARY_PATH
5. 예제
pip install pycryptodome
import oqs, hashlib, binascii, os
from Crypto.Cipher import AES
from Crypto.Util.Padding import pad, unpad
# 1. ML-KEM 기반 키 교환 (양자 내성)
with oqs.KeyEncapsulation("ML-KEM-768") as alice:
alice_pub = alice.generate_keypair()
with oqs.KeyEncapsulation("ML-KEM-768") as bob:
ciphertext, bob_secret = bob.encap_secret(alice_pub)
alice_secret = alice.decap_secret(ciphertext)
# 2. 6자리 인증 코드 생성 (중간자 공격 방지)
auth_code = hashlib.sha256(alice_secret).hexdigest()[:6]
print(f"[*] 인증 코드 확인: {auth_code}")
# 3. AES-256-CBC 암호화 통신
key = hashlib.sha256(alice_secret).digest()
iv = os.urandom(16)
msg = "양자 보안 메시지입니다."
# 암호화
cipher = AES.new(key, AES.MODE_CBC, iv)
enc_msg = cipher.encrypt(pad(msg.encode(), 16))
print(f"[-] 암호문: {binascii.hexlify(enc_msg[:10])}...")
# 복호화
dec_cipher = AES.new(key, AES.MODE_CBC, iv)
dec_msg = unpad(dec_cipher.decrypt(enc_msg), 16).decode()
print(f"[+] 복호화 결과: {dec_msg}")
0 개의 댓글:
댓글 쓰기