이하에서는 첨부된 도면들을 참조하여, 본 발명에 따른 실시예에 대하여 상세하게 설명하기로 한다.
먼저, 다항식 컨볼루션 연산 및 NTRU 공개-키 암호체계가 무엇인지 간단히 살펴본 후, 본 발명에 따른 다항식 컨볼루션 연산 방법을 살펴보기로 한다.
1. 다항식
컨볼루션
연산(
polynomial
convolution
operation
)
Z를 정수들의 집합이라고 하자. Z[X]로 표시되는 Z에 대한 다항식 링은, Z의 계수들을 갖는 모든 다항식들의 집합이다. 몫 링(quotient ring) R을
로 정의하며, 이는 정수 계수를 갖는 임의의 다항식을 다항식 X
N - 1 로 나누었을 때 생길 수 있는 모든 가능한 나머지 다항식들의 집합을 의미한다. 따라서 R에 속하는 원소 a는 다항식 또는 벡터로서 다음 수학식 1과 같이 적을 수 있다.
R에 속하는 원소 a와 b에 대한 컨볼루션 곱 c(
)는, 다음 수학식 2와 같이 표시되는 계수를 갖는다.
원칙적으로, 이 연산은 N2개의 정수 곱셈을 필요로 하여 그 계산량이 많다. 그러나 NTRU에 의해 사용되는 다항식 컨볼루션 연산은, 일반적으로 a 또는 b 중 어느 하나가 작은 계수들을 가지며, 따라서 a*b의 계산은 매우 빠르게 수행될 수 있다.
2.
NTRU
공개-키 암호체계
다양한 종류의 NTRU 암호체계가 존재하지만, Hoffstein이나 Bailey 등에 의해 제안된 개량 버전은 다음과 같이 설명될 수 있다:
- NTRU는 3가지 공개 파라미터(N, p, q)를 가진다(여기서, p와 q의 최대공약 수는 1이고, p ≪ q임).
- 다항식의 계수들은 mod p or q로 감산된다(reduced mod p or q).
- f
-1 mod q로 표시되는 다항식 f의 mod q 상의 역원은,
을 만족하는 다항식으로서 정의된다. 여기서, mod q는 다항식 내의 모든 계수가 mod q로 감산됨, 즉 q로 나눈 나머지로 계산됨을 의미한다.
IEEE P1363.1 표준의 초안(working draft)은 NTRU에 대한 몇 가지 전형적인 파라미터 집합을 제안하는데, 그 중 하나는 (N, p, q) = (251, 2, 197)이다.
2.1 키 생성(
Key
Generation
)
R에 속하며 작은 계수들을 갖는 다항식 F, g를 임의로 선택한다. 그 후,
와
을 계산한다. 여기서, mod q는 다항식 내의 모든 계수가 mod q로 감산됨, 즉 q로 나눈 나머지로 계산됨을 의미한다. 개인 키(private key)는 다항식 f이며, 공개 키는 다항식 h이다.
2.2 암호화(
Encryption
)
m을 메시지를 나타내는 다항식이라고 하자. 작은 계수를 갖는 N-1차의 다항식 r을 임의로 선택하고, 암호문(ciphertext)
을 계산한다.
2.3 복호화(
Decryption
)
e를 복호화하기 위해 먼저
을 계산하되, a의 계수들이 A ≤ a
i < A + q를 만족하도록 선택한다. A의 값은 고정되며, 나머지 파라미터에 의존하는 간단한 공식에 의해 결정된다. 그 후,
로서 평문(plaintext) m을 복구한다.
2.4 복호화의 유효성
2.3에서 계산된 다항식 a는 다음 수학식 3을 만족한다.
최종 다항식 pr*g + m*f를 고려해 보자. 파라미터들을 적당히 선택하는 것에 의해, q보다 작은 길이의 인터벌 내에 놓이도록 계수들을 조정할 수 있다. 따라서 우리는 다음 수학식 4와 같이 a를 복구할 수 있다.
즉, mod q에 대해서가 아니라 정확한 등식이 성립하도록 할 수 있으므로 m = a mod p이다.
이상 살펴본 내용을 바탕으로, 본 발명에 따른 다항식 컨볼루션 연산 방법에 대하여 상세히 살펴보기로 한다.
도 1은 NTRU 암호화 시스템에 있어서 중심적인 연산인 다항식 컨볼루션 연산을 구현한 알고리즘의 일예를 나타내는 도면이다. 이 알고리즘은 0보다 크거나 같고 자연수 q보다 작은 정수를 계수로 갖는 일반 다항식 c(X)와, 이진수 1 또는 0을 계수로 갖는 이진 다항식 a(X)를 입력으로 하여 이들 두 다항식의 컨볼루션 곱인 t(X) = a(X)*c(X)를 계산한다. 이때 c(X)를 제1 다항식, a(X)를 제2 다항식이라 한다. 단, a(X)는 계수 1의 위치를 나타내는 배열인 b로 대체되어 입력되며, a(X) 및 c(X)의 계수의 총 개수는 N(정수)개이다. 또한 d는 b 배열상의 원소의 개수이다.
여기서, 이진 다항식 a(X)는 복호화에서의 개인 키(private key) 또는 암호화에서의 무작위 다항식 r에 해당하며, 이 부분은 내부 연산에 해당하므로 외부에서 직접 접근할 수 없다. 즉, N개의 계수를 갖는 이진 다항식인 a(X)의 계수들 중 어느 것들이 1인지를 나타내는 배열 b는 외부에서 알 수 없어야 하며, 다만 일반 다항식 c(X)는 공개된 부분으로서 외부에서 접근이 가능할 뿐 아니라 공격자가 임의로 변조할 수도 있다. 공격자는 자신이 임의로 생성 또는 변조한 데이터를 입력으로 주어 이를 이용한 연산을 수행시킨 후 시스템 내부의 전력 소모 패턴을 외부에서 분석하여 간접적으로 키 정보를 유추해 내게 된다.
다음으로, 지금까지 설명한 NTRU 암호화 시스템에서의 다항식 컨볼루션 연산에 대한 공격을 방지하는 본 발명의 특징에 따른 방법을, 단순 전력 분석 공격의 방지 방법과 차분 전력 분석 공격의 방지 방법으로 나누어 설명하기로 한다.
(1) 단순 전력 분석(
Simple
Power
Analysis
:
SPA
) 공격의 방지
NTRU에 대한 단순 전력 분석 공격에서 공격자는 시스템 내부에서 일어나는 덧셈 x + y 연산에 대해 x, y 중 어느 하나가 0인 경우와 x, y 모두 0이 아닌 경우에 대해 전력 소모의 미세한 차이를 감지할 수 있다. 이 사실을 이용하여 공격자는 일반 다항식 c(X)의 계수들을 0이 아닌 것들로만 구성한 후 시스템으로 하여금 다항식 컨볼루션을 수행하도록 하여 키 정보를 분석한다.
좀 더 구체적으로, 도 1에 따르면 NTRU 다항식 컨볼루션 알고리즘의 제5-7행은 두 정수의 덧셈을 N회 수행하는 것인데, tj 값들은 처음에 모두 0으로 초기화되어 있으므로 제4행에서 j = 0으로 설정하였을 때는 제 5-7행의 N개 연산은 모두 하나의 피연산자가 0인 덧셈이다. 그러나 다음 단계로 제 4행에서 j = 1로 설정하였을 때는 N개 연산 중 일부는 피연산자가 모두 0이 아닌 덧셈이며, 나머지 일부는 피연산자 중 하나가 0인 덧셈이다. 후자의 경우가 어느 부분에서 발생하는지를 측정하면 b 배열의 첫 번째 원소인 b[0]과 두 번째 원소인 b[1]의 상대적인 차이 값을 구할 수 있다. 공격자가 이를 계속 반복하면 b 배열의 인접한 원소들 간의 상대적 차이 값을 모두 구할 수 있으며, 간단한 전수 조사(exhaustive search)에 의해 b[0]값만 구하면 b 배열 내의 모든 원소를 알아내어 키를 복원할 수 있다.
예를 들어, 다음은 N=7, b = [1, 4, 6]인 경우에 있어서, 도 1의 알고리즘의 제5-7행 부분에 대한 전력 소모 패턴을 시간 순으로 모식적으로 나타낸 것이다.
j = 0: ZN ZN ZN ZN ZN ZN ZN
j = 1: NN NN NN NN ZN ZN ZN
j = 2: NN NN NN NN NN ZN ZN
여기서 ZN는 0과 0이 아닌 수 사이의 덧셈을 나타내며, NN은 0이 아닌 수와 0이 아닌 수 사이의 덧셈을 나타낸다.
상기 결과를 분석해 보면, j = 1일 때 후반부의 3개의 ZN 부분은 b[0]과 b[1]의 상대적인 차이가 3임을 의미하며, j = 2일 때 후반부의 2개의 ZN 부분은 b[1]과 b[2]의 상대적인 차이가 2임을 의미한다. 공격자는 b의 내용을 모르는 상태에서 위의 전력 소모 패턴만으로 b를 추측하게 되는데, b[0]을 x라 추정하면, b = [x, x+3, x+5]를 얻을 수 있다. 따라서 b의 원소 각각은 모르지만 실제로는 x 값 하나만을 구하면 b의 모든 원소들을 구할 수 있으므로 x 값을 전수조사하면 b를 알아낼 수 있다.
상기 공격 방법은 도 1의 알고리즘뿐 아니라 이와 유사한 형태를 가지는 모든 컨볼루션 알고리즘에 적용 가능한 방법이다.
도 2는 본 발명의 일 실시예에 따른, SPA 공격을 막기 위한 다항식 컨볼루션 방법의 일례를 구현한 알고리즘을 나타내는 도면이다. 이 알고리즘은 t 배열의 각 원소들을 0으로 초기화하는 대신 q로 초기화함으로써 0과의 덧셈 자체가 일어나지 않게 하여 모든 덧셈이 유사한 전력 소모 패턴을 가지게 한다. 따라서 0에 대한 덧셈 판별에 기초한 SPA 공격을 방지할 수 있다. 또한, 도 2의 알고리즘은 초기화 단계에서의 변경 이외에 어떠한 추가적인 연산도 수행하지 않으므로 SPA 방지 기능을 추가하는 데서 오는 성능상의 손실이 전혀 없는 것을 특징으로 한다.
도 2의 알고리즘의 제1-3행은, '공개 키' 또는 '암호문'에 해당하는 제1 다항식(c(X))과 임의선택 가능한 제2 다항식(a(X))과의 다항식 컨볼루션 연산 결과를 저장할 배열(t(X))의 각 원소들을 0이 아닌 초기 값(q)으로 초기화하는 단계에 해당하며, 나머지 제4-11행은 0이 아닌 초기 값으로 초기화된 배열(t(X))에, 제1 다항식(c(X))과 상기 제2 다항식(a(X))의 컨볼루션 연산 결과를 저장하는 단계에 해당한다. 특히, 알고리즘 2는 다항식 컨볼루션 연산 결과를 저장할 배열(t(X))의 각 원소들을 0이 아닌 동일한 초기 값(q)으로 저장하는 실시예를 나타내고 있다. 또한, 알고리즘 2에 따르면, 0이 아닌 동일한 초기 값을 mod 연산의 피연산자인 q와 동일한 값으로 설정함으로써, 다항식 컨볼루션 연산 결과를 저장한 후, 처음 초기화 단계에서 사용된 초기 값으로 감산하는 단계를 필요 없도록 하고 있다.
(2)
차분
전력 분석(
Differential
Power
Analysis
:
DPA
) 공격의 방지
SPA에 대한 방지 기능을 추가한 후에는 0과의 덧셈과 0이 아닌 수들 간의 덧셈은 구분되지 않도록 할 수 있으나, 여전히 덧셈 연산의 피연산자들 간의 차이에 의해 전력 소모의 미세한 차이가 발생할 수 있다. 이러한 차이는 SPA와 같은 단순한 공격 방법으로는 감지하기 어려우나, 차분 전력 분석과 같은 좀 더 고도화된 공격 방법으로는 감지할 수 있다. NTRU에 대한 DPA에서 공격자는 일정한 이진 다항식 a(X)(따라서 일정한 배열 b)에 대하여 다양한 일반 다항식 c(X)들을 변화시키면서 적용하여 그 전력 소모 패턴을 측정한 후 그 결과를 통계적으로 분석하여 배열 b의 정보를 알아낸다. 따라서 공격자는 전력 소모 데이터를 SPA에서보다 더 많이 가지고 있으므로, 1회의 전력 분석에서는 감지할 수 없었던 미세한 차이를 누적시켜 더 큰 정밀도를 가지는 공격을 수행할 수 있다.
좀 더 구체적으로 설명하면, 공격자는 b 배열의 원소들을 알아내는 것이 목표인데, 도 1에 도시된 알고리즘의 제6행에서 tk +b[j] + ck의 결과 값이 최하위 비트가 0인 경우와 1인 경우에 대하여 공격자는 전력 소모의 미세한 차이점을 감지할 수 있다. 다만, 이 차이점은 SPA에서와 같이 1회의 전력 측정으로 구분해 낼 수 있는 차이가 아니므로, 다양한 c(X)에 대하여 연산을 수행하여 전력 소모의 차이를 누적시킴으로써 측정하게 된다. 이러한 공격이 가능한 것은, 같은 피연산자에 대한 덧셈은 같은 전력 소모 패턴을 가진다는 데에 기반하고 있다. 따라서 같은 피연산자와 관련된 계산이라도 항상 다른 전력 소모 패턴이 나오도록 함으로써 DPA를 방지하는 것이 가능하다.
도 3은 본 발명의 일 실시예에 따른, DPA 공격을 막기 위한 다항식 컨볼루션 방법의 일례를 구현한 알고리즘을 나타내는 도면이다. 이 알고리즘은 t 배열의 각 원소들을 무작위수로 초기화함으로써 같은 입력에 대하여 알고리즘을 수행시켜도 전력 소모 패턴이 매번 다르게 나오도록 하는 알고리즘이다. 연산이 끝난 후에는 해당 무작위수를 제거하여 연산 결과를 보정해 주어야 하며, t 배열에 초기화되는 각 원소는 모두 같은 값일 수 있다. 이 알고리즘은 같은 입력은 같은 전력 소모를 발생시킨다고 가정하는 데서 기인하는 DPA 공격을 방지할 수 있다.
도 3에 도시된 알고리즘에서, 제1-3행은 다항식 컨볼루션 연산 결과를 저장 할 배열(t(X))의 각 원소들을 초기화할 초기 값들을 무작위로 생성하는 단계를 나타내며, 제4-6행은, 무작위로 생성된 초기 값들을 이용하여 다항식 컨볼루션 연산 결과를 저장할 배열(t(X))의 각 원소들을 초기화하는 단계들을 나타낸다. 제12-14행은, 저장된 다항식 컨볼루션 연산 결과로부터 상기 무작위로 생성된 값을 감산하는 단계를 나타낸다.
도 4 및 도 5는 전력 분석 공격에 대한 방지 기법이 적용되지 않은 도 1의 알고리즘을 이용하여 DPA 공격을 수행하는 실험의 예를 나타내는 도면이다. 도 4와 도 5의 가로축은 시간축이며, 세로축은 전력 신호의 크기를 나타낸다. 이 실험에서 공격자는 고정되어 있는 (그러나 공격자는 모르는) b 배열의 j번째 원소인 b[j]의 값을 임의로 추정한 후, 도 1에 도시된 알고리즘을 서로 다른 다수 개의 c(X) 다항식들에 대하여 수행하여 tk +b[j] + ck 결과 값이 최하위 비트가 1인 경우와 0인 경우를 분류한 후 이들의 차이를 증폭시킨다. 추정이 잘못되었을 경우의 증폭 신호에서는 도 4와 같이 아무런 특징 없이 0을 중심으로 무작위 값들이 나타나게 된다. 만일 추정이 맞을 경우에는 도 5와 같이 일정 부분에서 신호의 극값(peak value)이 나타나게 된다. 이때 공격자는 b[j]의 여러 가능성들에 대해 극값이 나타날 때까지 다른 값으로 재추정하여 분류 및 증폭하는 작업을 반복하면 된다.
본 발명의 특징에 따른 DPA 방지 기법을 적용하면 도 5와 같이 극값이 나타나는 경우는 발생하지 않게 되며, 공격자가 정확한 추정을 하더라도 도 4와 유사한 증폭 그래프를 얻게 되어 자신이 추정한 값이 맞는 값인지 틀린 값인지 확인할 수 없어 공격에 성공할 수 없게 된다.
도 6 및 도 7은 DPA 공격을 막기 위한 다항식 컨볼루션 방법의 또 다른 실시예들을 구현한 알고리즘을 나타내는 도면이다. 이 알고리즘들도 역시 t 배열의 각 원소들을 무작위수로 초기화함으로써 같은 입력에 대하여 알고리즘을 수행시켜도 전력 소모 패턴이 매번 다르게 나오도록 하는 알고리즘이다. 연산이 끝난 후에는 해당 무작위수를 제거하여 연산 결과를 보정해 주어야 하며, t 배열에 초기화되는 각 원소는 모두 같은 값일 수 있다. 이 알고리즘은 같은 입력은 같은 전력 소모를 발생시킨다고 가정하는 데서 기인하는 DPA 공격을 방지할 수 있다.
또한 도 2의 SPA 방지 알고리즘과 도 3, 도 6, 도 7의 DPA 방지 알고리즘들은 다항식 a(X)가 단순한 이진 다항식이 아니라 ‘승법형(product-form)’의 다항식인 경우에도 유사하게 적용 가능하다. 여기서, ‘승법형(product-form)’의 다항식이란, 이진 다항식 a1(X), a2(X), a3(X)에 대하여 a(X) = a1(X)*a2(X) 또는 a(X) = (a1(X)*a2(X)+a3(X)) 또는 a(X) = a1(X)*a2(X)*a3(X)와 같은 형태의 다항식을 말한다.
이상 설명한 본 발명은 본 발명이 속한 기술분야에서 통상의 지식을 가진 자에 의하여 다양한 변형이나 응용이 가능하며, 본 발명에 따른 기술적 사상의 범위는 아래의 특허청구범위에 의하여 정해져야 할 것이다.