I. 서론
이론적으로 안전한 암호 알고리즘도 실제 구현 단계에서 암호 설계자가 고려하지 못한 부가적인 정보의 노출로 인해 비밀 정보가 노출될 수 있음이 알려졌다. 부채널 공격 (side channel attack)[1]은 오류 주입 공격 (fault attack)[2,3], 시간 공격 (timing attack)[1,4], 전력 분석공격 (power analysis attack)[5,6,7] 등이 있다. 부채널 공격 중 가장 강력한 분석 기법은 오류 주입 공격이다. 오류 주입 공격은 1996년 Boneh 등에 의해 처음 소개되었고, 정보보호 디바이스에서 암호 알고리즘이 구동될 때 오류를 주입하여 비밀 정보를 찾아내는 공격 방법이다[3]. 이후 공개키 암호 알고리즘인 RSA 암호 알고리즘[1,8,9], ElGamal 서명, DSA(Digital Signature Algorithm)서명[10-17], 타원곡선 DSA 서명[20,21] 및 블록암호 알고리즘인 DES(Data Encryption Standard)와 AES(Advanced Encryption Standard)[18,19] 등을 대상으로 오류 주입 분석에 관한 연구 및 대응법 연구가 활발하게 진행되었다.
DSA 서명에 대한 오류 주입 공격은 Bao 등이 처음 제시하였고[11], 개인키의 한 비트 플립 오류(filp error)를 가정하여, 한 번의 오류 주입으로 개인키의한 비트를 찾아낼 수 있다. 2004년 Giraud와 Knudsen은 바이트 단위의 공격으로 확장하였고, 2300개의 오류 서명을 통해 개인키를 찾을 수 있었다[14].
개인키에 대한 오류 주입 공격을 방어하기 위하여 Nikodem은 오류 확산 방법을 통해 안전한 DSA서명 방식[12,13]을 제안하였고, Bae 등은 비선형 함수인 역원 연산을 통해 1비트 오류가 확산되도록 하여 오류 주입 공격을 방어하는 대응법을 제안하였다[16].
DSA 서명 알고리즘에 대한 오류 주입 공격은 개인키 뿐만 아니라 서명 시 매 번 생성하는 난수에 대해서도 가능하다. 난수에 대한 오류 주입 공격법은 난수의 부분 정보를 알아냄으로써 최종적으로 개인키를 복구한다. Naccache등은 난수가 생성될 때 최하위 바이트를 0으로 강제리셋 시키는 오류를 주입하고, 27개의 오류 서명으로 개인키 1바이트를 추출하였다[15]. 또한 Schmidt는 ECDSA를 대상으로 난수에 대한 새로운 오류 주입 공격을 소개하였다[21]. 생성원과 난수를 이용해 스칼라 곱셈을 수행 할 때 특정 루프의 2배 연산과정을 생략하여 오류 서명을 출력하고, 이러한 서명 쌍을 모아 lattice 공격으로 개인키를 알아낸다. 이 공격법을 변형시켜 Jung 등은 DSA 서명 알고리즘의 취약점을 분석하였다[17].
본 논문에서는 기존에 제한된 오류 주입 공격에 대한 대응방법들의 취약점을 분석한 후, 새로운 DSA 서명 알고리즘을 제안한다. 제안하는 서명 알고리즘은 Nikodem의 대응법과 유사하게 서명 도중 오류 주입 여부를 검사하는 단계를 넣었고, 기존 서명 기법과는 다르게 난수를 2개 사용함으로써 모든 공격을 방어하도록 설계하였다. 제안 서명 알고리즘의 안정성은 다양한 오류 모델을 가정하여 증명하였다.
본 논문의 구성은 다음과 같다. 2장에서는 기존 오류 주입 공격과 대응법에 대해 살펴본다. 그리고 3장에서는 기존 대응법의 취약점을 분석하였다. 이런 취약점을 보안하여 모든 공격에 안전한 DSA 서명 알고리즘을 4장에 제안하였다. 마지막으로 5장에서 결론을 맺는다.
II. DSA 서명에 대한 오류 주입 공격 및 대응법 분석
본 장에서는 DSA 서명 알고리즘에 대한 설명과 오류 주입 공격 방법 및 기존의 대응 방법에 대해 살펴본다.
2.1 DSA 서명 알고리즘
현재 국제 전자서명 표준으로 사용되고 있는 DSA는 1991년 NIST(National Institute of Standard and Technology)에 발표되었다[10]. DSA는 ElGamal 서명과 마찬가지로 이산대수 문제에 안전성을 기반하고 있다. 전자 서명 알고리즘에 사용되는 파라미터들은 다음과 같다.
a. 파라미터 생성
-p: 512비트 이상의 소수.
-q: 160비트 소수로서 p-1의 약수.
-g: #의 원소로 위수 q를 가지는 생성원.
-h():해쉬 함수.
-a: #의 원소로서 사용자의 개인키.
-y: y = gamod p로 사용자의 공개 키.
b. 서명
메시지 m을 받은 서명자는 다음과 같은 과정으로 서명 값 (r,s)를 생성한다.
단계 1) 난수 k(0<k<q) 선택.
단계 2) r = (gkmod p)mod q 계산.
단계 3) s = k-1(h(m) +ar)mod q 계산.
c. 서명검증
수신자는 메시지 m과 서명 값(r,s)를 다음 절차에 의해 검증한다.
단계 1) w= s-1 mod q를 계산.
단계 2) v1 = gh(m)wmod p, v2 = yrwmod p를 계산.
단계 3) v1v2mod p mod q = r인지 확인.
2.2 오류 주입 공격
2.2.1 개인키에 대한 오류
- Bit flip 오류
Bao 등이 제안한 공격 방법[11]에서 공격자는 DSA 서명 알고리즘이 수행되는 동안 개인키 a가 저장되어 있는 레지스터에 오류를 주입하여 개인키의 임의의 한 비트가 비트 플립(flip error)되었다고 가정하고, 다음과 같은 과정을 통해 개인키를 복구할 수 있다.
단계 1) 개인키 a의 i번째 비트에 오류 발생, 오류가 주입된 개인키는 # = a±2i라 표현.
단계 2) 공격자는 오류가 주입된 개인키 #를 이용 하여 다음과 같이 오류 서명 값 (r,#)를 얻을 수 있다.
r = (gk mod p) mod q
#
단계 3) 오류 서명을 받은 공격자는 다음과 같이 T를 계산할 수 있다.
#
단계 4) 공격자는 검사 값 Ri를 계산한다.
#(1)
단계 5) 공격자는 다음 두 식을 확인해 봄으로써 오류가 발생했던 개인키의 한 비트를 찾을 수 있다.
TRi = r mod p mod q 이면 ai = 0
T/Ri = r mod p mod q 이면 ai = 1
비트 플립 오류는 랜덤한 비트에 오류가 주입되므로 공격자는 서로 다른 i에 대해 반복적으로 단계 5를 수행함으로써 개인키 a의 i번재 비트를 찾을 수 있다. 이러한 공격이 가능한 이유는 만약 개인 a의 i번째 비트가 0에서 1로 바뀌었다면 r은 # 와 같아질 것이고 1에서 0으로 바뀌었다면 r은T/Ri = #와 같아지기 때문이다.
- Random byte 오류
Giraud와 Kundsen[14]은 Bao 등의 공격 기법을 바이트 단위 오류 공격으로 확장하였다. 이 방법은 오류가 주입된 개인키 값과 주입되지 않은 개인키 값의 차분을 계산하고 이러한 과정을 여러 번 반복하여 키 후보가 될 수 있는 키 후보군을 전수조사가 가능한 수준까지 줄여 키를 찾았다. 이 오류 공격에서 필요한 오류 서명 쌍은 약 2300개였다. 이 방법은 #를 a+j×2i , 0 ≤ i ≤ 19 , -255 ≤ j ≤ 255로 표현하여 Bao 등의 공격과 동일한 분석 과정을 거치므로 자세한 수식과 설명은 생략한다. (자세한 내용은 [14]참조)
2.2.2 난수에 대한 오류
- 바이트 리셋 오류
서명 시 매번 생성하는 난수의 부분 정보를 이용하여 개인키를 복구하는 기법이 Naccache 등에 의해 소개되었다[15]. 논문에서 난수가 생성되는 동안 glitch attack을 통해 난수의 최하위 몇 바이트를 0으로 만드는 오류 모델을 가정한다. 난수의 부분정보를 통해 개인키를 복구 하는 문제는 lattice 공격으로 해결된다[22,23]. 이 문제는 Boneh과 Venkatesan에 의해 hidden number problem 이라[25] 소개된 것과 매우 유사하다. 이 문제는 다음과 같이 간단히 설명한다.
#
위의 식은 DSA 서명 중 서명 값 s를 생성하는 과정이다. 서명식에서 공격자는 s,h(m),r을 알 수 있다. 이 때 k의 정보 없이는 a를 알아낼 수 없으나, k의 부분정보를 알고 있는 s값을 충분히 많이 가지고 있다면 a값을 복구 할 수 있다. 이론적으로 160비트의 a를 복구하기 위해서 k의 l비트를 알고 있는 서명 값 s가 160/l개 필요하다. 예를 들면, 개인키를 추출하기 위해서 최하위 11개의 바이트에 대해 오류를 주입하면 2개의 서명 값이 필요하고, 최하위 1개의 바이트에 대해 오류를 주입하면 27개의 오류 서명 쌍이 필요하다고 제안하였다.
- 제곱 연산 과정을 생략하는 오류
Schmidt 등이 ECDSA를 대상으로 처음 제안하였고[21], Jung 등이 이를 변형하여 DSA에 적용하였다[17]. Jung 등이 사용한 공격 가정은 서명 값 r 을 생성 시 “[그림 1]”과 같이 Left-to-Right 이진지수승을 수행하게 되는데 이때 (t -i)번째 제곱 연산을 생략하는 것이다. 즉, k에 대한 지수승 연산 시, gk mod p, 연산 과정을 잘못하게 유도하여 정상적이지 않은 서명 값을 얻어낸다. 이 경우 난수 k의 i번째 이후 비트 값을 k′ = (ki ,⋯,k0)2로 표기한다. 공격을 통해 k′를 복구한 뒤 lattice 공격으로 개인키를 얻을 수 있다. k′을 얻는 과정을 다음과 같다.
[그림 1] Left-to-Right 이진 지수승 알고리즘
단계 1) 공격자는 서명 값 gkmod p 생성 과정에서 t-i번째 제곱 연산을 건너뛰는 오류를 주입하여 오류 서명 값을 얻는다.
#
단계 2) 공격자는 오류 서명 값 (#)을 통해 #를 계산한다.
#
단계 3) 단계1,2에서 얻은 #과 #를 통해 다음 등식을 만족하는 k′를 구한다.
#(2)
여기서 #는 모두 짝수라는 제한 조건을 갖는다.
2.3 오류 주입 공격 대응법
위에서 언급한 오류 주입 공격에 대한 대응법은 다음과 같다.
Bit flip/Random byte 오류 : Bit flip/Random byte 오류 주입 공격은 공격자가 오류 서명 값 #와 공개된 파라미터들을 이용해 서명 값 r을 복원한다. 즉, 공격자는 서명 값 r과 비교하기 위해 필요한 식 (1)의 Ri를 공개된 정보로만 계산한다. 따라서 대응법은 비밀정보 없이는 비교 값 Ri를 계산할 수 없도록 설계되어야 한다.
바이트 리셋 오류 : 공격자는 오류를 주입하여 난수 k의 부분 정보를 알고 있는 여러 개의 서명 쌍을 가지고 있음을 가정한다. 여러 개의 서명 쌍을 이용해 lattice 공격으로 개인키를 추출한다. 따라서 대응법은 lattice 공격에 필요한 조건을 만족시킬 수 없도록 설계되어야 한다.
제곱 연산 과정을 생략하는 오류 : 공격자는 난수의 부분정보를 알아내기 위해 식 (2)를 만족시키는 # 를 계산해야 한다. 즉, 오류서명 값 #을 알고 있는 공격자는 공개된 정보만으로 #를 계산한다. 따라서 대응법은 비밀정보 없이 #를 계산할 수 없도록 설계되어야 한다.
2.3.1 Nikodem의 방법
Nikodem은 bit flip 오류 주입 공격에 안전한 새로운 DSA 서명 알고리즘을 제안하였다[13]. 서명 과정중 개인키에 오류가 주입되면 그 오류가 서명 문 전체에 확산되는 성질을 이용하였다. “[그림 2]”는 Nikodem이 제안한 새로운 DSA 서명 알고리즘을 나타내고 있다.
[그림 2] 오류 주입 공격에 대응 하는 Nikodem의 DSA 서명 알고리즘
오류 주입 여부를 확인하는 과정을 통해 공격을 방어할 수 있다. “[그림 2]”의 단계 3에서 개인키를 사용한 후 단계 4를 통해서 오류 주입 여부를 검증하게 된다. 만약 오류가 주입 되지 않았다면 V = 0이고, 그렇지 않으면 V≠ 0이다. 따라서 단계 7의 서명 값 s는 추측하기 힘든 랜덤 값이 될 것이다. 오류 서명 값을 얻은 공격자는 식 (1)에서 공격에 필요한 Ri를 계산해야 되지만 서명 값 s가 랜덤 값이므로 비밀 정보 없이는 계산할 수 없다. 따라서 bit flip 오류 주입 공격을 적용할 수 없게 된다. 위의 서명 알고리즘은 기존 DSA서명 방법에 비해 약 3배 정도의 연산이 필요하다는 단점이 있다.
이 밖에도 Nikodem이 제안한 다른 기법도 있지만 이는 “[그림 2]”에서 연산량을 줄이기 위한 변형이므로 생략하도록 한다.(자세한 내용은 [12],[13]참조)
2.3.2 Bae 등의 방법
Bit flip 오류 주입 공격에 안전하면서 효율적으로 구현할 수 있는 DSA 서명 알고리즘이 Bae 등에 의해 소개되었다[16]. DSA 서명 방식에서 사용되는 파라미터나 함수를 그대로 사용하면서 1회의 역원 연산만 추가하므로 타 대응방식에 비해 효율적으로 구현할수 있다. 이는 Nikodem과 같이 오류를 검출하여 서로 비교하는 방식이 아니기 때문에 가능하다. 이 방식에서 가장 큰 특징 중 하나는 서명 값 r을 생성할 때 공개키 y를 사용하는 것과 서명 값 s를 생성할 때 개인키 a의 역원이 사용되도록 설계된 것이다. 개인키 a에 오류가 발생하더라도 a의 역원을 구하는 과정에서 오류가 확산된다. 역원의 비선형성(nonlinearity) 때문에 bit flip 오류 주입 공격에서 필요한 비교 값 Ri를 개인키에 대한 정보 없이 구할 수 없으므로 공격에 안전하다고 주장하였다. “[그림 3]”은 Bae 등의 알고리즘이다.
[그림 3] 오류 주입 공격에 대응하는 Bae 등의 DSA 서명 알고리즘
2.3.3 Jung 등의 방법
[17]에서 DSA에 대한 새로운 오류 주입 공격뿐만 아니라 이에 대한 대응법도 소개하였다. 또한 제안한 알고리즘이 bit flip 오류 주입 공격에도 안전하다고 주장하였다. “[그림 4]”는 Jung 등이 제안한 DSA 서명 알고리즘과 개선된 이진 지수승 연산 알고리즘이다. 먼저 bit flip 오류의 발생 여부를 확인하는 절차는 개인키 a의 역수를 사전에 저장한 후, T를 계산하는 단계 4에서 오류 주입 여부를 검증한다. 만약 오류가 주입 되었을 경우 a와 a-1가 소거되지 않기 때문에 T≠0이 되며 최종 서명은 추측하기 어려운 랜덤 값이 된다. 따라서 공격자는 식 (1)에서 공격에 필요한 Ri를 계산해야 되지만 서명 값 s가 랜덤 값이므로 비밀 정보 없이는 계산할 수 없으므로 개인키 오류 주입 공격에 안전하다. 제곱 연산 과정을 생략하는 난수에 대한 오류 주입 공격의 대응법으로 단계 2와 같이 새로운 이진 지수승 연산을 제안하였다. 단계 2를 통해 r을 계산할 때 사용된 k와 같은 값을 kr로 복원시킨다. 이 후 서명 과정에서 k 대신 kr을 사용한다.
[그림 4] 오류 주입 공격에 대응하는 Jung등의 DSA 서명 알고리즘
따라서 공격자는 단계 2,3에서 쓰인 난수가 서로 같으므로 식 (2)을 만족하는 #를 계산할 수없기 때문에 공격에 안전하다.
III. 기존 대응법의 취약성 분석
본 장에서는 지금까지 제안된 오류 주입 공격에 안전한 DSA 서명 알고리즘의 취약성을 분석하였다. 분석 대상은 Nikodem, Bae 등, Jung 등이 제안한 알고리즘이다. 각 논문에서 안전하다고 주장한 공격 모델 외에도 다양한 공격 기법을 적용하여 분석 하였다. 세 가지 알고리즘 모두 개인키 비트 플립 오류에 안전하게 설계하였다. 또한 개인 키 비트 플립 오류에 안전하면 랜덤 바이트 오류에도 안전한 것은 쉽게 확인할 수 있으므로 본 장에서는 난수에 대한 오류 주입 공격만을 고려한다.
3.1 Nikodem의 대응법
- 바이트 리셋 오류
“[그림 2]”의 알고리즘에서 난수 k 생성 시, 오류를 주입하여 최하위 몇 바이트를 0으로 고정시킬 수 있다. 이렇게 일부 값을 알고 있는 난수 k를 사용해 서명 값 s를 얻는다. 서명 값 s는 다음과 같은 과정을 통해 변형 할 수 있다.
공격자는 위와 같은 1 차식을 얻을 수 있다. 또한 최종 식에서 s,h(m),r 값을 알 수 있고 k의 부분정보를 알기 때문에 이러한 서명 쌍을 여러 개 모아 lattice 공격을 통해 개인키 a를 추출할 수 있다.
s= k-1 (h(m)+v)-1 mod q
= k-1(h(m) +k+ar)-1 mod q
= k-1(h(m) +ar) mod q
ks = h(m) +ar mod q
- 제곱 연산 과정을 생략하는 오류
“[그림 2]”의 단계 2에서 이진 지수승을 계산할 때 제곱 연산이 한 번 생략되었다고 가정하자. 오류로 인한 잘못된 서명 값 r을 이용하여 다음가 같은 계산이 이루어진다.
#
위의 마지막 식에서 r≠# 이므로 V≠0. 따라서 공격자는 식 (2)를 만족하는 #를 계산할 수있어야 하지만 비밀 정보를 알지 못하면 구할 수 없으므로 공격에 안전하다.
3.2 Bae 등의 대응법
- 바이트 리셋 오류
Naccache 등이 [15]에서 자신들의 공격에 대한 대응법을 제시하였는데, Bae등은 그 대응법을 자신들이 제안한 알고리즘에 적용하면 오류 주입 공격을 방어할 수 있다고 주장하였다. 하지만 [15]에서 제안한 대응법은 공격을 막는 것이 아닌 공격에 더 많은 시간을 필요하게 만드는 것이다. 또한 오류 검출 방법은 많은 오버헤드가 발생할 뿐만 아니라 오류가 검출되기전 공격을 성공할 수 있기 때문에 오류 주입 공격에 안전하지 않다. 따라서 알고리즘 단계에서 바이트 리셋 오류에 안전한 대응법이 필요하다.
- 제곱 연산 과정을 생략하는 오류
단계1) 공격자는 서명 값 ykmodp 생성 과정에서 t -i번째 제곱 연산을 건너뛰는 오류를 주입하여 오류 서명 값을 얻는다.
#
단계2) 공격자는 오류 서명 값 (#, #)을 통해 #를 계산한다.
#
단계3) 단계1,2에서 얻은 #과 # 를 이용해 다음 등식을 만족하는 k′를 구한다.
#
이렇게 k의 i번째 이후 비트 정보를 알고 있는 여러 개의 서명쌍을 통해 lattice 공격을 적용하면 개인키를 복구할 수 있다. Jung 등의 논문에서 처럼 #이 짝수라는 가정이 있어야 공격에 성공할 수 있다.
3.3 Jung 등의 대응법
- 바이트 리셋 오류
“[그림 4]”의 알고리즘에서 난수 k 생성 시 오류를 주입하여 최하위 바이트를 0으로 고정시킬 수 있다. 알고리즘의 단계 2부터 단계 4까지 쓰인 난수 k 와 kr이 모두 같기 때문에 T = 0 이다. 여기서 유의해야 할 점은 난수 kr이 정상적으로 복구되었기 때문에 k 의 최하위 바이트가 0인 것과 마찬가지로 kr도 동일한 바이트의 위치 값이 0임을 알 수 있다. 따라서 공격자 일부 정보를 알고 있는 난수 kr에 대한 1차식을 다음과 같이 얻을 수 있다.
st = kr-1(h(m)+ar) mod q
krst = h(m)+ar mod q
공격자는 lattice 공격에 필요한 1차 식을 위 식을 통해서 얻을 수 있으므로 이러한 서명 쌍을 여러 개 모아 개인키 a를 복원할 수 있다.
IV. 제안하는 서명 기법
본 장에서는 위에서 언급한 4가지 오류 주입 공격을 동시에 방어할 수 있는 새로운 DSA 서명 알고리즘을 제안한다. 제안하는 방식은 Nikodem의 오류 주입 공격에 안전한 DSA 서명 알고리즘[13]을 변형 시킨 것이다. 서명 과정 중 오류가 주입되면 그 오류가 서명문 전체에 확산되도록 설계하였다. 이렇게 확산된 오류는 서명 중 검증 단계를 통해 확인할 수 있다. 또한 기존에 하나만 사용했던 난수 k를 2개 사용함으로써 난수에 대한 오류 주입 공격도 방어할 수 있다.
4.1 제안하는 DSA 서명 기법
제안하는 오류 주입 공격에 안전한 DSA 서명 알고리즘은 “[그림 5]”에서 기술한다. 알고리즘 단계 1에서 난수 2개를 선택하여 새로운 난수 k를 생성한다. 이 때, 모듈러 연산이 반드시 수행되도록 k1 ∙k2 > q를 만족하는 k1,k2를 선택해야 한다. 단계 4,5는 오류 주입 여부를 검증하는 단계이다. 만약 단계 5 이전에 개인키 또는 난수에 오류가 주입되면 V≠0이 되어 서명 값 s는 추측하기 어려운 난수가 된다. 또한 “[그림 5]”와 같은 서명 알고리즘을 사용하더라도 검증 방법은 일반적인 DSA 서명 알고리즘과 동일하다. 즉 m에 대한 서명 값 ( r , s )를 받은 수신자는 다음과 같이 계산하여 서명의 유효함을 확인할 수 있다.
[그림 5] 제안하는 DSA 서명 알고리즘
w= s-1modq
v1 = gh(m )wmodp, v2 = yrwmodp
(v1 ∙v2 modp)modq= ? r
(증명) DSA 검증 알고리즘
서명식 s = k′(h(m)+v) -#modq
= k-1(h(m)+v) -k-1k1modq
= k-1(h(m)+v-k1) modq
= k-1(h(m)+ar) modq
따라서 w= k(h(m)+ar)-1 modq
검증식 (v1 ∙v2 modp)modq
=(gh(m)wyrwmodp)modq
= (gh(m)wgarw modp)modq
=(gw(h(m) + ar) modp)modq
= (gk(h(m) + ar)-1(h(m ) + ar) modp)modq
= (gk modp)modq
= r
4.2 안전성 분석
제안하는 서명 알고리즘의 안전성은 앞에서 언급한 4가지 오류 공격 모델을 가정하여 분석한다.
4.2.1 개인키에 대한 오류
먼저 서명 알고리즘이 수행되는 동안 개인키 a에 오류가 발생했을 경우에는 오류가 서명문 전체에 확산되기 때문에 오류 주입 여부 검증 단계를 거쳐 오류의 주입 여부를 검사 할 수 있다. 그 과정은 다음과 같이 이루어진다. 이 과정은 bit flip오류뿐만 아니라 random byte 오류에도 동일하게 적용된다. 개인키 a에 오류가 주입되었다고 가정하자. 오류가 주입된 후 서명 과정을 살펴보면 단계 4는#가 되고 이를 이용해 단계 5를 계산하면 # 와 같이 표현된다. 따라서 V = 0을 만족시키기 위한 필요충분조건인 gv y-r modpmodq = r가 성립되지 않으므로 V≠0이다. 서명 값 s는 랜덤 값이 되기 때문에 식 (1)의 Ri를 비밀정보 없이 구할 수 없다. 따라서 개인키에 대한 오류 주입 공격으로부터 안전하다.
4.2.2 랜덤수에 대한 오류
- 제곱 연산 과정을 생략하는 오류
“[그림 4]”의 단계 3에서 t -i번째 제곱 연산을 생략했다고 가정하자. 그러면 다음과 같은 과정을 통해서명 값을 얻는다.
1. # 를 계산한다.
2. # 를 계산한다.
3. # 를 계산한다.
4. k′ = (k⊕(r - #))-1moodq 를 계산한다.
5. #를 계산한다.
서명 값 (#,#)를 얻은 공격자는 난수의 부분정보를 알아내기 위해 식 (2)를 만족하는 #를 다음과 같이 계산한다.
#
하지만 서명과정에서 k1 ×k2 ≠# 이므로 V≠0가 된다. 따라서 #가 추측하기 힘든 랜덤 값이 되고, # 와 # 는 같지 않기 때문에 공격자는 공격에 필요한 # 을 계산할 수 없다. 그러므로 제곱 연산 과정을 생략하는 오류 모델에 안전하다.
- 바이트 리셋 오류
위의 오류 모델에서 여러 개의 서명 값 s가 lattice 공격에 필요한 1차 식을 만족할 수 있다면 개인키 a를 복원할 수 있다. 만약 k1 (또는 k2 )을 생성 시 오류를 주입하여 최하위 바이트가 0이 되었다고 가정하자. 이렇게 생성된 k1을 가지고 서명을 생성하면 단계 5의 V값은 0이 되고, 서명 값 s = k′(h(m) +v) -k#를 얻는다. 서명 값 s를 정리하면 다음과 같다.
sk = (h(m)+ar) moodq (3)
비록 1차 식을 얻었지만 공격자는 k의 부분정보를알 수 없기 때문에 lattice 공격에 적용할 수 없다. 이는 난수 k를 계산 할 때 모듈러 연산을 하기 때문에 k 의 최하위 바이트가 0이 아닌 값을 가지게 된다. 만약 k1 ×k2 <모듈러q 이면 모듈러 연산을 하지 않으므로 k의 최하위 바이트도 0임을 알 수 있다. 이 경우에는 식(3)에 의해 lattice 공격으로 개인키 a를 복구 할 수 있다. 따라서 난수 k1,k2를 선택할 때 모듈러 연산을 하도록 # <k1,k2<q에서 선택해야 한다. k1,k2 둘 다 최하위 바이트를 0으로 만들어도 마찬가지로 모듈러 연산으로 인해 k의 부분정보를 알 수 없기 때문에 이 또한 안전하다.
V. 결론
지금까지 DSA 서명 알고리즘에 대한 오류 주입 분석 기법과 기존 대응법을 알아보았고, 여러 가지 공격 모델을 적용하여 기존 대응법을 분석하였다. 또한 모든 오류 주입 공격에 안전한 새로운 DSA 서명 알고리즘을 제안하고 안정성을 분석하였다. “[표 1]”에서 기존 대응법과 안전성을 비교하였다. 제안 알고리즘을 제외한 다른 대응법들은 오류 주입 공격에 모두 취약 함을 알 수 있다.
[표 1] 오류 주입 공격에 대한 안전성 분석
제안하는 DSA 서명 알고리즘은 오류 확산 기법을 이용하여 오류 주입 여부를 검증하고 기존에 1개만 사용하였던 난수를 2개 사용하여 서명하도록 설계하였다. 비록 제안하는 서명 기법이 모든 오류 주입 공격에 안전하나 연산량이 크다는 단점이 있으므로, 앞으로 이를 개선해 나가야 할 것이다.
References
- P. Kocher, J. Jaffe, and B. Jun, "Timing Attacks on Implementations of Diffie-Hellman, RSA, DSS,and Others Systems," CRYPTO-1996, LNCS vol.1109, pp. 104-113, 1996.
- E. Biham, A. Shamir, "Differential Fault Analysis of Secret Key Cryptosystems," CRYPTO-1997, LNCS vol. 1294, pp. 513-525, 1997.
- D. Boneh, R. A. DeMillo and R. J. Lipton, "On the Importance of Checking Cryptographic Protocols for Faults," EUROCRYPT-1997, LNCS vol. 1233, pp. 37-51, 1997.
- P. Kocher, J. Jaffe, and B. Jun, "Introduction to differential power analysis and related attacks," White Paper, Cryptography Research, http://www.cryptography.com/dpa/technical 1998.
- P. Kocher, J. Jaffe, and B. Jun, "Differential power analysis," CRYPTO-1999, LNCS vol. 1666, pp. 388-397, 1999.
- S. Chari, J.R. Rao, and P. Rohatgi. "Template Attacks," CHES-2002, LNCS vol. 2523, pp. 13-28, 2002.
- E. Brier, C. Clavier, and F. Olivier, "Correlation power analysis with a leakage model," CHES-2004, LNCS vol. 3156, pp. 16-29, 2004.
- Bellcore Press Release, "New threat model breaks crypto codes," Sep. 1996.
- S. Yen, S. Kim, S. Lim, and S. Moon, "RSA speedup with Chinese Remainder Theorem ImmuneAgainst Hardware Fault Cryptanalysis," IEEE Transaction on Computer, Special issue on CHES, vol. 52, no. 4, pp. 461-472, Apr. 2003. https://doi.org/10.1109/TC.2003.1190587
- "National institute of standards and technology," FIPS PUB 186-2: Digital Signature Standard, 2000.
- F. Bao, R. H. De6ng, Y. Han, A Jeng, A. D. Narasimhalu, T. Ngair, "Breaking Public Key Cryptosystems on Tamper Resistant Devices in the Presence of Transient Faults," International Workshop on Security Protocols-1997, LNCS, vol. 1361, pp. 115-124, 1997
- M. Nikodem,"Error Prevention, Detection and Diffusion Algorithms for Cryptographic Hardware," 2nd International Conference on Dependability of Computer Systems - DepCos-RELCOMEX'07, pp. 127-134, June. 2007.
- M. Nikodem, "DSA Signature Scheme Immune to the Fault Cryptanalysis," CARDIS-2008, LNCS, vol. 5189. pp. 61-73, 2008
- C. Giraud and E. Knudsen, "Fault Attacks on Signature Schemes," ACISP-2004, LNCS vol. 3108, pp. 478-491, 2004.
- D. Naccache, P. Nguyen, M. Tunstall and C.Whelan, "Experimenting with Faults, Lattices and the DSA," PKC-2005, LNCS vol. 3386, pp. 16-28, 2005.
- K. S. Bae, Y. R. beak, S. J. Moon, J. C. ha, "An Efficient DSA Signature Scheme Resistance to the Fault Analysis Attack," Journal of The Korea Institute of Infomation Security and Cryptology, vol. 20, no. 5 pp. 49-57, Oct. 2010.
- Chul-Jo Jung, Doo-Hwan Oh, Doo-Sik Choi, Hwan-Koo Kim and Jae-Cheol Ha, "Cryptanalysis using Fault Injection and Countermeasures on DSA," Journal of The Korea Academia -industrial Cooperation Society, Vol. 11, no. 8 pp. 3045-3052, Aug. 2010. https://doi.org/10.5762/KAIS.2010.11.8.3045
- E. Biham and A. Shamir. "Differential Fault Analysis of Secret Key Cryptosystem," CRYPTO-97, LNCS vol. 1294, pp. 513-525, 1997.
- G. Piret and J.-J. Quisquater. "A Differential Fault Attack Technique Against SPN Structures, with Application to the AES and Khazad," CHES-2003, LNCS vol. 2779, pp. 77-88, 2003.
- I. Biehl, B. Meyer, and V. Muller. "Differential Fault Analysis on Elliptic Curve Cryptosystems. In M. Bellare," CRYPTO-2000, LNCS vol. 1880, pp. 131-146, 2000.
- J. Schmidt, M. Medwed, "A Fault Attack on ECDSA," FDTC-2009, pp. 93-99, Sep. 2009.
- N. A. Howgrave-Graham and N. P. Smart, "Lattice Attacks on Digital Signature Schemes," Design, Codes and Cryptography, vol. 23 no 3, pp. 283-290, Aug. 2001. https://doi.org/10.1023/A:1011214926272
- P. Q. Nguyen and I. E. Shparlinski, "The Insecurity of the Digital Signature Algorithm with Partially Known Nonces," Journal of Cryptology, Springer, vol. 15, no. 3, pp. 151-176, Mar. 2002. https://doi.org/10.1007/s00145-002-0021-3
- D. Boneh and R. Venkatesan, "Hardness of Computing the Most Significant Bits of Secret Keys in Diffie-Hellman and Related Schemes," CRYPTO-1996, LNCS 1109, pp. 126-142, 1996.