DOI QR코드

DOI QR Code

Optimized Binary Field Reduction Algorithm on 8-bit ATmega128 Processor

8-bit ATmega128 프로세서 환경에 최적화된 이진체 감산 알고리즘

  • Park, Dong-Won (Center for Information Security Technologies(CIST), Korea University) ;
  • Kwon, Heetaek (Center for Information Security Technologies(CIST), Korea University) ;
  • Hong, Seokhie (Center for Information Security Technologies(CIST), Korea University)
  • 박동원 (고려대학교 정보보호연구원) ;
  • 권희택 (고려대학교 정보보호연구원) ;
  • 홍석희 (고려대학교 정보보호연구원)
  • Received : 2014.10.06
  • Accepted : 2015.02.16
  • Published : 2015.04.30

Abstract

In public-key cryptographic system based on finite field arithmetic, it is very important to challenge for implementing high speed operation. In this paper, we focused on 8-bit ATmega128 processor and concentrated on enhancing efficiency of reduction operation which uses irreducible polynomial $f(x)=x^{271}+x^{207}+x^{175}+x^{111}+1$ and $f(x)=x^{193}+x^{145}+x^{129}+x^{113}+1$. We propose optimized reduction algorithms which are designed to reduce repeated memory accesses by calculating final reduced values of Fast reduction. There are 53%, 55% improvement when proposed algorithm is implemented using assembly language, compare to previous Fast reduction algorithm.

유한체 연산을 기반으로 하는 공개키 암호 시스템은 고속 연산이 매우 중요한 과제이다. 본 논문에서는 8-bit ATmega128 프로세서 환경에서 이진 기약다항식 $f(x)=x^{271}+x^{207}+x^{175}+x^{111}+1$$f(x)=x^{193}+x^{145}+x^{129}+x^{113}+1$을 이용한 감산 연산의 효율성을 높이는 데에 중점을 두었다. 기존의 감산 연산 알고리즘인 Fast reduction의 최종적인 감산 결과 값을 제시함으로써, 중복 발생하는 메모리 접근을 최소화 하여 최적화된 감산 알고리즘을 제시한다. 제안하는 기법을 어셈블리 언어로 구현 시 기존의 감산 연산 알고리즘과 비교하여 각각 53%, 55% 향상된 결과를 얻었다.

Keywords

I. 서론

공개키 기반의 암호 시스템은 대칭키 기반의 암호 시스템에 비하여 상대적으로 속도가 느리다는 단점을 가지고 있다. 하지만 대칭키 암호 시스템은 통신하는 모든 사람에 대해서 새로운 키가 필요하므로 키관리가 어렵다는 특징이 있다. 하지만 공개된 키를 이용하면 인증, 서명 등의 서비스를 대칭키 암호 시스템 보다 적은 수의 키로 이용할 수 있다는 장점을 가지고 있다. 공개키 암호 시스템에는 RSA, Elliptic Curve Cryptography(ECC)등이 있다. 일반적으로 공개키 암호 시스템은 유한체 연산에 의하여 구성된다. 따라서 유한체 연산의 고속화는 공개키 암호 시스템에서 매우 중요한 과제이고 활발히 연구 되고있다[1,2]. 그 중에서도 감산 연산은 효율적인 기약다항식을 선택하여 빠르게 구현이 가능하다. 이진체상에서 곱셈 연산과 제곱 연산의 결과는 입력 값의 두 배 워드 크기를 가지며 이 값을 기준으로 감산 연산이 이루어진다. 본 논문에서 사용한 GF(2271), GF(2193)에서의 감산 연산은 삼항 혹은 오항 기약다항식을 이용하여 시프트 연산과 XOR(Exclusive -OR) 연산으로 구현 가능하다. 본 논문에서는 8-bit 프로세서 환경에서의 감산 연산 최적화를 위해 GF(2271) 상의 기약 다항식 f(x)=x271+x207+x175+x111+1과 GF(2193) 상에서의 기약다항식 f(x)=x193+x145+x129+x113+1을 선택하였다.

