I. 서론
Asiacrypt 2012에서 제안된 경량 블록 암호 PRINCE[3]는 128-비트 비밀키를 사용하는 64-비트 블록 암호로써 하드웨어 구현에 적합하도록 설계되었다. FX 구조[2]로 되어있어서 암호화 프로세스의 키 변형을 통해 복호화를 수행할 수 있다. 이 특성을 α-reflection이라고 부르고, 이 특성은 암-복호화 구현에 효과적이다. 하지만, α-reflection 특성은 안전성 관점에서는 효과적이지 못하다. 이는 PRINCE 내에 강력한 연관키를 존재케 하는 성질을 제공하기 때문이다.
연관키 공격[1]은 블록 암호의 키를 컨트롤 할 수 있는 블록 암호기반 해쉬모드와 같은 응용환경에 대한 중요한 안전성 분석툴로 사용된다. 본 논문에서는 PRINCE의 α-reflection 특성을 사용한 강력한 새로운 연관키 공격에 대한 시나리오를 작성하고 그에 대한 안전성 분석을 한다. FSE 2013에 제안된 기존 가장 강력한 연관키 공격[4]은 233 데이터 복잡도, 264 시간 복잡도, 233 메모리 복잡도를 가지고 있다. 본 논문에서는 2 데이터 복잡도, 264 시간 복잡도, 2 메모리 복잡도를 가지고 PRINCE의 128-비트 키 전체를 복구하는 향상된 연관키 공격을 제안한다. Table 1.은 기존 가장 강력한 연관키 공격과 본 논문에서 제안한 새로운 연관키 공격에 대한 공격 복잡도를 나타낸다.
Table 1. Comparison of the previous FSE 2013 attack and ours on PRINCE
본 논문은 다음과 같이 구성되어 있다. 2장에서 블록 암호 PRINCE에 대한 구조를 소개한다. 3장에서는 PRINCE에 대한 기존 연관키 공격을 소개하고 4장에서 PRINCE에 대한 향상된 새로운 연관키 공격을 소개한다. 마지막으로 5장은 본 논문에 대한 결론을 맺는다.
II. PRINCE
64-비트 경량 블록 암호 PRINCE[3]는 128-비트 비밀키 k를 사용한다. PRINCE에 대한 소개 및 공격 과정에서는 다음과 같은 표기법을 사용한다.
○ P : 64-비트 평문
○ C : 64-비트 암호문
○ (k0,k1) : 128-비트 비밀키 k
○ ll : 연접
○ ⊕ : 배타적 논리합
○ ≫ : 쉬프트
○ ⋙ : 로테이션
PRINCE는 간단한 키스케줄을 통해 128-비트 키 k를 가지고 192-비트 키 (#)를 생성한다. 키 스케줄은 다음과 같다.
k=(k0llk1)->(k0llk0'llk1)=(k0llL(k0)llk1)
∵L(x)=(x⋙1)⊕(x≫63)
64-비트 서브키 k0, #는 입력 바로 직후와 출력 바로 전에 적용되고 k1는 PRINCEcore 내부에서 Fig.1.과 같이 적용된다. 이와 같은 구조를 FX 구조[2]라 한다.
Fig.1. Description of the PRINCE encryption
#
PRINCEcore는 SPN(Substitution-Permutation Network)구조이고 총 12 라운드로 이루어져 있다. 코어 함수 내부에서 사용되는 라운드 함수 Ri는 Fig.2.와 같다.
Fig.2. Description of the round function Ri
PRINCEcore의 암호화 과정은 6번의 Ri를 수행하고 선형 변환 SR-1 ∘ M′ ∘ SR를 수행한 후, 마지막으로 6번의 #를 수행한다. 여기서, SR는 4-비트 단위 쉬프트 함수이고 M′ 은 Involution 행렬이다. 라운드 함수 내부에서 사용되는 라운드 상수 RCi에 대한 성질은 다음과 같다.
모든 0 ≤ i ≤ 11에 대해,
RCi⊕RC11-i = α = 0xc0ac29b7c97c50dd.
이 성질과 Involution 구조인 행렬 M′에 의하여 α-reflection[4]이라고 불리는 특성이 발생한다. 본 논문에서 제안하는 공격은 PRINCEcore를 구성하는 라운드 상수 RCi의 값들과 S-box S, 쉬프트함수 SR, 그리고 행렬 M, M′에 구체적인 구성 성분에 대한 성질을 이용하지 않으므로 그들에 대한 설명을 생략하기로 한다. 본 논문에서 사용하는 핵심 특성인 α-reflection과 이 특성을 이용한 기존 연관키 공격 과정은 다음 장에서 소개한다.
III. FSE 2013에 제안된 PRINCE에 대한 연관키 공격[4]
α-reflection에 대한 개념을 소개하고 다음으로 이 특성을 이용한 기존 연관키 공격을 소개한다.
3.1 α-reflection 특성
PRINCEcore에서 사용되는 라운드 함수는 라운드 상수 RCi의 값들을 고려하지 않는다면 SR-1 ∘ M′∘ SR 부분을 기준으로 왼쪽 과정과 오른쪽 과정이 대칭적으로 진행된다. 그리고 함수 내부에 사용되는 행렬 M′은 Involution 구조이므로 RCi 값들의 차이를 고려하지 않는다면 전체적인 PRINCEcore의 암호화 과정과 복호화 과정이 정확히 같아진다. 이는 PRINCEcore에 대한 암호화 과정과 복호화 과정의 같은 위치에 있는 라운드 함수는 RCi와 RC11-i에 대한 고정된 차분 α 외의 차이점이 존재하지 않음을 의미한다. 이러한 차분 α는 연관 키에 대한 차분으로 상쇄 시킬 수 있다. 즉, k1⊕RCi = k1⊕(RC11-i ⊕α)=(k1⊕α)⊕RC11-i이므로 키 k1와 연관키 k1⊕α에 대한 PRINCEcore의 암호화 과정과 복호화 과정이 정확히 같아진다. 이는 PRINCEcore 에 대한 암호화 과정과 복호화 과정의 같은 위치에 있는 라운드 함수는 RCi 와 RC11-i에 대한 고정된 차분 α외의 차이점이 존재하지 않음을 의미한다. 이러한 차분 α는 연관키에 대한 차분으로 상쇄 시킬 수 있다. 즉, k1⊕RCi=k1⊕(RC11-i⊕a)=(k1⊕a)⊕RC11-i이므로 키 k1와 연관키 k1⊕a에 대한 PRINCEcore의 암호화 과정과 복호화 과정이 정확히 같아진다. 이를 α-reflection이라 부른다. Fig.3.은 위와 같은 상황에 대한 중간 과정(라운드 5, 6)을 나타낸다.
Fig.3. Intermediate step of PRINCEcore(k1,x) (above) Intermediate step of PRINCEcore-1(k1⊕a,x)(below)
3.2 a-reflection 특성을 이용한 기존 연관키 공격
연관키 공격은 다음과 같은 성질을 이용한다. 비밀키 k = (k0,k1)와 연관키 k′ = (k0,k1⊕α)에 대한 PRINCE 알고리즘이 있고 k에 대한 임의의 평문-암호문 쌍을 (P,C)라고 하고, k'에 대한 임의의 평문암호문 쌍을 (P',C′)라고 하자.
만약 P⊕C = k0⊕L(k0) 를 만족한다면, P⊕C′= k0⊕L(k0)를 만족한다. 즉,
○ 연 관 키 : k = (k0,k1)
k′ = (k0,k1⊕α)
○ 정 보 : C = PRINCE(P, k)
C′=PRINCE(P′, k′)
P′⊕C = x′⊕y⊕k0⊕L(k0)
P⊕C′= x⊕y′⊕k0⊕L(k0)
(x,x′ ,y,y′은 Fig.4. 참조)
Fig.4. Existing related-key attack[4] using the α-reflection property
○ 성 질 : 만약 P′⊕C = k0⊕L(k0)
⇒x′ = y이고
P⊕C′= k0⊕L(k0)이다.
위 성질은 α-reflection에 의해 발생한다. Fig.4. 에서 y = C⊕L(k0)→C = y⊕L(k0)이고 x′ = P′⊕k0→P′= x′⊕k0임으로 P′⊕C = x′⊕y⊕k0⊕L(k0)이다. 이와 같은 방법으로 P⊕C′= x⊕y′⊕k0⊕L(k0)이 성립한다. 만약 P′⊕C = k0⊕L(k0)을 만족한다면 x′ = y가 성립하고 α-reflection에 의해 x = y′임으로 P⊕C′= k0⊕L(k0)가 된다.
기존 연관키 공격은 키 k에 대한 232개의 평문-암호문 (P,C)쌍과 연관키 k′ 에 대한 232개의 평문-암호문 (P',C′)쌍을 요구한다. 위의 두 평문-암호문 쌍들에 대해서 생일 역설에 의해 x′ = y가 성립하는 평문-암호문 쌍이 높은 확률로 존재한다. 이와 같은 쌍을 찾기 위해 P⊕C = P′⊕C′을 체크한다. 만약 P⊕C = P'⊕C′이면 P'⊕C = P⊕C′= k0⊕L(k0)를 만족하는지에 대한 추가적인 검사 후 64-비트 k0를 복구한다. 마지막으로 64-비트 k1에 대해서는 전수조사를 통해 획득한다. 본 연관키 공격은 233 데이터, 264 시간, 233 메모리 복잡도로 128-비트 키 k를 찾아낸다(자세한 공격 과정은 [4]를 참조).
IV. PRINCE에 대한 향상된 새로운 연관키 공격
본 논문이 제안하는 PRINCE에 대한 공격은 특정 연관키 차분 공격이다. 먼저 복구할 키에 대한 알고리즘에 하나의 선택된 평문 P를 입력하고 그에 대한 암호문 C를 취득한다. 다음으로 취득한 암호문 C를 평문으로 연관키에 대한 암호화 알고리즘에 입력한 후 그에 대한 암호문 C ′을 취득한다. 해당 공격에서는 단 두 개의 평문-암호문 쌍을 취득하여 α-reflection 성질과 키 스케줄 특징을 사용하여 64-비트 키 k0를 복구한다. 64-비트 키 k1에 대해서는 전수조사를 시행한다. 결과적으로 128-비트 키 k를 복구하는데 64-비트 전수조사를 하여 찾아내는 공격이다.
4.1 공격 가정
공격자는 128-비트 키 k와 연관키 k′를 사용하는 두 개의 PRINCE 암호화 알고리즘을 가지고 있다. 공격자가 알고 있는 정보는 오직 연관키 사이의 관계뿐이다. 연관키는 다음의 관계를 갖는다.
#
4.2 공격 시나리오
1) 하나의 평문 P를 선택하고 k에 대한 P의 암호문 C를 획득한다.
2) 연관키 k′를 이용하여 C의 암호문 C′를 획득한다.
3) 현재 획득한 3가지 정보 P, C, C′에 대한 정보와 연관키 사이의 관계를 사용하여 64-비트 k0를 획득한다.
4) k0 획득 후, 64-비트 k1에 대한 전수조사를 수행한다.
k0를 획득하는 방법은 α-reflection 성질과 키스케줄에 사용되는 L 함수의 특징을 이용한다. 전체적인 공격 구성은 Fig.5.에 나와 있다. a, b, c, d는 중간 상태 값이다.
Fig.5. Configuration about Improved Related-key Attack against PRINCE
4.3 k0,k1 획득 과정
P 와 C'를 취득한 공격자는 추가적인 정보를 계산할 수 있다. 계산에 대한 원리를 설명하고, 다음으로 키 취득 과정을 설명한다.
4.3.1 k0에 대한 정보 획득
Fig.5.에서 b = C⊕L(k0) = c 이 성립하고 α-reflection 성질에 의해 a = d 가 성립한다. 또, P⊕k0 = a, C′⊕L2(k0)= d 가 성립하므로 P⊕k0 = C′⊕L2(k0)→P⊕C ′= k0⊕L2(k0 )이다. 여기에서 P⊕C′는 알고 있는 정보이고 L 함수는 알려진 로테이션 함수이므로 위의 두 정보와 L 함수의 특징을 사용하여 k0를 획득할 수 있다.
L 함수의 규칙성을 이용하여 k0를 찾아간다.
L(k0)=(k0⋙1)⊕(k0≫63)
xi를 k0의 i번째 비트라고 표기한다. 즉, k0 = (x63,x62,⋯,x1,x0) 이다. 그러면,
L2(k0) = L(L(k0))
= L((x0,x63,⋯,x2,x1)⊕(0,0,⋯,0,x63))
= L(x0,x63,⋯,x2,x1⊕x63) = (x1⊕x63,x0,⋯,x2)⊕(0,0,⋯,0,x0)
= (x1⊕x63,x0,x63,⋯,x3,x2⊕x0)
⇒ k0⊕L2(k0)
= (x63 , x62, x61, ⋯, x1, x0)⊕ (x1⊕x63, x0 , x63, ⋯, x3, x2⊕x0)
= (x1,x62⊕x0,x61⊕x63,⋯,x2⊕x4,x1⊕x3,x2)
이 성립한다.
P⊕C′으로부터 x1과 x2를 획득할 수 있고, 나머지 정보에 대해서는 홀수 번호에 대한 비트는 x1을 통하여, 짝수 번호에 대한 비트는 x2를 통하여 알 수 있다. k0의 비트열을 찾아가는 과정은 Fig.6.과 같다.
Fig.6. Our improved related-key attack on PRINCE
본 k0 획득과정에 대한 시간 복잡도는 매우 작다.
본 k0 획득 과정을 구현을 통하여 테스트 하였다. 테스트 환경은 운영체제 : Window 7 64비트, CPU : Intel(R) Core(TM) i7-2600 CPU @3.40GHZ, RAM : 4.00GB 이다. 테스트는 아래 과정을 모두 실행한 후의 소요된 clock 수를 측정하였다.
C = PRINCE(k0||k1,P) (1)
C′= PRINCE(L(k0)||k1⊕α,C) (2)
findkey = FIND(P⊕C′) (3)
findkey는 64-비트 k0를 의미하며 FIND 함수는 Fig.6. 과정을 진행한다. 위 과정을 독립적으로 100번 실행한 결과, 키 복구에 모두 성공하였고, 평균적으로 12.5의 clock 수를 가졌으며, 이는 약 0.012초의 시간을 의미한다.
4.3.2 k1에 대한 정보 획득
k1에 대한 정보는 전수 조사를 통하여 획득한다. 64-비트 k1을 획득하는데 소요되는 시간 복잡도는 264이다. 따라서, 본 연관키 공격은 2 데이터 복잡도, 264시간 복잡도, 2 메모리 복잡도로 128-비트 키 k를 찾아낸다.
V. 결론
본 논문에서는 블록 암호 PRINCE에 대한 기존에 제안된 연관키 공격[4]을 확장하여 강력한 새로운 연관키 공격을 제안하였다. 본 논문에서 제안한 공격은 기존 공격의 데이터 복잡도를 233에서 2로 낮추었다. 결과적으로, 본 공격에 사용된 α-reflection은 하드웨어 구현상 장점이 있지만, 연관키 공격에는 취약한 점을 제공한다고 할 수 있다.
본 논문에서 제안한 연관키 공격은 직접적으로 PRINCE의 안전성을 위협하지는 않지만 만약 PRINCE가 해쉬모드와 같은 특정상황에 적용될 경우 그의 안전성이 급격하게 떨어진다는 것을 의미한다.
참고문헌
- Eli Biham, "New types of cryptanalytic attacks using related keys," Journal of Cryptology, vol. 7, no. 4, pp. 229-246, 1994.
- Alex Biryukov, "DES-X (or DESX)," Encyclopedia of Cryptography and Security (2nd Ed.), pp. 331, 2011.
- Julia Borghoff, Anne Canteaut, Tim Guneysu, Elif Bilge Kavun, Miroslav Knezevic, Lars R. Knudsen, Gregor Leander, Ventzi Nikov, Christof Paar, Christian Rechberger, Peter Rombout s, Soren S. Thomsen, and Tolga Yalcin, "PRINCE: a low-latency block cipher for pervasive computing applications," Advances in Cryptology, ASIACRYPT'2012, LNCS 7658, pp. 208-225, 2012.
- Jeremy Jean, Ivica Nikolic, Thomas Peyrin, Lei Wang, and Shuang Wu, "Security analysis of PRINCE", FSE 2013, To appear.