DOI QR코드

DOI QR Code

Ephemeral Key Reuse Attack of the SABER Algorithm by Meta-PKE Structure

Meta-PKE 구조에 의한 SABER 알고리즘의 임시 키 재사용 공격

  • Received : 2022.07.15
  • Accepted : 2022.09.05
  • Published : 2022.10.31

Abstract

The SABER algorithm, a PKE/KEM algorithm presented in NIST PQC Standardization Round 3, is an algorithm based on the Module-LWR problem among lattice-based problems and has a Meta-PKE structure. At this time, the secret information used in the encryption process is called a ephemeral key, and in this paper, the ephemeral key reuse attack using the Meta-PKE structure is described. For each parameter satisfying the security strengths required by NIST, we present a detailed analysis of the previous studies attacked using 4, 6, and 6 queries, and improve them, using only 3, 4, and 4 queries. In addition, we introduce how to reduce the computational complexity of recovering ephemeral keys with a single query from the brute-force complexity on the n-dimension lattice, 27.91×n, 210.51×n, 212.22×n to 24.91×n, 26.5×n, 26.22×n, for each parameter, and present the results and limitations.

NIST PQC 표준화 Round 3에 제시된 PKE/KEM 알고리즘인 SABER 알고리즘은 격자 기반 문제 중 Module-LWR 문제를 기반으로 하는 알고리즘으로 Meta-PKE 구조로 되어 있다. 이때, 암호화 과정에서 사용되는 비밀 정보를 임시 키라고 부를 것이며 본 논문에서는 Meta-PKE 구조를 활용한 임시 키 재사용 공격에 대해 설명한다. NIST에서 요구하는 보안 강도 5, 3, 1을 만족하는 각각의 파라미터에 대해 4, 6, 6번의 쿼리를 사용하여 공격한 선행 연구에 대해 자세한 분석과 함께 이를 향상하여 3, 4, 4번의 쿼리만 사용하는 방법을 제시한다. 그리고 추가로 한 번의 쿼리를 통해 임시 키를 복원하는 계산 복잡도를 n차 격자 위에서 각각의 파라미터에 대해 전수조사 복잡도인 27.91×n, 210.51×n, 212.22×n에서 24.91×n, 26.5×n, 26.22×n으로 감소시키는 방법을 소개하며 그에 대한 결과 및 한계점을 제시한다.

Keywords

I. 서론

1978년, 인수분해 문제의 어려움에 기반한 RSA가 공개되었고 뒤이어 많은 공개키 암호 시스템이 개발되었다. 대부분은 RSA와 마찬가지로 인수분해 문제의 어려움에 기반하거나 이산대수 문제의 어려움에 기반하였으며 그들은 현재 많은 분야에서 사용되고있다. 그러나 1994년에 Shor가 제안한 양자 알고리즘[1]에 의해 그러한 문제들이 다항 시간 내에 해결 될 수 있음이 증명되었다. 이에 따라 양자 컴퓨터 환경에서도 안전한 새로운 공개키 암호 시스템을 개발하기 위해 NIST (미국 국립표준기술 연구소)에서 PQC (Post Quantum Cryptography, 후양자암호)의 표준화 작업을 2017년에 시작하게 되었다.

키 교환. 둘 혹은 그 이상의 집합 간에 통신을 위해 진행하는 중요한 절차인 키 교환 과정은 현재 암호학에서 핵심 분야 중 하나이다. 현재 이산대수 문제를 기반으로 한 DH (Diffie-Hellman) 키 교환 프로토콜 혹은 이를 변형하여 타원곡선을 사용한 ECDH 등이 많이 사용되고 있으며 이를 대체하기 위해 NIST PQC 표준화 작업에 많은 PKE/KEM (Public Key Encryption/Key Encapsulation Mechanism) 알고리즘들이 제시되었다.

현재 NIST PQC 표준화 알고리즘으로 PKE/KEM 알고리즘에서는 round 3에서 제시되었던 4개의 알고리즘 중 CRYSTALS-KYBER[2]가 선정되었으며 새롭게 round 4를 진행하고 있다. SABER[3] 알고리즘은 round 3에서 제시되었던 알고리즘 중 하나로 CRYSTALS-KYBER와 비슷한 구조를 가지고 있으며 Module-LWR 문제를 기반으로 하고 있다.

임시 키. 격자 기반 키 캡슐화 과정에서 키를 생성하는 A와 암호화를 진행하는 B 모두 임의의 난수를 선택하여 각자의 비밀 정보로 삼는다. A는 이러한 비밀 정보를 비밀 키로써 사용하며 B는 암호화 과정에서 난수성을 추가하기 위해 사용하는데 이때 B의 비밀 정보를 임시 키라고 부를 것이다. 네트워크 통신에서 키 또는 난수는 몇몇 재사용 되는 방식이 사용되었다. TLS 1.3[4]에서는 Pre-Shared Key (PSK) 방식을 사용하고 있으며 이는 통신하는 중간에 비밀 키와 공개 키를 재사용하는 것이 허가된 방식이다. 이전부터 이러한 비밀 정보의 재사용에 관련된 연구는 많이 진행되었으며 Liu et al. 은 격자 기반의 NewHope[5]에 대한 임시 키 재사용 공격을 소개하였다[6].