기존의 Fast reduction 알고리즘은 매 반복문에서 한 번에 한 워드씩 감산을 진행한다[4]. 그리고 기약다항식의 형태에 따라 시프트 연산과 XOR 연산의 사용횟수와 위치가 달라지고, 매번 XOR 연산이 적용될 위치의 워드 메모리를 호출하고 저장한다.

본 논문에서는 기존 감산 알고리즘의 반복문 사용 방식과는 달리 사전 연산을 통해 중복되어 사라지는 연산들을 제외하여 최종적인 감산 연산 결과 값을 해당 기약 다항식에 대해서 감산 알고리즘 테이블로 각각 Table 2, Table 4로 나타내었다. 각 Table에는 중복되는 워드들의 조합이 많이 발생한다는 사실을 발견할 수 있다. 실제 구현에서 중복 조합들을 한번 계산으로 2번 이상 재사용하는 방식으로 스케줄링하여 최종적인 연산량과 레지스터 사용을 효율적으로 줄일 수 있었다.

Table 2. Reduction algorithm table over GF(2271)

Table 4. Reduction algorithm table over GF(2193)

제한된 환경에서의 감산 연산을 구현하기 위해 어셈블러 언어로 설계하여 26개의 레지스터를 적극적으로 활용하였고, 기본적으로 제공하는 ATmega12-8의 rotate shift 연산을 효율적으로 사용하여 감산 연산의 최적화를 이루었다. 결과적으로 최종적인 감산 결과 값에 나타난 중첩되는 워드 조합과 이를 이용한 레지스터의 효율적인 스케줄링, rotate 연산의 적극적인 활용 등을 통해 메모리 접근 연산의 최소화를 가능하게 하였다.

II. 사전지식

2.1 기약다항식

이진체 GF(2m) 의 원소들은 다항식 기저 표현법에 의해 bit들의 나열로 표현할 수 있다. 각 bit들은 최고차항이 (m-1) 이하인 다항식의 계수들을 나타낸다. 이진체의 원소들은 기약다항식에 따라 구성방식이 달라지며 각 원소들끼리의 곱셈 연산은 기약다항식을 이용한 감산 연산을 통해서 수행 될 수 있다.

기약다항식으로 삼항다항식 xm+xa+1 이나 오항 다항식 xm+xa+xb+xc+1 을 주로 선택한다. 기약다항식을 선택하는 과정은 다음과 같다. 만약 삼항 기약다항식이 존재한다면 그 중에서 가장 차수가 낮은 a를 선택하고 삼항 기약다항식이 존재하지 않으 면 오항 기약다항식에서 차수가 가장 낮은 a를 선택한다. 이어서 b, c도 차수가 가장 낮은 것으로 기약다항식을 선택하게 된다. 위와 같은 방식으로 모든 m에 대해 기약다항식을 선택할 수 있다[4].

2.2 ATmega128 프로세서

ATmega128 프로세서는 무선 센서네트워크 환경에서 대표적으로 사용되는 MICA2/MICAz 센서모트에 탑재된 8-bit 기반의 마이크로프로세서이다. ATmega128 프로세서는 성능과 병렬성을 최대화하기 위하여 프로그램과 데이터를 위한 메모리와 버스를 구분하는 Havard 구조이며 프로그램 메모리 내의 명령어들은 하나의 명령어가 수행될 때, 다음에 수행될 명령어가 프로그램 메모리로부터 prefetch되는 한 단계의 파이프라인으로 처리된다. 이 방법을 통하여 ATmega128 프로세서는 매 클럭 사이클마다 명령어를 수행할 수 있다[6].

