1) EC가 정의된 field는 어떤가? IntModRing이라면 modulus 는 소수인가? 소수의 거듭제곱인가? 합성수인가?
2) y=0의 근은 어떤 꼴인가?
3) Sagemath에서 construction 했을 때 에러가 나는가? (ex singular EC, abnormal generator)
4) addition 등의 연산이 제대로 주어져있는가?
위에거들 고민해보고 답이 안나오면 구글링 열심히 하자.
1) EC가 정의된 field는 어떤가? IntModRing이라면 modulus 는 소수인가? 소수의 거듭제곱인가? 합성수인가?
2) y=0의 근은 어떤 꼴인가?
3) Sagemath에서 construction 했을 때 에러가 나는가? (ex singular EC, abnormal generator)
4) addition 등의 연산이 제대로 주어져있는가?
위에거들 고민해보고 답이 안나오면 구글링 열심히 하자.
1. LFSR
2. XORSHIFT
3. LCG
뭐 이런것들이 있다. 외의 것들도 많으므로 문제 많이 풀어봐야함...
1. LFSR
2. XORSHIFT
3. LCG
뭐 이런것들이 있다. 외의 것들도 많으므로 문제 많이 풀어봐야함...
얘는 쉬운건 진짜 쉽고 어려운건 진짜 어려운것 같다. 쉬운 문제는 그냥 간단한 브포에 점화식 붙여서 식세우고 슥슥하면 된다.
어려운 문제는, 내기준으론, 비트 일부가 truncate 되어 있다던가 하는 문제들. 이건 격자 써야 한다. or SMT solver 잘 깎으면 나옴. 솔직히 SMT solver 쓰는건 내가 잘 안해봐서 뭐라 얘기 못하겠다.
얘는 쉬운건 진짜 쉽고 어려운건 진짜 어려운것 같다. 쉬운 문제는 그냥 간단한 브포에 점화식 붙여서 식세우고 슥슥하면 된다.
어려운 문제는, 내기준으론, 비트 일부가 truncate 되어 있다던가 하는 문제들. 이건 격자 써야 한다. or SMT solver 잘 깎으면 나옴. 솔직히 SMT solver 쓰는건 내가 잘 안해봐서 뭐라 얘기 못하겠다.
문제에서 뭔 이상한 해시를 직접 만들었답시고 보여주면 높은 확률로 그게 문제임. 이 경우에는 보통 해시 구성하는 큰 틀을 따를 확률이 높은데, 머클댐가드, 스펀지 요정도 우선 확인해보면 좋음. 만약 머클댐가드라면 머클댐가드에서 통하는 공격 몇개 시도해보고. 만약에 그런 틀에서 발생하는 문제가 아닌거같으면, 뭐 두 평문 xor하면 어떻게 되는지, nullbyte concat하면 어떻게 되는지 등등 알잘딱 해야함.
문제에서 뭔 이상한 해시를 직접 만들었답시고 보여주면 높은 확률로 그게 문제임. 이 경우에는 보통 해시 구성하는 큰 틀을 따를 확률이 높은데, 머클댐가드, 스펀지 요정도 우선 확인해보면 좋음. 만약 머클댐가드라면 머클댐가드에서 통하는 공격 몇개 시도해보고. 만약에 그런 틀에서 발생하는 문제가 아닌거같으면, 뭐 두 평문 xor하면 어떻게 되는지, nullbyte concat하면 어떻게 되는지 등등 알잘딱 해야함.
얜 진짜 별에별게 다 됨. 가정용 pc로도 짧은 시간 안에 충돌쌍 수만개 찾을 수 있음. 머클댐가드라 충돌쌍 하나 찾으면 충돌쌍 무한히도 만들 수 있음. length extension 같은것도 비슷한 이유에서 발생함. 깃헙에 잘 찾아보면 md5 checksum이 동일한 다른 확장자의 파일 만들기 뭐 이런것도 있는데 문제마다 보고 필요한거 갖다 쓰면 됨.
얜 진짜 별에별게 다 됨. 가정용 pc로도 짧은 시간 안에 충돌쌍 수만개 찾을 수 있음. 머클댐가드라 충돌쌍 하나 찾으면 충돌쌍 무한히도 만들 수 있음. length extension 같은것도 비슷한 이유에서 발생함. 깃헙에 잘 찾아보면 md5 checksum이 동일한 다른 확장자의 파일 만들기 뭐 이런것도 있는데 문제마다 보고 필요한거 갖다 쓰면 됨.
해시 문제 풀려면 해시가 어떻게 구성되는지에 대해서는 간략하게라도 알아야함. 머클댐가드, 스펀지 이런 구조가 있다는건 항상 인지하고 있어야 하고, 그 구조가 정확히 어떻게 되는진 문제 풀때 찾아보면 된다.
해시 문제 풀려면 해시가 어떻게 구성되는지에 대해서는 간략하게라도 알아야함. 머클댐가드, 스펀지 이런 구조가 있다는건 항상 인지하고 있어야 하고, 그 구조가 정확히 어떻게 되는진 문제 풀때 찾아보면 된다.
그다지 생각나는게 많지 않음. 주로 도청자 eve의 입장에서 플레이하도록 출제됨. 우선은 생각해봐야할 게
1) 파라미터를 내가 설정할 수 있는가?
2) 만약 그렇다면 파라미터의 검증은 어떻게 이루어지는가?
3) 내가 참여/도청할 수 있는 통신은 몇번인가?
4) 파라미터는 재사용되는가?
이런걸 고려하면서 정수론적으로 잘 풀어봐야함. 인터넷 상에 뭐 DH-Backdoor construction에 관한 자료가 좀 있던거 같기도 하고.
그다지 생각나는게 많지 않음. 주로 도청자 eve의 입장에서 플레이하도록 출제됨. 우선은 생각해봐야할 게
1) 파라미터를 내가 설정할 수 있는가?
2) 만약 그렇다면 파라미터의 검증은 어떻게 이루어지는가?
3) 내가 참여/도청할 수 있는 통신은 몇번인가?
4) 파라미터는 재사용되는가?
이런걸 고려하면서 정수론적으로 잘 풀어봐야함. 인터넷 상에 뭐 DH-Backdoor construction에 관한 자료가 좀 있던거 같기도 하고.
1-3. 다른 도메인에서의 RSA.
얘는 정말 순수한 수학퍼즐이라 할 수 있겠다. 도메인의 특성에 따라 할 수 있는게 정말 다양하게 나뉘기 때문이다. 예를 들자면 행렬로 하는 RSA 같은거. 주요하게 살펴볼 요소는
1) 도메인의 multiplicative order가 알려져 있는가
2) qth root가 쉽게 계산될 수 있는가
3) finite field 상으로 환원될 수 있는가
페이퍼에서 그 결론을 찾을 수 있는 경우도 많다.
1-3. 다른 도메인에서의 RSA.
얘는 정말 순수한 수학퍼즐이라 할 수 있겠다. 도메인의 특성에 따라 할 수 있는게 정말 다양하게 나뉘기 때문이다. 예를 들자면 행렬로 하는 RSA 같은거. 주요하게 살펴볼 요소는
1) 도메인의 multiplicative order가 알려져 있는가
2) qth root가 쉽게 계산될 수 있는가
3) finite field 상으로 환원될 수 있는가
페이퍼에서 그 결론을 찾을 수 있는 경우도 많다.
이 케이스는 그다지 흔한 케이스는 아니다. 가장 유명한 예시는, 동일한 N과 평문에 대해 서로소인 두 공개지수 e1, e2를 사용하는 예시이다. 만일 그러하다면, e1*x+e1*y=1 인 두 정수 x,y가 존재하고, c1^x*c2^y는 m과 합동이므로, N의 소인수분해 없이 m을 복구할 수 있다.
혹은, 평문에 관한 낮은 차수의 다항식이 보장되며 평문이 충분히 작은 수인 경우에는 coppersmith method로 해결될 수 있다. 또다른 예시로는 격자가 있으나 어려우니 생략.
이 케이스는 그다지 흔한 케이스는 아니다. 가장 유명한 예시는, 동일한 N과 평문에 대해 서로소인 두 공개지수 e1, e2를 사용하는 예시이다. 만일 그러하다면, e1*x+e1*y=1 인 두 정수 x,y가 존재하고, c1^x*c2^y는 m과 합동이므로, N의 소인수분해 없이 m을 복구할 수 있다.
혹은, 평문에 관한 낮은 차수의 다항식이 보장되며 평문이 충분히 작은 수인 경우에는 coppersmith method로 해결될 수 있다. 또다른 예시로는 격자가 있으나 어려우니 생략.
1. 어떤 수를 계산할 수 있다.
2. 그 어떤 수가 mod p에서 0과 합동이다.
3. => gcd(어떤 수,N) > 0 이며, 높은 확률로 < N이다.
이 경우, gcd가 p 그 자체일 확률이 높다.
1. 어떤 수를 계산할 수 있다.
2. 그 어떤 수가 mod p에서 0과 합동이다.
3. => gcd(어떤 수,N) > 0 이며, 높은 확률로 < N이다.
이 경우, gcd가 p 그 자체일 확률이 높다.
- 페르마 소인수분해
- ct와 N의 gcd 이용하기
- 소인수의 특수꼴 이용하여 식정리하기
- 페르마 소인수분해
- ct와 N의 gcd 이용하기
- 소인수의 특수꼴 이용하여 식정리하기
1-1. 비밀키를 찾아 m을 복호화한다.
1-2. 비밀키를 찾지 않고 m을 복호화한다.
1-1. 비밀키를 찾아 m을 복호화한다.
1-2. 비밀키를 찾지 않고 m을 복호화한다.