국가암호공모전 (II-A 분야) 문제 01 (2016)
추천글 : 【암호론】 암호론 목차
1. 문제 [본문]
2. 풀이 [본문]
1. 문제 [목차]
세 명의 사용자가 e = 3으로 고정하고 공개키를 각각 (3, n1), (3, n2), (3, n3)으로 설정한 후, 동일한 메시지 m에 대해 암호화(즉, c1 = m3 mod n1, c2 = m3 mod n2, c3 = m3 mod n3)를 수행한 결과가 각각 c1, c2, c3와 같을 때, m을 복원하시오.
n1 = 2310299443493285728875630082549132881822025540257530965759514012060264869125167678507394069856345219
n2 = 1640254853984465233890458607584621854508380697315386098130522602681990087093753900898805886346512517
n3 =3418519173916888863589816004190034375879476446746811141598913103396792921968768128979083353071236733
c1 = 852463884908235555765408734486025119365910986910875208826208737582871671723341488120300441323003770
c2 = 313555711879294064521282442285653226645699338301908834904362312223705316351738030120328187018289910
c3 = 3404239695295196799353493775777325699675748893697977348429335254042115834104851844221409452136061008
OAEP(Optimal asymmetric encryption padding)와 같은 별도의 패딩 방법을 이용하지 않는 textbook RSA 공개키 암호 시스템의 키 생성, 암호화, 복호화 과정은 각각 다음과 같다.
⑴ 키 쌍 생성
(1) 두 소수(prime number) p, q를 임의로 선택 (단, p ≠ q)
(2) n = p × q 및 Φ(n) = (p - 1) × (q - 1) 계산
(3) gcd(Φ(n), e) = 1이고 1 < e < Φ(n)인 e를 임의로 선택
(4) (e × d) mod Φ(n) = 1을 만족하는 d를 계산
(5) (d, n)을 개인키로 저장하고, (e, n)을 공개키로 공개
⑵ 암호화
(1) 암호화할 텍스트 메시지를 적절한 규칙에 의해 정수 m으로 변환 (단, 0 ≤ m < n)
(2) 공개키 (e, n) 및 m을 이용하여 암호문 c = me mod n 계산
⑶ 복호화
(1) 암호문 c 및 개인키 (d, n)을 이용하여 평문 m = cd mod n 계산
(2) 정수 m을 적절한 규칙에 의해 텍스트 메시지로 변환
위의 암호화 및 복호화 과정에서는 공통적으로 모듈러 지수승 연산이 이용된다. 모듈로 지수승 연산의 소요 시간은 지수 크기(자릿수)에 비례하므로, 일반적으로 키 쌍 생성 과정에서 공개키 e를 작은 수로 선택함으로써 암호화 연산의 모듈러 지수승을 빠르게 할 수 있다. (단, 개인키 d를 작게 선택하면 안전성에 문제가 생기므로 개인키는 작게 선택하지 않음) 그러나, 지나치게 작은 e를 사용하면, 경우에 따라서는 개인키 없이 평문이 복원될 수 있어 안전성 문제가 생기게 된다.
2. 풀이 [목차]
다음과 같은 문제가 주어져 있다고 가정하자.
그러면 다음과 같이 풀어낼 수 있다.
(mod n)에 대해서 n이 소수이기 때문에 변칙적인 상황이 나오지 않을 것이다. 변칙적인 상황은 다음을 지칭한다.
이제 본 문제로 돌아가, 다음 식을 찾을 수 있다.
이때 ci의 크기를 비교하면 c2 < c1 < c3이므로 다음 순서로 푼다.
(01) k2n2 ≡ c1 - c2 (mod n1)
(02) (01)을 푼 결과 k2 ≡ a (mod n1)인 0 < a < n1을 찾는다. 그 결과 다음과 같다.
210824214449695233006980592380909113808777047569969848337716314539333057685637224866726963639360265
(03) k2n2 = (n1t + a) n2 = n1n2t + an2 ≡ c3 - c2 (mod n3)
(04) n1n2t ≡ c3 - c2 - an2 (mod n3)
(05) (04)를 푼 결과 t ≡ b (mod n3)인 0 < b < n3을 찾는다. 그 결과 다음과 같다.
89329647693091640013623734899873053413799691201603093490413135180340208568271437133325984870644816
(06) m3 = (n1t + a) n2 + c2 = (n1(n3s + b) + a) n2 + c2 = n1n2n3s + (c2 + n2a + n1n2b)
(07) c2 + n2a + n1n2b를 n1n2n3로 나눈 나머지는 다음과 같다.
338512902294180026742062499790246825491289530419663739994471843709329922151035000808607134601362162647058249285652331936506525556228449559501805785815277061779222758843899987547741135718572919800738201126715596563715818914393006712626744776667230661545824969368334261918787149105268353396521516883
(08) m3 < n1n2n3이고 후보는 단 하나였으므로 m3은 (07)에서 구한 수가 된다.
(09) m3을 알고 있으므로 m을 알 수 있다.
(10) 관련된 C 코드는 아래에 첨부한다.
입력: 2016.08.14 12:19
'▶ 자연과학 > ▷ 암호·보안' 카테고리의 다른 글
【국가암호공모전】 (II-A 분야) 문제 06 - 1부 (2016) (3) | 2016.08.15 |
---|---|
【국가암호공모전】 (II-A 분야) 문제 05 (2016) (5) | 2016.08.14 |
【국가암호공모전】 (II-A 분야) 문제 04 (2016) (10) | 2016.08.14 |
【국가암호공모전】 (II-A 분야) 문제 03 (2016) (0) | 2016.08.13 |
【국가암호공모전】 (II-A 분야) 문제 02 (2016) (0) | 2016.08.13 |
최근댓글