ALU(Arithmetic and Logic Unit)가 1클럭 사이클 안에 범용 레지스터의 데이터 대하여 명령어가 수행되고 그 결과 값이 다시 레지스터에 저장된다. 32개의 레지스터 중 6개의 레지스터(R31:R30, R29:R28, R27:R26)는 세 개의 16-bit 간접주소 레지스터(X, Y, Z)로 사용되어 효율적인 주소 계산이 가능하다. 나머지 26개의 레지스터들을 이용하여 유한체 연산을 수행할 수 있다.

Fig. 1. ATmega128 general purpose resisters

III. 기존의 감산 알고리즘

이진체에서 가장 효율적으로 알려진 감산 알고리즘은 기약다항식에 의존하여 알고리즘을 구성하는 Fast reduction 알고리즘이다.

Fast reduction 알고리즘은 루프 한 번에 한 워드씩 감산을 진행한다. 예를 들어 32-bit 환경에서 기약 다항식이 f(x)=x163+x7+x6+x3+1 일 때 입력 값의 10번째 워드(C[9] =x319+ ⋯ +x288)를 다음과 같이 표현할 수 있다.

x288≡x132+x131+x128+x125mod(f(x))

x289≡x133+x132+x129+x126mod(f(x))

x319≡x163+x162+x159+x156mod(f(x))

위 합동식의 오른쪽 4열을 고려해볼 때, ‘C[9]’의 감산 연산은 해당하는 하위 워드 ‘C[5],C[4],C[3]’에 7번의 XOR 연산으로 처리가 가능하다. Fig 2에서 보이는 것과 같이 ‘C[9]’의 최하위 bit는 각각 132, 131, 128, 125번 째 bit들에 XOR 연산으로 처리된다.

Fig. 2. Reducing the 32-bit word C[9] modulo

f(x)=x163+x7+x6+x3+1

Algorithm 1은 8-bit 프로세서 환경에서 곱셈 연산이나 제곱 연산의 결과로 워드 사이즈가 2배로 늘어난 값을 입력으로 하여 기약다항식 f(x)=x163+x7+x6+x3+1 에 대한 Fast reduction 알고리즘을 나타낸 것이다. 알고리즘에 표기된 ⊕ 기호는 bit별 XOR 연산, & 기호는 bit별 AND 연산을 의미하며 <<는 bit left shift 연산을 >>는 bit right shift 연산을 나타낸다.

Algorithm 1. Fast reduction modulo f(x)=x163+x7+x6+x3+1 (with 8-bit processor)

Fast reduction에서는 매 루프마다 4개의 워드를 LOAD하고 STORE연산이 일어난다. 다음 루프에서는 이전에 사용한 4개의 워드 중 2개를 다시 LOAD하고 STORE한다. 이와 같은 중복연산을 줄이기 위해 [3]에서는 4번의 루프를 한 번에 처리하였다. 따라서 한번 사용한 워드를 다음 루프에서 다시 사용하는 빈도수를 Fast reduction보다 줄였다. Algorithm 2는 [3]에서 제시한 감산연산을 나타낸다.

Algorithm 2. Seo’s reduction modulo f(x)=x163+x7+x6+x3+1 (with 8-bit processor)

IV. 제안하는 감산 알고리즘

4.1 GF(2271) 상에서의 감산 알고리즘

8-bit ATmega128 프로세서 환경에서 Fast reduction 알고리즘을 기약다항식 f(x)=x271+x207+x175+x111+1에 적용하면 Algorithm 3과 같다. 8-bit 환경에서 271-bit 원소는 34개의 8-bit 워드로 구성된다. 유한체 감산 연산 시에는 유한체 곱셈 연산과 유한체 제곱 연산의 결과를 입력받기 때문에 최대 68개의 워드를 입력받게 된다. 따라서 ‘C[67]’부터 ‘C[0]’까지 입력으로 받아 감산연산 결과로 ‘C[33]’부터 ‘C[0]’까지 출력한다.

