KR20020050105A - 연산 회로 및 연산 방법 - Google Patents
연산 회로 및 연산 방법 Download PDFInfo
- Publication number
- KR20020050105A KR20020050105A KR1020010077092A KR20010077092A KR20020050105A KR 20020050105 A KR20020050105 A KR 20020050105A KR 1020010077092 A KR1020010077092 A KR 1020010077092A KR 20010077092 A KR20010077092 A KR 20010077092A KR 20020050105 A KR20020050105 A KR 20020050105A
- Authority
- KR
- South Korea
- Prior art keywords
- memory
- register
- port
- input
- read
- Prior art date
Links
- 238000000034 method Methods 0.000 title claims abstract description 36
- 230000015654 memory Effects 0.000 claims abstract description 210
- 238000012545 processing Methods 0.000 claims description 49
- 238000004364 calculation method Methods 0.000 claims description 33
- 230000004888 barrier function Effects 0.000 abstract 1
- 230000015572 biosynthetic process Effects 0.000 abstract 1
- AGJBKFAPBKOEGA-UHFFFAOYSA-M 2-methoxyethylmercury(1+);acetate Chemical compound COCC[Hg]OC(C)=O AGJBKFAPBKOEGA-UHFFFAOYSA-M 0.000 description 13
- 238000010586 diagram Methods 0.000 description 11
- 238000005516 engineering process Methods 0.000 description 3
- 230000010354 integration Effects 0.000 description 3
- 230000006399 behavior Effects 0.000 description 2
- 238000004891 communication Methods 0.000 description 2
- 238000013478 data encryption standard Methods 0.000 description 2
- 238000013461 design Methods 0.000 description 2
- 230000000694 effects Effects 0.000 description 2
- 238000012546 transfer Methods 0.000 description 2
- 238000007796 conventional method Methods 0.000 description 1
- 238000012937 correction Methods 0.000 description 1
- 230000006870 function Effects 0.000 description 1
- 230000001771 impaired effect Effects 0.000 description 1
- 101150080585 memb-1 gene Proteins 0.000 description 1
- 239000004065 semiconductor Substances 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F7/00—Methods or arrangements for processing data by operating upon the order or content of the data handled
- G06F7/38—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
- G06F7/40—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using contact-making devices, e.g. electromagnetic relay
- G06F7/44—Multiplying; Dividing
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3824—Operand accessing
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F7/00—Methods or arrangements for processing data by operating upon the order or content of the data handled
- G06F7/60—Methods or arrangements for performing computations using a digital non-denominational number representation, i.e. number representation without radix; Computing devices using combinations of denominational and non-denominational quantity representations, e.g. using difunction pulse trains, STEELE computers, phase computers
- G06F7/72—Methods or arrangements for performing computations using a digital non-denominational number representation, i.e. number representation without radix; Computing devices using combinations of denominational and non-denominational quantity representations, e.g. using difunction pulse trains, STEELE computers, phase computers using residue arithmetic
- G06F7/728—Methods or arrangements for performing computations using a digital non-denominational number representation, i.e. number representation without radix; Computing devices using combinations of denominational and non-denominational quantity representations, e.g. using difunction pulse trains, STEELE computers, phase computers using residue arithmetic using Montgomery reduction
Landscapes
- Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Theoretical Computer Science (AREA)
- Mathematical Optimization (AREA)
- General Engineering & Computer Science (AREA)
- Computational Mathematics (AREA)
- Mathematical Analysis (AREA)
- Pure & Applied Mathematics (AREA)
- Software Systems (AREA)
- Computing Systems (AREA)
- Mathematical Physics (AREA)
- Electromagnetism (AREA)
- Complex Calculations (AREA)
- Advance Control (AREA)
- Memory System (AREA)
Abstract
본 발명은 몽고메리 승산 회로에서의 메모리 액세스의 병목 현상을 2포트나 싱글 포트의 범용 메모리를 사용하면서 해소하는 것을 과제로 한다.
2개의 메모리(7, 8)를 설치하여, 연산에 필요한 변수 중 메모리로부터 독출할 필요가 있는 변수에 대해서는 다른 메모리에 기록한다. 그리고 파이프라인 처리의 동일한 독출 스테이지에서 메모리(7)로부터 레지스터(5)에 변수를 독출하고, 메모리(8)로부터 그 밖의 레지스터에 다른 변수를 독출한다.
Description
본 발명은 연산 회로 및 연산 방법에 관한 것으로, 특히 공개키 암호화 방식 등에 적합한 승잉여(乘剩余) 계산의 고속화에 관한 것이다.
정보를 전송할 때에, 보안의 확보 혹은 인증을 위해 공개키 암호(비대칭 암호)가 이용된다. 공개키 암호는 공개키와 비밀키의 한쌍의 키를 이용하여 정보를 전송하는 암호 방식이다. 송신자가 수신자의 공개키로 평문을 암호화하고, 암호문을 수취한 수신자는 수신자밖에 알 수 없는 비밀키를 이용하여 암호문을 복호한다. 이러한 공개키 암호에서는 공통키 암호(대칭키 암호)와 같이 하나의 공통키를 공유할 필요가 없고, 또한, 공개키 암호에서는 공개키를 널리 공개할 수 있기 때문에 불특정 다수의 사람과의 통신 비밀을 확보할 수 있다. 또한, 공개키 암호를 전자 인증 혹은 전자 서명에 이용하여 면식이 없는 타인과의 신뢰 관계를 확립할 수 있다. 인터넷 등 통신 기술이 지원하는 네트워크 사회 혹은 그 속에서 이뤄지는 상거래 등에 있어서 필수적인 기술로 자리잡고 있다.
공개키 암호 방식의 하나로 RSA가 알려져 있다. RSA는 매우 큰 정수의 이산대수 문제 혹은 소인수 분해의 곤란성에 그 안전성의 기초를 둔다. 예컨대, 공개키(e, n)를 이용하여, 평문(M)을
C=Me(mod n)
의 관계식으로부터 암호문(C)을 생성한다(또, M은 정수 n 미만이 되도록 블록화되어 있음). 이 암호문(C)의 해독에는 이산대수 계산[a, y, p에서 y=ax(mod p)가 되는 x를 알아냄]이 필요하게 되어
O(2SQRT(log n))
의 계산량을 필요로 한다(SQRT는 제곱근을 부여하는 함수임). 정수 n이 적어도 512 비트 길이 이상, 바람직하게는 1024 비트 길이 이상이면 실용적인 계산 시간에서의 해독은 곤란하게 된다.
그런데, 공개키(e, n)와
ed(mod 1cm(p-1, q-1))=1 , n=pq, (다만 p, q는 충분히 큰 소수)
의 관계에 있는 비밀키(d, n)를 이용하면,
M=Cd(mod n)
의 관계식을 이용하여 평문(M)을 간단하게 구할 수 있다[다만, 1cm(a, b)는 a와 b의 최소 공배수를 부여함].
예컨대, d=11인 경우,
C11=(((C2)2C)2)C
와 같이 d를 2진 전개하여, 자승 잉여 연산과 승산 잉여 연산을 반복하면, 많아야 d 비트 길이의 2배 횟수의 승잉여 연산으로 계산할 수 있다.
그러나, 상기 누승 잉여 연산이라도, 예컨대 DES(data encryption standard) 등의 대칭 암호에 비교하면 계산량이 많아진다. 이 때문에 가능한 한 효율적인 알고리즘과 그 실장이 요구된다.
상기 누승 잉여 연산에 있어서의 자승 잉여 연산과 승산 잉여 연산을 고속화하는 기법에, 예컨대 Peter L. Montgomery 저, 「Modular Multiplication Without Trial Division」, Mathematics of computations, Vol. 44, No. 170 April 1985, pp 519-522에 기재되어 있는 몽고메리 승산 기법이 있다. 몽고메리 승산은 승잉여 계산을, 가산, 승산, 시프트 연산의 반복에 의해, 감산을 반복하는 제산보다도 적은 계산량으로 실현하는 기법이다. 이하에 몽고메리 승산의 계산 주요부
P≡XYR-1(mod n)
를 의사 코드 1.x에 나타낸다. 또, 상기 식에 있어서,
R=(2r)m
N≡-n-1(mod 2r)
로 한다. 또한, 의사 코드에 있어서 각 행의 좌측에는 행 번호를 붙인다(이하 동일).
(1.1) P=0;
(1.2) for(i=0;i<m;i++){
(1.3) t=(p0+xiy0)N(mod 2r);
(1.4) P=(P+xiY+t·n)/2r;
(1.5) };
(1.6) if(P=>n)P=P-n;
상기 의사 코드 1.x에 도시한 바와 같이, 그 주요 부분의 반복 연산은 다음과 같이 된다. 우선, X를 m개의 블록(xi)으로 단락하고[X=(xm-1, xm-2'…, x1, x0)], Y와의 부분 적가산(積加算)(xiY)을 m회 반복한다(행 번호 1.2∼1.5). 이 때, 도중 결과 P의 최하위 블록(p0)이 0이 되는 n의 배수 「t·n」을 매회 가산한다(행 번호 1.4). t는 행 번호 1.3에서 정의되어 있다. 또한, P를 r 비트만큼 우측으로 시프트, 즉 「2-r」를 곱한다(행 번호 1.4). 또, r 비트의 시프트 연산은 m회의 시프트 연산에 의해 2-rm=R-1이 되어 R-1의 승산을 하게 된다.
예컨대, 512 비트의 몽고메리 승산을 32 비트 승산기에 의해서 실행한다고 가정하면, m=512/32=16회의 루프를 반복하게 된다. 상기 의사 코드에서는 간단하게 하기 위해 xi·Y나, t·n과 같이 32비트×512비트와 같이 나타냈지만, 실제는 512 비트의 Y와 n도 16개의 32 비트 블록으로 분할하여 계산을 실행한다. 즉, P의 부분 적가산은 연산에 있어서 m=16의 이중 루프가 된다. 이하에 이중 루프에 의해서 몽고메리 승산을 실행하는 순서의 일례를 의사 코드 2.x에 나타낸다.
(2.1) P=0;
(2.2) for(i=0;i<m;i++){
(2.3) t=p0+xiy0(mod 2r);
(2.4) t=t·N(mod 2r);
(2.5) c=0;
(2.6) for(j=0;j<m; j++){
(2.7) tmp=pj+xi·yj+c;
(2.8) tmp=tmp+t·nj;
(2.9) if(j!=0)pj-1=tmp(mod 2r);
(2.10) c=tmp/2r;
(2.11) };
(2.12) pm-1=c;
(2.13) };
(2.14) if(P=>n)P=P-n;
또한, 여기서, X, Y, n은 m개의 블록으로 분할되어 있다. 즉,
X=(xm-1, xm-2, …, x1, x0)
Y=(ym-1, ym-2, …, y1, y0)
n=(nm-1, nm-2, …, n1, n0)
승산기가 하나인 경우를 가정하면, 도중 결과 tmp의 계산에 2회의 곱합 연산이 필요하게 된다. 변수(pj, xi, yj, t, nj)는 전부 r 비트 길이의 수, 변수(c)는 하위 블록으로부터의 캐리이다. 상기 의사 코드 2.x의 예에서는, 1회의 j 루프로 2r 비트의 수(xi·yj와 t·nj), 그리고 r+1 비트의 수(pj와 c)의 가산을 행하고(행 번호 2.6∼2.11), 곱합 연산후의 도중 결과 tmp는 2r+1 비트 길이를 갖는다. tmp의 하위 r 비트는 변수(pj)에, 상위 r+1 비트는 변수(c)에 스토어된다(행 번호 2. 9, 2. 10).
한편, xi·yj와 t·nj의 가산을 2개의 다른 루프에서 행하는 것도 가능하다. 이 예를 의사 코드 3.x에 나타낸다.
(3.1)P=0;
(3.2)for(i=0;i<m;i++){
(3.3) c=0;
(3.4) for(j=0;j<m;j++){
(3.5) tmp=pj+xi·yj+c;
(3.6) pj=tmp(mod 2r);
(3.7) c=tmp/2r;
(3.8) };
(3.9) pm=c; c=0;
(3.10) t=p0·N(mod 2r);
(3.11) for(j=0;j<m; j++){
(3.12) tmp=pj+t·nj+c;
(3.13) if(j!=0)pj-1=tmp(mod 2r);
(3.14) c=tmp/2r;
(3.15) };
(3.16) pm-1=pm+c;
(3.17) } ;
(3.18) if(P=>n)P=P-n;
의사 코드 3.x의 예에서는 변수(pj)는 r 비트 길이, 변수(tmp)는 2r 비트 길이가 된다.
의사 코드 2.x, 3.x의 양 예 모두 몽고메리 승산의 이중 루프를 빠져나온 후의 결과(P)는 2n 미만이 되지만, n 이하인 보증은 없기 때문에 필요에 따라서, 「P=P-n」으로 한다(행 번호 2.14, 3.18).
상기 의사 코드 2.x, 3.x의 예에 있어서, 기본적으로 pj는 P를 m개로 분할한 r 비트 레지스터에서 플러스의 값을 취한다. 그러나, 의사 코드 2.x의 예에서는 행 번호 2.12의 「pm-1=c」에 있어서, c는 최대 r+1 비트가 된다. 이 때, 연산 비트수가 r 비트로 나머지가 없게 나누는 경우에는 1 비트 넘치게 된다. 따라서, 루프 횟수를 m+1로 하거나, 루프 횟수를 m회로 억제하기 위한 최상위 비트의 특별한 처리가 필요하게 된다. 본 명세서에서는 간단하게 하기 위해 상기 예의 양자 모두 j 루프는 동일한 루프 횟수(m)인 것으로 한다. 또 양 예의 행 번호 2.14, 3.18의 비교 연산 「if(P=>n)」에 있어서, 부호 비트 등을 고려할 필요가 있다.
상기 의사 코드 2.x, 3.x의 예에 의해, 몽고메리 승산의 계산을 실행할 수 있다. 그러나, 본 발명자들이 그 연산 사이클을 상세히 검토한 바, 연산의 퍼포먼스는 변수의 레지스터 할당이나 메모리 구성에 크게 영향을 받는 것이 판명되었다. 이하 검토 결과에 관해서 설명한다.
상기 의사 코드 2.x의 경우, r 비트 길이의 변수(N)는 i 루프(의사 코드 2.2∼2.13) 내에서 값이 변하지 않고서 반복 사용된다. 또한, t와 xi는 j 루프(의사 코드 2.6∼2.11) 내에서 값이 변하지 않고서 반복 사용된다. 이 때문에, 변수 N, t, xi에 관하여는, 일단 계산 혹은 메모리로부터 독출한 후에는 각 루프를 빠져나갈 때까지 레지스터에 유지하여 반복 사용할 수 있다. 또 j 루프 내에서 사용하는 도중 변수(tmp와 c)는 레지스터에 직접 할당된다. 그 밖의 변수는 독출과 기록이 독립된어드레스에 대하여 실행할 수 있는 일반적인 2포트 메모리에 기록한다. 또한 메모리 독출→연산→기록의 일련의 처리는 파이프라인 처리되는 것으로 한다. 그렇게 하면, 연산과 기록은 기본적으로 1 사이클로 종료되기 때문에 메모리 독출이 퍼포먼스의 병목 현상으로 된다. 이하, 메모리 독출의 사이클 수를 검토한다.
우선 행 번호 2.1의 「P=0」의 처리에 관하여는, 행 번호 2.7의 연산
tmp=pj+xi·yj+c
등으로 맨처음에 pj를 독출할 때에 그 값을 리셋하면 된다. 이 때문에 사이클 수 0이다.
행 번호 2.3, 2.4의 변수 t의 계산
t=p0+xiy0(mod 2r)
t=t·N(mod 2r)
에서는 레지스터에 할당되고 있는 N 이외의 변수(p0, xi, y0)를 메모리로부터 독출하는 데에 3 사이클을 요한다. 또, t에 대해서는 상기한 바와 같이 행 번호 2.3의 연산 결과가 직접 레지스터에 할당되기 때문에 독출할 필요는 없다. 행 번호 2.5의 「c=0」는 「P=0」의 처리와 마찬가지로 0 사이클이다.
j 루프로 들어가, 행 번호 2.7의 연산
tmp=pj+xi·yj+c
는 pj와 yj의 독출에서 2 사이클을 필요로 한다. xi는 행 번호 2.3의 t의 계산시에 독출되고 있기 때문에 여기서의 독출은 필요하지 않다. 또한, c에 관하여는 상기한 바와 같이 직접 레지스터에 할당되기 때문에 독출할 필요는 없다.
행 번호 2.8의 연산
tmp=tmp+t·nj
는 nj의 독출에서 1 사이클을 요한다. tmp, t에 대해서는 상기한 바와 같이 직접 레지스터에 할당되기 때문에 독출할 필요는 없다.
행 번호 2.9의 연산
pj-1=tmp(mod 2r)
c=tmp/2r
의 실제의 하드웨어 상의 동작은, 「tmp+t·nj」을 일단 레지스터(tmp)에서 받지 않고서 직접 pj-1과 c에 기록하면 된다. 따라서 모두 0 사이클이 된다.
j 루프를 빠져나온 직후의 행 번호 2.12의 연산
pm-1=c
은 파이프라인 처리에 의해 0 사이클이 된다.
따라서 i 루프 내의 연산 사이클의 수는
3+m(2+1)=3m+3
이 된다. 이것에 i 루프의 m을 곱해
m(3m+3)=3m2+3m
이 된다. 그러나, 앞서 말한 것 처럼 i=0일 때 pj=0이기 때문에 pj를 독출할 필요는 없고, 입력을 0 리셋하면 된다. 따라서 i 루프 전체적으로는 이 만큼의 m을 감하여
3m2+3m-m=3m2+2m
이 된다. 행 번호 2.14의 비교 동작
if(P=>n)
에서는 감산 「P-n」에 의해서 대소를 판정하기 때문에 이것에 2m 사이클, 마지막으로 파이프라인을 빠져나오는 데 2 사이클이 필요하다. 결국 최종적인 사이클 수는
3m2+4m+2
가 된다. 이것은 파이프라인 처리를 흐트러짐 없이 실행할 수 있는 경우이며, 연산 비트수가 승산기의 비트수에 비해 그다지 크지 않을 때, 즉 블록수(m)가 적을 때는, 기록하려고 한 값을 즉시 독출할 필요가 있기 때문에 메모리 액세스 대기의 오버헤드가 가해지게 된다. 다만 블록수가 4∼5이면 실용상 이러한 문제는 생기지 않는다. 또 반대로 블록수가 2∼3과 같은 작은 수일 때에 몽고메리법을 적용하는 의미는 그다지 없기 때문에, 상기 사정은 고려할 필요가 없다. 즉, 이중 루프에 의한 m2항의 계수 「3」이 크게 변하는 일은 없다. 또한, 실장 형태에 따라서는 j 루프전후에 파이프라인 동작이 흐트러지는 경우가 있어, 상기 최종적인 사이클 수가 실제로는 약간 다른 경우가 있다. 그러나, 이 경우라도 이중 루프에 의한 m2항의 계수 「3」은 변하지 않아, 최종적인 사이클 수가 상기 값과 크게 다른 일은 없다.
이와 마찬가지로 의사 코드 3.x의 예를 상세히 검토하면, 다음과 같다. 행 번호 3.1의 「P= 0」 처리는 행 번호 3.5의 연산
tmp=pj+xi·yj+c
로 맨처음에 pj를 독출할 때에 그 값을 0 리셋하면 되기 때문에 사이클 수는 0이다. 행 번호 3.1의 「c= 0」의 처리에 관해서도, 의사 코드 2.x와 마찬가지로 0 사이클이다.
제1 j 루프(행 번호 3.4∼3. 8)로 들어가, 행 번호 3.5의 연산
tmp=pj+xi·yj+c
에서는 pj와 yj의 독출에서 2 사이클을 필요로 하며, 제1 j 루프의 맨처음에 xi를 독출할 필요가 있다. 행 번호 3.6의 연산
pj=tmp(mod 2r)
c=tmp/2r
은 의사 코드 2.x의 경우와 같이 tmp를 직접 pj, c에 기록하기 때문에 0 사이클이 된다. 따라서, 1번째의 j 루프의 사이클 수는 2m+1이 된다.
제1 j 루프를 빠져나온 후의 행 번호 3.9의 연산
pm=c; c=0;
은 파이프라인 처리에 의해 0 사이클이 되고, 행 번호 3.10의 연산
t=p0·N(mod 2r)
에서는 p0과 N의 독출에 2 사이클을 요한다.
다음에 제2 j 루프(행 번호 3.11∼3.15)로 들어가, 행 번호 3.12의 연산
tmp=pj+t·nj+c
에서는 pj와 nj의 독출에서 2 사이클을 요한다. 또, t와 c는 레지스터에 직접 기록할 수 있기 때문에 독출할 필요는 없다. 그것에 계속되는 행 번호 3.13의 연산
pj-1=tmp(mod 2r)
c=tmp/2r
은 의사 코드 2.x의 경우와 마찬가지로 0 사이클이 된다. 따라서, 2번째의 j 루프의 사이클 수는 2m이 된다. 그리고 2번째의 j 루프를 빠져나온 후의 행 번호 3.16의 연산
pm-1=pm+c
에서는 pm의 독출에 1 사이클이 필요하다.
따라서, i 루프 내의 연산 사이클 수는,
(2m+1)+2+2m+1=4m+4
이 된다. 이것에 i 루프의 m을 곱해
m(4m+4)=4m2+4m
이 된다. 그러나, 앞서 말한 것과 같이 i=0일 때 pj를 독출할 필요는 없고, 입력을 0 리셋하면 되기 때문에, i 루프 전체적으로는 이 만큼의 m을 감하여
4m2+4m-m=4m2+3m
이 된다. 행 번호 3.18의 비교동작
if(P=>n)
에서는 감산 「P-n」에 의해서 대소를 판정하기 때문에 이것에 2m 사이클, 마지막으로 파이프라인을 빠져나오는 데 2 사이클을 요한다. 결국 최종적인 사이클 수는
4m2+5m+2
이 된다. 의사 코드 3.x의 예에서 m2사이클 많은 것은 tmp에의 부분 적가산을 하나의 j 루프에서 행하지 않기 위해, 행 번호 3.4∼3.8의 루프에서 메모리에 기록한 pj를 행 번호 3.11에서 3.15의 루프에서 독출하기 때문이다. 의사 코드 3.x의 예는 사이클 수가 많기는 하지만 자릿수 올림이 1 비트 적게 r 비트 블록으로 저장되고 레지스터의 수도 적게 필요하므로, 의사 코드 2.x의 예보다 많은 이점이 있다. 이 때문에, 제어와 회로 규모의 점에서는 3.x의 예 쪽이 유리하다. 도 7에 의사 코드3.x의 경우의 몽고메리 승산 회로 데이터 패스부의 개략을, 또 도 8에 이 회로에서의 블록수(m)=4의 최종 루프 처리 근방의 타이밍도를 나타낸다. 또, 파이프라인 처리의 흐트러짐 등에 의해, 상기 최종적인 독출 사이클 수가 실제로는 약간 변화하는 일이 있는 것은 의사 코드 2.x의 경우와 마찬가지이다.
상기한 메모리 독출 타이밍에 있어서 몽고메리 승산의 고속화를 생각하면, 이중 루프의 내측에서 승산을 2회 행하기 때문에, 단순히 승산기를 2개 실장하면 2배의 속도를 얻을 수 있는 것처럼 생각된다. 그러나, 메모리 독출이 병목 현상으로 되는 것은 상기한 바와 같다. 이 병목 현상 해소의 방법으로서, 독립적인 독출을 할 수 있는 독출 포트를 2개, 기록 포트를 하나 갖는 3포트 메모리를 사용하는 것을 생각할 수 있다. 그러나 3포트 메모리에 의해 고속화는 도모될 수 있지만, 3포트 메모리는 일반적이지 않아, 사용할 수 있는 테크놀러지가 한정된다. 즉, 회로의 범용성이 손상되어 버린다. 이 때문에 반도체 설계에 있어서의 회로 설계의 표준화(IP 코어화)의 장해가 될 가능성이 있다. 또한, 3포트 메모리는 소자 면적이 커져 소형화의 요청에 적합하지 않다.
본 발명의 목적은 몽고메리 승산 회로에 있어서의 메모리 액세스의 병목 현상을 2포트나 싱글 포트의 범용 메모리를 사용하면서 해소하는 데에 있다. 이에 따라 높은 퍼포먼스와 소자의 소형화를 실현하여, 암호 생성 회로를 낮은 비용으로 제공하는 것이 가능하게 된다.
도 1은 본 발명의 일 실시예인 몽고메리 승산 회로의 일례를 그 데이터 패스부에 관해서 도시한 블럭도이다.
도 2는 도 1의 회로에서 의사 코드 3.x의 처리를 실행했을 때의 처리의 타이밍을 도시한 타이밍도이다.
도 3은 본 발명의 다른 실시예인 몽고메리 승산 회로의 일례를 그 데이터 패스부에 관해서 도시한 블럭도이다.
도 4는 도 3의 회로에서 의사 코드 3.x의 처리를 실행했을 때의 처리의 타이밍을 도시한 타이밍도이다.
도 5는 본 발명의 또 다른 실시예인 몽고메리 승산 회로의 일례를 그 데이터 패스부에 관해서 도시한 블럭도이다.
도 6은 도 5의 회로에서 의사 코드 2.x의 처리를 실행했을 때의 처리의 타이밍을 도시한 타이밍도이다.
도 7은 종래 방식에 있어서 의사 코드 3.x의 경우의 몽고메리 승산 회로 데이터 패스부의 개략을 도시하는 블럭도이다.
도 8은 도 7에 있어서의 블록수 m=4의 최종 루프 처리 근방의 타이밍도이다.
<도면의 주요부분에 대한 부호의 설명>
1, 9 : 곱합 연산 회로
2∼5, 10∼15 : 입력 레지스터
6 : 멀티플렉서
7, 8, 16∼18 : 메모리
본 발명의 개요를 설명하면 다음과 같다. 즉, 본 발명의 연산 회로 및 연산방법에서는 1 사이클로 실행하는 연산에 필요한 변수 중 메모리로부터 독출할 필요가 있는 변수에 대해서는 다른 메모리에 기록하고, 하나의 독출 스테이지에서 이들 변수를 동시에 독출하는 것을 가능하게 한 것이다. 이에 따라, 독출에 의한 대기 시간을 최소로 하여 계산의 퍼포먼스를 향상할 수 있다. 더구나, 변수를 기록하는 메모리에는 3포트 메모리 등 복잡한 회로, 대면적이 필요한 회로를 이용하는 일없이, 2포트나 싱글 포트의 범용적인 메모리를 이용하여 IP 코어화를 하기 쉽게 하고, 또한 소자 면적을 최소한으로 하는 것을 가능하게 한다.
이하 본 발명을 기술하면 다음과 같다. 즉, 본 발명의 연산 회로는 복수의 레지스터와, 상기 복수의 레지스터에 입력되는 값을 입력으로 하는 연산기와, 복수의 메모리를 지니고, 상기 복수의 메모리에서 상기 복수의 레지스터로의 복수의 변수의 독출을, 상기 연산기의 파이프라인 처리에 있어서의 동일한 독출 스테이지에서 행하는 것이다. 또, 본 발명의 연산 방법은 복수의 입력 레지스터를 갖는 연산기와 복수의 메모리를 구비한 연산 회로를 이용한 연산 방법으로서, 상기 입력 레지스터에 입력되어 있는 값에 기초하여 연산을 하는 단계와, 상기 연산의 결과를 상기 입력 레지스터 또는 상기 메모리에 기록하는 단계와, 상기 복수의 메모리로부터 상기 복수의 입력 레지스터에 복수의 변수를 동일한 파이프라인 스테이지에서 독출하는 단계를 포함한다.
또한, 상기 연산기는 제1 레지스터, 제2 레지스터, 제3 레지스터, 제4 레지스터의 각각에 입력된 r 비트 길이를 갖는 x1, x2, x3, x4의 각 입력값에 기초하여,2r 또는 2r+1 비트 길이를 갖는 x1+x2·x3+x4의 연산 결과(Q)를 부여하는 곱합 연산기로 할 수 있다. 이 경우, 상기 복수의 메모리에는 제1 메모리 및 제2 메모리를 포함하고, 상기 파이프라인 처리의 연산 스테이지에 뒤따르는 연산 결과의 기록 스테이지에 있어서, 상기 연산 결과(Q)의 하위 r 비트(QL)가 상기 제1 메모리에 기록되고, 상기 연산 결과(Q)의 상기 QL을 제외하는 상위 비트(QH)가 상기 제4 레지스터에 입력되며, 상기 기록 스테이지에 뒤따르는 상기 레지스터에의 변수의 독출 스테이지에 있어서, 상기 제1 메모리에서 상기 제1 레지스터로 변수(x1)가, 상기 제2 메모리에서 상기 제3 레지스터로 변수(x3)가, 동일한 독출 스테이지에서 독출되는 것으로 할 수 있다. 또한, 상기 제1 및 제2 메모리를, 데이터의 기록 포트와 독출 포트를 각각 하나 갖는 2포트 메모리로 하는 것, 혹은, 상기 제1 메모리를 데이터의 기록 포트와 독출 포트를 각각 하나 갖는 2포트 메모리, 상기 제2 메모리를 데이터의 기록 및 독출이 하나의 포트에서 행해지는 1포트 메모리로 할 수 있다.
또, 상기 연산기는 제1 레지스터, 제2 레지스터, 제3 레지스터, 제4 레지스터, 제5 레지스터, 제6 레지스터의 각각에 입력된 r 비트 길이를 갖는 x1, x2, x3, x4, x5, x6의 각 입력값에 기초하여, 2r 또는 2r+1 비트 길이를 갖는 x1+x2·x3+x4·x5+x6의 연산 결과(Q)를 부여하는 곱합 연산기로 할 수 있다. 이 경우, 상기 복수의 메모리에는 제1 메모리, 제2 메모리 및 제3 메모리를 포함하고, 상기 파이프라인 처리의 연산 스테이지에 뒤따르는 연산 결과의 기록 스테이지에 있어서, 상기 연산 결과(Q)의 하위 r 비트(QL)가 상기 제1 메모리에 기록되고, 상기 연산 결과(Q)의 상기 QL을 제외하는 상위 비트(QH)가 상기 제6 레지스터에 입력되며, 상기 기록 스테이지에 뒤따르는 상기 레지스터에의 변수의 독출 스테이지에 있어서, 상기 제1 메모리에서 상기 제1 레지스터로 변수(x1)가, 상기 제2 메모리에서 상기 제3 레지스터에 변수(x3)가, 상기 제3 메모리에서 상기 제5 레지스터에 변수(x5)가, 동일한 독출 스테이지에서 독출되는 것으로 할 수 있다. 또, 상기 제1 메모리를 데이터의 기록 포트와 독출 포트를 각각 하나 갖는 2포트 메모리로 하고, 상기 제2 및 제3 메모리를, 데이터의 기록 및 독출이 하나의 포트에서 행해지는 1포트 메모리로 할 수 있다.
이하, 본 발명의 실시예를 도면에 기초하여 상세히 설명한다. 단, 본 발명은 많은 다른 형태로 실시하는 것이 가능하며, 본 실시예의 기재 내용에 한정하여 해석하면 안 된다. 또, 실시예의 전체를 통해서 동일한 요소에는 동일한 번호를 붙이기로 한다.
(실시예 1)
도 1은 본 발명의 일 실시예인 몽고메리 승산 회로의 일례를 그 데이터 패스부에 대해 도시한 블럭도이다. 본 실시예의 몽고메리 승산 회로는 곱합 연산 회로(1)와, 입력 레지스터(2∼5)와, 멀티플렉서(6)와, 2개의 메모리(7)(메모리 A) 및 메모리(8)(메모리 B)를 갖는다.
곱합 연산 회로(1)는 레지스터(3)와 레지스터(4)의 입력값(r 비트 길이)의곱에, 레지스터(2)와 레지스터(5)의 입력값(r 비트 길이)을 가산하여 2r 비트 길이의 출력(tmp)을 부여한다. 즉, 가산 입력(pj, c)과 적산 입력(yj, xi)으로부터 출력 tmp=pj+yj·xi+c를 얻는다. 곱합 연산 회로(1)는 예컨대 공지의 전가산기(FA)와 반가산기(HA)를 이용하여 구성할 수 있다. 또, 도 1에 있어서 xi(0)과 같이 나타내고 있는 것은, 변수(xi)의 괄호 내의 숫자에 해당하는 비트를 빼낸 값에 대응한다.
입력 레지스터(2∼5)에, 메모리(7, 8)로부터 값이 독출되어 입력되거나, 혹은 곱합 연산 회로(1)로부터의 출력이 직접 입력된다. 멀티플렉서(6)는 3개의 입력에 대하여 하나의 출력을 부여하는 스위치이다.
메모리(7, 8)는 범용적인 2포트 메모리, 즉 데이터의 기록과 독출을 각각 독립된 하나의 포트로부터 행할 수 있는 메모리이다. 메모리(7)(메모리 A)에는 이중 루프 처리중인 도중 변수 P(pj)가 기록되고, 메모리(8)(메모리 B)에는 그 밖의 변수 X(xi), Y(yj), n(nj)와, N과 최종 결과 P(pj)가 기록된다. 메모리(7, 8)는 모두 2포트 메모리이며, 소자의 IP 코어화의 장해, 소자 면적의 증대의 문제를 일으키지 않는다.
본 실시예의 연산 회로에서는 데이터의 독출, 연산, 기록이 일련의 파이프라인으로서 처리된다. 즉, 메모리에서 레지스터로의 데이터의 독출 스테이지와, 레지스터에 입력된 값에 기초한 연산 스테이지와, 연산 결과를 레지스터 또는 메모리에 기록하는 기록 스테이지가 병렬로 처리된다.
도 2는 도 1의 회로에 있어서 의사 코드 3.x의 처리를 실행했을 때의 처리의 타이밍을 나타낸 타이밍도이다. 도 2에서는 m=4인 경우의 처리의 최종 루프 근방을 나타내고 있다. 또 상기 및 이하의 타이밍도에서 일련의 파이프라인 처리(데이터의 독출, 연산, 결과의 기록)를 동일한 배경색으로 나타낸 바와 같이 회색 또는 백색으로 농담(濃淡) 구분으로 나타내고 있다. 또한, 차트의 좌단에는, 독출처의 메모리[MemA(read), Men1B(read)], 레지스터[pj(레지스터(5)], yj, nj, N(레지스터 4), c(레지스터 2), xi, t(레지스터 3)), 기록처의 메모리[MemA(write), MemB(write)]를 지표로 하여 나타내고 있다. 차트의 각 행에는 독출 스테이지에 있어서 각 메모리로부터 독출되는 값, 연산 스테이지에 있어서의 레지스터 내의 값, 기록 스테이지에 있어서의 메모리 기록할 수 있는 값이 기입되어 있다.
의사 코드 3.x의 제1 j 루프(행 번호 3.4∼3.8)에 있어서의 처리, 예컨대 도 2의 i=3 루프 중의 최초의 j=0∼3의 처리에서는 우선, j=0의 루프에서, 메모리(7)(MemA)에서 레지스터(5)(pj)로 p0를, 메모리(8)(MemB)에서 레지스터(4)(yj, nj, N)로 y0를 독출한다(독출 스테이지). 또한 이 독출 스테이지와 동시에 전 사이클의 연산 스테이지(행 번호 3.16의 계산) 및 전전 사이클의 기록 스테이지[메모리(7)(MemA)에의 p2의 기록, c 레지스터에의 상위 비트(tmpH)의 기록]가 행해지고 있다.
다음에, j=1의 독출 스테이지에서 메모리(7)(MemA)에서 레지스터(5)(pj)로p1을, 메모리(8)(MemB)에서 레지스터(4)(yj, nj, N)로 y1을 독출하는 동시에 먼저 독출된 p0, y0과 레지스터(2)(c)에 입력되어 있는 전 단계의 연산 결과(tmpH) 및 레지스터(3)(xi, t)에 입력되어 있는 x3에 기초하여 행 번호 3.5의 연산을 실행한다(연산 스테이지). 또한, 이 때 전 사이클의 기록 스테이지(메모리(7)(MemA)에의 p3의 기록, c 레지스터(레지스터(2))에의 상위 비트(tmpH)의 기록)가 행해지고 있다.
다음에, j=2의 독출 스테이지에서 메모리(7)(MemA)에서 레지스터(5)(pj)로 p2를, 메모리(8)(MemB)에서 레지스터(4)(yj, nj, N)로 y2를 독출하는 동시에 전 사이클에서 레지스터에 독출된 값에 기초하여 연산을 실행하여, 앞의 연산 결과(변수 p0, x3, y0, c에 기초한 연산 결과)의 상위 비트(tmpH) 및 하위 비트(p0)를 각각 c 레지스터와 메모리(7)(MemA)에 기록한다(기록 스테이지). 이와 같이 하여, p0, y0의 입력 이후 결과가 기록될 때까지의 일련의 파이프라인 처리가 행해진다. 그 밖의 pj, yj에 관해서도 마찬가지이다.
이어서, 행 번호 3.9의 처리에서는 독출 사이클에 1 사이클의 공간을 설치하여, j=3의 연산 스테이지 후에 레지스터 c의 내용을 p4로 하여 메모리(7)에 기록한다.
다음에, 행 번호 3.10의 처리(t의 계산)에서는 메모리(7)로부터 p0을, 메모리(8)로부터 N을 동일한 독출 스테이지에서 각각 레지스터(3) 및 레지스터(4)에 독출하고, 연산 결과를 다음 기록 스테이지에서 레지스터(4)에 변수(t)로서 기록한다.
다음에, 행 번호 3.11∼3.15의 제2 j 루프의 처리에서는 제1 j 루프의 경우와 같이 메모리(7)로부터 pj가, 메모리(8)로부터 nj가 동일 독출 스테이지에서 독출되어, 먼저 입력된 변수(t, c)를 이용하여 행 번호 3.12의 연산을 행한다. 그 후, 연산 결과의 하위 비트는 pj-1으로서 메모리(7)에 기록되고(행 번호 3.13), 상위 비트는 c 레지스터에 기록된다(행 번호 3.14). 또한, 이 제2 j 루프의 j=0에 있어서의 처리에서는 c는 0 리셋된다. 또, j=0에서는 연산 결과의 하위 비트는 기록되지 않는다.
행 번호 3.16의 처리에서는 메모리(7)로부터 p4가 레지스터(5)(pj) 독출되어, c 레지스터의 값과의 합을 취해 p3으로서 메모리(7)에 기록된다. 다만, 최후의 i 루프의 메모리에의 기록 처리에서는, pj는 메모리(7)뿐만 아니라 메모리(8)에도 기록한다.
마지막으로, 행 번호 3.18의 처리에서는 메모리(7)로부터 pj와 nj를 각각 레지스터에 독출하여, 비교 연산을 한다. 즉 감산 「P=P-n」의 결과는 메모리(8)(MemB)의 전회의 결과(P)를 덧쓰기하지 않는 장소에 보존한다. 메모리(8)(MemB)는 최후의 j 루프를 빠져나왔을 때의 P와, 그 다음에 n을 감한 P-n을 유지하게 되지만, P-n이 플러스이면 P-n을, P-n이 마이너스이면 P를 최종 결과로 한다. 최후의 j 루프를 빠져나왔을 때에 메모리(7)(MemA)에도 P를 기록하는 것은 단순히 P-n의 계산으로 메모리(8)(MemB)에 유지되어 있는 n과 동시에 독출하기 위해서이다.
상기한 바와 같이 하여, 의사 코드 3.x의 연산 처리를 종료한다. 상기 연산 처리에서는 메모리로부터의 변수의 독출을 동일한 독출 스테이지에서 행한다. 이와 같이 동일한 독출 스테이지에서 변수의 독출을 할 수 있는 것은 메모리를 2개 설치하고, 동시에 독출할 가능성이 있는 변수를 상이한 메모리에 기록할 수 있도록 했기 때문이다. 이로써, 종래 방식에 비하여 메모리 독출의 대기 시간을 단축하고, 처리의 퍼포먼스를 향상할 수 있다.
상기 처리에 의한 독출 스테이지의 사이클 수를 검토하면, 다음과 같다. 제1 j 루프의 처리에서 m, 행 번호 3.9, 3.10의 처리에서 2, 제2 j 루프의 처리에서 m, 행 번호 3.16의 처리에서 1, 이로써 i 루프 내의 처리에 필요한 사이클 수는 2m+3이 된다. 이것에 i 루프의 m회를 곱해 2m2+3m. 또한 i=0일 때에 pj를 독출할 필요는 없지만 그 사이클에서 yj를 독출할 필요가 있기 때문에 m을 감하는 일은 없다. 행 번호 3.18의 비교 동작에 m 사이클, 파이프라인을 빠지는 데 2 사이클이 필요하다. 결국 최종적인 사이클 수는
2m2+4m+2
이 된다. 종래 방식에 있어서 4m2+5m+2의 독출 사이클을 필요로 한 것과 비교하면, 약 반의 사이클 수로 감소된다.
또, 상기 실시예에서는 의사 코드 3.x의 경우를 설명했지만, 의사 코드 2.x와 같이 xi·yj와 t·nj를 하나의 루프에서 가산하는 것도 가능하다. 의사 코드 2.x의 경우는 의사 코드 3.x의 경우에 비하여 변수(pj)의 독출 대기 사이클이 반으로 적기 때문에, 전체의 사이클 수가 적다고 하는 메리트가 있었지만, 상기 실시예와 같이 메모리를 2개 설치하여 이것을 구별지어 쓰는 경우, 양자에 차이는 없다. 이것은 도 2에서도 알 수 있듯이, 본 실시예에서는 pj와 yj또는 pj와 nj의 독출을 별도의 메모리로부터 동시에 행할 수 있어, 쓸데없는 대기가 생기지 않기 때문이다. 본 실시예에서는, 의사 코드 2.x의 경우라도, 종래 방식의 사이클 수, 3m2+4m+2와 비교하여, 그 대체로 2/3가 된다. pm-1에 쓸데없는 자릿수 올림이 생겨 r+1 비트가 되는 일도 없기 때문에, 예외 처리가 불필요하며, 회로 구성이 간단하게 되는 메리트도 있다.
(실시예 2)
도 3은 본 발명의 다른 실시예인 몽고메리 승산 회로의 일례를 그 데이터 패스부에 관해서 나타낸 블럭도이다. 본 실시예의 연산 회로는 메모리[메모리(8)]가 1포트 메모리, 즉 데이터의 독출과 기록의 쌍방을 하나의 포트에서 행하는 메모리로 하는 것을 제외하고, 실시예 1과 마찬가지다. 이와 같이 본 실시예에서는 메모리(8)를 1포트 메모리로 함으로써, 메모리 사이즈를 작게 하여 회로의 소형화를 도모할 수 있게 된다.
도 4는 도 3의 회로에서 의사 코드 3.x의 처리를 실행했을 때의 처리의 타이밍을 나타낸 타이밍도이다. 도 4에서는 m=4인 경우의 처리의 최종 루프 근방을 나타내고 있다. 도시하는 것과 같이 i 루프가 종료될 때까지의 처리는 실시예 1과 마찬가지다. P=P-n의 처리에 있어서, 본 실시예에서는 메모리(8)에 1포트 메모리를 이용하고 있기 때문에 최종적인 계산 결과인 pj의 기록을 메모리(8)에 행하지 않고, 메모리(7)에 행한다. 그리고, 마지막으로 메모리(7)(MemA)에서 메모리(8)(MemB)로 pj의 전송을 실행한다. 즉, 최종 결과(P)의 보정 연산은 P≥n이면 P-n을 최종 결과로 하는 것이지만, P≥n인지 아닌지는 감산을 1회 실행할 때까지 판정할 수 없다. 그 때문에 실시예 1에서는 P과 P-n의 쌍방을 메모리(8)(MemB)에 기록하여, 감산 결과의 부합을 보고 어느 한 쪽을 선택하도록 했다. 본 실시예에서는 P과 P-n을 메모리(7)(MemA)에만 기록하고, 감산 결과에 따라서 P나 P-n 중 어느 한쪽을 메모리(8)(MemB)에 기록하도록 한다. 이와 같이 하면, m+1 사이클 증가하는 만큼의 패널티로 메모리(8)(MemB)를 싱글 포트 메모리로 할 수 있다. 이에 따라 메모리의 소형화를 도모할 수 있게 된다. 또, 본 실시예의 경우의 사이클 수는
2m2+5m+3
이 된다. 이에 대하여, 종래와 같이 하나의 싱글포트 메모리로 의사 코드 2.x를 처리한 경우,
4m2+5m+2
의사 코드 3.x를 처리한 경우,
6m2+7m+2
의 사이클 수가 필요하게 된다. 본 발명의 우위성이 보다 현저하게 된다.
(실시예 3)
도 5는 본 발명의 또 다른 실시예인 몽고메리 승산 회로의 일례를 그 데이터 패스부에 관해서 도시한 블럭도이다. 본 실시예의 몽고메리 승산 회로는 곱합 연산 회로(9)와, 입력 레지스터(10∼15)와, 3개의 메모리(16)(메모리 A), 메모리(17)(메모리 B1) 및 메모리(18)(메모리 B2)를 갖는다.
곱합 연산 회로(9)는 레지스터(11)(t 레지스터)와 레지스터(12)(nj, N 레지스터)의 입력값(r 비트 길이)의 곱과, 레지스터(13)(xi레지스터)와 레지스터(14)(yj레지스터)의 입력값(r 비트 길이)의 곱과, 레지스터(10)(c 레지스터)의 입력값(r+1 비트 길이)과, 레지스터(15)(pj레지스터)의 입력값(r 비트 길이)을 가산한 2r+1 비트 길이의 출력(tmp)을 부여한다. 즉, 곱합 연산 회로(9)는 2개의 승산기를 지니고, 가산 입력(pj, c)과 적산 입력(yj, xi)과, 적산 입력(t, nj)에서 출력 tmp=pj+yj·xi+t·nj+c을 얻는다.
레지스터에 대해서는 실시예 1과 마찬가지다. 또한, 메모리(16)(MemA)는 범용적인 2포트 메모리이며, 메모리(17, 18)(MemB1, B2)는 싱글 포트 메모리이다. 이들 범용적인 메모리를 이용하기 위해서, 소자의 IP 코어화의 장해가 생기지 않고, 또한, 메모리 수의 증가를 싱글 포트 메모리를 채용함에 의한 소자 면적의 저감으로 보충할 수 있다.
도 6은 도 5의 회로에서 의사 코드 2.x의 처리를 실행했을 때의 처리의 타이밍을 도시한 타이밍도이다. 도 5에서는 m=4인 경우의 처리의 최종 루프 근방을 나타내고 있다.
우선, i 루프의 맨처음에 t의 계산(의사 코드 2.3, 2.4)을 행한다. 메모리(16)로부터 p0을 독출하고, 메모리(17)로부터 x3을 독출하고, 메모리(18)로부터 y0을 독출한다. 이들 독출은 하나의 독출 스테이지에서 행해진다. 이들 독출한 변수를 이용하여 행 번호 2.3의 연산을 하여, 연산 결과의 하위 비트(tmpL)를 t 레지스터에 입력한다. 상기 연산과 병행하여 메모리(17)로부터 N을 독출하고, 상기 t와 N을 이용하여 행 번호 2.4의 연산을 한다. 연산 결과의 하위 비트(tmpL)가 t 레지스터에 입력되고, 본 루프 내를 통하여 이 t의 값이 이용된다. 또한, 먼저 독출한 x3도 본 루프 내를 통하여 이용된다.
다음에 j 루프로 들어가, p0, n0, y0이 각각 메모리(16, 17, 18)로부터 pj레지스터, nj, N 레지스터, yj레지스터에 동일 사이클 내에서 독출된다. 그 후, c, t, x3의 값을 이용하여 연산이 행해져, 연산 결과의 하위 비트는 pj-1로서메모리(16)에, 상위 비트는 c 레지스터에 기록된다(행 번호 2.9, 2.10). 또, 이 j 루프의 j=0에 있어서의 처리에서는 c는 0 리셋된다. 또한, j=0에서는 연산 결과의 하위 비트는 기록되지 않는다.
행 번호 2.14의 처리에서는 c 레지스터의 값이 pm으로서 메모리(16)에 기록된다. 그 후의 P=P-n, MemA→MemB의 처리는 실시예 2와 마찬가지이다.
본 실시예에 의하면, 2개의 승산기를 설치하고, 또한 메모리를 3개 설치했기 때문에, 3 변수를 동시에 독출할 수 있게 되어, 2개의 승산기를 최대한 활용하는 데이터의 독출을 행할 수 있게 된다.
본 실시예에서 필요한 처리 사이클은 다음과 같다. i 루프내 의 t의 계산에서 2 사이클, j 루프에서 m 사이클, 의사 코드 2.12의 처리에서 1 사이클, 합계 m+3 사이클이 i 루프 내의 처리에서 필요하다. i 루프의 m회를 곱해 m2+3m이 된다. 또 i=0일 때에 pj를 독출할 필요는 없지만 그 사이클에서 xi, yj를 독출할 필요가 있기 때문에 m을 감하는 일은 없다. 행 번호 14의 비교 동작과 메모리간 전송에 2m 사이클, 파이프라인을 빠져나오는 데 2 사이클을 요한다. 결국 최종적인 사이클 수는
m2+5m+2
가 된다. 종래 방식은 물론, 실시예 1, 2와 비교하더라도 대폭 사이클 수가 저감된다. 특히 m의 값이 커지면 m2항이 들어오기 때문에, 그 효과가 보다 현저하게 된다.본 실시예를 이용함으로써 2 승산기의 경우의 메모리 액세스의 병목 현상을 해소할 수 있어, 사이클 수를 대폭 개선하는 것이 가능하게 된다.
이상, 본 발명자에 의해서 이루어진 발명을 발명의 실시예에 기초하여 구체적으로 설명했지만, 본 발명은 상기 실시예에 한정되는 것이 아니라, 그 요지를 일탈하지 않는 범위에서 여러 가지 변경이 가능한 것은 물론이다. 예컨대, 상기 실시예에서는 메모리로서 싱글 포트 또는 2포트의 메모리를 예시했지만, 3포트 메모리에도 적용할 수 있다.
본원에서 개시되는 발명 중, 대표적인 것에 의해서 얻어지는 효과는 다음과 같다. 즉, 몽고메리 승산 회로에 있어서의 메모리 액세스의 병목 현상을 2포트나 싱글 포트의 범용 메모리를 사용하면서 해소할 수 있다. 이에 따라, 높은 퍼포먼스와 소자의 소형화를 실현하고, 암호 생성 회로를 낮은 비용으로 제공할 수 있다.
Claims (16)
- 복수의 레지스터와, 상기 복수의 레지스터에 입력되는 값을 입력으로 하는 연산기와, 복수의 메모리를 포함하고,상기 복수의 메모리로부터 상기 복수의 레지스터에의 복수의 변수의 독출을, 상기 연산기의 파이프라인 처리에 있어서의 동일한 독출 스테이지에서 행하는 것을 특징으로 하는 것인 연산 회로.
- 제1항에 있어서, 상기 연산기는 제1 레지스터, 제2 레지스터, 제3 레지스터, 제4 레지스터의 각각에 입력된 r 비트 길이를 갖는 x1, x2, x3, x4의 각 입력값에 기초하여, 2r 또는 2r+1 비트 길이를 갖는 x1+x2·x3+x4의 연산 결과(Q)를 부여하는 곱합 연산기인 것을 특징으로 하는 것인 연산 회로.
- 제2항에 있어서, 상기 복수의 메모리에는 제1 메모리 및 제2 메모리를 포함하고,상기 파이프라인 처리의 연산 스테이지에 뒤따르는 연산 결과의 기록 스테이지에 있어서, 상기 연산 결과(Q)의 하위 r 비트(QL)가 상기 제1 메모리에 기록되고, 상기 연산 결과(Q)의 상기 QL을 제외하는 상위 비트(QH)가 상기 제4 레지스터에 입력되고,상기 기록 스테이지에 뒤따르는 상기 레지스터에의 변수의 독출 스테이지에 있어서, 상기 제1 메모리에서 상기 제1 레지스터로 변수(x1)가, 상기 제2 메모리에서 상기 제3 레지스터로 변수(x3)가, 동일한 독출 스테이지에서 독출되는 것을 특징으로 하는 것인 연산 회로.
- 제3항에 있어서, 상기 제1 및 제2 메모리는 데이터의 기록 포트와 독출 포트를 각각 하나 갖는 2포트 메모리인 것을 특징으로 하는 것인 연산 회로.
- 제3항에 있어서, 상기 제1 메모리는 데이터의 기록 포트와 독출 포트를 각각 하나 갖는 2포트 메모리이며, 상기 제2 메모리는 데이터의 기록 및 독출이 하나의 포트에서 행해지는 1포트 메모리인 것을 특징으로 하는 것인 연산 회로.
- 제1항에 있어서, 상기 연산기는 제1 레지스터, 제2 레지스터, 제3 레지스터, 제4 레지스터, 제5 레지스터, 제6 레지스터의 각각에 입력된 r 비트 길이를 갖는 x1, x2, x3, x4, x5, x6의 각 입력값에 기초하여, 2r 또는 2r+1 비트 길이를 갖는 x1+x2·x3+x4·x5+x6의 연산 결과(Q)를 부여하는 곱합 연산기인 것을 특징으로 하는 것인 연산 회로.
- 제6항에 있어서, 상기 복수의 메모리에는 제1 메모리, 제2 메모리 및 제3 메모리를 포함하고,상기 파이프라인 처리의 연산 스테이지에 뒤따르는 연산 결과의 기록 스테이지에 있어서, 상기 연산 결과(Q)의 하위 r 비트(QL)가 상기 제1 메모리에 기록되고, 상기 연산 결과(Q)의 상기 QL을 제외하는 상위 비트(QH)가 상기 제6 레지스터에 입력되고,상기 기록 스테이지에 뒤따르는 상기 레지스터에의 변수의 독출 스테이지에 있어서, 상기 제1 메모리에서 상기 제1레지스터로 변수(x1)가, 상기 제2 메모리에서 상기 제3 레지스터로 변수(x3)가, 상기 제3 메모리에서 상기 제5 레지스터로 변수(x5)가, 동일한 독출 스테이지에서 독출되는 것을 특징으로 하는 것인 연산 회로.
- 제7항에 있어서, 상기 제1 메모리는 데이터의 기록 포트와 독출 포트를 각각하나 갖는 2포트 메모리이며, 상기 제2 및 제3 메모리는 데이터의 기록 및 독출이 하나의 포트에서 행해지는 1포트 메모리인 것을 특징으로 하는 것인 연산 회로.
- 복수의 입력 레지스터를 갖는 연산기와 복수의 메모리를 구비한 연산 회로를 이용한 연산 방법으로서,상기 입력 레지스터에 입력되어 있는 값에 기초하여 연산을 행하는 단계와,상기 연산 결과를 상기 입력 레지스터 또는 상기 메모리에 기록하는 단계와,상기 복수의 메모리로부터 상기 복수의 입력 레지스터에 복수의 변수를 동일한 파이프라인 스테이지에서 독출하는 단계를 포함하는 것을 특징으로 하는 것인 연산 방법.
- 제9항에 있어서, 상기 연산기는 제1 레지스터, 제2 레지스터, 제3 레지스터, 제4 레지스터의 각각에 입력된 r 비트 길이를 갖는 x1, x2, x3, x4의 각 입력값에 기초하여, 2r 또는 2r+1 비트 길이를 갖는 x1+x2·x3+x4의 연산 결과(Q)를 부여하는 곱합 연산기인 것을 특징으로 하는 것인 연산 방법.
- 제10항에 있어서, 상기 복수의 메모리에는 제1 메모리 및 제2 메모리를 포함하고,상기 연산 결과(Q)의 하위 r 비트(QL)가 상기 제1 메모리에 기록되고, 상기 연산 결과(Q)의 상기 QL을 제외하는 상위 비트(QH)가 상기 제4 레지스터에 입력되는 상기 연산기의 파이프라인 처리에 있어서의 기록 단계와,상기 제1 메모리에서 상기 제1 레지스터로의 변수(x1)의 독출과, 상기 제2 메모리에서 상기 제3 레지스터로의 변수(x3)의 독출이 상기 파이프라인 처리의 동일한 독출 스테이지에서 행해지는 독출 단계를 포함하는 것을 특징으로 하는 것인 연산 방법.
- 제11항에 있어서, 상기 제1 및 제2 메모리는 데이터의 기록 포트와 독출 포트를 각각 하나 갖는 2포트 메모리인 것을 특징으로 하는 것인 연산 방법.
- 제11항에 있어서, 상기 제1 메모리는 데이터의 기록 포트와 독출 포트를 각각 하나 갖는 2포트 메모리이며, 상기 제2 메모리는 데이터의 기록 및 독출이 하나의 포트에서 행해지는 1포트 메모리인 것을 특징으로 하는 것인 연산 방법.
- 제9항에 있어서, 상기 연산기는 제1 레지스터, 제2 레지스터, 제3 레지스터, 제4 레지스터, 제5 레지스터, 제6 레지스터의 각각에 입력된 r 비트 길이를 갖는 x1, x2, x3, x4, x5, x6의 각 입력값에 기초하여, 2r 또는 2r+1 비트 길이를 갖는 x1+x2·x3+x4·x5+x6의 연산 결과(Q)를 부여하는 곱합 연산기인 것을 특징으로 하는 것인 연산 회로.
- 제14항에 있어서, 상기 복수의 메모리에는 제1 메모리, 제2 메모리 및 제3 메모리를 포함하고,상기 연산 결과(Q)의 하위 r 비트(QL)가 상기 제1 메모리에 기록되고, 상기 연산 결과(Q)의 상기 QL을 제외하는 상위 비트(QH)가 상기 제6 레지스터에 입력되는상기 연산기의 파이프라인 처리에 있어서의 기록 단계와,상기 제1 메모리에서 상기 제1 레지스터로의 변수(x1)의 독출과, 상기 제2 메모리에서 상기 제3 레지스터로의 변수(x3)의 독출과, 상기 제3 메모리에서 상기 제5 레지스터로의 변수(x5)의 독출이, 상기 파이프라인 처리의 동일한 독출 스테이지에서 행해지는 독출 단계를 포함하는 것을 특징으로 하는 것인 연산 방법.
- 제15항에 있어서, 상기 제1 메모리는 데이터의 기록 포트와 독출 포트를 각각 하나 갖는 2포트 메모리이며, 상기 제2 및 제3 메모리는 데이터의 기록 및 독출이 하나의 포트에서 행해지는 1포트 메모리인 것을 특징으로 하는 것인 연산 방법.
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JPJP-P-2000-00386069 | 2000-12-19 | ||
JP2000386069A JP3709553B2 (ja) | 2000-12-19 | 2000-12-19 | 演算回路および演算方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
KR20020050105A true KR20020050105A (ko) | 2002-06-26 |
KR100441036B1 KR100441036B1 (ko) | 2004-07-21 |
Family
ID=18853225
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR10-2001-0077092A KR100441036B1 (ko) | 2000-12-19 | 2001-12-06 | 연산 회로 및 연산 방법 |
Country Status (8)
Country | Link |
---|---|
US (1) | US6772942B2 (ko) |
EP (1) | EP1217512B1 (ko) |
JP (1) | JP3709553B2 (ko) |
KR (1) | KR100441036B1 (ko) |
CN (1) | CN1221891C (ko) |
AT (1) | ATE440320T1 (ko) |
DE (1) | DE60139597D1 (ko) |
TW (1) | TW530260B (ko) |
Families Citing this family (19)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
GB2404487A (en) * | 2003-07-31 | 2005-02-02 | Sony Uk Ltd | Access control for digital storage medium content |
JP4408712B2 (ja) * | 2004-01-26 | 2010-02-03 | 富士通マイクロエレクトロニクス株式会社 | 多倍長データ積和演算処理回路及びモンゴメリ積和剰余演算回路 |
JP4544870B2 (ja) | 2004-01-26 | 2010-09-15 | 富士通セミコンダクター株式会社 | 演算回路装置 |
JP4663421B2 (ja) * | 2005-06-24 | 2011-04-06 | 日本電信電話株式会社 | 離散対数演算装置、方法及びプログラム |
US8028015B2 (en) * | 2007-08-10 | 2011-09-27 | Inside Contactless S.A. | Method and system for large number multiplication |
JP5097138B2 (ja) * | 2009-01-15 | 2012-12-12 | シャープ株式会社 | モンゴメリ乗算のための演算回路及び暗号回路 |
CN101751242B (zh) * | 2009-12-22 | 2013-08-21 | 无锡中星微电子有限公司 | 一种数据处理方法及系统 |
TW201217993A (en) * | 2010-10-20 | 2012-05-01 | Huafan University | employing operation on decomposed matrices to reduce operation amount for single matrix per unit time for light-weighting matrix operation process in simpler operation circuit |
CN102360281B (zh) * | 2011-10-31 | 2014-04-02 | 中国人民解放军国防科学技术大学 | 用于微处理器的多功能定点乘加单元mac运算装置 |
CN102999313B (zh) * | 2012-12-24 | 2016-01-20 | 飞天诚信科技股份有限公司 | 一种基于蒙哥马利模乘的数据处理方法 |
KR101633960B1 (ko) | 2013-08-27 | 2016-06-27 | 배종훈 | 유아 세정보조기구 |
JP6193699B2 (ja) * | 2013-09-27 | 2017-09-06 | 株式会社ソシオネクスト | 演算回路 |
TWI549090B (zh) * | 2014-08-29 | 2016-09-11 | Portable sensing operation device | |
CN106156614B (zh) * | 2015-03-25 | 2018-12-28 | 北京南瑞智芯微电子科技有限公司 | 一种抵抗故障攻击的防护方法和装置 |
IL239880B (en) * | 2015-07-09 | 2018-08-30 | Kaluzhny Uri | Simplified montgomery multiplication |
TWI575924B (zh) * | 2015-10-06 | 2017-03-21 | 瑞昱半導體股份有限公司 | 解密裝置、方法及電路 |
TWI580243B (zh) * | 2015-10-06 | 2017-04-21 | 瑞昱半導體股份有限公司 | 解密裝置、方法及電路 |
US10534836B2 (en) * | 2016-12-06 | 2020-01-14 | Gsi Technology Inc. | Four steps associative full adder |
CN109814838B (zh) * | 2019-03-28 | 2024-04-12 | 贵州华芯半导体技术有限公司 | 获取加解密运算中的中间结果组的方法、硬件装置和系统 |
Family Cites Families (24)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US3689893A (en) * | 1969-05-09 | 1972-09-05 | Olivetti & Co Spa | Accounting machine processor |
US4539635A (en) * | 1980-02-11 | 1985-09-03 | At&T Bell Laboratories | Pipelined digital processor arranged for conditional operation |
US4488252A (en) * | 1982-02-22 | 1984-12-11 | Raytheon Company | Floating point addition architecture |
JPS6198476A (ja) * | 1984-10-19 | 1986-05-16 | Casio Comput Co Ltd | カードターミナル |
US4955024A (en) * | 1987-09-14 | 1990-09-04 | Visual Information Technologies, Inc. | High speed image processing computer with error correction and logging |
US5146592A (en) * | 1987-09-14 | 1992-09-08 | Visual Information Technologies, Inc. | High speed image processing computer with overlapping windows-div |
US4985848A (en) * | 1987-09-14 | 1991-01-15 | Visual Information Technologies, Inc. | High speed image processing system using separate data processor and address generator |
US4862407A (en) * | 1987-10-05 | 1989-08-29 | Motorola, Inc. | Digital signal processing apparatus |
KR920006283B1 (ko) * | 1988-02-19 | 1992-08-03 | 미쯔비시덴끼 가부시끼가이샤 | 디지탈신호 처리방식 |
US5337395A (en) * | 1991-04-08 | 1994-08-09 | International Business Machines Corporation | SPIN: a sequential pipeline neurocomputer |
JP2906792B2 (ja) * | 1991-11-15 | 1999-06-21 | 日本電気株式会社 | ディジタルプロセッサ及びその制御方法 |
US5260898A (en) * | 1992-03-13 | 1993-11-09 | Sun Microsystems, Inc. | Result cache for complex arithmetic units |
JPH07253965A (ja) * | 1994-03-16 | 1995-10-03 | Fujitsu Ltd | 積和演算器 |
KR0138859B1 (ko) * | 1994-12-06 | 1998-06-15 | 양승택 | 다중 명령어 다중 데이타형 신경망 전용 디지탈 어레이 프로세서 및 이를 이용해 구성된 시스템 |
JPH0969061A (ja) * | 1995-08-30 | 1997-03-11 | Sony Corp | ビデオ信号用プロセツサ |
WO1997013201A1 (en) * | 1995-10-06 | 1997-04-10 | Advanced Micro Devices, Inc. | Unified multi-function operation scheduler for out-of-order execution in a superscalar processor |
EP1014270A4 (en) * | 1996-10-24 | 2004-10-06 | Mitsubishi Electric Corp | MICROCOMPUTER WITH MEMORY AND PROCESSOR ON THE SAME CHIP |
GB2318890B (en) | 1996-10-31 | 2001-01-31 | Motorola Ltd | Co-processor for performing modular multiplication |
US6026421A (en) | 1997-11-26 | 2000-02-15 | Atmel Corporation | Apparatus for multiprecision integer arithmetic |
JP3616897B2 (ja) * | 1998-01-27 | 2005-02-02 | 富士通株式会社 | モンゴメリ法による乗算剰余計算装置 |
US5939693A (en) * | 1998-02-02 | 1999-08-17 | Motorola Inc. | Polynomial calculator device, and method therefor |
JP3829504B2 (ja) * | 1998-02-16 | 2006-10-04 | 株式会社デンソー | 情報処理装置 |
EP0947914B1 (en) | 1998-03-30 | 2004-12-15 | Rainbow Technologies Inc. | Computationally efficient modular multiplication method and apparatus |
US6560754B1 (en) * | 1999-05-13 | 2003-05-06 | Arc International Plc | Method and apparatus for jump control in a pipelined processor |
-
2000
- 2000-12-19 JP JP2000386069A patent/JP3709553B2/ja not_active Expired - Fee Related
-
2001
- 2001-11-27 EP EP01128119A patent/EP1217512B1/en not_active Expired - Lifetime
- 2001-11-27 AT AT01128119T patent/ATE440320T1/de not_active IP Right Cessation
- 2001-11-27 DE DE60139597T patent/DE60139597D1/de not_active Expired - Lifetime
- 2001-12-06 KR KR10-2001-0077092A patent/KR100441036B1/ko not_active IP Right Cessation
- 2001-12-10 TW TW090130566A patent/TW530260B/zh not_active IP Right Cessation
- 2001-12-18 US US10/023,147 patent/US6772942B2/en not_active Expired - Lifetime
- 2001-12-19 CN CNB011437383A patent/CN1221891C/zh not_active Expired - Lifetime
Also Published As
Publication number | Publication date |
---|---|
JP3709553B2 (ja) | 2005-10-26 |
ATE440320T1 (de) | 2009-09-15 |
TW530260B (en) | 2003-05-01 |
EP1217512A2 (en) | 2002-06-26 |
DE60139597D1 (de) | 2009-10-01 |
US6772942B2 (en) | 2004-08-10 |
KR100441036B1 (ko) | 2004-07-21 |
EP1217512B1 (en) | 2009-08-19 |
CN1221891C (zh) | 2005-10-05 |
JP2002207589A (ja) | 2002-07-26 |
US20020074391A1 (en) | 2002-06-20 |
EP1217512A3 (en) | 2008-03-05 |
CN1366234A (zh) | 2002-08-28 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
KR100441036B1 (ko) | 연산 회로 및 연산 방법 | |
EP0801345B1 (en) | Circuit for modulo multiplication and exponentiation arithmetic | |
KR100693239B1 (ko) | 정보 처리 장치, ic 카드 | |
EP1014617A2 (en) | Method and apparatus for elliptic curve cryptography and recording medium therefor | |
KR100442218B1 (ko) | 몽고메리의 알고리즘을 이용한 멱승 잉여 연산기 | |
AU773982B2 (en) | Method for making data processing resistant to extraction of data by analysis of unintended side-channel signals | |
US8781112B2 (en) | Signed montgomery arithmetic | |
KR20040060445A (ko) | 4-2 컴프레서를 이용한 몽고메리 모듈러 승산기 및 그승산 방법 | |
CN113273131A (zh) | 使用共享的份额的计算设备 | |
KR100457177B1 (ko) | 유한체 상의 두 원소의 곱을 구하는 직렬-병렬 곱셈기 | |
Neiße et al. | Switching blindings with a view towards IDEA | |
JP2000511649A (ja) | 公開鍵暗号方法 | |
JP2007041461A (ja) | 楕円曲線暗号におけるスカラー倍計算方法およびスカラー倍計算装置 | |
CN113467752B (zh) | 用于隐私计算的除法运算装置、数据处理系统及方法 | |
EP1818810B1 (en) | Circuit and method for multiplying long integer values | |
CN1696894B (zh) | 大数模乘计算乘法器 | |
US6614909B1 (en) | Methods, systems, and circuits for generating keys for public key cryptosystems using parallel processing for modular operations of IC cards | |
JP4598269B2 (ja) | 楕円曲線上の高速有限体演算 | |
JP4502817B2 (ja) | 楕円曲線スカラー倍計算方法および装置 | |
JP4692022B2 (ja) | 楕円曲線暗号におけるスカラー倍計算装置、及び、そのプログラム | |
KR20050064645A (ko) | 역원 계산 회로, 역원계산 방법 및 상기 역원계산 방법을실행시키기 위한 프로그램을 기록한 컴퓨터로 읽을 수있는 기록매체 | |
Cruz et al. | Efficient and secure software implementations of Fantomas | |
Poupard et al. | Decorrelated Fast Cipher: an AES Candidate well suited for low cost smart cards applications | |
KR20030048631A (ko) | 타원곡선 암호화 장치 | |
KR20240153910A (ko) | 전자 장치 및 전자 장치에서 암호화된 연산을 수행하는 방법 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A201 | Request for examination | ||
E902 | Notification of reason for refusal | ||
E701 | Decision to grant or registration of patent right | ||
GRNT | Written decision to grant | ||
FPAY | Annual fee payment |
Payment date: 20100621 Year of fee payment: 7 |
|
LAPS | Lapse due to unpaid annual fee |