그 이후 [7]에서는 Meta-PKE 구조를 소개하며 많은 격자 기반 암호 알고리즘들이 해당 구조를 따르고 있다고 하였다. 그리고 이러한 Meta-PKE 구조의 취약점으로 임시 키 재사용 공격을 소개하였고이를NewHope와LAC[8]에 적용한 공격을 제시하였다. [9]에서는 이를 바탕으로 하여 SABER와 CRYSTALS-KYBER에 적용한 공격 방법을 소개하였다.

본 논문에서는 격자 기반 PKE/KEM알고리즘중 SABER 알고리즘에 대해 이전에 제시된Meta-PKE 구조를 활용한 임시 키 재사용 공격에 대한 자세한 분석과 함께 향상된 공격 방법에 대해 설명한다.

II. 배경 지식

본 장에서는 SABER 알고리즘의 기본 지식과 Meta-PKE 구조에 대해 설명한다.

JBBHCB_2022_v32n5_765_f0001.png 이미지

Fig. 1. SABER Algorithm

2.1 SABER 알고리즘[3]

SABER 알고리즘은 LWE 시스템보다 효율적이라고 알려진 LWR 문제를 변형한 Module-LWR 문제를 기반으로 한 알고리즘이다. 사용되는 집합 ℤq 는 정수 q에 대한 modulo ring이고 ℤq[x]는 ℤq위에서의 다항식 ring이며 Rq는 n = 256인 ℤq[x]/(xn + 1)이다. A∈Rqk×k,b∈Rqk×1 는 각각 행렬과 벡터를 나타낸다. x←Χ는 Χ 분포에서 x를 샘플링하는 것을 나타낸다. 확률분포는 균등분포인 U 와 P[x|x←βµ] = 2· µ!/(µ/2 + x)!(µ/2 - x)!의 확률로 [-µ/2,µ/2RIGHT]에서 x를 샘플링하는 이항분포(CBD) βµ를 사용한다.⌊ ⌉ 연산은 반올림 연산이며 SABER 알고리즘에서는 이를 간단한 shift 연산으로 대체하기 위해 3가지의 상수를 사용한다. 다항식 h1∈Rq는 모든 계수가 2∊q-∊p-1인 다항식이고, 벡터 h∈Rqk×1은 각 성분이 h1과 같은 벡터이며 h2∈Rq는 모든 계수가(2∊q-2 - 2∊p-∊T-1 + 2∊q-∊p-1)인 다항식이다. ≫은 bit 단위 shift 연산이다.

SABER 알고리즘은 ∊q > ∊p > ∊T인 고정된 상수 q = 2∊q , p = 2∊p와 고정되지 않은 상수 T = 2∊T 와 µ를 사용한다. µ는 µ < p로 βµ에서 비밀 키와 임시 키를 샘플링할 때 사용되는 상수이다. T와 µ는 NIST에서 정한 security level에 따라 값이 다르다(Table 1 참조).

Table 1. Parameters in Saber

JBBHCB_2022_v32n5_765_t0001.png 이미지

2.2 Meta-PKE

Wang et al.은 몇몇 PKE 알고리즘에서 나타나는 Algorithm 2와 같은 구조를 Meta-PKE라고 명명했다[7]. 이때, Algorithm 2의 암호화 과정 중 5번 과정인 V = t × B + Y(Y = encode(pt)) 의식이 취약점으로 지적되었다. 이 식에서 V는 암호문, B는 공개키, t,f는 임시 키, Y는 평문이 인코딩된 값이다. [7]에서 공개키가 아래의 정리를 만족할 경우 Y와 t,f값이 Meta-PKE 구조에서 드러날 수 있음을 보여주었다.