Table 1은 Algorithm 3의 루프 카운터 i가 66에서 62까지 동작할 때 수행되는 연산을 기술한 것이다. Table 1에서 밑줄로 표기 된 연산은 데이터가 메모리로부터 중복 로드하거나 결과 값을 중복 저장하는 부분을 표시한 것이다. Table 1에서 밑줄(_)로 표기 된 ‘C[32]’,‘C[31]’,‘C[30]’,‘C[29]’은 5번의 루프를 수행할 때 각각 두 번씩 메모리로부터 로드하고 다시 저장한다. 이와 같이 중복 로드하거나 저장하는 값들을 레지스터에서 재사용하여 메모리 접근으로 인한 부하를 줄일 수 있다.

Algorithm 3. Fast reduction modulo f(x)=x271+x207+x175+x111+1 (with 8-bit processor)

Table 1. Loop counter from 66 to 62 at Fast reduction algorithm over GF(2271)

또한 루프 카운터 i가 66일 때와 i가 62일 때 밑줄(_)로 표기 된 ‘C[54]’를 각각 로드하고 다시 저장한다. 이처럼 루프 카운터가 진행됨에 따라서 동일한 워드를 다시 호출하는 경우가 발생하게 된다. 따라서 이를 효율적으로 처리할 수 있는 방법이 필요하다.

감산 대상의 상위 워드를 살펴보면 x272부터 차례로 8-bit씩 각각 하나의 워드를 형성하게 된다. 여기서 각 워드들은 오직 1-bit left shift와 워드 시프트 연산을 통해서 감산이 가능하다는 특징이 있다. 예를 들어, x272=x208+x176+x112+x (mod f(x))이고 272와 208, 176, 112의 차는 각각 64, 32, 64로 모두 8의 배수이므로 워드 시프트 연산으로 처리 가능하다. x는 1-bit left shift로 처리 할 수 있다. Table 2는 감산 연산 수행 과정에서 각 워드가 감산되어 최종적으로 이동하는 워드를 나타낸다. 즉, 감산된 1번째 워드 ‘C[0]’에는 ‘C[34], C[42],C[46],C[50],C[54],C[62]’ 워드가 각각 1-bit left shift 된 상태로 XOR 연산이 일어나게 된다. 또한 15번째 워드 ‘C[14]’에는 ‘C[48], C[56],C[60],C[64]’ 가 1-bit left shift 된 상태와 ‘C[34],C[42],C[46],C[50],C[54],C[62]’가 XOR 연산이 일어난다.

미리 계산된 감산 테이블을 이용하면 효율적으로 워드단위 연산들을 조합하여 연산량을 줄일 수 있다. Table 2를 살펴보면 중복으로 나타나는 워드들의 조합들을 발견할 수 있다. 예를 들어, 14번째 워드에 XOR 연산 될 ‘C[34]⊕C[42]⊕C[46]⊕C[50]⊕C[54]⊕C[62]’는 0번째에서 1-bit left shift 처리하여 재사용 할 수 있다. 그 이외에도 2개 혹은 3개씩 쌍으로 중복되는 부분들 중에 빈도수가 높은 것들부터 중복 사용하여 연산량을 줄일 수 있다. 그리고 한번 로드된 워드들은 다시 로드 하지 않기 위해 레지스터가 허락하는 한 값을 유지하면서 최대한 사용을 한다. 따라서 주어진 26개의 레지스터를 이용하여 중복되는 워드들의 조합들을 어떻게 효율적으로 스케줄링 하느냐가 XOR, LOAD, STORE 연산량 최소화에 대한 관건이다.

4.2 GF(2193) 상에서의 감산 알고리즘

