I. 서론
타원곡선 암호시스템 (ECC, Elliptic Curve Cryptosystem)은 1985년 Koblitz와 Miller에 의해 처음 제안되었다[1,2]. 타원곡선 암호시스템은 기존의 RSA와 Elgamal 공개키 암호시스템에 비하여 짧은 키 길이로 유사한 안전성을 제공한다는 장점을 가지고 있다. 또한 키의 길이가 짧기 때문에 스마트 카드와 같이 자원이 제한된 분야에서 효율적으로 사용될 수 있다. 타원곡선 암호시스템의 안전성과 효율성에 가장 큰 영향을 주는 연산은 타원곡선 스칼라 곱셈 (Elliptic Curve Scalar Multiplication) 연산이다. 타원곡선 스칼라 곱셈 연산은 주어진 타원곡선 상의 점 P와 임의의 상수 k에 대해서 kP (= P+... +P, k times)를 계산하는 것이다. 타원곡선 스칼라 곱셈 연산의 효율성을 높이기 위한 방법으로 Double and add 알고리즘, Montgomery ladder 알고리즘, Euclidean Addition Chain (EAC)을 사용하는 타원곡선 스칼라 곱셈 알고리즘 등이 제안되었다[3,4]. 이 중 EAC를 사용하는 타원곡선 스칼라 곱셈 알고리즘은 상수 k를 EAC로 표현 하여 효율적으로 kP 를 계산하는 방법이다. EAC를 사용하는 타원곡선 스칼라 곱셈 알고리즘의 효율성을 높이기 위하여 Co-Z 덧셈 연산 방법, (X, Z)만을 사용하는 덧셈 연산 방법 등이 제안되었다[5-7].
수학적으로 안전한 것으로 알려진 알고리즘도 구현 단계에서 고려되지 못한 부가적인 정보의 누출이 있다는 것이 알려졌다. 부채널 공격은 이러한 부가적인 정보로부터 비밀키를 알아내는 공격 방법이다[8]. 부채널 공격 중 하나인 오류 주입 공격 (Fault Attacks)은 1996년 Boneh 등이 처음 소개한 공격 방법으로 암호 장치가 동작할 때 오류를 주입하여 비밀키에 대한 정보를 얻는다[9]. 오류 주입 공격은 타원곡선 암호시스템을 포함한 대부분의 암호 알고리즘에 적용 가능한 공격 방법으로 알려져 있다[10-16].
2009년 S. Pontarelli 등은 EAC를 이용한 타원곡선 암호시스템에서 오류 주입 여부를 탐지하기 위한 오류 탐지 방법을 제안하였다[17]. 본 논문에서는 [17]의 오류 탐지 방법으로 오류 주입 여부를 탐지할 수 없는 새로운 오류 주입 공격을 제안한다. 제안하는 방법은 EAC에 비트 플립 오류(bit flip error)를 주입하여 비밀키에 대한 정보를 얻는다.
본 논문의 구성은 다음과 같다. 2장에서는 관련 연구에 대해 기술한다. 3장에서 제안하는 오류 주입 공격 방법을 설명한다. 4장에서는 공격 방법에 대한 대응방법을 기술하며 마지막으로 5장에서 결론을 맺는다.
II. 관련 연구
본 장에서는 EAC를 사용하는 타원곡선 스칼라 곱셈 연산 방법을 소개한다. 또한 2009년 S. Pontarelli 등이 제안한 EAC를 사용하는 타원곡선 스칼라 곱셈 알고리즘에 대한 오류 탐지 방법을 설명한다.
2.1 Euclidean Addition Chain(EAC)을 사용하는 타원곡선 스칼라 곱셈 연산
EAC를 사용하는 타원곡선 스칼라 곱셈 연산은 2007년 A. Byrne 등이 처음 소개하였다[4]. 이 방법은 상수 k를 EAC로 표현하여 타원곡선 스칼라 곱셈 연산을 한다. ∀4 ≤ i ≤ l에 대하여, a1 = 1, a2 = 2, a3 = 3, …, al = k 일 때, 임의의 상수 k에 대하여 EAC c= (c4,...,cl-1, cl )를 구성하는 방법은 다음과 같다.
#
예를 들어, k = 40인 경우, k에 대한 EAC는 다음과 같이 표현할 수 있다.
#
[표 1]은 Q = 40P를 구하는 예이다. (U1, U2)를 EAC를 사용하는 타원곡선 스칼라 곱셉 알고리즘의 중간값이라 하자. (U1, U2)의 초기값을 (2P,P)라 할 때, EAC c= (0,1,1,1,1,0)를 사용하여 타원곡선 스칼라 곱셈 40P를 계산하는 과정은 [표 1]과 같이 나타낼 수 있다.
[표 1] EAC를 사용하여 Q = 40P 를 계산하는 방법
또한 ∀4≤ i ≤l에 대하여, (U1, U2)는 다음과 같이 표현된다.
#
이와 같은 방법으로 구성된 EAC를 사용하는 타원곡선 스칼라 곱셈 알고리즘은 [그림 1]과 같다.
[그림 1] Euclidean Addition Chain(EAC)를 사용하는 타원곡선 스칼라 곱셈 알고리즘
2.2 타원곡선 스칼라 곱셈 연산에서 오류 탐지 방법
2009년 S. Pontarelli 등은 EAC를 사용하는 타원곡선 스칼라 곱셈 연산에 대한 오류 탐지 방법을 제안하였다[17]. 제안하는 오류를 탐지 방법은 다음과 같다. EAC를 사용하는 타원곡선 스칼라 곱셈 알고리즘의 i-1번째 중간값을 U1(i-1), U2(i-1)라 하자. i번째 중간값 U1(i), U2(i)는 다음과 같이 표현한다.
U1(i) = U1(i-1) +U2(i-1)
#(1)
또한, ci에 대하여 UC(i)를 다음과 같이 정의하자.
#(2)
UD(i+1)를 U1(i)과 U2(i)의 차라고 하면, UD(i+1)는 다음과 같이 계산된다.
#(3)
수식 (1)에서 U2(i)는 ci에 따라 U1(i-1) 또는 U2(i-1)값을 가지기 때문에 UD(i+1)는 U2 (i-1) 또는 U1(i-1)값을 가지게 된다. 즉, ci의 비트값에 대하여 UD(i+1) = UC(i)가 성립한다. 이러한 특징 때문에 UD(i+1)와 UC(i)의 값을 비교하여 일치하지 않는 경우 오류가 주입되었음을 탐지할 수 있다. S. Pontarelli 등이 제안한 오류 탐지 방법이 적용된 알고리즘은 [그림 2]와 같다. [그림 2]는 UD와 UC값을 비교하여 오류 주입 여부를 판단한다. 중간값 U1 또는 U2에 오류가 주입되는 경우 UD값이 올바르지 않기 때문에 UD와 UC값을 비교하여 오류를 탐지할 수 있다.
[그림 2] Euclidean Addition Chain(EAC)를 사용하는 타 원곡선 스칼라 곱셈 알고리즘 (Error detection)
III. 제안하는 오류 주입 공격
3.1 표기법
본 논문에서는 제안하는 오류 주입 공격 방법을 설명하기 위한 값들을 다음과 같이 표기한다.
• l : Euclidean Addition Chain(EAC)의 길이.
• c= (c4,...,cl-1, cl ) : EAC
• c′ = (ci + 1,...,cl- 1, cl ) : 최하위 cl 부터 ci+1까지 EAC.
• c′′ = (ci+2,...,cl-1, cl ) : 최하위 cl 부터 ci+2까지 EAC.
• ci : EAC의 i번째 값.
• c̃i : 비트 플립 오류를 주입한 EAC의 i번째 값.
• c̃ : ci에 비트 플립 오류를 주입한 EAC.
• (U1,ci ,U2,ci ) : ci에 대한 중간값.
• Q : 올바른 결과값.
• # : ci에 오류가 주입된 결과값.
• # : ci +1를 0으로 가정한 뒤, ci에 오류가 주입된 결과값.
3.2 오류 주입 공격
제안하는 공격 방법은 타원곡선 스칼라 곱셈의 상수 k에 대한 EAC c= (c4,...,cl- 1, cl )에 비트 플립 오류 (bit flip error)를 주입한다. 제안하는 공격 방법은 ci에 오류를 주입하여 얻은 결과값과 ci+1까지의 EAC c′ = (ci + 1,...,cl-1, cl )를 이용하여 ci+1의 비트값과 ci에 대한 중간값 (U1,ci ,U2,ci)를 알아낸다. 먼저 다음과 같은 과정으로 cl 과 cl-1에 대한 중간값 (U1,cl-1 ,U2,cl-1 )를 알 수 있다.
단계 1. [그림 1]의 정상적인 실행으로 올바른 결과값 Q를 얻는다. cl 에 대한 중간값 (U1,cl ,U2,cl )에 대하여 올바른 결과값은 Q = U1,cl +U2,cl이다.
단계 2. cl 에 비트 플립 오류를 주입하여 오류가 주입된 결과값 #을 얻는다. cl 에 오류를 주입한 경우, [표 2]와 같이 cl 에 대한 U1값과 U2값은 (U1,cl , U1,cl -U2,cl )이 되며 오류가 주입된 결과값은 # = 2U1,cl -U2,cl이다. Q+# = 3U1,cl 이므로 U1,cl 값을 알 수 있다. 또한 Q와 U1,cl 의 차를 계산하여 U2,cl 값을 알 수 있다.
[표 2] cl 에 오류를 주입한 경우
단계 3. cl-1에 비트 플립 오류를 주입하여 오류가 주입된 결과값 #을 얻는다. 이 때, cl를 0이라고 가정하면 [표 3]과 같이 cl-1에 오류가 주입된 결과값은 Q̃ cl-1,cl = 0 =3U1,cl-5U2,cl이다. #와 # = 0가 일치 하는 경우, cl = 0이며 (U1,cl-1 ,U2,cl-1 ) = (U1,cl-U2,cl ,U2,cl )이다. 일치하지 않는 경우, cl = 1이며 (U1,cl-1 ,U2,cl-1)=(U2,cl ,U1,cl-U2,cl )이다.
[표 3] cl-1에 오류를 주입한 경우(cl = 0으로 가정)
위와 같이, cl 와 cl- 1에 오류를 주입하여 cl 의 비트 값과 cl- 1에 대한 중간값 (U1,cl-1 ,U2,cl-1)를 알아낸다.
공격의 효율성을 높이기 위하여 위 방법을 일반화한 ci에 대한 공격 방법을 설명한다. c′′ = (ci + 2,...,cl- 1, cl)와 ci +1에 대한 중간값 (U1,ci+1, U2, ci+1)을 알고 있다고 가정한다. 임의의 (U1, U2)에 대하여 EAC c′ = (ci + 1,...,cl- 1, cl)를 사용하는 타원곡선 스칼라 곱셈 알고리즘은 [그림 3]과 같다.
[그림 3] EAC c′ = (ci + 1,...,cl- 1, cl )를 사용하는 타원곡선스칼라 곱셈 알고리즘
[그림 3]을 이용한 공격 방법은 다음과 같다.
단계 1. ci에 비트 플립 오류를 주입하여 #을 얻는다.
단계 2. ci + 1를 0으로 가정하면, ci에 대한 중간값은 (U1,ci , U2,ci)=(U1,ci+1-U2,ci+1 , U2,ci+1 )이다 . ci에 비트 플립 오류가 주입되었다고 가정 하면, c̃i에 대한 중간값은 (U1,ci , U2,ci ) = (U1,ci+1-U2,ci+1 , U1,ci+1-2U2,ci+1)이다. c′ = (ci + 1,...,cl-1, cl )과 (U1,ci , U2,ci ) = (U1,ci+1-U2,ci+1 , U1,ci+1-2U2,ci+1)를 이용하여[그림 3]을 수행한 뒤, 오류가 주입된 결과값 #을 얻는다.
단계 3. #와 #0가 일치하는 경우, ci + 1 = 0이며 (U1,ci,U2,ci)=(U1,ci+1-U2,ci+1 ,U2,ci+1 )이 다. 일치하지 않는 경우, ci + 1 = 1이며 (U1, ci ,U2,ci )=(U2,ci+1 ,U1,ci+1-U2,ci+1 )이다.
단계 4. 단계 1 ~ 단계 3을 반복한다.
즉, EAC인 c=(c4,...,cl-1, cl)의 최하위 cl 부터 최상위 c4까지 순차적으로 오류를 주입하여 모든 c=(c4,...,cl-1, cl)를 알아낼 수 있다. 또한 알아낸 c=(c4,...,cl-1, cl)를 이용하여 상수 k를 복원할 수 있다. 제안하는 공격 방법은 c=(c4,...,cl-1, cl)에 비트 플립 오류를 주입한다. 그 결과, EAC를 사용하는 타원곡선 스칼라 곱셈 알고리즘은 c̃=(c4,...,c̃i ,..., cl)에 대한 타원곡선 스칼라 곱셈 연산을 하게 된다. ci = 1이라고 가정하자. 이 때, 수식 (1)의 U2 (i)는 U1 (i-1) 이고, 수식 (2)의 UC(i)는 U2(i-1)이며 수식 (3)의 UD(i+1)는 U2 (i-1)이다. ci에 비트 플립 오류가 주입되어 c̃i이 되면, U2(i)값은 U2(i-1), UC(i)는 U1(i-1), UD(i+1)은 U1(i-1)로 변경된다. 즉, 오류가 주입된 경우에도 UD(i+1)와 UC(i)는 같은 값을 가지기 때문에 S. Pontarelli가 제시한 오류 탐지 방법으로 오류를 탐지할 수 없다. 마찬가지로 ci = 0인 경우에도 오류 탐지가 불가능하다.
IV. 제안하는 공격에 대한 대응방법
타원곡선 스칼라 곱셈 연산에 대한 오류 주입 공격을 막기 위하여 다양한 오류 탐지 방법들이 제시되고 있다. 일반적으로 결과값이 타원곡선상의 점인지 확인 하는 방법을 가장 많이 사용한다[9]. 이외에도 타원곡선 스칼라 곱셈 연산을 반복 수행하여 두 결과값을 비교하거나, 타원곡선 위의 점 P 또는 상수 k를 랜덤하게 하는 방법 등이 있다[16].
제안하는 공격에 대한 대응방법으로 상수 j를 이용하여 타원곡선 스칼라 곱셈 알고리즘의 상수 k를 랜덤하게 하는 방법을 사용할 수 있다. 이 방법은 [18]에서 처음 소개된 방법으로 k″= k+j(#E)를 만족하는 랜덤한 k″ 에 대하여 타원곡선 스칼라 곱셈 연산을 수행하는 것이다. 타원곡선 위의 점 P의 위수(order) n은 nP = O를 만족하는 가장 작은 양의 정수이며, n은 타원곡선의 위수 #E를 나눈다. 따라서 (#E)P = O이고 k″P = (k+j(#E))P≡kP를 만족한다. 제안하는 공격 방법은 EAC를 사용하는 타원곡선 스칼라 곱셈 알고리즘에 반복적으로 비트 플립 오류를 주입한다. 또한 c″= (ci + 2,...,cl-1, cl )과 ci + 1에 대한 중간값 (U1,ci+1 , U2,ci+1)을 알고 있다는 가정하에 ci + 1를 찾는다. 그러나 오류를 주입할 때마다 매번 다른 k″에 대한 EAC를 사용하는 경우, c″ 또한 매번 변경되어 제안 하는 공격 방법을 적용할 수 없다. 따라서 제안하는 오류 주입 공격에 안전하다.
V. 결론
본 논문에서는 EAC를 이용한 타원곡선 스칼라 곱셈 연산에 대한 새로운 오류 주입 공격을 제안하였다. 제안하는 방법은 ci에 오류가 주입된 결과값 #와 ci + 1의 값을 0으로 가정한 뒤 얻은 결과값 #, ci+1 = 0을 비교하여 ci + 1를 알아낸다. 이러한 비트 플립 오류를 이용하여 EAC를 사용하는 타원곡선 스칼라 곱셈 알고리즘의 EAC c= (c4,...,cl-1, cl)를 모두 알아낸다. 또한 알아낸 EAC c= (c4,...,cl-1, cl)를 이용하여 타원곡선 스칼라 곱셈 알고리즘의 상수 k를 알 수 있다. 제안하는 공격 방법은 기존에 제안된 S. Pontarelli의 오류 탐지 방법으로는 오류 주입 여부를 판단할 수 없 으며, 제안하는 오류 주입 공격에 안전하게 하기 위해 상수 k를 랜덤하게 하는 방법을 사용할 수 있다.
* 본 연구는 지식경제부 및 정보통신산업진흥원의 대학IT연구센터육성 지원사업의 연구결과로 수행되었음 (NIPA-2012-H0301-12-3007)
참고문헌
- N. Koblitz. "Elliptic curve cryptosystems," Mathematics of Computation, Vol. 48, no.177, pp. 203-209, Jan. 1987. https://doi.org/10.1090/S0025-5718-1987-0866109-5
- V.S. Miller, "Use of elliptic curves in cryptography," CRYPTO'85, LNCS 218, pp. 417-426, 1986.
- N. Meloni, "New point addition formulae for ECC Applications," WAIFI'07, LNCS 4547, pp. 189-201. Jun. 2007.
- A. Byrne, F. Crowe, W.P. Marnane, N. Meloni, A. Tisserand, and E. Popovici, "SPA resistant elliptic curve cryptosystem using addition chains," International Journal of High Performance Systems Architecture, Vol. 1, no.2, pp. 133-142, Oct. 2007. https://doi.org/10.1504/IJHPSA.2007.015399
- R.R. Goundar, M. Joye and A. Miyaji, "Co-Z addition formulæ and binary ladders on elliptic curves," In: Mangard, S., Standaert, F-X. (eds.) CHES'10. LNCS 6225, pp. 65-79. Aug. 2010.
- J. Lopez and R. Dahab, "Fast multiplication on elliptic curves over GF(2m) without precomputation," CHES'99, LNCS 1717, pp. 316-327, Aug. 1999.
- T. Izu and T. Takagi, "A fast parallel elliptic curve multiplication resistant against side channel attacks," PKC'02, LNCS 2274, pp. 280-296, Feb. 2002.
- P. Kocher, "Timing attacks on implementations of Diffie-Hellman, RSA, DSS, and other Systems," Advances in Cryptology, Proc. CRYPTO'96, pp. 104-113, Aug. 1996.
- D. Boneh, R.A. DeMillo and R.J. Lipton, "On the importance of eliminating errors in cryptographic computations," Journal of Cryptology, 2001; Extended abstract in Proc. EUROCRYPT'97, Vol. 14, no. 2, pp. 110-119, May. 1997.
- F. Bao, R.H. Deng, Y. Han, A. Jeng, A.D. Narasimbalu and T. Ngair, "Breaking Public Key Cryptosystems on Tamper Resistant Devices in the Presence of Transient Faults," Security Protocols Workshop 1997, LNCS 1361, pp. 115-124, Apl. 1997.
- J. Schmidt and C. Herbst, "A Practical Fault attack on Square and Multiply," FDTC'08, IEEE Computer Society, pp. 53-58, Aug. 2008.
- P. Fouque and R. Lercier, "Fault Attack on Elliptic Curve with Montgomery Ladder Implementation," FDTC'08, IEEE Computer Society, pp. 92-98, Aug. 2008.
- I. Biehl, B. Meyer, and V. Muller. "Differential fault attacks on elliptic curve cryptosystems," CRYPTO'00, LNCS 1880, pp. 131-146, Aug. 2000.
- M. Ciet, M. Joye, "Elliptic curve cryptosystems in the presence of permanent and transient faults," Cryptology ePrint Archive, Vol. 36, no. 1, pp. 33-43, Jul. 2005.
- J. Blomer, M. Otto, and J. Seifert, "Sign change fault attacks on elliptic curve cryptosystems," FDTC'06, LNCS 4236, pp 36-52, Oct. 2006.
- A. Dominguez-Oviedo and M. Anwar Hasan, "Error Detection and Fault Tolerance in ECSM Using Input Randomization," IEEE Trans. Dependable and Secure Computing Vol. 6, no.3, pp. 175-187, Jul. 2009. https://doi.org/10.1109/TDSC.2008.21
- S. Pontarelli, G.C. Cardarilli, M. Re, and A. Salsano. "Error detection in addition chain based ecc point multiplication," IEEE International On-Line Testing Symposium, pp. 192-194, Jun. 2009.
- J. Coron, "Resistance against Differential Power Analysis for Elliptic Curve Cryptosystems," Proc. CHES'99, LNCS 1717, pp. 292-302, Aug. 1999.