I. 서론
최근 사물인터넷(IoT, Internet of Things) 시장이 꾸준히 확장됨에 따라 경량 환경에서 사용할 수 있는 암호 기술에 대한 수요가 증가하고 있다. ICISC†2020에 제안된 블록 암호 알고리즘 PIPO는 Unbalanced bridge 구조를 이용한 SPN(Substitution Permutation Network) 구조의 경량암호이며, 효율적인 고차 마스킹 소프트웨어 구현이 가능하여 부채널 공격에 높은 보안성을 가지고 있다[1].
암호 공격 모델은 공격자에게 주어진 능력에 따라 블랙박스, 그레이박스, 화이트박스로 분류한다. 그중에서 화이트박스 공격은 암호화 알고리즘에 대한 완전한 액세스 권한을 가지고 있으며 이를 이용하여 알고리즘의 동작 과정을 관찰하고 비밀키를 추출할 수 있다.
Chow 등은 AES에 키를 주입하고 인코딩을 적용한 최초의 화이트박스 AES(이하 WB-AES)를 제안했다[2]. 그러나 이는 2005년 제안된 대수적인 공격인 BGE 공격으로 약 230의 복잡도로 키를 찾아 낼 수 있다[3]. 이후 이를 보완한 화이트박스 구현 기법들이 제안되었지만[4, 5] 그에 대응되는 새로운 공격 기법들 또한 제안되었다[6, 7]. 2016년 제안된 DCA 공격은 기존 블록 암호에 적용했던 부채널 공격을 이용하여 화이트박스 구현 기법이 적용된 암호의 키를 찾아낼 수 있다[8]. 이와 같이 현재는 알려진 모든 화이트박스 구현 기법이 적용된 암호에 대한 공격이 가능하다.
그러나 실제로는 알려지지 않은 화이트박스 암호에 대한 공격이 성공한 사례가 없고 키 관리의 어려움 등을 이유로 화이트박스 암호에 대한 수요는 꾸준히 증가하고 있다. 일반적으로 사용하고 있는 블록 암호의 경우 공격자는 입력과 출력만 관찰할 수 있다는 블랙박스 모델을 가정한다. 하지만 실제로 서비스를 제공하는 환경에서 공격자는 암호 알고리즘이 동작하고 있는 기기에 대한 전력정보를 취할 수 있을 뿐만 아니라 공격자가 기기를 점령하여 연산 중간값과 비밀키 정보를 탈취할 수 있다.
본 논문에서는 기존에 제안된 경량 블록 암호 PIPO 알고리즘에 화이트박스 구현 기법을 적용한 화이트박스 PIPO 알고리즘을 제안한다. 본 논문에서 제안하는 화이트박스 구현 기법이 적용된 PIPO 알고리즘을 이하 WB-PIPO라 한다.
본 논문의 구성은 다음과 같다. 2장에서는 경량 블록 암호 PIPO와 화이트박스 공격 모델 및 암호에 관해 설명한다. 3장에서는 본 논문에서 제안하는 화이트박스 구현 기법이 적용된 WB-PIPO를 제시한다. 4장에서는 제안된 WB-PIPO에 대한 안전성 고려사항과 가능한 공격에 대한 대응 기법을 서술한다. 5장에서는 WB-PIPO의 성능을 측정한 결과를 제시하고 Chow 등이 제안한 화이트박스 AES와 비교한다. 또한 모바일 보안제품에 WB-PIPO를 적용한 활용 사례를 기술한다. 마지막으로, 6장에서는 본 논문의 결론과 추후 연구를 기술한다.
II. 관련 연구
2.1 경량 블록 암호 PIPO
블록 암호 PIPO는 ICISC 2020에 제안된 SPN 구조의 경량암호이다. PIPO 암호 알고리즘은 Unbalanced bridge 구조를 이용하여 차분, 선형 공격에 안전한 S-box를 설계했다는 특징을 갖고 있다. PIPO 암호 알고리즘에서 사용한 S-box 구조는 테이블 참조 구현 외에 bitslice 방식의 구현이 가능하며 병렬 처리가 가능하다.
PIPO의 블록 크기는 64비트이고 비밀키의 크기에 따라 PIPO-128과 PIPO-256으로 나눌 수 있으며 각각 13 라운드, 17 라운드를 사용한다. PIPO의 라운드 연산 과정에서 각 연산의 중간값은 64비트이다. 경량 블록 암호 PIPO의 규격은 Table 1.과 같으며 PIPO의 전체 구조는 Fig. 1.과 같다.
Table 1. Block Cipher PIPO
Fig. 1. PIPO Structure
PIPO의 라운드 RKi는 128비트 마스터키일 경우 K(= K0∥K1)를 두 개의 64비트 서브키 K0와 K1로 나누어 라운드 키 RKi = Ki mod 2를 생성한다. 256비트 마스터키일 경우 K(= K0∥K1∥K2∥K3)를 네 개의 64비트 서브키 K0, K1, K2, K3로 나누어 라운드 키 RKi = Ki mod 4을 생성한다.
PIPO의 라운드 함수는 Fig. 1.과 같이 비선형 함수 S-Layer와 선형 함수 R-Layer, 키와 라운드 상수를 Exclusive Or (이하 XOR) 연산하는 Key Addition 단계로 이루어진다.
S-Layer는 테이블 참조 방식과 bitslice 방식으로 구현이 가능하다. 테이블 참조 방식의 경우 28 × 8 = 2048 비트 크기의 테이블을 저장해야 한다. S-Layer에서 사용되는 연산은 비트 연산자 AND, OR, XOR, NOT을 사용하기 때문에 비트 단위의 연산을 바이트 단위의 연산으로 확장할 수 있어 효율적인 연산이 가능하다. Bitslice 방식을 사용할 경우 Unbalanced bridge 구조를 이용하며 해당 구조는 Fig. 2.와 같다. i비트 입력의 j-번째 S-box를 Sij 로 표기할 때 S-Layer의 내부 함수는 S51, S52, S31을 사용한다. R-Layer는 64비트 블록 8 × 8 배열의 각 행을 로테이션하는 선형 연산이며 해당 연산은 Fig. 3.와 같다.
Fig. 2. PIPO S-Layer
Fig. 3. PIPO R-Layer
2.2 화이트박스 암호
2.2.1 화이트박스 공격 모델
암호 공격 모델은 공격자에게 제공된 정보의 양과 성질에 따라 블랙박스, 그레이박스, 화이트박스 모델로 분류된다. 각 모델에 대한 설명은 다음과 같다.
⦁ 블랙박스 모델: 입력값, 출력값, 그리고 알고리즘의 구조 외의 정보를 알 수 없는 상태
⦁ 그레이박스 모델: 블랙박스 모델에서 전력정보, 전자파 등의 키에 대한 간접적인 정보를 추가적으로 알고 있는 상태
⦁ 화이트박스 모델: 암호화 동작 디바이스의 메모리 접근과 수정이 모두 가능하며 중간 계산 값까지 알고 있는 상태
2.2.2 화이트박스 암호 관련 연구
화이트박스 구현 기법은 2002년 Chow 등에 의해서 처음 제안되었다. 화이트박스 구현 기법이 적용된 암호는 화이트박스 공격 모델의 공격자로부터 비밀키를 보호하기 위해 비밀키를 암호 알고리즘에 섞어 암호키가 드러나지 않게 설계된 암호이다. 즉, 알고리즘을 큰 참조 테이블로 생성하여 그 내부에 비밀키를 암호 알고리즘과 뒤섞인 상태로 숨김으로써 내부의 동작을 분석하더라도 키를 쉽게 유추할 수 없게 설계된 암호를 의미한다.
Chow 등이 WB-AES에 대한 설계를 제안한 이후 다양한 화이트박스 암호가 제안되었다. 그러나 블록암호 알고리즘의 대수적 특성을 이용한 BGE 공격, 통계적 분석을 이용한 DCA 공격 등 많은 화이트박스 암호 공격기법이 제안되었다. 이러한 공격기법들에 대응하기 위해 마스킹 기법을 적용한 화이트 박스 암호 기법 등이 제안되었다.
2.2.3 인코딩
경량 블록 암호 PIPO는 AND, OR, XOR, NOT 그리고 좌측 회전 연산(이하 ROL)과 같은 8비트 단위의 비트 연산을 사용한다. 그러나 8비트 단위로 테이블을 생성할 경우 테이블의 크기가 매우 커지기 때문에 4비트 단위의 연산 두 개를 연접하여 연산을 진행한다. 4비트 단위의 연산 테이블에 인코딩을 적용하기 위해선 해당 비트 단위의 인코딩을 생성해야 한다. Fig. 5.[9]는 n비트 비선형 인코딩을 생성하는 알고리즘이며 Fig. 6.은 Fig. 5.에서 생성한 비선형 인코딩의 역함수를 계산하는 알고리즘이다.
Fig. 4. WB-PIPO Structure
Fig. 5. n-bit nonlinear encoding (Fisher-Yates Shuffle)
Fig. 6. n-bit nonlinear encoding inverse
III. WB-PIPO
본 장에서는 화이트박스 암호 기법을 적용한 경량 블록 암호 PIPO 설계 과정과 설계 과정에서 생성된 테이블의 크기에 관하여 기술한다.
3.1 WB-PIPO 알고리즘 설계
블록 암호의 경우 평문(또는 암호문)과 키를 입력하고 암호문(또는 복호문)을 출력한다. 화이트박스 구현 기법이 적용된 암호의 경우 사용되는 비밀키를 안전하게 보호하기 위해 고정된 키를 암호 알고리즘에 포함하여 비밀키에 대한 접근성을 낮춘다. 즉, 고정된 키에 의존하는 모든 연산을 테이블로 저장하고 이를 이용해 연산을 수행한다.
기존의 라운드 연산 중 Key Addition과 S-Layer 연산을 하나의 연산으로 간주하여 WB S-Layer라 한다. 암호화 알고리즘에서의 마지막 라운드 함수인 R-Layer와 Key Addition 함수를 하나의 연산으로 간주하여 WB R-Layer라 한다.
유사하게, 기존의 복호화 연산 중 Key Addition와 Inv R-Layer를 하나의 연산으로 간주하여 이하 WB Inv R-Layer라 한다. 복호화 알고리즘에서의 마지막 라운드 함수인 Inv S-Layer와 Key Additon을 하나의 연산으로 간주하여 WB Inv S-Layer라 한다. 기존의 PIPO의 구조와 본 논문에 서 제안하는 WB-PIPO의 구조는 Fig. 4.와 같다.
3.2 외부 인코딩
코드 리프팅(code-lifting)이란 모듈의 실행 코드를 복제하거나 우회하는 기법이다. 코드 리프팅을 방지하기 위해서는 화이트박스 모듈의 입력과 출력 부분에 인코딩을 적용하여 정당한 사용자가 아닌 공격자는 원하는 입력에 대한 출력을 생성할 수 없도록 해야 한다. 이를 외부 인코딩이라 한다. 예를 들어, 입력과 출력이 n비트인 고정된 키 K에 대한 화이트 박스 모듈 F를 Y←F(X)라 하자. 공격자는 키 K를 알지 못하더라도 F의 실행 코드를 복제한다면 키 K가 적용된 화이트박스 모듈 F를 실행할 수 있다. 이를 방지하기 위해 F의 입력과 출력에 n비트 외부 인코딩 함수 IN, OUT을 다음과 같이 적용한다.
Y′←F′(X′) := (OUT∘F∘IN-1)(X').
상기 식에서 X′에 IN(X)을 입력하고 그에 대한 출력에 OUT-1을 적용한 값은 F에 X을 입력했을 때의 출력값과 같다.
Y = (OUT-1∘F'∘IN)(X) = (OUT-1∘(OUT∘F∘IN-1)∘IN(X) = F(X).
즉, 외부 인코딩 IN , OUT을 알고 있는 정당한 사용자만이 원하는 입력에 대한 출력값을 계산할 수 있다. Fig. 7.은 4개의 비선형 인코딩 16개로 구성된 64비트 외부 인코딩을 적용하는 과정을 나타낸다.
Fig. 7. Table Lookup Encoding
WB-PIPO 알고리즘에서 사용하는 64비트 외부 인코딩 WI, WO은 4비트 인코딩 16개를 연접하여 생성한다.
WI := (ωi0, ωi1, … ωi15), ωi i : 4비트 비선형 인코딩
WO := (ωo0, ωo1, ,… ω15), ωoi : 4비트 비선형 인코딩 0 ≤ i < 16).
즉, 64비트 인코딩을 생성하는 방법은 Fig. 5. 알고리즘에 n = 4를 대입하고 이를 16번 실행하여 4비트 인코딩 16개를 생성한다.
임의의 고정된 키 K에 대한 PIPO 알고리즘을 PIPOK라 할 때, WB-PIPO 알고리즘 WBPIPOK을 다음과 같이 정의한다.
WBPIPOK := WO∘PIPOK∘WI-1
Y을 PIPOK에 입력값 X을 입력했을 때의 출력이라 하자. 즉, Y = PIPOK(X)이다. WBPIPOK를 이용해 입력 X에 대한 출력 Y을 다음과 같이 3단계로 나누어 계산할 수 있다.
1. X′ := WI(X).
2. Y′ := WBPIPOK(X′)
= (WO∘PIPOK∘WI-1)(WI(X))
= WO(PIPOK(X)) = WO(Y)
3. WO-1(Y′) = WO-1(WO(Y)) = Y.
상기 식으로부터 WB-PIPO 모듈만을 획득한 공격자는 원하는 입력에 대한 출력을 계산할 수 없으며, 오직 외부 인코딩을 알고 있는 정당한 사용자만이 WB-PIPO 모듈로부터 PIPO와 동일한 입력에 대한 출력을 계산할 수 있다.
결과적으로, WB-PIPO 모듈은 외부 인코딩을 적용하기 위해서 첫 번째 라운드의 첫 연산 테이블 입력 인코딩으로 WI-1를 사용하고 마지막 라운드의 마지막 연산 테이블 출력 인코딩으로 WO을 사용하여 외부 인코딩을 포함한 화이트박스 모듈을 설계할 수 있다.
3.3 테이블 생성
경량 블록 암호 PIPO의 입력과 출력의 크기는 64비트이며 이를 코드북과 같은 형태로 저장할 때 크기가 264 × 64비트인 테이블을 저장해야 하는데 이는 현실적으로 사용하기에는 어려움이 있다. 따라서 WB-PIPO를 구현하기 위해서는 각 라운드의 연산을 분리해야 한다. 기존의 블록 암호 PIPO는 8비트 단위로 연산을 수행하며 AND, OR, NOT 그리고 ROL와 같은 비트 연산자를 사용한다. AND, OR, XOR과 같은 8비트 단위 연산 테이블 하나의 크기는 216 × 8비트이며 이를 테이블화 할 때, PIPO-128 기준 총 84 × 13 × 216 × 8 ≈ 229비트인 테이블을 저장해야 한다.
본 논문에서 제안하는 WB-PIPO는 두 개의 4비트 단위의 AND, OR XOR, NOT 그리고 ROL 연산테이블을 생성하여 8비트 테이블 참조 연산을 수행한다. WB-PIPO에서 사용하는 테이블은 S-Layer에서 사용하는 2n비트 입력, n비트 출력의 2n × n 테이블, n비트 입출력의 n × n 테이블과 R-Layer에서 사용하는 ROLk 테이블로 구분할 수 있다. 본 장에서는 위와 같이 구분된 테이블을 생성 하는 방법과 이를 참조하는 함수를 설명한다. n비트 단위의 비트 연산자 AND, OR, XOR, NOT, ROL 함수를 각각 ANDn , XORn , ORn , NOTn, ROLn로 표기한다.
WB S-Layer와 Inv WB S-Layer 테이블 참조 연산은 함수 m × n_OPk를 사용한다. 이때, m, n은 각각 입력 비트와 출력 비트의 크기를 의미하며 m은 2n 또는 n이다.
3.3.1 2n × n_OPk 테이블
2n × n 테이블 참조 함수에서는 n비트 라운드키 r0, r1 , r2 XOR과 n비트 OPn 연산을 수행하는 테이블 OPnr0, r1, r2에 n비트 인코딩을 추가한 테이블 \(\begin{aligned}\overline{O P_{n}^{r_{0}, r_{1}, r_{2}}}\end{aligned}\)을 다음과 같이 정의한다.
\(\begin{aligned}\overline{O P_{n}^{r_{0}, r_{1}, r_{2}}}(x, y):=g\left(O P_{n}^{r_{0} r_{1} r_{1}, r_{2}}\left(f_{0}^{-1}(x), f_{1}^{-1}(y)\right)\right)\end{aligned}\)
이때, OPnr0, r1, r2는 다음과 같이 정의한다.
OPnr0, r1, r2(x, y) := OPn(x⊕r0, y⊕r1)⊕r2.
상기 식에서 x, y는 n비트이고 f0-1, f1-1, g는 n비트 비선형 인코딩이다. f0-1, f1-1는 x과 y에 적용된 인코딩을 제거하기 위한 인코딩이며, g는 라운드 키 XOR과 OPn 연산한 결과를 보호하기 위해 적용하는 인코딩이다.
이를 이용해 8비트 라운드키 k0, k1, k2 XOR과 OP4 연산에 인코딩을 적용한 연산 8 × 4_OP4(X, Y, k0, k1, k2)을 다음과 같이 정의한다.
\(\begin{array}{l}8 \times 4 \_O P_{4}\left(X, Y, k_{0}, k_{1}, k_{2}\right) \\ :=\overline{O P_{4}^{k_{0}[0], k_{1}[0], k_{2}[0]}}(X[0], Y[0]) \| \overline{O P_{4}^{k_{0}[1], k_{1}[1], k_{2}[1]}}(X[1], Y[1]) \\ =g_{0}\left(O P_{4}^{k_{0}[0], k_{1}[0], k_{2}[0]}\left(f_{0}^{-1}(X[0]), f_{1}^{-1}(Y[0])\right)\right) \\ \| g_{1}\left(O P_{4}^{k_{0}[1], k_{1}[1], k_{2}[1]}\left(f_{2}^{-1}(X[1]), f_{3}^{-1}(Y[1])\right)\right) \end{array}\)
상기 식에서 X[i], Y[i] 그리고 kj[i]는 4비트이며 X = X[0]∥X[1], Y = Y[0]∥Y[1], kj = kj[0]∥kj[1] j = 0, 1, 2이다.
8 × 4 테이블 참조 함수는 Fig. 8.과 같으며, 하나의 테이블 참조 함수에는 두 개의 테이블이 참조된다. 해당 연산에서 OP4는 AND4 , XOR4 , OR4 함수를 사용한다.
Fig. 8. 8 × 4_OP4
3.3.2 n × n_OPk 테이블
n × n 테이블 참조 함수에서는 n비트 라운드키 r0, r1 XOR과 n비트 OPn 연산을 수행하는 테이블 OPnr0, r1에 n비트 인코딩을 추가한 테이블 \(\begin{aligned}\overline{O P_{n}^{r_{0}, r_{1}, r_{2}}}\end{aligned}\)을 다음과 같이 정의한다.
\(\begin{aligned}\overline{O P_{n}^{r_{0} r_{1}}}(x):=g\left(O P_{n}^{r_{a_{1}} r_{1}}\left(f_{0}^{-1}(x)\right)\right)\end{aligned}\)
이때, OPnr0, r1는 다음과 같이 정의한다.
OPnr0, r1(x) := OPn(x⊕r0)⊕r1.
상기 식에서 x는 n비트이고 f0-1, g는 n트 비선형 인코딩이다.
이를 이용해 8비트 라운드키 k0, k1 XOR과 OPn 연산에 인코딩을 적용한 연산 4 × 4_OP4(X, k0, k1)을 다음과 같이 정의한다.
\(\begin{aligned}\begin{array}{l}4 \times 4 \_O P_{4}\left(X, k_{0}, k_{1}\right) \\ :=\overline{O P_{4}^{k_{0}[0], k_{1}[0]}}(X[0]) \| \overline{O P_{4}^{k_{0}[1], k_{1}[1]}}(X[1]) \\ =g_{0}\left(O P_{4}^{k_{0}[0], k_{1}[0]}\left(f_{0}^{-1}(X[0])\right) \mid । g_{1}\left(O P_{4}^{k_{0}[1], k_{1}[1]}\left(f_{1}^{-1}(X[1])\right) \text {. }\right.\right. \end{array}\end{aligned}\)
상기 식에서 X[i], kj[i]는 4비트이며 X = X[0]∥X[1], kj = kj[0]∥kj[1], j = 0, 1이다. 4 × 4 테이블 참조 함수는 Fig. 9.와 같으며, OP4는 NOT4 함수를 사용한다.
Fig. 9. 4 × 4_OP4
3.3.3 n × n_ROLk 테이블
WB R-Layer와 Inv WB R-Layer 테이블 참조 연산은 n × n_ROLk 함수를 사용한다.
기존의 PIPO에서 사용하는 8비트 ROL 연산 ROL8은 다음과 같다.
ROL8(X, L) = (X ≪ L)∥(X ≫ (8 - L)), 0 ≤ L < 8.
4비트 ROL 연산 ROL4을 다음과 같이 정의한다.
ROL4(x, y, l) = (x ≪ l) ∥ (y ≫ (4 - l)), 0 ≤ l < 4.
8비트 ROL 연산 ROL8을 4비트 ROL 연산 ROL4를 이용해 다음과 같이 계산할 수 있다.
ROL8(X, n) := ROL4(X[d mod 2], X[d+1], l)∥ROL4(X[d+1 mod 2], X[d], 4-l).
상기 식에서 d = n/4, l = n mod 4, X = X[0]∥X[1]이며, X[i]는 4비트이다.
4비트 라운드키 r0 , r1 XOR과 4비트 ROL4 연산을 수행하는 테이블 ROK4r0, r1, r2에 4비트 인코딩을 추가한 테이블 \(\begin{aligned}\overline{R O L_{4}^{r_{0}, r_{1}, r_{2}}}\end{aligned}\)을 다음과 같이 정의한다.
\(\begin{aligned}\begin{array}{l}\overline{R_{0} L_{4}^{r_{0} r_{1} r_{2}}}(x, y, l):=g\left(\operatorname{ROL}_{4}^{r_{0} r_{1}, r_{2}}\left(f_{0}^{-1}(x), f_{1}^{-1}(y), l\right)\right), \\ 0 \leq l<4 \end{array}\end{aligned}\)
이때, ROL4r0, r1, r2는 다음과 같이 정의한다.
ROL4r0, r1, r2 (x, y, l) = ROL4(x⊕r0, y⊕r1, l)⊕r2, 0 ≤ l <4.
상기 식에서 f0-1 , f1-1는 x과 y에 적용된 인코딩을 제거하기 위한 인코딩이며, g는 라운드키 XOR과 ROL4 연산 결과를 보호하기 위해 적용하는 인코딩이다.
이를 이용해 8비트 라운드키 k0, k1 XOR과 8비트 단위의 로테이션에 인코딩을 적용한 n × n_ROL4(X, L, K0, k1)을 다음과 같이 정의한다.
\(\begin{aligned}\begin{array}{l}n \times n \_R O L_{4}\left(X, L, k_{0}, k_{1}\right) \\ :=\overline{R O L_{4}^{k_{0}[d], k_{0}[d+1], k_{1}[0]}}(X[d], X[d+1], l) \\ =g_{0}\left(R O L_{4}^{k_{0}[d], k_{0}[d+1], k_{1}[0]}\left(f_{d}^{-1}\left(X[d], f_{d+1}^{-1}(X[d+1]), l\right)\right)\right. \\ \| g_{1}\left(R O L_{4}^{k_{0}[d+1], k_{0}[d], k_{1}[1]}\left(f_{d+1}^{-1}(X[d+1]), f_{d}^{-1}(X[d]), 4-l\right)\right) . \end{array}\end{aligned}\)
상기 식에서 d = n/4, l = n mod 4, X = X[0]∥X[1], kj = kj[0]∥kj[1]이며 X[i], kj[i]는 각각 4비트이다. ROL4 테이블 참조 함수는 Fig. 10.과 같다.
Fig. 10. 8 × 4_ROL4
3.4 테이블 크기
본 장에서는 앞서 설명했던 WB-PIPO의 테이블 크기에 관해 설명한다.
WB-PIPO에서 사용하는 4비트 연산 테이블의 크기는 Table. 2 .와 같다. Table. 3.은 WB-PIPO의 암호화 및 복호화의 테이블 크기와 이를 Chow의 WB-AES의 테이블 크기를 정리한 것이다. 128비트 키 크기 기준으로 Chow의 WB-AES WB-AES와 비교했을 때 본 논문에서 제안한 WB-PIPO의 테이블의 크기가 약 5.8배 작은 것을 확인할 수 있다.
Table 2. Size by operation table
Table 3. Table size of WB-PIPO and Chow WB-AES
IV. 안전성 고려사항
본 장에서는 WB-PIPO 구조에 대해 알려진 화이트박스 공격인 코드 리프팅, 부채널 분석, 리버스 엔지니어링 공격과 이에 대한 대응 기법을 기술한다.
4.1 외부 인코딩
3.2절에서 언급한 바와 같이 코드 리프팅이란 응용 프로그램 일부 혹은 전체를 추출하는 공격이다. 화이트박스 구현상에서도 다른 장치의 구현 전체를 추출할 수 있다면 비밀키가 이 프로그램에 포함되어 있으므로 화이트박스 구현의 기능도 함께 추출된다. 이러한 공격을 코드 리프팅이라고 하며 이 문제에 대한 가능한 해결책은 외부 인코딩을 사용하는 것이다. 본 논문에서 제안하는 외부 인코딩 방식은 3.2절에 기술되어 있다.
4.2 코드 난독화
소프트웨어상의 리버스 엔지니어링은 하나의 컴퓨터 프로그램을 역으로 분석하는 기술을 의미한다. 이러한 리버스 엔지니어링은 목적 코드 프로그램을 조사 및 분석하여 프로그램의 정보를 추출하고, 개발 원리를 파악하는 과정이다. 암호 회로 내부의 메모리 접근까지도 가능한 공격 모델을 가정한 화이트박스 공격 모델에서는 위와 같은 리버스 엔지니어링을 통한 공격이 가능하다. 리버스 엔지니어링에 대응하기 위하여 복잡하게 설계된 암호 알고리즘 회로에 비밀키를 주입하고 리버스 엔지니어링이 불가능하도록 난독화를 적용해야만 한다. 고수준의 난독화를 통하여 암호 알고리즘이 동작하는 과정 내에서 비밀키가 메모리에 로드되지 않도록 해야만 한다.
4.3 마스킹 기법 적용
부채널 분석은 암호 모듈 상에서의 암호 알고리즘이 구동될 때 발생 되는 전력 및 전자파 등의 부가적인 정보를 이용하여 분석하는 기법이다. 이러한 부채널 분석에 대응하는 기법으로는 마스킹 기법이 존재한다. 마스킹 기법은 암호화 회로의 중간값을 랜덤하게 생성하기 위한 기법으로, 본 절에서는 부채널 분석에 대응하기 위하여 마스킹 기법이 적용된 WB-PIPO를 제안한다. 앞서 제안한 WB-PIPO의 암호화 및 복호화 연산 중 비밀키가 수행되는 과정만을 고려하여 마스킹 기법을 적용한다.
WB-PIPO는 PIPO에서 사용한 8비트 연산 AND, XOR, OR, NOT 그리고 8비트 단위 ROL 연산을 4비트 단위의 테이블 두 개를 연접하였다. 본 마스킹 기법이 적용된 화이트 박스 함수는 8비트 테이블 연산을 사용하며 마스킹 기법이 적용된 WB-PIPO를 이하 Masked WB-PIPO라 한다. 본 장에서는 Masked WB-PIPO에서 사용되는 테이블 중 키를 입력받는 함수에 대한 마스킹 테이블과 마스킹을 제거하는 마스킹 제거 테이블 생성에 관한 부분만을 기술한다.
Masked WB-PIPO에서 사용되는 마스킹 테이블 참조 함수는 S-Layer와 Inv S-Layer에서 사용되는 2n비트 입력 2n비트 출력의 2n × 2n테이블, R-Layer와 Inv R-Layer에서 사용되는 n비트 입력 2n비트 출력의 n × 2n 테이블을 사용한다. 그리고 2n × 2n 테이블과 n × 2n 테이블에서 사용된 마스킹을 제거하는 테이블인 마스킹 제거 테이블은 2n 비트 입력 n비트 출력의 2n × n 테이블을 사용한다.
4.3.1 마스킹 테이블
Masked WB S-Layer에서 사용되는 마스킹 테이블은 2n × 2n 테이블을 사용한다. 2n × 2n 테이블 참조 함수에서는 n비트 라운드키 r0, r1, r2 XOR과 n비트 OPn 연산을 수행하는 테이블 OPnr0, r1, r2에 n비트 인코딩을 추가한 테이블 \(\begin{aligned} \overline{O P_{n}^{r_{0} r_{1}, r_{2}}}\end{aligned}\)을 사용한다.
이를 이용해 8비트 라운드키 k0, k1, k2 XOR과 OP8연산에 인코딩을 적용한 연산 MT_16 × 16_OP8(X, Y, k0, k1, k2, α)을 다음과 같이 정의한다.
\(\begin{array}{l}M T_{-} 16 \times 16_{-} O P_{8}\left(X, Y, k_{0,} k_{1}, k_{2}, \alpha\right) \\ :=\overline{O P_{8}^{k_{0}, k_{1}, k_{2}}}(X, Y) \| g_{1}(\alpha) \\ =g_{0}\left(O P_{8}\left(f_{0}^{-1}(X) \oplus k_{0}, f_{1}^{-1}(Y) \oplus k_{1}\right) \oplus k_{2} \oplus \alpha\right) \| g_{1}(\alpha)\end{array}\)
상기 식에서 X, Y는 각각 8비트이며, α는 8비트 랜덤 마스킹 값이다. 16 × 16 테이블 참조 함수는 Fig. 11.와 같으며, OP8은 XOR8, OR8, AND8 함수를 사용한다.
Fig. 11. MT_16 × 16_OP8
Masked WB R-Layer에서 사용되는 마스킹 테이블은 n × 2n 테이블을 사용한다. n × 2n 테이블 참조 함수에서는 n비트 라운드키 r0, r1 XOR과 n비트 ROL8 연산을 수행하는 테이블 ROL8r0, r1에 n비트 인코딩을 추가한 테이블 \(\begin{aligned}\overline{R O L_{8}^{r_{0}, r_{1}}}\end{aligned}\)을 사용한다.
이를 이용해 8비트 라운드키 k0, k1, k2 XOR과 ROL8 연산에 인코딩을 적용한 연산MT_8 × 16_ROL8(X, Y, k0, k1, α)을 다음과 같이 정의한다.
\(\begin{aligned}\begin{array}{l}M T \_8 \times 16 \_R O L_{8}\left(X, l, k_{0}, k_{1}, \alpha\right) \\ :=\overline{R O L_{8}^{k_{0} k_{1}, k_{2}}}(X, l) \| g_{1}(\alpha) \\ =g_{0}\left(R O L_{8}\left(f_{0}^{-1}(X) \oplus k_{0}, l\right) \oplus k_{1} \oplus \alpha\right) \| g_{1}(\alpha) \end{array}\end{aligned}\)
상기 식에서 X는 8비트이며, α는 8비트 랜덤 마스킹 값이다. 8 × 16 테이블 참조 함수는 Fig. 12.와 같다.
Fig. 12. MT_8 × 16_ROL8
4.3.2 마스킹 제거 테이블
Masked WB S-Layer와 Masked WB R-Layer에서 사용된 MT_16 × 16_OP8와 MT_8 × 16_ROL8 테이블 참조 함수에 대한 마스킹을 제거하는 테이블인 마스킹 제거 테이블이 함께 사용된다. 마스킹 제거 테이블 UMT_16 × 8을 다음과 같이 정의한다.
UMT_16 × 8(X, Y) := g0(XOR8(f0-1(X), f1-1(Y))
상기 식에서 X, Y는 각각 8비트이다. UMT_16 × 8 테이블 참조 함수는 Fig. 13.와 같다.
Fig. 13. UMT_16 × 8
V. 성능 측정 결과 및 활용 사례
본 장에서는 본 논문에서 제안하는 WB-PIPO의 성능을 측정한 결과를 제시하고 이를 WB-AES와 비교한다. 또한 WB-PIPO를 N사에서 출시한 모바일 보안 소프트웨어 D제품에 적용한 결과를 제시한다.
5.1 성능 측정 결과
본 절에서는 WB-PIPO의 성능을 측정하고 이를 Chow의 화이트박스와 비교한 결과를 제시한다. Table 4.는 본 논문에서 사용한 성능 측정 환경이다.
Table 4. Test environment
성능 측정 단위는 CPB(Cycles Per Byte)이며 CPB 측정 방법은 [10]을 참고하였다. WB-PIPO와 WB-AES의 성능을 비교하기 위해 128비트 키길이를 사용하였다. Fig. 14.는 128비트 키를 사용한 WB-PIPO와 WB-AES의 암호화 및 복호화 성능 측정 결과를 나타낸 것이다.
Fig. 14. Performance of WB-PIPO128andWB-AES 128 (unit: CPB)
Fig. 14.에서 WB-PIPO 128의 암호화와 복호화 CPB는 각각 1184.75, 1208.25이고 WB-AES 128의 암호화와 복호화 CPB는 각각 20242.62,20808.73이다. 성능 측정 결과로부터 WB-PIPO는 WB-AES 대비 약 17배 빠르다는 것을 알 수 있다.
WB-AES의 경우 동일한 키 크기의 WB-PIPO 대비 라운드 수가 적지만 8비트 입력, 32비트 출력 또는 128비트 출력 테이블을 사용하므로 이를 참조한 결과를 다시 취합하는 XOR 테이블을 사용하기 때문에 테이블의 크기가 크고 테이블을 참조하는 횟수도 증가한다. 그러나 WB-PIPO는 8비트 입력, 4비트 출력 테이블을 사용하므로 테이블을 참조한 값이 바로 결과값이 되기 때문에 테이블의 크기가 작고 테이블을 참조하는 횟수도 감소한다.
5.2 모바일 보안제품 활용 사례
N사의 모바일 보안 소프트웨어 D제품은 서버와 클라이언트 간의 키 합의 프로토콜을 이용해 비밀키를 공유한다. 클라이언트가 정책파일을 요청하면 서버는 블록 암호 SEED를 이용해 암호화한 정책 파일을 클라이언트에게 전송한다. 클라이언트는 공유한 비밀키를 이용해 SEED로 복호화한다. 본 절에서는 모바일 보안 소프트웨어 D제품에 WB-PIPO를 적용한 두 가지 케이스에 대한 성능을 측정한 결과를 기술한다.
첫 번째 테스트 케이스는 클라이언트에서 사용하는 비밀키를 WB-PIPO로 복호화하는 것이다. 앱 내에서는 암호화된 정책 파일을 SEED로 복호화할 때 비밀키를 사용하므로 비밀키가 메모리에 노출될 가능성이 높다. 비밀키를 안전하게 보호하기 위해 서버에서는 정책파일을 암호화하는데 사용한 비밀키를 WB-PIPO로 암호화하여 암호화된 정책 파일과 키를 클라이언트에 전송한다. 클라이언트는 암호화된 비밀키를 WB-PIPO로 복호화한 후 SEED로 정책 파일을 복호화한다.
두 번째 테스트 케이스는 키가 아닌 정책 파일을 WB-PIPO를 이용해 서버에서 암호화하고 클라이언트에서 복호화한다. 첫 번째 테스트 케이스와 다른 점은 정책 파일을 SEED가 아닌 WB-PIPO를 이용해 암호화와 복호화를 진행하므로 서버와 클라이언트는 비밀키를 공유할 필요가 없다.
WB-PIPO 성능 측정에 사용한 운영모드는 CBC 모드이며 PKCS 7 패딩을 사용했다. D제품에 사용한 블록 암호 SEED의 키 길이는 128비트이고 정책 파일의 크기는 427바이트이다. 각 테스트 케이스의 시간 측정 범위는 다음과 같다.
⦁ 키 복호화: WB-PIPO를 통한 키 복호화 후 SEED 복호화 완료 시점까지의 시간을 측정
⦁ 내용 복호화: 정책 파일에 대하여 WB-PIPO를 통한 복호화 완료 시점까지의 시간을 측정
⦁ 기존: 정책 파일에 대하여 SEED를 통한 복호화 완료 시점까지의 시간을 측정
Table 5.는 테스트 케이스 별 성능 측정에 사용한 실험 환경을 나타낸 것이다.
Table 5. Test environment
Fig. 15.는 상기 테스트 케이스를 1회당 10,000번 수행했으며 이를 총 10회 수행한 평균 시간을 나타낸 것이고 단위는 나노세컨드다. 갤럭시 S21 Ultra 5G, 화웨이 HORNOR V10, 그리고 갤럭시 S7에서 테스트 별 시간을 측정한 결과 기존 대비 키 복호화는 각각 1.8배, 2.2배, 1.9배 시간이 소요되었다. 또한 기존 대비 내용 암호화의 경우 각각 3.5배, 4.6배, 3.2배 시간이 소요됨을 알 수 있다
Fig. 15. Performance of WB-PIPO(Keyencryption, File encryption, Basic test) (unit:nano second)
화이트박스 암호의 경우 테이블에서 데이터를 가져오고 이를 연산하는 과정에서 기존 블록 암호보다 연산 시간이 더 소요되므로 암호화할 데이터의 크기가 커질수록 연산 시간이 증가한다. 따라서 첫 번째 테스트와 같이 비밀키를 화이트박스 암호로 안전하게 보호하거나 크기가 작은 데이터의 암·복호화에 화이트박스 암호를 활용할 것을 권장한다.
VI. 결론
본 논문에서는 ICISC 2020에 제안된 경량 블록 암호 PIPO를 대상으로 화이트박스 암호 기법을 적용한 WB-PIPO를 제안했다. WB-PIPO는 PIPO의 8비트 단위 비트 연산을 라운드 키가 포함된 두 개의 4비트 단위 비트 연산으로 변환하여 설계했다. WB-PIPO 128과 WB-AES 128을 비교하였을 때, 테이블의 크기는 약 5.8배 작았으며, CPB 단위 기준 약 17배 빠른 것을 알 수 있었다. WB-AES는 테이블을 참조한 결과값을 취합하는 과정이 포함되는 반면 WB-PIPO는 테이블 참조 값에 대한 별도의 취합 과정을 포함하지 않기 때문에 이와 같은 결과가 나타난 것으로 분석된다.
또한 본 논문에서 제안한 WB-PIPO를 모바일 보안 소프트웨어 D제품에 적용한 결과를 제시한다. 화이트박스 암호는 연산에 필요한 데이터를 테이블에서 가져오기 때문에 기존 블록암호 대비 연산 시간이 더 소요됨으로 WB-PIPO를 이용해 동일한 정책 파일을 암호화했을 때 연산 시간이 약 3.7배 증가했고, 키를 보호하기 위해 WB-PIPO를 사용했을 때 연산 시간이 약 1.9배 증가한 것을 확인했다.
화이트박스 구현은 암호 알고리즘에 주입된 비밀 키에 대해 테이블화를 통해 비밀키가 메모리에 직접적으로 로드되지 않도록 하고 난독화 과정을 통하여 비밀 값을 보호하는 구현 방법이다. 또한 코드리프팅, 리버스 엔지니어링, 부채널 분석과 같은 공격 기법들에 대해서도 안전성을 고려하여 구현할 수 있는 기법이다. 이러한 화이트박스 구현 방식은 소프트웨어 기술만으로 비밀키를 안전하게 보호하는 측면에서 유의미한 기술이다. 본 연구진은 WB-PIPO에 대한 실질적으로 유효한 공격과 고차마스킹 기법과 같은 대응 방안에 대해 분석 및 구현할 예정이며, 연산 최적화를 통한 기능 향상을 목표로 연구를 진행하고 있다. 이러한 화이트박스 구현 기법을 적용한 암호 기술의 연구 및 개발과 더불어 안전성 검증과 같은 기준 등의 연구가 활발히 이뤄져 차후 실제 산업화 제품에 적용될 것을 기대한다.
References
- H. G. Kim, et al., "A new method for designing lightweight S-boxes with high differential and linear branch numbers, and its application," International Conference of Imformation Security and Cryptology, pp. 105-132, Dec 2020.
- S. Chow, P. Eisen, H. Johnson and P.C.V. Oorschot, "White-Box Cryptography and an AES Implementation," SelectedAreasin Cryptography, LNCS 2595, pp. 250-270, 2002.
- O. Billet, H. Gilbert andC.Ech-Chatbi, "Cryptanalysis of a White Box AES Implementation," SelectedAreas in Cryptography, LNCS3357,pp. 227-240, 2005.
- Y. Xiao, X. Lai, "ASecureImplementation of White-BoxAES," Computer Science anditsApplications, pp. 1-6, Dec 2009.
- M. Karroumi, "Protecting White-BoxAES with Dual Ciphers," International Conference of Imformation Securityand Cryptology, pp. 278-291, 2010
- Y.D. Mulder, P. Roelse andB.Preneel, "Cryptanalysis of the Xiao-Lai White-Box AES Implementation," Selected Areas in Cryptography,LNCS 7707, pp. 34-49, 2012.
- T. Lepoint, M. Rivain, Y.D. Mulder,P. Roelse & B. Preneel, "Two Attackson a White-Box AES Implementation," Selected Areas in Cryptography, LNCS 8282, pp. 265-285, 2013.
- J.W. Bos, C. Hubian, W. MichelsandP. Teuwen, "Differential computationanalysis: Hiding your white-boxdesigns is not enough," Cryptographic Hardware and Embedded Systems, pp.215-236, August 2016.
- R.A. Fisher and F. Yates, Statistical tables for biological, agricultural andmedical research, 3rd Ed. London:Oliver & Boyd. pp. 26-27. 1938.
- Korea cryptography forum, "Reference for LSH Implementation Competition",https://kcryptoforum.or.kr/web/Board/342/detailView.do, June 2022.