GF(2271)과 마찬가지로 GF(2193)의 원소는 8- bit 환경에서 25개의 워드로 구성이 된다. 유한체 감산 연산은 곱셈과 제곱에 대한 결과 49개의 워드를 입력받고 감산 연산의 결과로 25개의 워드를 출력한다. GF(2193)에서는 기약다항식을 f(x)=x193+x145+x129+x113+1으로 선택하였다. 그에 따른 Fast reduction 알고리즘은 Algorithm 4와 같다. 상수를 제외한 나머지 항들 간의 지수의 차가 8의 배수라는 점이 GF(2271)의 기약다항식과 같다. 따라서 워드 단위의 이동으로 쉽게 감산 연산이 구현 가능하다. 이 기약다항식의 또 다른 특징으로는 중간 항(x145, x129, x113)들끼리의 지수의 차이가 16으로 상대적으로 작다. Table 3은 기약다항식 f(x)=x193+x145+x129+x113+1에 대한 Fast reductio-n의 반복 루프 47부터 43까지에 대한 동작을 기술한 것이다. 루프 카운터의 홀수부(...)와 짝수부(__)에서 각각 중복 로드와 저장이 발생하고 매 루프마다 시프트 연산이 발생하는 부분(___)에서도 중복이 발생한다. 결국 중간항들의 지수 차이가 16으로 작아져서 중복되는 메모리 로드와 저장이 GF(2271)의 경우보다 더 많이 일어나는 것을 알 수 있다. 감산 연산중에 ‘C[40],C[39]’는 2회, ‘C[38]~C[24]’는 3회, ‘C[23]~C[0]’는 5회 메모리 로드와 저장이 중복 수행 된다.

Algorithm 4. Fast reduction modulo f(x)=x193+x145+x129+x113+1 (with 8-bit processor)

Table 3. Loop counter from 47 to 43 at Fast reduction algorithm over GF(2193)

Table 4는 감산처리 될 상위 워드들을 최종적으로 감산시킨 형태로 테이블에 나타내었다. GF(2271)와 마찬가지로 어떻게 효율적으로 워드단위 연산들을 조합하여 스케줄링 하는가가 연산량을 좌우한다. 주어진 26개의 레지스터를 이용하여 중복되는 워드들의 조합들을 최대한 재사용하는 방식으로 연산량을 줄일 수가 있다. 예를 들어 Table 4에서 C[25]⊕C[31]⊕C[33]⊕C[35]⊕C[37]⊕C[41]⊕C[43]가 15번째 워드에서도 쓰이고 1번째 워드에서도 1-bit right shift하여 쓰이기 때문에 한번 계산으로 중복사용이 가능하다. 그 이외에도 2개 혹은 3개씩 쌍으로 중복되는 부분들 중에 빈도수가 높은것들부터 중복 사용하여 연산량을 최소화 할 수 있다.

V. 구현

5.1 연산량 분석

Fig. 3과 Fig. 4에서는 감산 연산을 구현 시실 제 레지스터를 어떻게 사용하는지에 대한 스케줄링을 나타내고 있다. 가장 왼쪽 줄의 r0,r1...r25는 26개의 사용가능한 레지스터를 나타내고 각 행은 해당 레지스터에 저장되는 값을 나타낸다. 기본적으로 쉼표(,)는 XOR연산을 나타내고, 다른 레지스터에 저장된 값의 복사를 나타내기 위해서는 굵은 네모칸으로 해당 값을 표시하였다. 이와 비슷하게 [41,49]와 같은 대괄호[]는 다른 레지스터에 있는 워드(41 XOR 49)의 값을 가져와 연산을 하겠다는 것을 나타낸다. ( L=Load, 25*=rotate left 25, rol=rotate left, ror=rotate right, &=AND연산 )

Fig. 3. Schedule for using resisters (reduction over GF(2271))

Fig. 4. Schedule for uising resisters (reduction over GF(2193))

레지스터 스케줄링에서 [41,49,53,61],[40,48, 52,60],[39,47,51,59],[38,46,50,58]등과 같이 대괄호[]로 묶여 있는 워드 블록들을 많이 찾아 볼 수 있다. 이는 한번 계산으로 두 번 혹은 세 번씩 재사용을 한 감산 알고리즘 테이블의 중복 워드 조합들이 많다는 사실을 나타낸다. 기본적으로 25번째 레지스터(r25)는 다른 레지스터들(r0~r24)에서 이미 만들어진 워드들의 블록들을 이용하여 최종적인 결과값을 만들고 저장하는 공간으로 사용하였다.

