2022년도 HISCON(교외 중학생대회) 문제이지만 이제서야 올린다.. 뒷북
노션에 정리해놔서 걍 갭쳐해서 올림
flag: HSOC{D1d_you_u$e_bon3h5_4tt4ck?_W3ll_d0n3!}
사용기술: RSA (boneh durfee), sage
출제의도: rsa의 기본적인 원리에 대해 알고 주어진 문제를 보고 알맞은 공격기법을 찾아 플래그를 얻어낼 수 있는가를 확인하기 위해 출제하였다.
문제
prob.py

prob.txt
N = 0x7b15390f1a50e56ee97f4ba06a61776f6aa8e67ff088138446979029538308fbbe3d37353e891499167978398865a0d7f7e40d4237224ae503c2583265a845ac5b2ff984abb9d3ea74eb567d8e73a621d4f32ee5b25332f3c94e2fbcc18187ac129d4e66fc74fea10d984542c879331f34260aecacc387e978d95357187d19ab
e = 0x3e14358a7600bc551c4920f24590e3e51547b5c78d0f64622388d3d5e1d182fee6f7e066acb244e2f74e46934d5e0a5348c9404f881f0b546e1b74944b13624517b58bbddbbae4111a0367395bd3cccf4105f9530e84e3064b13851efba39f3c3a2fc3069a86d6e6b3bd039bcd7f782ca8e0f8decf81cec2569724baaa0d34ab
c = 0x13c0b26bac5e723cdbabe3b4742bea93380e7ee676a1a000af7daf6788931fc1f53ed76d32c4372d09204a53b206de972c0c267e2a291a513e8c932f172af1d4472f4cc12df67e824cb8037086935a99bd251f5bc9ccfe4f7726a88c093cab2869312ca40b2d02309ff5ddd86e2302c296ba9fa85490894d8e27c8ea54c7f1bc
문제 설명
RSA의 boneh durfee를 사용한 문제이다.
일반적으로 n과 e값이 비슷할 정도로 e값이 클 때 wiener’s attack을 쓴다고 알았는데 당시 boneh durfee를 사용할수도 있다는 것을 새롭게 알게되었다.
wiener’s attack보다 boneh durfee는 훨씬 덜 알려지고 생소하게 느껴지는 것 같아서 해당 공격기법을 선택했다.

2. 문제 제작

문제를 만들며 이미 구현되어있는 코드를 그대로 붙여넣기 해서 푸는건 딱히 좋은 문제가 아니라고 생각되어서 구현코드 내에 있는 델타값을 수정해서 알고리즘 적용범위를 늘려주도록 했다.

위 코드가 구현된 코드에 있는 N, e, delta, m 값이다.
delta: 전용 지수에 대한 예측 범위(d < n^delta)(기본값: 0.25)
또한 위 코드에 주석에 나와있듯이 m 값을 늘려줄수록 속도가 느려진다.
풀이
sol.sage










delta값 0.18을 0.25까지 늘리고 m값은 5로 설정해주었다.
온라인으로 실행 가능한 sage를 사용하여 코드를 실행하면 개인키 d가 구해진다.

그리고 구한 값들을 이용하여 평문을 구해보면 플래그가 나오게 된다.
from Crypto.Util.number import *
n = 0x7b15390f1a50e56ee97f4ba06a61776f6aa8e67ff088138446979029538308fbbe3d37353e891499167978398865a0d7f7e40d4237224ae503c2583265a845ac5b2ff984abb9d3ea74eb567d8e73a621d4f32ee5b25332f3c94e2fbcc18187ac129d4e66fc74fea10d984542c879331f34260aecacc387e978d95357187d19ab
e = 0x3e14358a7600bc551c4920f24590e3e51547b5c78d0f64622388d3d5e1d182fee6f7e066acb244e2f74e46934d5e0a5348c9404f881f0b546e1b74944b13624517b58bbddbbae4111a0367395bd3cccf4105f9530e84e3064b13851efba39f3c3a2fc3069a86d6e6b3bd039bcd7f782ca8e0f8decf81cec2569724baaa0d34ab
c = 0x13c0b26bac5e723cdbabe3b4742bea93380e7ee676a1a000af7daf6788931fc1f53ed76d32c4372d09204a53b206de972c0c267e2a291a513e8c932f172af1d4472f4cc12df67e824cb8037086935a99bd251f5bc9ccfe4f7726a88c093cab2869312ca40b2d02309ff5ddd86e2302c296ba9fa85490894d8e27c8ea54c7f1bc
d = 5448511435693918250863484721514292687178096328572373396537572878464059764348289027
m = pow(c,d,n)
print(long_to_bytes(m))
'HSOC 보안관제' 카테고리의 다른 글
| HSOC 암호학 멘토링 (rsa 기본원리) (0) | 2023.10.31 |
|---|---|
| HSOC crypto 멘토링 2 (0) | 2023.08.23 |
| crypto 문제출제 정리 (0) | 2023.07.11 |
| 2022 암호학 출제 문제 고전암호, pwntools 사용 writeup (0) | 2023.04.17 |
| HSOC crypto 멘토링 1 (0) | 2023.04.05 |
t1mmyt1m






































