I. 서론
GSM(Global System for Mobile communication)[5]은 유럽 국가를 기준으로 하여 중국, 러시아, 인도 등 전 세계적으로 널리 채택되어 2004년 세계 이동통신 가입자 중 70% 이상이 사용하는 이동통신 방식이다. GSM에서는 보안을 위한 여러 가지 암호 알고리즘이 사용되고 있는데, 크게 데이터를 암호화할 때 사용되는 A5 암호 알고리즘, A3 인증 알고리즘, A8 세션키 생성 알고리즘의 세 부분으로 구성된다. 데이터를 암호화하는데 사용되는 A5 알고리즘은 스트림 암호 A5/1, A5/2, A5/3가 있다. A5/1은 OECD에 가입된 유럽 국가에만 사용되는 알고리즘이고, A5/2는 OECD에 가입되지 않은 국가에서 사용되는 알고리즘이다. 현재까지, 다양한 분석 기법을 이용한 A5/1, A5/2에 대한 분석 논문들이 발표되면서, 보다 강한 암호 알고리즘의 필요성이 대두되었다[2,3]. 이에 블록 암호 KASUMI[7]를 기반으로 하는 스트림 암호 A5/3가 개발되어 A5/1, A5/2를 대신하여 사용되고 있다.
최근 블록 암호의 안전성 분석 기법 중 하나로서, 암호 시스템의 실질적인 구현 과정에서 얻어지는 정보들을 이용하는 기법인 부채널 공격(side channel attack)에 대한 연구가 활발히 진행 중이다. 부채널공격은 암호 알고리즘을 구현하였을 때 발생하는 연산 시간, 전력, 전자기파, 오류 등의 부가적인 정보를 이용하는 공격 방법으로서, 오류 주입 공격(fault attack), 시차 공격(timing attack), 전력 분석 공격(power attack) 등이 있다. 최초의 부채널 공격은 시차 공격으로서 Kocher에 의해 공개키 암호의 분석 방법으로 제안되었다[6]. 이 공격이 제안된 이후 전력 분석 공격, 오류 주입 공격 등의 다양한 기법들이 제안되었다.
한편, FDTC'05[4]와 CISC-W'10[1]에서는 오류 주입을 통하여 타깃 알고리즘의 라운드 수를 감소시킴으로써 AES와 Triple-DES의 비밀키를 각각 찾을 수 있음을 보였다. 이 공격의 오류 주입 가정은 “for”문과 같은 반복문에 오류를 주입하여 타깃 알고리즘의 라운드 수를 1(AES), 15(Triple-DES)로 감소시킨다는 것이다. [4]에서는 “for”문과 같은 반복문에 오류를 주입하여 라운드 수를 감소시킴으로써 AES의 비밀키를 복구하는 공격을 제안하였다. 이 공격에서는 오류 주입을 통하여 AES를 1 라운드만을 수행시킨 뒤, 라운드 1의 출력값을 암호문으로 출력한다. 이를 통해 라운드 1의 라운드 키를 복구함으로써, AES의 비밀키를 복구할 수 있다. [1]에서는 [4]에서 제안된 공격 아이디어를 Triple-DES에 적용하였다. 오류 주입을 이용하여 Triple-DES에서 동작하는 세 개의 DES 중 타깃 DES를 15 라운드만을 수행하도록 한 후, 라운드 16의 라운드 키를 복구하였다. 그 결과, 9개의 오류를 주입하여 224의 계산 복잡도로 Triple-DES의 192-비트 비밀키를 복구할 수 있다.
본 논문에서는 [1,4]의 공격 아이디어를 스트림 암호 A5/3에 적용하여 세션키를 복구할 수 있음을 보인다. 본 논문에서 제안하는 공격은 기지 평문 공격 가정 하에서 수행되며, 오류 주입을 통하여 A5/3를 구성하고 있는 블록 암호 KASUMI의 라운드 수를 감소시킨다고 가정한다. A5/3에서 사용되는 세션키의 길이는 64∼ 128비트이며, 본 논문에서는 64-비트세션키를 사용하는 A5/3(A5/3-64)와 128-비트 세션키를 사용하는 A5/3(A5/3-128)에 대한 오류 주입공격을 소개한다. 본 논문에서 제안하는 공격의 공격결과는 [표 1]과 같다. 이 공격은 적은 수의 오류 주입을 이용하여 A5/3의 세션키를 복구할 수 있다. 본 공격 결과는 A5/3에 대한 첫 번째 키 복구 공격 결과이다.
[표 1] A5/3에 대한 오류 주입 공격 결과
본 논문은 다음과 같이 구성되어 있다. 먼저, 2장에서는 스트림 암호 A5/3에 대해 간략히 소개한다. 64/128-비트 세션키를 사용하는 A5/3에 대한 오류주입 공격은 각각 3장과 4장에서 제안된다. 마지막으로 5장에서 결론을 맺는다.
II. 스트림 암호 A5/3
GSM에서는 사용자 데이터의 기밀성을 보장하기 위하여 A5 암호 알고리즘이 사용되고 있다. GSM 초기 버전에의 A5 암호 알고리즘으로 A5/1 스트림 암호, A5/2 스트림 암호가 포함되어 있었다. 하지만 A5/1, A5/2에 대한 많은 분석 결과들이 발표되면서 GSM에 사용될 강화된 암호 알고리즘의 필요성이 대두되었다. 이에 ETSI의 SAGE(Security Algorithm Group of Experts)는 새로운 표준 암호화 알고리즘 A5/3를 개발하였다. 스트림 암호 A5/3는 블록 암호 KASUMI와 이를 기반으로 구성되는 스트림 암호 KGCORE로 구성된다.
2.1 블록 암호 KASUMI
SAGE는 KASUMI를 개발하기 위하여, 아주 새로운 블록 암호를 개발하기 보다 기제안된 블록 암호인 MISTY를 이용하여 하드웨어 구현에 적합하도록 약간의 수정을 하는 방법을 사용하였다. KASUMI와 MISTY는 매우 유사한 구조를 가지기 때문에 상호간의 분석 결과를 쉽게 적용 가능한 특성을 보인다.
KASUMI는 [그림 1]-(a)와 같이64-비트 데이터와128-비트 비밀키를 사용하는 블록 암호로서, 8-라운드 Feistel 구조를 갖는다. 즉, 64-비트 평문 P=L0||R0를 입력 받아 다음과 같이 8번의 라운드 함수를 반복적으로 수행한다. 여기서, fi는 라운드 i의 라운드 함수이고, RKi는 라운드i의 라운드 키(Kli, KOi, KIi)로 구성된다.
∙Ri=Li-1.
#
[그림 1] (a) KASUMI (b) FO 함수 (c) FI 함수 (d) FL 함수
라운드 함수 fi는 32비트 입력값 I와 128-비트 라운드 키를 입력 받아 32-비트 값을 출력하며, 다음과 같이 비선형 함수인 FO 함수와 선형 함수인 FL 함수로 구성된다 (i=1,3,5,7, j=2,4,6,8).
∙fi(I,RKi)=FO(FL(I,KLi),KOi,KIi).
∙fj(I,RKj)=FL(FO(I,KOj,KIj),KLj)
FL 함수는 32-비트 입력값 I=L||R과 3-비트 서브 라운드 키 KLi=KLi,1||KLi,2를 입력 받아 32-비트값을 출력하는 선형 함수로서, 다음과 같이 정의된다([그림 1]-(d) 참조). 여기서, ROL()은 1-비트 좌측순환 이동 연산이고, ‘∩’은 비트별 논리곱이며 ‘∪’은 비트별 논리합이다. 최종적으로, FL 함수는 L′||R′을 출력한다.
#
#
FO 함수는 32-비트 입력값 I=L0||R0와 48-비트서브 라운드 키 KOi=KOi,1||KOi,2||KOi,3와 48-비트서브 라운드 키 KIi=KIi,1||KIi,2||KIi,3를 입력 받아 32-비트 값을 출력하는 비선형 함수로서, 16-비트 입·출력을 갖는 비선형 함수 FI로 구성된다 ([그림 1]-(b) 참조). 1≤j≤3에 대하여, FO 함수는 다음을 계산한 후 L3||R3을 출력한다.
#
∙Lj=Rj-1.
FI 함수는 16-비트 입력값 I=L0||R0와 16-비트 서브 라운드 키 KIi,j=KIi,j,1||KIi,j,2를 입력 받아 16-비트 값을 출력한다. 이 함수는 두 개의 S-box S7,S9를 이용한 4-라운드 구조를 가지며, 다음과 같은 과정을 수행한다 ([그림 1]-(c) 참조). 여기서, TR()은 9-비트 입력값 중 최상위 2 비트를 버리는 함수이고, ZE()는 7-비트 입력값의 최상위 2 비트에 0을 추가하여 9비트로 확장하는 함수이다. 최종적으로, FI 함수는L4||R4를 출력한다.
∙L1=R0.
#
∙L3=R2.
#
#
#
#
∙R4=R3.
KASUMI의 키스케줄은 128-비트 비밀키 K=K1||K2||⋯||K8을 입력 받아 (128·8)-비트 라운드키를 생성한다. 이를 위해 K1′,⋯,K8′을 다음과 같이 계산한다: #. 여기서, 상수 Ci는 다음과 같다.
∙C1=0x0123, C2=0x4567.
∙C3=0x89AB, C4=0xCDEF.
∙C5=0xFEDC, C6=0xBA98.
∙C7=0x7654, C8=0x3210.
각 라운드 키는 [표 2]와 같이 계산된다.
[표 2] KASUMI 라운드 키
2.2 스트림 암호 KGCORE
A5/3의 데이터 프레임의 암호화를 위해 사용되는 스트림 암호 KGCORE는 [그림 2]와 같이 KASUMI를 기반으로 64-비트 피드백을 가지는 변형된 OFB 모드로 구성된다. KGCORE는 22-비트 COUNT와 세션키 CK를 입력 받아 64 비트 단위의 키스트림 수열을 출력한다. 여기서, 키 변형 상수 KM은 0x555⋯5이다. 세션키의 경우, GSM 표준에서 A8알고리즘을 통해 생성된 64-비트 세션키를 사용하지만, A5/3를 이용하기 위해 128 비트까지의 세션키를 사용하는 것도 허용된다.
[그림 2] 스트림 암호 KGCORE
III. A5/3-64에 대한 오류 주입 공격
본 절에서는 64-비트 세션키를 사용하는 A5/3-64에 대한 오류 주입 공격을 소개한다. A5/3-64의 경우, 64-비트 세션키를 128-비트 비밀키를 사용하는 KASUMI에 적용하기 위해 64-비트 세션키를 반복적용하여 128-비트 값으로 확장시킨다. 즉, KASUMI의 128-비트 비밀키 K(K1||K2||⋯||K8)는 (41||⋯||44||41||⋯||K4)가 된다. 본 논문에서 제안하는 공격은 기지 평문 공격 가정 하에서 수행된다. 즉, 공격자는 임의의 평문에 대한 암호문을 얻을 수 있어서 공격자가 원하는 만큼의 길이의 키스트림 수열을 얻을 수 있다고 가정한다.
3.1 오류 주입 가정
A5/3-64에 대한 오류 주입 공격은 [1,4]의 오류주입 가정을 A5/3-64를 구성하는 블록 암호 KASUMI에 적용하여 A5/3-64의 세션키를 복구한다. 즉, 첫 64-비트 키스트림 수열 (CO[0],⋯,CO[63])을 생성하는 KASUMI에 오류를 주입하여, 이 블록암호가 6 라운드만 수행하도록 한다 ([그림 3] 참조). 그러면 공격자는 기지 평문 공격 가정 하에서 KASUMI의 라운드 7, 8의 입·출력값을 알 수 있다 ([그림 1] 참조). 이 값들을 이용하여, 64-비트 세션키 CK를 복구한다.
[그림 3] A5/3-64에 대한 오류 주입 공격 모델
3.2 A5/3-64에 대한 오류 주입 공격
본 절에서 소개하는 공격은 1개의 오류 주입만을 이용하여 64-비트 세션키를 복구할 수 있다. 본 공격의 공격 과정은 다음과 같다.
1. 기지 평문 공격 가정 하에서, 임의의 22-비트COUNT에 대해 오류를 주입하지 않은 상태에서의 64-비트 키스트림 수열 (CO[0],⋯,CO[63])을 얻는다.
2. 오류를 주입한 KASUMI를 이용하여, 단계 1에서 선택된 COUNT에 대해 라운드 6의 출력값 C6를 계산한다. C6과 (CO[0],⋯,CO[63])를 이용하여, 라운드 7, 8의 입·출력값 ((I7,O7(,(I8,O8))을 계산한다.
3. 48-비트 라운드 키 (K2,K3,K4)를 추측한 후, 각각의 추측한 라운드 키에 대해 (I7,O7)을 이용하여 K1을 계산한다.
4. 후보 라운드 키 (K1,K2,K3,K4)와 (I7,O7)를 이용하여 라운드 7에서 첫 번째 FI 함수의 출력값이 옳게 계산되는지 확인한다. 틀리게 계산되는 후보 라운드 키는 버린다.
5. 단계 4를 통과한 후보 라운드 키 (K1,K2,K3,K4)와 I8을 이용하여 O8이 옳게 계산되는지 확인한다. 옳게 계산되는 후보 (K1,K2,K3,K4)를 옳은 64-비트 세션키로 출력한다.
단계 1과 단계 2에서는, 64-비트 키스트림 수열을 얻기 위해 약 2번의 KASUMI 암호화 연산이 각각 필요하다. 따라서 단계 1과 단계 2의 계산 복잡도는 각각 약 2, 1.75(≈1+6/8) KASUMI 암호화 연산이다.
단계 3에서는, 추측한 (K2,K3,K4)와 라운드 7의 입·출력값 (I7,O7)을 이용하여 세 번째 FI 함수 연산부분에서 사용되는 F1을 계산한다. [그림 4]-(a)는 단계 3을 나타낸 것이다. 그림에서 굵은 선으로 표기된 부분은 공격자가 라운드 키 추측 등을 통해 알고 있는 값을 나타낸 것이고, 점선으로 표기된 부분은 알고 있는 값들을 이용해서 추가적으로 공격자가 알 수 있는 값을 나타낸 것이다. F1은 세 번째 FI 함수 연산 부분에서 XOR 연산을 통해 사용되므로, 공격자는 추측한 라운드 키 (K2,K3,K4)마다 1개의 K1을 얻을 수 있다. 따라서 단계 3을 수행한 후의 후보 라운드키의 수는 248이다. 이 단계의 계산 복잡도는 약 244,36(≈248·1/8·9/14) KASUMI 암호화 연산이다.
[그림 4] A5/3-64에 대한 오류 주입 공격 (a) 단계 3 (b) 단계 4
[그림 4]-(b)는 단계 4를 나타낸 것이다. 단계 3으로부터 얻은 248개의 후보 라운드 키와 (I7,O7)를 이용하여 첫 번째 FI 함수 연산 부분의 출력값을 계산할 수 있다. 틀린 후보 라운드 키를 사용했다면, 이 값이 옳게 계산될 확률은 2-16이다. 따라서 단계 4를 통과하는 후보 라운드 키의 수는232(≈248·2-16)이다. 이 단계의 계산 복잡도는 약 244,51(≈248·1/8·10/14)KASUMI 암호화 연산이다.
마지막으로 단계 5에서는, 단계 4를 통과한 232개의 후보 라운드 키와 라운드 8의 입력값 I8을 이용하여 라운드 8의 출력값 O8이 옳게 계산되는지 확인한다. 후보 라운드 키가 단계 5를 통과할 확률은 2-64이므로, 단계 5를 통과하는 후보 라운드 키의 개수의 기댓값은 2-32(≈232·2-64)이다. 이는 틀린 후보 라운드키가 단계 5를 통과할 확률은 매우 적음을 의미한다. 이 단계의 계산 복잡도는 약 229(≈232·1/8)KASUMI 암호화 연산이다. 그러므로 본 절에서 소개한 A5/3-64에 대한 오류 주입 공격은 1개의 오류주입을 이용하여 약 245,44 KASUMI 암호화 연산의 계산 복잡도로 64비트 세션키를 복구할 수 있다.
IV. A5/3-128에 대한 오류 주입 공격
A5/3-128에 대한 오류 주입 공격은 A5/3-64에 대한 공격과 유사하다. 64-비트 세션키를 사용하는 A5/3-64는 세션키를 반복 적용하여 128-비트 값으로 확장시키지만, A5/3-128은 128-비트 세션키를 그대로 KASUMI의 128-비트 비밀키로 사용한다. 따라서 앞 절에서 소개한 공격 보다 더 많은 길이의 라운드 키를 추측해야하므로, 계산 복잡도가 증가한다.
A5/3-128에 대한 오류 주입 공격에서는, [그림 5]와 같이 첫 128-비트 키스트림 수열 (CO[0],⋯,CO[127])을 생성하는 두 개의 KASUMI에 오류를 주입하여, 각각의 블록 암호가 6 라운드만 수행하도록 한다. 이를 이용하여 기지 평문 공격 가정 하에서 라운드 7, 8의 입·출력값 #을 각각 얻을 수 있다. 이 값들을 이용하여 A5/3-128의 128-비트 세션키를 복구한다.
[그림 5] A5/3-128에 대한 오류 주입 공격 모델
앞에서 언급한 것처럼, 본 절에서 소개하는 공격은 앞 절에서 소개한 공격과 유사하기 때문에, 공격 과정과 복잡도만을 간략히 소개한다. A5/3-128에 대한 오류 주입 공격의 공격 과정은 다음과 같다.
1. 기지 평문 공격 가정 하에서, 임의의 2-비트 COUNT에 대해 오류를 주입하지 않은 상태에서의 128-비트 키스트림 수열 (CO[0],⋯,CO[127])을 얻는다.
2. 첫 번째 KASUMI에 오류를 주입하여, 단계 1에서 선택된 COUNT에 대해 라운드 6의 출력값 O6를 계산한다. 이를 이용하여, 라운드 7, 8의 입·출력값 #을 계산한다.
3. 두 번째 KASUMI에 오류를 주입하여, 단계 1에서 선택된 COUNT에 대해 라운드 6의 출력값 O6를 계산한다. 이를 이용하여, 라운드 7, 8의 입·출력값 #을 계산한다.
4. 64-비트 라운드 키 (K2,K4,K5,K7)을 추측한 후, 각각의 추측한 라운드 키에 대해 #을 이용하여 #을 계산한다.
5. 후보 라운드 키 (K2,K4,K5,K6,K7))과 #를 이용하여 단계 4에서 계산된 K6이 옳게 추측되었는지 확인한다. 틀리게 계산되는 후보 라운드키는 버린다.
6. 추가적으로 K8을 추측한 후, 단계 5를 통과한 후보 라운드 키와 #을 이용하여 (K1,K3)을 계산한다.
7. #를 이용하여 단계 6으로부터 계산된 후보 라운드 키 (K1,K2,K3,K4,K5,K6,K7,K8)을 검사한다. 틀린 후보 라운드 키는 버린다.
8. 단계 7을 통과한 후보 라운드 키와 #을 이용하여 #이 옳게 계산되는지 확인한다. 옳게 계산 되는 후보 (K1,K2,K3,K4,K5,K6,K7,K8)을 옳은 128-비트 세션키로 출력한다.
이 공격은 2번의 오류 주입을 이용하여 약 262,89KASUMI 암호화 연산의 계산 복잡도로 128-비트세션키를 복구할 수 있다. 틀린 후보 세션키가 단계 8을 통과할 확률은 2-32이다. 이는 틀린 후보 세션키가 A5/3-128에 대한 오류 주입 공격을 통과할 확률이 매우 적음을 의미한다.
V. 결론
본 논문에서는 A5/3에 대한 오류 주입 공격을 제안하였다. 본 논문에서는 64/128-비트 세션키를 사용하는 A5/3에 대해 각각 적용하였으며, 다른 길이의 세션키를 사용했을 경우에도 유사한 방식으로 분석이 될 것으로 예상된다. 본 논문에서 제안한 공격은 매우 적은 수의 오류 주입을 이용하여 A5/3의 세션키를 복구할 수 있으며, 본 논문에서 소개한 공격 결과는 A5/3에 대한 첫 번째 공격 결과이다.
참고문헌
- 최두식, 오두환, 배기석, 문상재, 하재철, "반복문 오류 주입을 이용한 Triple DES 차분 오류 공격", 2010년도 한국정보보호학회 동계학술대회, pp. 308-312, 2010년 12월.
- E. Barkan, E. Biham, and N. Keller, "Instant ciphertext-only cryptanalysis of GSM encrypted communications", CRYPTO' 03, LNCS 2729, pp. 600-616, 2003.
- E. Biham and O. Dunkelman, "Cryptanalysis of the A5/1 GSM Stream Cipher", Indocrypt'00, LNCS 1977, pp.43-51, 2000.
- H. Choukri and M. Tunstall, "Round Reduction Using Faults", Proceedings of the 2nd workshop on fault diagnosis and tolerance in cryptography - FDTC'05, pp. 13-24, Sept. 2005.
- European Telecommunications Standards Institute (ETSI), "Digital cellular telecommunications system (Phase 2+)". Available at http://www.etsi.org.
- P. Kocher, "Timing attacks on implementation of Diffie-Hellman", Crypto'96, LNCS 1109, pp. 104-113, 1996.
- 3GPP, "KASUMI Specification", http://www.3gpp.org/tb/other/algorithms.htm.