Table 5는 Fast reduction 알고리즘과 제안하는 알고리즘에서 필요한 주요 연산의 횟수를 비교한 표이다. 제안하는 감산 알고리즘의 연산량 측정을 위해 불필요한 연산과 레지스터 사용을 최대한으로 줄여서 최적화된 구현을 하였다. 따라서 Table 5에 나타난 연산량은 최적화를 했을 때의 값이다.

Table 5. The number of operations for reduction algorithm

GF(2271)에서 메모리로부터 레지스터로 로드하는 연산은 Fast reduction 알고리즘이 208회가 필요하나 제안하는 감산 알고리즘은 94회로 약 2배 정도 차이가 났다. 메모리로 저장하는 연산은 각각 Fast reduction 174회, 제안하는 감산 알고리즘 34회로 약 5배 차이가 발생했다. 이는 Fast reduction의 루프 내에서 발생하는 메모리 중복 접근 때문이다. 최적화 구현에서 사용된 로드 연산은 ‘C[0]’부터 ‘C[41]’까지 1회, ‘C[42]’부터 ‘C[67]’까지는 2회가 필요하며 연산이 끝난 후 메모리로 저장하는 연산은 각 워드의 연산이 종료된 후에만 저장하기 때문에 ‘C[0]’부터 ‘C[33]’까지 1회만 사용하게 된다. 동일한 이유로 GF(2193)에서 메모리로부터 레지스터로 로드는 Fast reduction 알고리즘은 146회가 발생하나 제안하는 알고리즘은 50회로 약 3배 차이가 났다. 레지스터에서 메모리로 저장은 122회에서 24회로 약 5배 차이가 났다. 최적화 구현에서 로드된 워 드들은 ‘C[0]~C[48]’중에 ‘C[28]’을 제외하고는 모두 1회만 로드하였고 ‘C[28]’만 2번하였다. 메모리로 저장하는 연산은 ‘C[0]’부터 ‘C[24]’까지 1회만 수행하여 감산 연산을 종료하였다. Shift 연산은 GF(2271)에서 68회에서 41회로,GF(2193)에서는 48회에서 25회로 줄었다. 제안하는 감산 알고리즘은 미리 구해놓은 감산 알고리즘 테이블의 결과 값에 대해 순차적으로 Shift 연산을 진행 할 수 있으므로 Shift 연산의 연속성을 유지할 수 있다. 예를 들어, GF(2271)에서 Fast reduction은 하나의 워드 감산을 위해 7-bit right shift(>>7)와 1-bit left shift(<<1)가 필요하다. 하지만 제안하는 감산 알고리즘은 ATmega의 rotate left shift 명령어를 이용하여 Table 2의 0번째부터 33번째까지 1-bit left shift 연산을 순차적으로 처리할 수 있다. rotate left shift 명령어는 해당 워드를 1-bit left shift 하고 최상위 1-bit를 carry로 저장한다. 그리고 다음번에 rotate left shift 명령어가 있으면 carry값을 최하위 bit에 넣는다. 이를 통해 기존의 7-bit right shift(>>7)연산의 효과를 볼 수가 있다. 따라서 필요한 rotate 연산은 34번이지만 중간 값을 저장할 레지스터 개수가 제한적이라 여러 개의 블록으로 나누어 처리하여 총 41번의 rotate 연산으로 구현하였다. GF(2193)에서는 반대로 1-bit right shift를 최상위 워드부터 0번째까지 순차적으로 rotate right shift 명령어로 처리한다. rotate right shift 명령어는 해당 워드를 1-bit right shift 하고 최하위 1-bit를 carry로 저장한 후에 다음 rotate right shift 명령어가 있으면 carry값을 최하위 bit에 넣는다. 이때 7-bit left shift (<<7)효과를 볼 수 있다. GF(2193)은 GF(2271)보다 상대적으로 레지스터의 여유가 있어서 처음부터 끝까지 순차적으로 rotate right shift 연산을 적용할 수 있다. 따라서 Shift 연산은 총 25번 소요가 되었다.