정리 1[7]. t,f,Y ∈ Rq이고 각각의 계수들에 대해 t[i], f[i] ∈ {-D,…,D}, Y[i] ∈ {0,q/2RIGHT(i = 1,…,n)을 만족하며 B∈ℤq이고 V = B × t + f + Ymod±q라고 하자. 이때 2D + 1 ≦ B < q/4D - 1이면 V값을 통해 t,f,Y의 값을 알 수 있다.

JBBHCB_2022_v32n5_765_f0002.png 이미지

Fig. 2. Meta-PKE construction

증명. [7] 참조

III. 기존 공격[9] 분석

본 장에서는 [9]에서 제시된 Meta-PKE 구조를 활용한 SABER 알고리즘의 임시 키 재사용 공격에 대해 설명하고 자세히 분석한다. 이때, 임시 키 는암호화 과정의 1번 과정에서 샘플링하는 s′을 의미한다. SABER 알고리즘 또한 Meta-PKE 구조로 되어 있으며 각 변수의 형태가 정리 1의 조건에 부합하므로 이를 적용할 수 있다.

정리 2. si, Y( = m · p/2) ∈ Rq이고 si의 계수들이 si [j] ∈ {-µ/2,…,µ/2},µ/2 < p이고 평문에 해당하는 Y의 계수가 Y[j]∈{0,p/2RIGHT,i = 1,…,n 이다. 공개키의 각 원소에 대해 상수항을 제외한 나머지 항들의 계수가 0인 bi∈ℤp의 형태를 가지고 있으며 Vi = bi × si + h1 - Ymodp라고 하자.

위의 값들이 다음의 3가지 조건

① bi ≫ (∊p - ∊T ) = 1

② (p/2 - µbi) ≫ (∊p - ∊T ) ≧ 1

③ 2µ + 2 ≦ p

을 만족한다면 ci = Vi ≫ (∊p - ∊T )로부터 si와 Y값이 드러난다.

증명. Vi = bi × si + h1 - Ymodp에서 h1과 bi는 각각 상수와 공개키이다. 만약 ci = Vi ≫ (∊p - ∊T )의 값이 si, Y에 대해 일대일 함수의 관계를 가질 경우 si, Y의 값을 ci의 값을 통해 구별할 수 있다. 위의 조건들을 만족할 때 ci가 si, Y에 대해 일대일 함수관계를 만족한다는 것을 증명하기 위해 si, s′i, Y, Y ′에 대한 두 식 Vi = bi × si + h1 - Ymodp와 Vi′ = bi × s′i + h1 - Y ′ modp를 생각하자. si [j]와 s′i[j]이 서로 다르다면 Vi[j]와 Vi′[j]의 차이의 최솟값은 bi이다. 그러므로 bi ≫ (∊p - ∊T )= 1을 만족할 경우, 암호문 ci [j] ≠ c′i[j]이고 ci [j] - c'i[j] = 1이 성립한다. 만약 Y와 Y ′의 값 또한 다르다면 Vi와 Vi′ 의 차이는 (p/2 - µbi) 의 최솟값을 가지므로 이에 따라 (p/2 - µbi) ≫ (∊p - ∊T ) ≧ 1일 때 ci [j] ≠ c′i [j]가 된다. 그리고 Vi의 상의 크기가 ℤp의 크기보다 작아야 하므로 2µ + 2 ≦ p이어야 한다.

원래의 공개키는 Rq에 속해 있는 다항식을 원소로하는 k차 벡터이지만 위의 정리를 사용하기 위해 아래의 내용에서는 상수항을 제외한 나머지 계수가 0인 형태를 가진 공개키만을 사용한다. 즉 bi들이 다항식이 아닌 상수항만 남아있는 bi∈ℤq의 형태를 가진 공개키만 사용하였고 이를 통해 정리 2를 사용하여 [9]에서 임시 키 재사용 공격을 SABER에 적용하였다. NIST에서 요구하는 보안 강도에 따른 각 파라미터인 FireSaber, Saber, LightSaber에 대해, 각 쿼리마다 암호화를 진행할 때 같은 임시 키를 재사용하는 상황에서 각각 4, 6, 6번의 쿼리를 통해 임시키를 복원하였다. FireSaber의 경우 위의 정리를 만족하는 bi를 쉽게 찾을 수 있어 공격이 단순하지만, 나머지의 경우 그렇지 않아 추가적인 방법을 더 사용하여야 했다. 이에 대한 분석을 위해 다음과 같은 따름정리를 사용한다.

따름정리 1. 정리 2의 ① 조건을 bi ≫ (∊p - ∊T ) ≧ 1로 변경해도 ci = Vi ≫ (∊p - ∊T )로부터 si와 Y값을 드러난다. 그리고 bi ≫ (∊p - ∊T )= 1일 때 같은 Y값에 대해 si와 si + 1로 계산된 암호문 ci 값의 차이는 정확히 1이며 r < µ인 정수 r에 대해 rbi ≫ (∊p - ∊T ) = 0이면 평문이 같을때 si와 si + r로 계산된 암호문 ci값은 같다.

따름정리 2. si\(\begin{aligned}Y\left(=\frac{p}{2} m\right) \in R_{q}\\\end{aligned}\) 이고 si의 계수들이 si [j] ∈ {-µ/2,…,µ/2},µ/2 < p이고 평문에 해당하는 Y의 계수가 Y[j]∈{0,p/2RIGHT,i = 1,…,n 이다. 공개키의 각 원소에 대해 상수항을 제외한 나머지 항들의 계수가 0인 bi∈ℤp의 형태를 가지고 있으며 Vi = bi × si + h1 - Ymodp라고하자. 그리고 암호문은 ci = Vi ≫ (∊p - ∊T )과 같이 계산된다. 이때, r < µ인 상수 r에 대해 조건 (p/2 - rbi) ≫ (∊p - ∊T ) ≧ 1을 만족하면 평문이 다를때 r1 ≦ |r|인 r1에 대해 si에 의해 계산된 암호문 ci의 값은 si + r1에 의해 계산된 암호문 ci의 값과 다르다. 그리고 (p/2 - rbi) ≫ (∊p - ∊T ) = 0이면 평문이 다를 때 si에 의해 계산된 암호문 ci의 값은si + r에의해 계산된 암호문 ci의 값과 같다.

공개키들은 모두 상수항만 남은 다항식을 사용하기 때문에 다항식 s′i의 각 계수는 차수가 같은 항을 제외한 다른 항에는 영향을 미치지 않게 된다. 그리고 공개키 원소 중 bi만 정리 2를 만족하는 값을 가지고 bj(j ≠ i)는 0이면 암호문에는 s′i만 영향을 미치기 때문에 정리 2를 통해 구별할 수 있게 된다. 이를 사용하여 FireSaber에서는 [16,0,0,0], [0,16,0,0],[0,0,16,0], [0,0,0,16] 의 bi = 16인 공개키를사용하여 s′i를 복원할 수 있다(Algorithm4 참조).

그러나 Saber와 LightSaber에서는 정리 2를 만족하는 bi를 찾을 수 없어 추가적인 계산을 통해 공격을 진행하였다.

JBBHCB_2022_v32n5_765_f0003.png 이미지

Fig. 3. SABER Encryption Oracle(Usingfixedephemeral key)

JBBHCB_2022_v32n5_765_f0004.png 이미지

Fig. 4. FireSaber key reuse attack algorithm

3.1 Saber

Saber에서는 따름정리 1을 사용하면 bi ≫ 6 ≧ 1이어야 하고 이는 bi ≧ 64가 된다. 그리고 ②번 조건에서 (210/2 - 2 × 4bi) ≫ 6 ≧ 1이고 bi ≤ 56이어서 조건을 만족하는 bi를 찾을 수 없다. 그러나 bi = 64는(210/2 - 7b) ≫ 6 ≧ 1를 만족하며 이는 따름정리 2에 따라 s′i의 차이가 7 이하일 때 평문이 다르면 암호문의 값이 모두 다른 값을 가짐을 의미한다. 즉 Saber에서는 s′i가 -4와 4일 때를 제외하고는 다른 값을 가지게 된다. 그리고 따름정리 1의 조건을 만족하고 있으므로 s′i의 값이 각각 –4와 4인 경우를 제외하고는 모두 암호문을 보고 구별할 수 있게 된다.

이제 s′i값이 -4 또는 4일 때를 구별하기 위해 64에서 32를 더한 96을 bi로 사용하게 되면 4일 때는 bi = 64에서 Vi의 값에 4 × 32 = 27만큼의 값이 더해지며 –4일 때는 27만큼의 값이 빼지게 된다. 즉 둘의 차이는 28이 되며 이는 210보다 작아 modp를 거쳐도 다른 값이 되며 또한 29보다도 작아 평문 값이 다를 때 Vi값이 다르며 또한 26보다는 크기 때문에 shift 연산 이후에도 그 차이가 유지가 된다. 즉 s′i 값이 –4와 4일 때 ci값이 달라지고 이를 통해 s′i 값을 구별할 수 있다. 이를 이용하여 Saber에서는 rank 값이 3이므로 bi = 64와 bi = 96을 각 i에 대해 적용하여 6번의 쿼리를 통해 s′i를 복원할 수 있다(Algorithm 5 참조).

JBBHCB_2022_v32n5_765_f0005.png 이미지

Fig. 5. Saber key reuse attack algorithm

3.2 LightSaber

LightSaber의 경우 마찬가지로 따름정리1로 bi ≫ 7 ≧ 1이어야 하고 이는 bi ≥ 128가 되며 정리 2의 ②번 조건에서 (210/2 - 2 × 5bi) ≫ 7 ≧ 1이며 이는 bi ≦ 38이어서 조건을 만족하는 bi를 찾을 수 없다. 이때 bi = 128은 (210/2 - 3bi) ≫ 7 ≧ 1을 만족하고 따름정리 2에 따라 si′의 차이가 3 이하일 때 암호문의 값은 모두 다른 값을 가지게 된다. 그리고 s′i 의 차이가 4일 경우 Vi의 값의 차이는 (210/2 - 4 × 128)≫ 6 = 0이 되어 따름정리 2에 의해 평문이 다를 때 암호문이 같은 값을 가지게 된다. 즉 bi = 128을 사용할 경우 s′i, m, ci에 대한 표에서 연속된 4개의 si값에 대해서는 평문 값과 상관없이 모두 다른 값이 나오며 차이가 4인 si값에 대해서는 평문이 다를 때 암호문이 같게 된다. 이제 이를 구분하기 위해 bi = 16을 사용한다. 16을 s′i에 곱한 값에서 7만큼 shift를 하게 되면 –5부터 5의 값들의 경우 부호만 구분할 수 있게 된다. 이를 통해 먼저 s′i가 음수인지 양수인지 판단하게 된다. s′i가 음수일 경우 구분이 불가능한 s′i값은 -5와 –1이 있고, 양수일 경우 0과 4, 1과 5가 존재하며 이 값들에 대한 암호문은 평문이 다를 때 각각 같아 이들만 구분 할 수 있으면 된다. 이를 해결하기 위해 128에 64를 더한 192를 bi로 사용하게 되면 s′i가 4 차이가 날때 Saber에서 96을 사용했던 것처럼 Vi의 값의 차이가 28이 되게 된다. 이는 마찬가지로 210과 29보다 작은 값이고 27보단 큰 값이므로 modp와 shift 연산 이후에도 그 값이 다르게 된다. 이는 bi = 128과 bi = 16를 이용하여 s′i의 값의 후보를 좁히고 bi = 192를 통해 온전하게 구별해내는 과정으로 s′i값을 복원한다. 즉 bi = 128, bi = 16, bi = 192를 사용하여 rank가 2인 LightSaber에서는 6번의 쿼리를 통해 s′i를 복원할 수 있다(Algorithm 6 참조).

JBBHCB_2022_v32n5_765_f0006.png 이미지

Fig. 6. LightSaber key reuse attack algorithm

IV. 향상된 공격 기법

4.1 향상된 재사용 공격

4.1.1 FireSaber

FireSaber에서 암호문은 modp연산을 통해 계산된 210 이하의 10비트 값에 ∊p - ∊T = 4만큼 shift 연산을 하여 6비트 값을 만들며 이는26= 64의 경우의 수를 갖게 된다. 반면 한 번의 암호화에서 s′i는 -3에서 3까지의 값을, m은 0과 1의 값을 가질수 있으며 이에 대한 경우의 수는 7 × 2 = 14로 하나의 특별한 공개키를 통해 하나의 s′i만을 복원하는것은 효율적이지 않다. 이런 생각을 확장하여 t번의 쿼리를 통해 암호화를 진행한다고 하자. 그러면 암호문이 가능한 경우의 수는 26×t인데 FireSaber의 rank는 4이며 s′i 값은 변하지 않으므로 s′i, m가 가질 수 있는 경우의 수는 74 × 2t이 된다. 일대일 대응이 되려면 암호문의 경우의 수가 더 커야 하므로 74 × 2t < 26×t가 되어야 하고 t = 3이 이를 만족한다. 이를 통해 FireSaber에서 공격이 가능한 최소 쿼리 수는 3으로 추측할 수있다. 이전에 FireSaber에 대해 제시된 결과는 4번의 쿼리를 사용하였으며 s′의 원소 4개에 대해 각 쿼리마다 한 개의 s′i만을 드러냈었다. 이를 더 적은 3번의 쿼리를 통해 s′를 복원하려면 한 번의 쿼리에서 한개의 s′i 뿐만 아니라 다른 원소의 정보도 어느 정도얻을 수 있어야 한다고 추측할 수 있다.

b가 [b0,0,0,0RIGHT]의 형태라고 하자. 그러면 v′의 계수들의 경우의 수는 s′0에만 영향을 받으므로 7이고 Y까지 고려하여 나타날 수 있는 c의 경우의 수는 14가 된다. 이는 c의 4비트만 봐도 s′0와 Y를구별할 수 있음을 의미한다. 이때 c는26까지 총 6비트 값으로 출력되므로 2비트의 정보가 필요하지 않음을 알 수 있다. 이때, –3부터 3까지의 값을 modp에 맞게 변경한 뒤 2진수로 변경하였을때 각 값의 하위 3비트는 1012부터 0112까지의 값으로 모두 다른 값이 나온다. 즉 암호문의 일부인 3비트에 –3부터 3까지의 값의 하위 3비트를 넣고 다른 영향이 없다면 이를 온전히 구분할 수 있다. 이를 이용하기 위해 b0를 c의 6비트 중 상위 4비트에만 영향을 주는 값으로 선택했다고 하자. 예를 들어26=64일때 어떤 값이 곱해져도 후에 modp 연산으로 최상위 비트부터 11번째 비트까지 아무런 영향 없이 사라지게 되어 상위 4비트에만 영향을 주게 된다. 그러면 Y가 0 또는 29이므로 암호문의 최상위 비트에만 영향을 주며 이는 s′0를 구분할 때 필요한 s′0의 정보가 온전히 담긴 암호문의 3비트에는 영향을 주지 않게 된다. 이제 s′1이 c에 영향을 주면서도 s′0를 드러내는 3비트에는 큰 영향이 없도록 하는 방법을 생각해보자. -3에서 3을 2진수로 변경한 값들의 하위 2번째, 3번째 비트를 생각해보자. 각각 102, 112, 002, 012의 값 중 하나를 갖게 된다. 이때, 102, 112의 경우 이 위의 상위비트들이 모두 1이고, 002, 012은 0임을 알 수 있다. 즉, s′1의 상위비트 값이 c에 영향을 준다고 해도 하위 2번째, 3번째 비트 값들이 온전히 드러나 있다면 어떠한 영향을 주었는지 구별할 수 있게 된다. 이전에 b0를 통해 c의 상위 4비트에 s′0를구별할 수 있는 정보를 담을 수 있었고 이때 하위 2비트는 아무런 값이 들어가지 않는 상태였다. 이제 s′1의 하위 2번째, 3번째 비트가 c의 하위 2비트에 들어가게 하는 b1을 찾아 새롭게 b′ = [b0,b1,0,0]을 구성한다면 c의 하위 2비트를 통해 s′1의 값의 정보를 얻게 된 후 그의 상위비트가 0 또는 1로 되어 있다는 정보를 얻을 수 있다. 이를 통해 s′0의 영향을 받은 상위 4비트의 값을 온전히 분리해낼 수 있고 이를 이용하여 s′0를 온전히 얻을 수 있다. 실제로 b0 =26, b1 = 23인 공개키 [26,23,0,0]에 대해 c값을 계산한 뒤 Taber 2에서와 같이 s′1의 일부 정보를 복원할 수 있다. 또한 s′0의 값에 대한 정보를 얻어 온전히 복원할 수 있게 된다(Table 3 참조).

Table 2. Value of c[j] according to s′1 [j] and m[j] in FireSaber when b = [26, 23, 0, 0]

JBBHCB_2022_v32n5_765_t0002.png 이미지

Table 3. Value of c according to s′0 [j] and m[j] in FireSaber when b = [26, 23, 0, 0]

JBBHCB_2022_v32n5_765_t0003.png 이미지

JBBHCB_2022_v32n5_765_f0007.png 이미지

Fig. 7. New FireSaber key reuse attack algorithm

이와 비슷한 과정을 s′2와 s′3에 적용하기 위해 다음 공개키로 [0,0,26,23]을 사용하면s′2의 온전한 값을 복원할 수 있으며 s′1과 마찬가지로 s′3에 대한 정보도 일부 드러난다. 그리고 이때 s′1, s′3의 경우의 수는 각각 2개씩 총 4가지로 6비트 c값을 통해 충분히 알아낼 수 있을 것으로 추측할 수 있다. 이제 이를 위한 공개키를 찾아보자. 현재 알고 있는 정보는 각각의 하위 2번째, 3번째 비트이고 만약 최하위비트를 알게 될 경우 s′1, s′3의 값을 알 수 있어 각각의 최하위비트가 c의 1비트씩에만 영향을 줄 수 있게 하는 것만으로도 충분하다. b1를 24이라고 하면 s′1의 최하위비트는 c의 최하위비트에 영향을 주게 된다. 그리고 b3를 25이라고 하면 s′3는 c의 최하위비트에는 영향을 주지 않게 되므로 공개키를 [0,24,0,25] 으로 구성하게 되면 c값을 통해 s′1의 최하위비트를 알수 있게 되고 이에 따라 이전에 [26,23,0,0]를 통해 얻은 정보와 결합하여 s′1을 복원할 수 있다. 그리고 s′1을 복원함에 따라 [0,24,0,25] 을 통해 얻은 c값에서 s′1의 영향력을 지워 s′3의 값 또한 복원할 수 있게 된다(Table 4 참조). 즉 공개키 [26,23,0,0] [0,0,26,23] , [0,24,0,25RIGHT]의 공개키를 통한 3번의 쿼리를 진행하여 임시 키 s′를 복원할 수 있게 된다.

Table 4. Value of c according to s′1[j], s′3[j] = -2or -1 and m[j] in FireSaber when b = [2,24,2,25]

JBBHCB_2022_v32n5_765_t0004.png 이미지

4.1.2 Saber & LightSaber

Saber와 LightSaber에서도 FireSaber에 대한 공격과 유사한 과정을 진행하기 위해 먼저 각각의 파라미터에 대해 암호화에서 5번 과정의 식 c = (v′ + h1 - 2∊p-1m modp) ≫ (∊p - ∊T)에 대한 경우의 수를 계산해 보면 각각 최소 4번의 쿼리만으로도 공격할 수 있음을 추측할 수 있다. Saber와 LightSaber에서는 하나의 공개키로 임시 키의 한 원소를 바로 알아내는 것이 아니라 FireSaber에서 s′1을 구하는 것과 비슷하게 각 원소의 일부 정보를 알아내어 경우의 수를 작게 만든 뒤 한 번 더 연산하여 온전히 복원해내는 과정을 거친다.

Saber에서 bi = 32를 사용하게 되면 따름정리 1에서 bi ≫ (∊p - ∊T) = 32 ≫ 6 = 0의 식을 만족하며 2bi ≫ (∊p - ∊T) = 64 ≫ 6 = 1이고 정리 2의 ②조건을 만족하므로 s′i의 값의 차이가 2 이상일 때 다른 암호문 값을 가진다(Table 5 참조). 그리고 이때 얻을수 있는 정보가 s′0의 하위 2번째, 3번째 비트가 된다. 이를 각 s′i에 적용하게 되면 3번의 쿼리를 통해 si의 하위 2번째, 3번째 비트를 알게 되므로 최하위 비트만 알면 s′를 복원할 수 있다. 이를 알기 위해 FireSaber와 비슷한 방법을 사용한다. 그래서 s′0는 하위 4비트가 순서대로 암호문의 4비트에 영향을 주도록, s′1은 하위 3비트가 암호문의 2번째비트부터, s′2은 하위 2비트가 암호문의 3번째 비트부터 영향을 주도록 하는 bi들을 사용한다면 암호문을 보고 모두 구별할 수 있게 된다. 이를 만족하는 b는[ 26,27,28 ]가 존재한다(Table 6 참조).

Table 5. Value of c according to s′0[j] and m[j] in Saber when b = [ 25,0,0 ]

JBBHCB_2022_v32n5_765_t0005.png 이미지

Table 6. Value of c according to s′0[j], s′1[j], s′2[j]=-3 or -4 and m[j] in Saber when b = [26,27,28]

JBBHCB_2022_v32n5_765_t0006.png 이미지

JBBHCB_2022_v32n5_765_f0008.png 이미지

Fig. 8. New Saber key reuse attack algorithm

LightSaber에서는 bi = 128을 사용하게 되면 따름정리 1의 식 bi ≫ (∊p - ∊T) = 128 ≫ 7 = 1을 만족하며 따름정리 2의 식 (p/2 - 3bi) ≫ (∊p - ∊T) = (29 - 3 × 128) ≫ 7 = 1이 되어 s′i값의 차이가 3일때 암호문 값이 모두 다름을 확인할 수 있다(Table 7 참조). 그리고 bi = 32를 사용하면 따름정리 1의 식 3bi ≫ (∊p - ∊T) = 96 ≫ 7 = 0을 만족하며 4bi ≫ (∊p - ∊T) = 96 ≫ 7 = 1이고 정리 2의 ②조건을 만족한다. 즉 s′i의 값의 차이가 3 이하일 때는 암호문의 값이 같고 4 이하일 때는 암호문의 값이 다름을 알 수 있다(Table 8 참조). 이 둘을 통해 s′i를 복원할 수 있게 된다.

Table 7. Value of c according to s′0[j] and m[j] in LightSaber when b = [27,0 ]

JBBHCB_2022_v32n5_765_t0007.png 이미지

Table 8. Value of c according to s′0[j] and m[j] in LightSaber when b = [25,0 ]

JBBHCB_2022_v32n5_765_t0008.png 이미지

Saber는 [25,0,0] , [0,25,0], [0,0,25], [26,27,28] 의 4개의 공개키를 사용하여 4번의 쿼리를 통해 s′i를 복원할 수 있고 LightSaber는 과 [27,0], [25,0], [0,27], [0,25] 의 4개의 공개키를 통한 4번의 쿼리로 복원할 수 있다.

결과적으로 FireSaber, Saber, LightSaber 각각에 대해 기존[9]의 4, 6, 6번의 쿼리에서 감소한 3, 4, 4번의 쿼리를 통해 s′i를 복원할 수 있었다.

JBBHCB_2022_v32n5_765_f0009.png 이미지

Fig. 9. New LightSaber key reuse attackalgorithm

4.2 한 번의 쿼리를 통한 임시키공격

이전의 공격들은 모두 임시 키를 여러 번 재사용해야만 공격할 수 있었으며 4.1절의 식을 통해 FireSaber, Saber, LightSaber를 각각 3, 4, 4번의 쿼리로 공격할 수 있음을 알 수 있었으며, 또한 이 횟수가 최솟값임을 알 수 있었다. 이는 그 이하로 임시 키를 재사용하면 공격이 쉽지 않음을 의미하기도 한다. 본 절에서는 매우 적은 횟수로 임시 키를 재사용할 때, 이에 대한 공격을 위해 한 번의 쿼리로 임시 키를 복원하는 데 필요한 계산 복잡도를 줄이는 방법을 설명한다.

임시 키 s′i에 대한 전수조사 복잡도는 이항분포(CBD) 및 격자의 차수 n에 의해(µ + 1) kn이 된다. 이때 암호문 c[j]값에 대응되는 임시 키 s′i[j]값을 균등하게 분배할 수 있는 공개키가 있다고 가정하자. 암호문의 계수 값이 가질 수 있는 경우의 수는 T이기 때문에 암호문의 한 계수 값에 대해 대응될 수 있는 s′i[j]값의 개수는 {(µ + 1)k}/T이다. n차 다항식을 사용하며 평문 값에 따라서도 암호문의 값이 변하므로 전체 s′i값을 구하는 데 필요한 계산 복잡도는 [{2 × (µ + 1)k}/TRIGHT]n이 되며 이때 (µ + 1)k개의 테이블이 있어야 한다. T > 2이므로 이전의 전수조사 복잡도보다 확실히 작아짐을 알 수 있으며 다음의 따름정리를 통해 우리가 원하는 공개키를 얻을 수 있다.

따름정리 3. si,Y(=m · p/2) ∈ Rq이고 si의 계수들이 si[j] ∈ {-µ/2,…,µ/2}, µ/2 < p를 만족하고 Y의 계수가 Y[j]∈{0,p/2RIGHT,i = 1,…,n 이다. 공개키의 각 원소에 대해 상수항을 제외한 나머지 항들의 계수가 0의 값을 가져 bi∈ℤp 의 형태를 가지고 있으며 \(\begin{aligned}V=\left(\sum_{i=0}^{k-1} b_{i} s_{i}[j]\right)+h_{1}-Y \bmod p\\\end{aligned}\)라고 하자. 그리고 암호문은 c = V ≫ (∊p - ∊T)과 같이 계산된다.이때, \(\begin{aligned}\left(\sum_{i=0}^{k-1} r_{i} b_{i}\right) \gg\left(\epsilon_{p}-\epsilon_{T}\right)=1\\\end{aligned}\)을 만족하면 각 si[j]들의 값의 차이가 ri일 때 암호문 값은 1의 차이가 난다.

LightSaber에서 각 암호문에 가능한 s′i[j] 값이 균등하게 분포되려면 s′0[j] 값이 같고 s′1[j]의 값의 차이가 1이 날 때 평문이 같은 암호문의 값 또한 1의 차이가 나야 하며, s′0[j]값의 차이가 1일 때는 s′1[j] 의 값이 10만큼 감소할 때 평문이 같은 암호문의 값이 1의 차이를 가져야 한다. 이는 따름정리 3에 의해 다음 두 식

b1 ≫ 7 = 1       (1)

(b0 - 10b1) ≫ 7 = 1       (2)

을 만족하는 공개키가 우리가 원하는 공개키가 되고 이를 만족하는 값은 b0 = 384, b1 = 128이다.

Saber에서도 마찬가지로 s′0[j]와 s′1[j]이 같고 s′2[j]의 값의 차이가 1이 날 때 평문이같은 암호문의 값 또한 1의 차이가 나야 하며 s′1[j]′값의 차이가 1일 때는 s′2[j]값이 8만큼 감소할때 평문이 같은 암호문의 값이 1의 차이를 가져야 한다. 그리고 s′2[j]값의 차이가 1일 때는 s′1[j], s′2[j] 모두 8만큼 감소할 때 평문이 같은 암호문의 값이 1의 차이를 가져야 한다. 이는 따름정리 3에 의해 다음 3개의 식

b2 ≫ 6 = 1       (3)

(b1 - 8b2 ) ≫ 6 = 1       (4)

(b0 - 8b1 - 8b2 ) ≫ 6 = 1       (5)

을 만족하는 공개키가 우리가 원하는 공개키가 되고 이를 만족하는 값은 b0 = 64, b1 = 576, b2 =64이다.

마지막으로 FireSaber에서도 LightSaber 및 Saber와 비슷한 과정을 통해 따름정리 3에 의해 다음과 같은 4개의 식

b3 ≫ 4 = 1       (6)

(b1 - 6b2 ) ≫ 4 = 1       (7)

(b0 - 6b1 -6b2 ) ≫ 4 = 1       (8)

(b0 - 6b1 - 6b2 - 6b3 ) ≫ 4 = 1      (9)

을 만족하는 공개키가 우리가 원하는 공개키가 되고 이를 만족하는 값은 b0 = 368, b1 = 784, b2 =112, b3 = 16이다.

LightSaber, Saber, FireSaber에서 각각 [384,128] , [64,576,64] , [368,784,112,16] 을 사용하여 실제 실험을 진행하게 되면 하나의 c[j]와 대응될 수 있는 s′i[j]의 값이 각각 24.91, 26.5, 26.22개가 된다. 즉, s′i를 복원하는 계산 복잡도가24.91×n, 26.5×n, 26.22×n이 되는 것으로 원래의 값인 27.91×n, 210.51×n, 212.22×n에 비해 제곱근에 가깝게 감소시킬 수 있었다.

V. 결론

본 공격은 기본적으로 매우 특수한 형태의 공개키를 사용하여야 한다는 것이 가장 큰 한계점으로 다가온다. 실제로 알고리즘이 실행되게 되면 상수항을 제외한 나머지 계수가 0일 확률이 극히 낮으며 그중에서도 특수한 몇 개의 값이 선택되어야 하므로 자연적으로 공격에서 사용되는 공개키가 선택될 가능성이 매우 낮다. 그래서 이 공격은 다음과 같은 방법을 통해 진행될 수 있다. 사용자와 서버가 통신을 진행할때 공격자가 통신 과정에서 중간자 공격을 통해 서버의 공개키가 아닌 악의적으로 선택된 공개키를 전송함으로써 사용자가 재사용하는 임시 키를 알아낼 수 있다. 그렇게 임시 키를 복원할 수 있게 되면 통신에서 사용된 평문을 쉽게 복원할 수 있어서 위험할 수 있다.

4.1절의 공격 방법은 각 파라미터 별로 3, 4, 4번의 쿼리를 통해 이루어지며, 4.2절의 공격 방법 또한 결국 평문을 복원하는 계산 복잡도인 2n보다 높아서 해당 공격에 대해 가장 낮은 안전 강도를 가지는 LightSaber에서도 4번 이상 재사용하지 않으면 평문을 복원하는 것보다 비효율적이다. 위와 같은 상황을 고려해보았을 때, 공격의 대응. 방안으로써 특수한 형태의 공개키가 사용되지 못하도록 제한하거나 임시키의 재사용 횟수가 일정 이상 되지 못하도록 제한하는 방법이 있다. 이러한 방법들을 사용하여 통신 간의 임시 키 재사용을 안전하게 할 수 있다.

[9]에서는 CRYSTALS-KYBER[2]에 대한 임시 키 재사용 공격 또한 제시되었다. CRYSTALS-KYBER는 마찬가지로 Meta-PKE 구조를 가지고 있으며 암호화 과정에서 사용되는 압축 함수가 modulo 구조로 되어 있어서 SABER 알고리즘과 비슷하다. 암호화 과정에서 에러의 영향을 제거할 수 있다면 압축 함수 이전의 경우의 수가 이후의 것보다 작아지는 쿼리 수를 찾을 수 있다. 이 쿼리 수가 [9]에서 제시된 것보다 더 적기 때문에 본 논문에서 제시한 공격 방법과 비슷하게 적용하여 공격을 향상시킬 수 있을 것으로 기대하며 이에 대한 연구를 진행할 예정이다.

References

  1. P.W. Shor, "Polynomial-time algorithms for prime factorization and discrete logarithms on a quantumcomputer," SIAM Journal Computing,vol. 26, no. 5, pp. 1484-1509, Oct.1997. https://doi.org/10.1137/S0097539795293172
  2. J. Bos et al., "CRYSTALS - Kyber:ACCA-Secure Module-Lattice-BasedKEM," 2018 IEEE EuropeanSymposium on Security and Privacy(EuroS&P), pp. 353-367, Apr. 2018.
  3. J.P. D'Anvers, A. Karmakar, S.S. Roy,and F. Vercauteren, "Saber:Module-LWR based key exchange, CPA-secure encryption and CCA-secure KEM," Progress inCryptology -AFRICACRYPT2018, AFRICACRYPT 2018, pp. 282-305,Apr. 2018.
  4. E. Rescorla, "The Transport LayerSecurity (TLS) protocol version1.3," RFC 8446, Aug. 2018.
  5. E. Alkim, L. Ducas, T. Poppelmann,P. Schwabe, "Post-quantumkeyexchange - a new hope," 25th Usenix Security Symposium, USENIX Association, pp. 327-343, Aug. 2016.
  6. C. Liu, Z. Zheng, G. Zou, "Key Reuse Attack on New Hope Key Exchange Protocol," Information Security and Cryptology - ICISC 2018, ICISC2018,pp. 163-176, Jan. 2019.
  7. K. Wang, Z. Zhang, and H. Jiang,"Security of two NIST candidatesinthe presence of randomness reuse," Provable and Practical Security,ProvSec 2020, pp. 402-421, Nov. 2020.
  8. X. Lu et al., "LAC: Practical Ring-LWE Based Public-Key Encryption with Byte-Level Modulus," IACR ePrint 2018-1009, Oct. 2018.
  9. S. Okada, Y. Wang, "Recovery Attackon Bob's Reused Randomnessin CRYSTALS-KYBER and SABER," Provable and Practical Security,ProvSec 2021, pp. 155-173, Nov. 2021.