Ⅰ. 서론
블록 암호의 안전성 분석 기법은 차분 공격〔2〕 등과 같이 알고리즘 자체의 이론적인 취약점을 이용하는 기법과, 부채널 공격(side channel attack) 등과 같이 암호 시스템의 실질적인 구현 과정에서 얻어지는 정보들을 이용하는 기법으로 분류된다.
부채널 공격은 암호 알고리즘을 구현하였을 때 발생하는 연산 시간, 전력, 전자기파, 오류 등의 부가적인 정보를 이용하는 공격 방법으로서 , 오류 주입 공격(fault attack), 시차 공격 (timing attack), 전력분석 공격 (power attack) 등이 있다. 최초의 부 채널 공격은 시차 공격으로서 Kocher에 의해 공개키 암호의 분석 방법으로 제안되었다〔7〕. 이 공격은 큰 수의 지수승 연산 시 지수의 비트가 1 인 경우 곱셈이 수행되고 0인 경우 곱셈이 수행되지 않아 발생하는 시간의 차이를 이용하여 비트의 값을 추측하는 공격 기법이다. 이 시차 공격이 제안된 이후 전력 분석 공격, 오류 주입 공격 등의 다양한 기법들이 제안되었다.
오류 주입 공격〔4〕은 공격 대상 알고리즘에 전력변화, 강제 클럭킹 등을 이용하여 오류를 발생시키고 이를 이용하여 키 정보를 얻는 공격 기법이匸卜. 이 공격은 공격자의 능력과 발생하는 오류의 유형에 따라 일시적 (transient) 오류 주입 공격과 영구적(per manent) 오류 주입 공격으로 나뉜다. 일시적 오류주입 공격에서는 알고리즘 수행 시 순간적인 클록 값 변경 혹은 불규칙적인 전력 공급 등을 이용하여 특정 지점에서만 오류가 발생한다. 따라서 이 오류는 한시적으로만 공격 대상 알고리즘에 영향을 준다. 이와 달리, 영구적 오류 주입 공격에서는 알고리즘 수행 전에 레지스터 값을 특정한 값으로 고정하거나 레지스터를파괴함으로서 영구적인 오류를 발생시킨다. 따라서 이오류는 계속 공격 대상 알고리즘에 영향을 준다. 이 공격 기법은 단순히 암호 연산 시 발생하는 시간을 체크하는 시간 공격이나 전력을 체크하는 전력 분석 공격 보다는 좀 더 능동적인 공격 형태이다.
1997년 Biham과 Shamir는 오류 주입 공격을대칭키 암호 시스템에 최초로 적용하여 블록 암호 DES를 분석하였다〔3〕. 차분 오류 공격 (differen- tial fault attack, DFA)라 불리는 이 공격은 기존의 차분 공격을 오류 주입 공격 에 결합하여 DES 뿐만 아니라 AES, Triple- DES, ARIA 등 대부분의 블록 암호에 적용되었다〔5, 6, 10〕. 하지만 블록 암호에 대한 차분 오류 분석의 관건은 공격 가정의 현실성과공격 복잡도이다. 공격 가정의 현실성은 어떻게 공격가정을 보다 현실에 맞게 가정의 조건을 약화시킬 수 있는 것인가의 문제이고. 공격 복잡도 문제는, 만약 복구하려는 키 길이가 s라면, 공격에 필요한 복잡도를 얼마나 2。보다 적게 할 수 있을 것인가의 문제이다.
블록 암호 SEED는 국내에서 개발된 1(5-라운드 Feistel 구조를 갖는 128-비트 블록 암호로서, AES, Camellia와 더불어 ISO/IEC 표준 블록 암호이다 〔8, 9〕. 기제안된 SEED에 대한 이론적인 공격은 7- 라운드 축소된 버전에 대한 차분 공격이 유일하고, 이 공격의 공격 복잡도는『〃이다〔12〕.
SEED의 DFA에 대한 안전성은 2004년에 처음제안되었다 〔1, 13〕. 이 공격은 라운드 16의 왼쪽 64- 비트 입력값에 오류를 주입하여 모두 0이나 혹은 공격자가 알고 있는 값으로 강제로 초기화하여 나오는 결과값으로부터 라운드 16의 라운드 키를 찾아내는 공격이다.
본 논문에서는 [1, 13〕에서 제안된 공격과 달리. 특정 레지스터에 일시적인 1-비트 오류를 주입한다는 가정을 이용한다. 즉. SEED의 라운드 함수 /의 내부함수 G 함수가 반복 수행하도록 설계된 경우, 라운드 16의 마지막 G 함수의 입력 레지스터에 1-비트 랜덤 오류를 발생시킨다. 二L 결고h 평균 15개의 오류를 주입하면 리운드 16의 라운드 키를 간단한 산술 연산 2'契번으로 복구할 수 있음을 보인다. 이 공격을 이용하여, 일반적인 PC 환경에서 수 초 내에 키를 찾을 수 있다. 또한 라운드 15에 같은 방법을 적용한다면, 마스터 키를 약 30개의 오류 주입으로 수 초 내에 찾을 수 있다.
본 논문은 다음과 같이 구성되어 있다. 먼저 , 2장에서는 블록 암호 SEED의 구조를 소개한다. 3장에서는 라운드 16의 특정 레지스터에 1-비트 오류 주입을 가정한 DFA를 제안한 후, 4장에서 라운드 키로부터 마스터 키를 복구하는 방법을 제안한다. 마지막으로 5 장에서 결론을 맺는다.
Ⅱ. 블록 암호 SEED
128-비트 블록 암호 SEED는〔그림 1〕과 같이 128 -비트 마스터 키를 사용하고 16-라운드 Feiste「구조를 갖는다. 128-비트 평문 P를 (爲, 矽, 라운드 /의 라운드 키를 缶라고 한다면(4顶)는 라운드 «의 출력값이다. 그러면 암호문은 라운드 16의 출력값인 (知石引이 된다, 여기서 L.. % RK.는 64 비트이다. 또한. 각각의 64-비트 값은 다음과 같이 2개의 32-비트 값으로 표기한다.
#
[그림 1] SEED 전체 구조도
SEED의 라운드 함수 F는〔그림 2〕와 같이 64-비트의 입출력을 갖는 함수로 변형된 3-라운드 MISTY 구조이다. 라운드 함수 _八세 사용된 G 함수는〔그림 3〕과 같은 32-비트의 입출력을 갖는 함수로 차분 및 선형 공격의 측면에서 좋은 특성을 지닌 함수이고, 라운드 키가 사용되지 않는다. 여기서 덧셈은 법 2與에서의 덧 셈을 의 미 한다. 또한, G 함수는 다음과 같이 표기된다.
#
〔그림 2〕라운드 함수 F
(그림 3) G 함수
여기서 SL은 4개의 8-비트 값 ㈤冬&.写)를 병렬적으로 S-box 연산을 하는 것이고, 2개의 S-box 51과 52가 사용된다. 그리고 应은 diffusion layer 로서 32X32 이진 행렬이다.
SEED의 키스케줄은〔그림 4〕와 같이 128-비트를 64 비트씩 나누어 이들을 교비밀키대로 8-비트 로테이션 연산을 수행한 후, 결과의 4 워드들에 대한 간단한 산술 연산과 G 함수를 적용하여 라운드 키를 생성한다. 먼저, 4斗 "牛 덧셈 연산 후 다시 각 라운드 상수 /“와 다시 뺄셈 연산 후 G 함수 출력으로 처음 32-비트 라운드 키를 생성하고, 5와 D 가 뺄셈 연산 후 라운드 상수 KC와 덧셈 연산 한 후 G 함수 출력으로 다음 32-비트 라운드 키를 생성한다. 또한 각 32■비트 레지스터 4 6: D는 홀수 라운드에서는 앞의 A, B 부분이 묶여서 8-비트 로테이션 연산을 수행하고, 짝수 라운드에서는 C, D 부분이 묶여서 8-비트 로테이션 연산이 수행된다.
〔그림 4) 키스케줄
Ⅲ. SEED에 대한 DFA
본 절에서는 SEED에 대한 DFA를 소개한다. 우선 라운드 16의 특정 레지스터에 오류 주입을 가정한 후, 라운드 16의 라운드 키를 복구하는 방법을 소개한다.
3.1 오류 주입 가정
블록 암호에 대한 DFA의 일반적인 공격 가정은 특정 레지스터에 오류를 주입하는 것이다. Feistel 구조를 갖는 블록 암호의 경우, 마지막 라운드의 입력레지스터에 오류를 주입한다. 그래서 오류가 발생하지 않은 알고리즘을 이용하여 얻은 결과값과 오류가 발생한 알고리즘을 이용하여 얻은 결과값의 차분을 이용하여, 오류가 주입된 active S-박스의 위치를 찾아서 해당 active S-box에 관여한 부분키의 후보를 찾는다. 이 과정을 반복 수행하여 가능한 라운드 키의 후보를 최대한 줄인 후 라운드 키를 복구한다.
SEED의 라운드 함수 F의 구조는 라운드 함수 내에 G 함수가 3회 반복되는 구조이다. 이러한 구조를 갖는 블록 암호를 하드웨어 등으로 구현하는 경우 라운드 함수 F를 한 번에 구현하기에는 무리가 따르므로, 라운드 함수 내의 G 함수만을 구현하여 반복적으로 수행하도록 설계한다. 따라서 일반적인 블록 암호에서 라운드 함수의 입력 레지스터에 오류를 주입하는가 정과 마찬가지로, SEED의 경우 G 함수의 입력 레지스터에 오류를 주입하는 가정은 현실적으로 가능하다. 본 논문에서는 라운드 16의 라운드 함수에서 3번의 G 함수 입력 중 마지막 G 함수의 입력 레지스터에 「비트 오류를 주입하는 것을 가정한다.
3.2 라운드 16의 라운드 키 복구 방법
오류 발생 여부에 따라 평문.암호문 쌍을 다음과 같이 표기한다 여기서, q = (Q, pQ1). 弓 =(牝匕"으로 표기한다.
®(P.6): 오류가 발생하지 않은 알고리즘을 이용하여 얻은 평문■암호문 쌍 (c=(gc, )).
® *©: s번째 오류가 발생한 알고리즘을 이용하여 얻은 평문.암호문 쌍
모든 顼에 대한 라운드 16의 라운드 함수 月의 입력값은 〔그림 1〕에 의해 애, = 弓이고 0의 값만 오류에 의해 달라진다. 라운드 16의 라운드 함수 F는 〔그림 5〕와 같다. 여기서 a는 ii번째 오류를 의미한다. 즉, Z번째 오류 주입 후 3번째 G 함수의 입력값 = 이다. 오류가 발생하지 않은 3번째 G 함수의 출력값은 6旗①厶火이고, 오류 4가 발생하였을 경우의 출력값은 Q" 9亙J火이다. 이 두 값으로부터 厶3, 1의 실제 값은 모르지만 두 출력값의 차분。《는 다음과 같다.
〔그림 5) 라운드 16의 오류 주입
#
G(X)= 应。SZ(X)에서 DI「'는 선형이므로, 라운드 16의 마지막 G 함수의 출력 차분 /를 이용하여 3" =e打3挪, 此') = D"시')는 쉽게 계산된다. 또한 1-비트 오류가 발생한다고 가정했으므로, 32-비트 伊중 한 바이트만 0이 아니고 나머지 세 바이트는 0이 될 것이다. 이는 S-box의 출력 차분을 알 수 있음을 의미하고, ()이 아닌 입력 차분 바이트는 한 비트만 1 임을 의미한다. 따라서 S-box의이므로 차분 테이블을 다음과 같이 미리 선계산 하면 쉽게 X 의 후보를 찾을 수 있다. 여기서 입력 차분 ID는 8개이고 출력 차분 OD는 255개이다. SEED의 S-box 설계 특성에 의해 각 테이블의 원소의 개수는 0, 2, 4 중 하나이다. 또한 하나의 ID에 대해, 원소의 개수가 ()개인 것이 128개 존재하고 2인 것이 126개. 4인 것이 1개 존재한다.
#
따라서 평균적으로 1 개의 후보가 나온다고 볼 수 있고, ID가 8개 가능하므로 평균 8개의 후보가 존재한다. 이는 하나의 오류를 통해 %의 값 중 한 바이트의 값의 후보를 평균 8개 얻을 수 있음을 의 미한다. 그러나 이 8개의 후보 중 어느 것이 정확한 값인지는 하나의 오류를 통해서는 알 수 없다. 하지만 오류를 더 주입하여 같은 바이트의 다른 위치에 오류가 발생시킨다면 이 오류에 대한 %의 한 바이트의 후보와 이 전 후보 중 겹치는 것은 거의 유일하므로 정확한 값을 얻을 수 있게 된다. 실험 결과. 8 〜20개의 오류를 이용하면 一槓의 값을 거의 유일하게 결정할 수 있는 것으로나타났디-.
冷는 앞에서 복구한 X, 와 덧셈-X()R. 차분의 특성을 이용하면 구할 수 있다. 오류가 발생하지 않았을 경우 라운드 16의 왼쪽 32-비트 출력값은 이고. 오류 &가 발생하였을 경우의 출력값은 ®£liV„ 이다. 따라서 라운드 16의 왼쪽 32-비트 출력값의 XOR 차분 以는 다음과 같다.
#
또한 앞서 구한 弋을 이용하면 z15J =axjeQ.! 이므로 다음과 같이 쉽 게 계산된다. GUJ의 값을, 라고 하면. 4에 의해 마지막 G 함수의 출력값은 陆6旗9适幻가 된다. 이를 이용하여 식 ⑴을 얻을 수 있다.
#(1)
식 (1)은 덧셈과 XOR의 결합에서 발생하는 차 분식을 나타낸 것이다. 이에 대한 연구는〔11〕에 잘 정리되어 있다.〔11〕의 표기법을 사용하여 식 (1)이 성립할 확률을 Dp-(^..cLA®qj 一町로 표기한다. 주어진 t, 推q/sc% , 에 대해 만족하는 兀의 후보를 계산할 수 있다. 가능한 亳의 후보는 哗개이므로 하나의 오류에 대해 만족하는 후보를 간단한 산술 연산으로 구할 수 있다. 그러나 각각의 에 대해 식 (1)이 성립하는 %의 후보의 개.수兰 —w) 의확률에 따라 많이 존재할 수 있다. 二〔러므로 다른 오류를 이용하여 후보의 개수를 더 줄일 수 있다. 실험 결과. &개의 오류를 사용하면 평균 4개(최소 2개. 최대 32개)의 후보를 얻을 수 있는 것으로 나타났다.
위의 방법을 통해 槓를 계산한 후. L^(s =G(Xj도 쉽게 계산 가능하다. 라운드 負의 라운드 키 洒如을 식 (2)와 식 (3)에 의해 순차적으로 구할 수 있다.
#(2)
#(3)
위에서 설명한 SEED에 대한 DFA의 공격 과정을 요약하면 다음과 같다.
1. 〔오류가 발생하지 않은 데이터 수집〕오류가 발생하지 않은 알고리즘을 이용하여 평문。에 대한 임호문 (7=(G, 이)을 얻는다.
2. 〔오류가 발생한 데이터 수집〕라운드 16의 3번째 G 함수의 입력 레지스터에 1-비트 오류 a를 n 번 주입한 후, 해당 오류에 대한 암호문 C" = (以아J를 얻는다 (j=l<-, n).
3. 〔X;의 후보값 저장〕S-box의 입출력 차분 테이블을 이용하여 X]의 후보값들을 저장한다.
4. 〔关의 후보값 저장〕식 ⑴을 이용하여 &의 후보 값들을 계산하고 저장한다.
5. 〔라운드 키 用上의 후보 찾기〕단계 3과 4를 통해 얻은 후보 x=CW세 대해, 식 ⑵와 식 (3)을 이용하여 砂°의 후보값들을 계산한다.
3.3 필요한 오류 주입 수 및 계산 복잡도 분석
단계 1과 단계 2는 데이터 수집 단계이므로 필요한 계산량은 거의 없다. 단계 3에서 X、을 유일하게 복구하려면, 라운드 16의 3번째 G 함수에서 4개의 S-box 가 서로 다르게 최소한 2번 이상 active가 되도록 오류가 발생해야만 한다. 만약 공격자가 오류의 위치를 지정할 수 있다면. 8번의 오류 주입으로 X]의 값을 거의 유일하게 결정할 수 있다. 하지만 랜덤한 위치에 오류가 주입된다면 같은 비트에 오류가 발생할 수도 있고, 4개의 S-box 중 한 곳에 몰릴 수도 있으므로더 많은 수의 오류가 주입되어야 할 것이다.
실험 결과. 평균 15개의 오류가 주입되었을 경우 모든 S-box가 서로 디-르게 2번 이상 active가 되는 것으로 니타났다. 단계 3에서는 牛box의 입력 차분에대한 출력 차분 테이블을 미리 구성할 수 있으므로 무시할 정도의 계산량으로 Xf을 복구할 수 있다.
단계 4는 단계 3에서 얻은 X;의 후보에 대해 모든 가능한 产개의 X。에 대한 간단한 산술 연산을 통해 후보 데이터를 얻을 수 있다. 이는 일반 PC에서 수 초 내에 결과를 얻을 수 있고, 단계 3에서와는 달리 덧셈과 XOR의 차분 특성으로 인해 2 〜 3깨의 후-보가 존재한다. 실험 결과. 평균 4개의 후보가 발생하는 것으로 나타났다.
단계 3과 단계 4에서 얻은 후보들(평균 4개)에 대해 식 (2)와 식 (3)을 이용하면 쉽게 같은 개수의 7?缶°의 후보를 계산할 수 있다.
Ⅳ. 라운드 키로부터 마스터 키 복구 방법
앞 절에서 소개한 방법을 이용하여 라운드 16의 라운드 키 RKw = {RKwfi, RKWA)2] 값을 복구한 후, 동일한 방법을 라운드 15에 적용하면 같은 계산 복잡도로 라운드 15의 라운드 키 RKj =(必项<"法]“ )을 복구할 수 있다. 두 라운드의 라운드 키를 구한 후, SEED의 키스케줄 특성을 이용하여 쉽게 마스터 키를 복구할 수 있다.
SEED의 키스케줄에서, 마스터 키는 최초 4개의 32-비트 레지스터(43, U力)에 입력된 후 16개의 라운드 키가 생성된 뒤 최초의 상태로 복원된다 (〔그림 4] 참조). 만약 라운드 16의 라운드 키를 생성하기 전의 (』, 3&力)의 값을 찾으면, 마스터 키 人는 레지스터 C 와。의 값을 8■비트 로테이션 연산으로 쉽게 계산이 가능하다. 즉, K=4闭代 에/.
따라서 라운드 15, 16의 라운드키 RK璀 =(W150.W15.1) 와 砰疽 (RK^jRK^)는 다음과 같이 계산된다. 여기서 K%와 砒"는 32-비트 상수이고 4传' = UllB)<s 이다.
#
Z와 g를 레지스터 C와 力의 후보라고 한다면, 와 y 에 대한 레지스터』와 B의 후보는 다음과 같이 계산된다.
#
위의 식에서』'S)의 상위 24 비트는 出0)의 하위 24 비트와 같고 3'Cr)의 상위 24 비트는 3伝)의 하위 24 비트와 같으므로 식 (4)와 식 (5)가 성립된다.
#(4)
#(5)
각각의 工의 후보에 대해, 식 (4)의 판별식으로 약 2$개의 후보를 얻을 수 있다. 마찬가지로 식 (5)의 판별식으로 약 28개의 후보를 얻을 수 있다. 총 以"개의후보는 4'의 하위 8 비트와 B의 상위 8 비트가 같고 A 의 상위 8 비트와 B'의 하위 8 비트가 같다는 성질을 이용하면 쉽게 판별이 가능하므로 마스터 키의 복구가 가능하다. 이러한 마스터 키의 복구는 0와, 의 값을 독립적으로 수행 가능하므로 약 232번의 산술 연산을 2 회 수행하는 복잡도로 공격이 가능하다. 이는 일반적인 PC에서 수 초 내에 계산 7}능한 복잡도이다.
Ⅴ. 결론
본 논문에서는 SEED에 대한 DFA를 제안하였다. 본 논문에서 제안한 공격을 이용하여 라운드 16과 라운드 15의 3번째 G 함수의 입력 레지스터에 1-비트 오류를 약 30번 주입하여 마스터 키를 수 초 내에 복구할 수 있음을 보였다. 본 공격을 보다 일반화하여 첫 번째. 두 번째 G 함수의 입력 레지스터에 오류를 주입하거나, 라운드 함수의 입력 레지스터에 오류를 주입할 경우에 대한 분석 및 1-바이트 오류 주입에 대한 분석은 향후 연구 과제이다.
* 이 논문은 2010년도 정부(교과부)의 재원으로 한국연구재 단의 지원을 받아 수행된 연구임(No. 2010-0000261).
References
- 하재철, 김창균, 문상재, 박일환, "SEED에 대한 오류 분석 공격", 한국정보보호학회 동계정보보호학술대회 논문집(CISC-W'04), pp. 39-44, 2004년 12월.
- E. Biham and A. Shamir, "Differential Cryptanalysis of DES-like Cryptosystem," Journal of Cryptology, Vol. 4, No.1, pp. 3-72, Springer-Verlag, Jan. 1991. https://doi.org/10.1007/BF00630563
- E. Biham and A. Shamir, "Differential Faut Analysis of Secret Key Cryptosystems," Crypto'97, LNCS 1294, pp. 513-525, Springer-Verlag, 1997.
- D. Boneh, R. DeMillio and R. Lipton, "On the importance of checking cryptographic protocols for faults," Eurocrypt'97, LNCS 1233, pp. 37-51, Springer-Verlag, 1997.
- P. Dusart, G. Letourneux, and O. Vivolo, "Differntial Fault Attack on AES," ACNS'03, LNCS 2846, pp. 293-306, Springer-Verlag, 2003.
- L. Hemme, ''A Differential Faut Aanalysis against Early Rounds of (Triple)-DES," CHES'04, LNCS 3156, pp. 254-267, Springer- Verlag, 2004.
- P. Kocher, "Timing attacks on implementation of Diffie-Hellman." Crypto'96, LNCS 1109, pp. 104-113, Springer-Verlag, 1996.
- Korea Information Security Agencry, "A Design and Analysis of 128-bit Symmetric Block Cipher SEED," 1999. Available at http://www.kisa.or.kr/kisa/seed/jsp/seed_1010.jsp
- ISO/IEC 18033-3, "Information technology-Security techniques-Encryption algorithms - Part 3: Block Ciphers," 2005.
- W. Li, D. Gu, and J. Li, "Differential Fault Analysis on the ARIA Algorithm," Information Science, Vol. 178, Issue. 19, pp. 3727-3737, Elsevier, 2008. https://doi.org/10.1016/j.ins.2008.05.031
- H. Lipmaa and S. Moriai, "Efficient Algorithms for Computing Differential Properties of Addition." FSE'01, LNCS 2355, pp. 336-350, Springer-Verlag, 2002.
- H. Yanami and T. Shimoyama, "Differential Cryptanalysis of a Reduced-Round SEED," SCN'02, LNCS 2576, pp. 186-198, Springer-Verlag, 2002.
- H. Yoo, C. Kim, J. Ha, S. Moon, and I. Park, "Side Channel Cryptanalysis on SEED," WISA'04, LNCS 3325, pp. Springer-Verlag, 2004.