반면 Fast reduction 알고리즘에서는 각 루프마다 1-bit shift와 7-bit shift 연산이 적용된 값에 대해 각각 XOR 연산을 적용 시키므로 매 루프마다 2회의 Shift 연산이 필요하게 된다.

5.2 구현 결과

레지스터 내부의 데이터에 대하여 수행되는 연산에는 1클럭 사이클만이 소요되는데 반하여, 메모리에 저장된 데이터를 레지스터로 로드하거나 연산의 결과값을 다시 메모리에 저장하는 데는 2클럭 사이클이 소모된다. 따라서 감산 알고리즘에 메모리 로드와 저장을 최소한으로 설계하여 어셈블리 언어로 구현하였다.

Table 6는 기존의 Fast reduction과 본 논문에서 제안한 감산 연산 알고리즘을 각각 어셈블리 언어로 구현하였을 때의 성능을 클럭 사이클 단위로 비교 한 것이다. GF(2271)에서 기약다항식 f(x)=x271+x207+x175+x111+1에 대한 Fast reductio-n을 구현 시 1,084 클럭 사이클이 소모되었고, 제안하는 감산 연산 알고리즘을 사용하여 구현 시 482 클럭 사이클이 소모되어 약 56% 정도 속도가 향상되었다. GF(2193)에서 기약다항식 f(x)=x193+x145+x129+x113+1에 대한 Fast reduction은 769 클럭 사이클이 소모되었고, 제안하는 감산 연산구현 시 326 클럭 사이클로 약 58% 가량 속도가 향상되었다. 단, 이 수치들은 오직 알고리즘 자체에 대한 향상율이다. 실제 공개키 암호시스템의 구현을 위해서는 부가적인 처리들이 필수적으로 추가된다. 예를 들어 입력 또는 출력 메모리의 주소 값이 들어 있는 레지스터는 사용하기 전에 미리 push 명령어로 스택에 넣었다가 감산이 종료된 후에 다시 pop 명령어로 주소 값을 받아와야 다음 연산을 진행하는데 지장을 주지 않는다. 추가 연산으로 인해 GF(2271)에서 Fast reduction은 1,084 클럭 사이클에서 1,126 클럭 사이클로 늘어나고, 제안하는 알고리즘은 482 클럭 사이클에서 524 클럭 사이클로 늘어난다. GF(2193)에서는 Fast reduction이 769 클럭 사이클에서 811 클럭 사이클로 늘어나고, 제안하는 알고리즘은 326 클럭 사이클에서 368 클럭 사이클로 늘어난다. 추가된 클럭 사이클은 전체적인 향상율을 저하시키게 된다. 따라서 실질적인 감산 연산 향상율은 각각 약 53%, 55%로 나타났다.

Table 6. Comparison of efficiency for implementation result

또한 Table 5을 기준으로 연산량을 계산하면 Table 6의 연산량과 일치 하지 않음을 알 수 있다. 실제 알고리즘을 구현할 때 LOAD, STORE, SHIFT, XOR 연산들이 주를 이루는 것이 사실이지만 그 이외에도 구현을 용이하기 위한 연산들이 필요하다. 예를 들어 주소 참조 레지스터의 값을 수정하기 위해서 adiw, sbiw와 같은 명령어들이 필요하고, 필요한 상수값을 불러오기 위해 ldi 명령어가 필요하다. 그리고 구현 중에 발생하는 캐리 값을 지우거나 레지스터 값을 비우고 0으로 만들기 위해 clc, clr과 같은 명령어들도 필요하다. 이처럼 구현에서 필요한 부가적인 연산들로 인해 Table 5를 기준으로 한 연산량과 Table 6의 연산량 사이에서 차이가 발생한다.

VI. 결론

본 논문에서는 8-bit ATmega128 프로세서 환 경에서 효율적인 GF(2271), GF(2193)의 감산 알고리즘을 제안하였다. Fast reduction 알고리즘에서 반복적으로 일어나는 메모리의 호출과 저장으로 인한 비효율성을 개선하기 위해 [3]의 감산 알고리즘을 변형하여 사용하였다. 그러나 [3]의 감산 알고리즘과는 달리 감산 처리해야 될 상위 워드들을 미리 계산해서 중첩되는 워드들을 제거하였다. 결국 최종적인 감산 결과값을 제시하는 방식으로 불필요한 반복문 상의 중복 연산들을 제거하였다. 또한 최종적인 감산 결과 값들 사이에서는 워드들의 중복 조합들이 많이 존재한다. 이런 중복 조합들은 한번 계산해 놓으면 여러 번 중복 사용이 가능하여 레지스터 사용량과 연산량을 효율적으로 줄일 수가 있다. 따라서 최대한으로 Table에 나타난 중복 조합들을 사용할 수 있도록 스케줄링 하는 것이 구현에서의 관건이다. 본 논문에서는 제한된 환경에서 레지스터를 적극적으로 사용하기 위해 중복 조합들을 워드 2개 단위까지 재사용하여 GF(2271), GF(2193)에서 각각 53%, 55%의 효율성을 개선 시켰다.

또한, ATmega128에서 제공하는 rotate right, rotate left 연산을 적극 활용하였다. Fast reduction 반복문에서의 1-bit shift와 7-bit shift를 한번의 rotate연산으로 처리함으로써 연산의 효율성을 높였다.

8-bit ATmega128 프로세서 기반으로 이진체 곱셈 연산에서 감산 연산이 차지하는 비중은 약 4%미만으로 작다. 그러나 이진체 제곱 연산에서 감산 연산은 약 50% 정도로 차지하는 비중이 크다. 따라서 제안하는 감산 연산 알고리즘은 이진체 제곱 연산에서 큰 효율성을 얻을 수 있다.

자원이 제한된 환경에서는 중복되는 메모리 접근에 대한 부하가 상대적으로 크다. 미리 계산된 감산 연산 알고리즘 구성표를 통해서 레지스터 사용을 효율적인 설계가 가능하였다. 따라서 기존의 Fast reduction을 적용하였을 때 생겨나는 중복되는 메모리 접근을 효과적으로 줄일 수 있었다. 위와 같은 최적화 기법을 다른 기약다항식을 사용하는 이진체에서도 유도가 가능하다. 중간항들의 지수의 차이가 작고 8이나 16의 배수인 기약다항식이라면 더 좋은 향상율을 기대 할 수 있다. 또한 중간항들의 지수의 차가 16의 배수인 기약다항식에 대해서는 16-bit 프로세서 환경에서도 본 논문에서 제시한 감산 연산 알고리즘을 적용 할 수 있다. 이를 반영하여 다양한 이진체와 기약다항식의 특성을 고려한 효율적인 감산 알고리즘에 대한 연구를 진행 중이다.

References

  1. 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
  2. V.S. Miller. "Use of elliptic curves in cryptography," Advances in Cryptology, CRYPTO'85, LNCS 218, pp. 417-426, 1986.
  3. Seog Chung Seo, Dong-Guk Han and Seokhie Hong, "TinyECCK : Efficient Implementation of Elliptic Curve Cryptosystem over $GF(2^{m})$ on 8-bit Micaz Mote," Journal of the Korea Institute of Information Security and Cryptology, 18(3), pp.1338-1347, 2008.
  4. M. Scott, "Optimal irreducible polynomials for $GF(2^{m})$ arithmetic," Cryptology ePrint Archive 2007-192, May. 2007.
  5. ATmel ATmega128(L) Datasheet, http://www.atmel.com, 2006.
  6. D. Hankerson, A. Menezes and S. Vanstone, Guide to elliptic curve cryptography, Springer-Verlag, pp. 53-56, 2004.