KR20050088506A - 다중 세정도를 지원하는 확장형 몽고메리 모듈러 곱셈기 - Google Patents
다중 세정도를 지원하는 확장형 몽고메리 모듈러 곱셈기 Download PDFInfo
- Publication number
- KR20050088506A KR20050088506A KR1020040013855A KR20040013855A KR20050088506A KR 20050088506 A KR20050088506 A KR 20050088506A KR 1020040013855 A KR1020040013855 A KR 1020040013855A KR 20040013855 A KR20040013855 A KR 20040013855A KR 20050088506 A KR20050088506 A KR 20050088506A
- Authority
- KR
- South Korea
- Prior art keywords
- modulus
- multiplier
- bit
- partial product
- montgomery
- Prior art date
Links
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/48—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
- G06F7/52—Multiplying; Dividing
-
- 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
-
- 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/48—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
- G06F7/52—Multiplying; Dividing
- G06F7/523—Multiplying only
- G06F7/533—Reduction of the number of iteration steps or stages, e.g. using the Booth algorithm, log-sum, odd-even
- G06F7/5334—Reduction of the number of iteration steps or stages, e.g. using the Booth algorithm, log-sum, odd-even by using multiple bit scanning, i.e. by decoding groups of successive multiplier bits in order to select an appropriate precalculated multiple of the multiplicand as a partial product
- G06F7/5336—Reduction of the number of iteration steps or stages, e.g. using the Booth algorithm, log-sum, odd-even by using multiple bit scanning, i.e. by decoding groups of successive multiplier bits in order to select an appropriate precalculated multiple of the multiplicand as a partial product overlapped, i.e. with successive bitgroups sharing one or more bits being recoded into signed digit representation, e.g. using the Modified Booth Algorithm
Landscapes
- Physics & Mathematics (AREA)
- Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Mathematical Analysis (AREA)
- Mathematical Optimization (AREA)
- Pure & Applied Mathematics (AREA)
- Computational Mathematics (AREA)
- Theoretical Computer Science (AREA)
- Computing Systems (AREA)
- General Engineering & Computer Science (AREA)
- Mathematical Physics (AREA)
- Complex Calculations (AREA)
- Executing Machine-Instructions (AREA)
Abstract
다중 세정도를 지원하는 확장형 몽고메리 모듈러 곱셈기가 제공된다. 본 발명에 의하면, 한정된 크기의 몽고메리 곱셈기를 이용하여 다중 세정도의 곱셈 연산을 수행할 수 있다. 더욱이, 본 발명의 곱셈기는 강제 모듈러스곱 제어 신호를 이용하여 몽고메리 곱셈뿐만 아니라 노말 곱셈 연산을 수행할 수 있다.
Description
본 발명은 데이타 보안을 위한 암호화(cryptography) 시스템에 관한 것으로서, 특히 암호화시스템에서의 모듈러 곱셈연산을 위한 장치 및 방법에 관한 것이다.
컴퓨터 네트워크 또는 유무선통신을 통하여 각종 데이타를 주고받는 정보통신 환경에서는 데이타의 보안성을 유지하기 위한 암호화 시스템의 중요성이 날로 커지고 있다. 특히, 전자결제 또는 인증시스템에서는 부호화(encrytion) 및 복호화(decryption) 기술을 적용하여 보안성을 확보하는 것이 필수적이다. 암호화 기술은 크게 비밀키(대칭키 또는 공통키; secret key, symmetric key, private key, common key) 방식과 공개키(비대칭키; public key, asymmetric key) 방식으로 분류할 수 있다.
비밀키 방식은 미합중국 상무성의 국립표준국(NBS)에 의한 DES(Data Encryption System) 암호 알고리즘이 대표적인 예이며, 그 외에 구 소련의 GOST(GOvernment STandard), 스위스의 IDEA(International Data Encryption Algorithm) 등이 있다. 비밀키 암호화 방식에서는 정보교환 당사자간에 동일한 비밀키를 공유하여야 하므로 별도의 안전한 채널이 필요하고 특히 여러 사람과의 정보교환시에는 한 사용자가 많은 비밀키 채널을 유지 및 관리하여야 한다는 단점이 있다.
반면에, 공개키 암호화 방식은 암호화하는 키와 복호화하는 키가 서로 다르기 때문에 둘 중 하나를 알더라도 그 에 대응하는 키를 알기 어렵도록 하는 시스템이다. 공개키 암호화 방식에서는, 하나의 비밀키와 다른 하나의 공개키를 사용하여 정보를 스크램블(scramble)/디스크램블(descramble)한다. 공개키 암호화 방식은, 키를 공유하기 위한 별도의 채널이 필요치 않아 키 관리가 수월하고 비밀키 방식에 비해 보안성은 향상되지만, 두가지의 서로 다른 키를 생성하고 이를 통하여 정보를 복원하기 위한 수학적인 연산과정이 복잡하여 고속처리에 제한이 있는 것으로 알려져 있다.
몽고메리 알고리즘은 하드웨어 구현이 어려운 임의의 수에 대한 모듈러 연산을 단순히 곱셈 및 덧셈연산과 쉬프트(shift)연산으로 변환하여 해결하기 때문에 공개키 암호화 알고리즘을 하드웨어로 구현하는 방식이나 또는 소프트웨어로 구현하는 방식 모두에서 매우 유용하다. 몽고메리 알고리즘에서는 곱셈연산의 전후에 피연산자 변환(operand transformation) 과정이 필요하다. 따라서, 단일 곱셈 연산에서는 다른 일반적인 모듈러 곱셈기에 비하여 처리성능이 느릴 수 있지만, RSA 알고리즘과 같이 동일한 모듈러스에 대하여 반복적인 곱셈연산을 행하는 응용영역에서는 매번의 피연산자 변환작업이 필요하지 않기 때문에 다른 모듈러 곱셈기에 비해 고속으로 암호화 작업을 처리할 수 있다.
곱셈연산의 속도를 높이는 방법 중의 하나가 래딕스(radix; 기수)의 값을 늘리는 것이다. 래딕스 값이 증가하면 곱셈연산과정에서 수행되는 누산(accumulation)의 반복횟수가 그 만큼 줄어든다. 그러나, 래딕스 값이 증가하면 한 번의 누산을 위해 필요한 과정이 그 만큼 복잡해지고 한번의 누산에 소모되는 시간이 그 만큼 증가한다. 예를 들면, 래딕스-2 연산 알고리즘은 하드웨어로 구현하는 것이 용이하지만 래딕스-4 연산 알고리즘에 비하여 누산의 반복횟수가 2배가 된다. 그러나, 래딕스-4 연산방식은 기본적으로 래딕스-2 연산알고리즘에 비하여 하드웨어 구현이 복잡하고 각 반복수행의 지연시간이 증가하는 약점이 있다.
따라서, 하드웨어의 크기를 늘리거나 더 복잡하게 하지 않으면서 모듈러연산의 속도를 증가시킬 수 있도록 하는 적정한 설계가 중요하다.
한편, 컴퓨터의 연산 능력이 향상됨에 따라 암호화 시스템의 안전도를 보장하기 위하여 암호화 키의 길이가 길어져야만 한다. 그리고 응용 분야에 따라 요구되는 암호화 키의 길이가 다를 수도 있다. 따라서, 키의 길이가 길어지더라도동일한 응용에서 계속 사용할 수 있고 또한 다양한 암호화 키의 길이에도 대응할 수 있는 하드웨어가 요구된다.
따라서, 본 발명의 래딕스-4 논리연산을 기반으로 하여 다중 세정도(multiple precision)를 지원하는 확장 가능형 몽고메리 곱셈기를 제공하는데 있다.
상술한 바와 같은 목적을 달성하기 위한 본 발명의 일 특징에 의하면, 몽고메리 곱셈기는, 이전 결과(SI)와 -M, 0, M 및 2M(단, M은 n-비트 모듈러스 수 중 현재 입력된 비트들) 중 하나를 모듈러스곱으로 선택하는 모듈러스곱 선택기, n-비트 피승수(A) 중 현재 입력된 비트들 및 n-비트 승수(B) 중 현재 입력된 비트들에 대한 부분곱을 선택하는 부분곱 선택기, 그리고 상기 선택된 모듈러스곱과 상기 선택된 부분곱을 누산하는 누산기를 포함한다.
본 발명의 다른 특징에 의하면, 몽고메리 연산 장치는, 메모리와, 피승수 A, 승수 B 및 모듈러스 M을 상기 메모리에 저장하는 호스트와, 상기 호스트의 제어에 따라서 상기 메모리에 저장된 피승수, 승수 및 모듈러스를 독출해서 몽고메리 곱셈 연산을 수행하고, 연산 결과를 상기 메모리에 저장하는 몽고메리 곱셈기를 포함한다. 상기 몽고메리 곱셈기는, 상기 메모리로부터 이전 결과(SI)와 상기 모듈러스의 일부를 독출하고, 상기 이전 결과와 상기 모듈러스로부터 구해진 -M, 0, M 및 2M 중 하나를 모듈러스곱으로 선택하는 모듈러스곱 선택기와, 상기 메모리로부터 상기 피승수 중 일부 및 상기 승수 중 일부에 대한 부분곱을 선택하는 부분곱 선택기, 그리고 상기 선택된 모듈러스곱과 상기 선택된 부분곱을 누산하는 누산기를 포함한다.
본 발명의 또다른 특징에 따른 누산기는, 캐리 가산 모드로 동작하고, 각각이 모듈러스곱, 부분곱, 제 1 값 및 제 2 값을 받아들이고, 대응하는 다음 합 및 대응하는 다음 캐리를 발생하는 복수의 컴프레서들과, 상기 복수의 컴프레서들 각각으로부터 상기 대응하는 다음 합을 받아들이고, 대응하는 갱신된 현재 합을 출력하는 합 레지스터, 그리고 상기 복수의 컴프레서들로부터 상기 대응하는 다음 캐리를 받아들이고, 대응하는 갱신된 현재 캐리를 출력하는 캐리 레지스터 그리고 상기 복수의 컴프레서들로부터 상기 대응하는 다음 하위값을 받아들이고, 대응하는 갱신된 현재 하위값을 출력하는 하위값 레지스터를 포함한다. 상기 컴프레서들 각각은, 초기값 수정 사이클에서 자신으로부터 출력되는 상기 대응하는 다음 합, 상기 대응하는 다음 캐리 및 상기 대응하는 다음 하위값을 상기 제 1 값 및 상기 제 2 값으로 각각 받아들인다.
본 발명의 실시예에서는, 래딕스-4 논리연산을 기반으로 하여 몽고메리 곱셈알고리즘을 적용하며, 이를 래딕스-4 인터리브 몽고메리 곱셈 알고리즘(Radix-4 Interleaved Montgomery Multiplication Algorithm)이라 하고 R4IMM로 약칭한다.
본 발명의 실시예에서 보이는 곱셈장치의 논리연산체계는 공개키 방식의 암호화알고리즘을 적용하는 컴퓨터 시스템 또는 통신망에 적용될 수 있으며, 또한 휴대가능한 집적회로 카드(또는 스마트카드)에 내장되어 운용될 수 있다.
본 발명의 실시예를 설명하기에 앞서, 본 발명에 적용되는 모듈러 곱셈 알고리즘 R4IMM에서 참조되는 파래미터들(parameters)을 다음과 같이 정의한다.
M은 모듈러스(mudulus)로서 2보다 큰 양의 정수(integer)로서 홀수값(예컨대, 3, 7 등)을 가진다.
M'는 조건식 (-M*M') mod 4 = 1을 만족하는 정수이다.
A는, 피승수(multiplicand)로서, 0 ≤ A < M의 조건을 만족하는 정수이다.
B는, 승수(multiplier)로서, 0 ≤ B < M의 조건을 만족하는 정수이다. 여기서, , bI ∈ {0, 1, 2, 3}이다. bI는 2비트이다.
o는 오퍼랜드(operand) 즉, 피승수, 승수 및 모듈러스 각각의 길이이다. c는 단위 곱셈이 수행되는 청크(chunk) 길이로서, 하드웨어 내부에 존재하는 데이터 패스(data path)의 폭이다. w는 메모리 데이타 버스 폭인 워드(word) 길이이고, d는 래딕스(radix) 즉, 디지트(digit) 길이이다. 데이타 버스폭이 32-bit 인 메모리가 사용되는 경우 워드 길이 w는 32 이고, radix-4 곱셈기에서 디지트 길이 d는 2가 된다.
본 발명에 적용될 R4IMM 기본 알고리즘은 다음과 같다.
S0 := 0
for I := 0 to (n/2-1)
qI := (((SI + bIA) mod 4)*M') mod 4
SI+1 := (SI + bIA + qIM) / 4
endfor
if (SN ≥ M) SN := SN - M
R4IMM 기본 알고리즘에서 I는 디지트 인덱스 또는 연산의 반복회수를 나타낸다. 상기 알고리즘에서 몫 qI는 'SI + bIA + qIM의 하위 2비트가 "00"이 될 수 있도록 더해 줄 M의 갯수'를 나타낸다. 나머지 수 체계(residue number system; RNS)에서 어떤 수에 계수 M의 정수배를 더한 수는 원래의 수와 같으므로, 계수 M의 정수배인 모듈러스곱 qIM(이하, MMI; multiple of modulus)을 더한 수는 원래의 수와 같다. 또한, SI + bIA + qIM의 하위 2비트를 "00"으로 만든 후에 래딕스값 4로 나누면(즉, 2비트씩 오른쪽으로 쉬프트함) 유효자리의 숫자는 그대로 보존되기 때문에 정보가 유실되지 않는다.
이와 같은 R4IMM 알고리즘을 하드웨어적으로 구현하기 위해서는, 부분곱 PPI와 모듈러스곱 MMI를 구해야 한다. 단위승수 bI와 몫 qI가 2비트이므로, 부분곱 PPI와 모듈러스곱 MMI는 다음과 같이 4가지 경우의 가능값들을 각각 가지도록 설정될 수 있을 것이다(여기서, bI ∈ {0, 1, 2, 3}이고 qI ∈ {0, 1, 2, 3}으로 함).
qIM = MMI ∈ {0, M, 2M, 3M}
그러나, 수학식 1과 같이 부분곱 PPI와 모듈러스곱 MMI를 설정하게 되면, 값 3A와 3M를 계산할 때 A 또는 M을 1비트 쉬프트한 값과 원래 값의 합을 구해야 한다(2A+A, 2M+M). 이를 하드웨어로 구현하기 위해서는 이러한 값을 계산할 독립된 가산기(adder)를 사용하거나 또는 이 값들을 미리 계산하여 메모리 등에 저장해 놓고 필요할 때마다 참조하는 방법을 사용하여야 한다. 그러한 방법은 하드웨어의 낭비를 초래하고, 또한 그 값들(3A, 3M)을 구하는 시간(미리 계산해 두거나 실시간으로 계산함)을 추가적으로 고려하여 하드웨어들 설계하여야 하므로 성능 저하의 요인이 될 수 있다.
본 발명에서는 두가지 재부호화(recoding) 방법을 사용하여서 부분곱 PPI와 모듈러스곱 MMI를 구함에 따른 하드웨어 부담을 줄이고 동시에 처리 성능을 높이고자 한다.
또한, 본 발명의 곱셈기는 한번에 c 비트 곱셈 연산을 수행하며, 반복된 연산을 통해 n(n은 c의 정수배) 비트 곱셈 연산을 수행할 수 있다. 본 발명에 따른 다중 세정도 R4IMM 알고리즘은 다음과 같다.
for row_idx=0 to row_idx=(n/c-1)
begin
for col_idx=0 to col_idx=(o/c-1)
begin
do_ini();
for wrd_idx=0 to wrd_idx=(c/w-1)
begin
for dgt_idx=0 to dgt_idx=(w/d-1)
begin
do_acc();
endfor
endfor
endfor
for wrd_idx=0 to wrd_idx=(c/w-1)
begin
do_cpa();
endfor
endfor
상기 알고리즘에서 do_ini() 함수는 이전 행(row)의 연산 결과값 S에서 현재 열(column)과 같은 위치의 청크를 누산기내의 현재 값에 누적하는 함수이다. 즉, 열 루프(column loop)를 시작할 때 누산기의 초기값을 변경한다. 이러한 과정은 본 발명의 몽고메리 곱셈기가 다중 세정도를 지원하기 때문에 필요한 것이다. do_acc() 함수는 매 싸이클 마다 발생되는 부분곱 (PP) 와 모듈러스곱 (MM) 라는 두개의 벡터들을 누산기에서 누적하는 과정이다. 그리고 본 발명의 누산기는 기본적으로 캐리 저장 덧셈기 (CSA) 구조로 되어있으므로 덧셈의 결과값이 캐리 벡터와 합 벡터, 그리고 본 발명의 독특한 형태인 하위값 벡터 등의 3가지 벡터로 분리되어서 나타나고 따라서 누산기 내부에 존재하는 캐리와 합 그리고 하위값을 저장하기 위한 레지스터에 각각 저장된다. do_cpa() 함수는 각 행의 마지막 단계에서 누산 결과인 캐리 값과 합 값 그리고 하위값을 CPA(carry-porpagation adder)를 사용하여 더하는 함수이다.
도 1은 4배 세정도(quadruple precision) 연산을 수행하기 위한 연산 매트릭스 구조를 예시적으로 보여주고 있다.
4배 세정도 연산을 수행할 경우 피승수 A, 승수 B, 그리고 모듈러스 M 은 각각 4개의 청크로 분할되고 이들은 각각 A={A3A2A1A0}, B={B
3B2B1B0}, 그리고 모듈러스 M={M3M2M1M0}로 표현할 수 있다. 청크 길이 즉, c 비트 길이 곱셈기에서 c*4 비트 길이 곱셈 연산을 수행하기 위해서는 A0 * B0, A1 * B0, A2
* B0, A3 * B0… 등과 같은 청크 단위 연산을 순차적으로 수행하고, 각각의 연산 결과를 저장해서 최종 곱셈 연산 결과를 얻을 수 있다. 본 명세서에서, A3, A2, A1 및 A0
그리고 B3, B2, B1 및 B0는 각각 청크(c) 길이이고, A0 * B0, A1 * B0, A2 * B0, A3 * B0…연산들 각각은 단위 곱셈 연산(또는 박스(box))이라고 부른다. 피승수 A와 승수 B의 단위 곱셈 연산들 각각은 CSA(Carry Save Add) 방식의 누산기를 통해 이루어지고 각 행의 마지막 단위 곱셈 연산이 완료된 후 누산기 내의 3 가지 결과값(캐리, 합 및 하위값)을 더해서 단일 숫자 표현으로 전환하기 위한 CPA(Carry Propagate Add) 수행 단계가 있다. 도 2는 도 1에 도시된 4배 세정도 연산이 수행되는 단위 곱셈 연산 순서를 보여주고 있다.
도 3은 본 발명의 바람직한 실시예에 따른 암호화 시스템을 개략적으로 보여주는 블록도이다. 암호화 시스템(1)은 몽고메리 곱셈기(10), 호스트(20), 메모리 액세스 중재기(30) 그리고 메모리(40)를 포함한다. 호스트(20)는 몽고메리 곱셈기(10) 및 입/출력 장치들과 같은 주변 장치들과의 통신을 위한 주변 장치 인터페이스(21) 그리고 메모리(40)와의 통신을 위한 메모리 인터페이스를 포함한다.
곱셈기(10)는 호스트와의 통신을 위한 호스트 인터페이스(11) 그리고 메모리(40)와의 통신을 위한 메모리 인터페이스(12)를 포함한다. 곱셈기(10) 및 호스트(20)와 메모리(40) 사이의 통신은 메모리 액세스 중재기(30)에 의해서 중재된다. 곱셈기(10)의 호스트 인터페이스(11)는 제어 및 상태 알림용 레지스터(Special Function Register, SFR)(13)를 포함한다. 곱셈기(10)는 추후 설명될 제어 신호들(FORCE_RI[2:0], SEL_RDO[1:0], FORCE_PP[1:0], FORCE_MM[1:0], USE_X_REG, SEL_CPA_IN[2:0], IS_1ST_CPA_WORD, IS_ODD_PREC, UDP_SIGN_S, UPD_MS1B_S, SFT_BI_PISO, SFT_QI_PISO, STO_BR_ROW, USE_BR_ROW, SHIFT_ACC) 등을 발생하는 컨트롤러를 더 포함한다.
호스트(20)는 오퍼랜드들(피승수 A, 승수 B 그리고 모듈러스 M)을 메모리(40)에 저장하고, 호스트 인터페이스(11) 내의 SFR(13)에 동작 모드와 동작 시작 지시를 기록하여 연산 수행을 지시한다. 곱셈기(10)는 연산의 결과값 S를 호스트(20)가 지정한 메모리(40)의 소정 영역에 저장한 후 연산이 끝났음을 호스트 인터페이스(11)의 SFR(13)에 기록함으로써 호스트에 알려준다. 또한, SFR(13)에는 부호 비트가 더 저장된다. SFR(13)에 저장되는 부호 비트는 추후 상세히 설명된다.
메모리(40)는 일정 크기의 세그먼트들로 분할되어 있고 입력값들과 결과값이 저장될 세그먼트는 각 세그먼트에 할당된 인덱스를 이용하여 호스트가 지정한다. 따라서 한번의 곱셈 연산이 끝난 후의 결과를 다음 곱셈 연산의 입력값으로 사용한다면 (RSA와 같은 공유키 방식 암호화 시스템에서 사용되는 멱승연산이다) 데이타들의 이동없이 간단히 입력값과 출력값을 위한 세그먼트의 인덱스만 바꾼 뒤에 다음 곱셈 연산을 수행시키면 되므로 성능 면에서 매우 유리하다.
도 4는 본 발명의 바람직한 실시예에 따른 몽고메리 곱셈기 데이터 패스(Montgomery Multiplier data path)를 보여주고 있고, 도 5는 도 3에 도시된 몽고메리 곱셈기의 메모리 인터페이스(12)를 보여주고 있다. 메모리 인터페이스(12)는 멀티플렉서들(12_1, 12_3)과 레지스터들(12_2, 12_4)을 포함한다. 멀티플렉서(12_1)는 제어 신호(FORCE_RI[2:0])에 응답해서 입력 신호들 중 하나를 출력한다. 제어 신호(FORCE_RI[2:0])의 상태에 따라서 멀티플렉서(12_1)가 선택하는 신호가 도 6에 정리되어 있다. 멀티플렉서(12_1)와 레지스터(12_2)를 통해 출력되는 데이터 신호(REG_DI[31:0])는 추후 설명될 몽고메리 곱셈기(100)로 제공된다. 멀티플렉서(12_3)는 제어 신호(SEL_RDO[1:0])에 응답해서 입력 신호들 중 하나를 출력한다. 제어 신호(SEL_RDO[1:0])의 상태에 따라서 멀티플렉서(12_3)가 선택하는 신호가 도 7에 정리되어 있다. 멀티플렉서(12_3)와 레지스터(12_4)를 통해서 출력되는 데이터 신호(RAM_DO[31:0])는 메모리(40)에 저장된다.
도 8는 몽고메리 곱셈기 데이터 패스(100)의 전체적인 구성을 보여준다.
도 8의 몽고메리 곱셈기 데이터 패스(100)는 모듈러스 레지스터들(MY_REG, 102 및 MX_REG, 103)에 저장된 모듈러스(M), 피승수 레지스터들(AY_REG, 104 및 AX_REG, 105)에 저장된 피승수(A), 승수 레지스터(B_REG, 106)에 저장된 승수(B), 이전 결과값 레지스터(SI_REG, 101)에 저장된 이전 행 결과값(SI), 몽고메리 리코더(Montgomery recoder, 110), 부스 리코더(Booth recoder, 140), 모듈러스곱(multiple modulus, MM)를 발생하는 멀티플 모듈러스 발생기(120), 부분곱(partial product, PP)을 발생하는 부분곱 발생기(130), 몽고메리 곱셈 연산을 수행하는 누산기(150), 그리고 누산기 내의 3가지 결과값(캐리, 합, 하위값)을 더하기 위한 CPA 블록(160)을 포함한다.
레지스터들(101-105)에 저장된 오퍼랜드들 각각의 길이는 (c+w/2)+1이다. 이 레지스터들은 PIPO(Parallel Input parallel) 레지스터로 구성되며, 부호를 담는 1-비트 플립플롭과 2*(c/w)+1 개의 서브 레지스터들로 분할되어서 제어된다. 각 서브 레지스터들의 길이는 w/2 이다. 레지스터들(105)의 상세한 구성을 도 9에서 보여주고 있다.
5개의 레지스터들 (101-105)는 모두 같은 구조로 구성되어 있다. 도 9에 도시된 레지스터(105)는 c=256이고 w=32 인 경우를 예로 사용하였으며 이 경우에 레지스터는 17 개의 서브 레지스터들(200-216)과 부호 레지스터(220)를 포함한다. c=256이고 w=32일 때, 서브 레지스터들(200-216) 각각의 크기는 16 비트(half-word)이고, 레지스터(220)의 크기는 1 비트이다. 짝수 번째 서브 레지스터들(200, 202, 204, …, 216)은 메모리 인터페이스(12)로부터 입력되는 32 비트 데이터 중 하위 16 비트 REG_DI[15:0]를 입력받고, 홀수 번째 서브 레지스터들(201, 203, 205, …, 215)은 메모리 인터페이스(12)로부터 입력되는 32 비트 데이터 중 상위 16 비트 REG_DI[31:16]를 입력받는다.
원래 오퍼랜드의 비트 길이(n)는 청크의 비트 길이(c)의 정수배이지만, 부스 리코딩과 몽코메리 리코딩을 적용함으로써 오퍼랜드들에 부호가 추가된다. 그러므로, 몽고메리 곱셈기 데이터 패스(100) 내부에서 사용하는 오퍼랜드들의 비트 길이는 c'=c+k이고, k의 최소값은 1이다. 여기서 사용된 c'를 확장 청크의 비트 길이라 한다. 하지만, 입력 데이터를 메모리에서 읽어와야 하고, 데이터 버스 폭 w=32인 경우, 데이터 전송 단위가 워드(32 비트), 하프(half)-워드(16 비트) 또는 쿼터(quarter)-워드(8 비트)이므로 k의 값으로 가능한 것은 각각 w, w/2 또는 w/4이다. k가 작을수록 각 단위 곱셈 연산(도 1의 CSA 연산) 내에서 수행해야 할 반복(iteration) 횟수가 작아지고, 하드웨어의 크기도 작아져서 성능, 면적, 전력 등 모든 면에서 유리하다. 하지만, k=w/2일 경우보다 k=w인 경우에, 그리고 k=w/4보다 k=w/2인 경우에 하드웨어의 구조가 단순해진다. k의 값은 w, w/2 또는 w/4 중 어느 것이든 가능하고 특별히 본 발명에서는 k=w/2 인 경우를 사용하여 설명한다. 그러므로, 청크의 비트 길이 c=256, w=32, k=32/2=16일 때 확장 청크의 비트 길이 c'=272이다. 앞서 설명한 SFR(13)에 저장된 부호 비트(SIGN_S)는 메모리 인터페이스(12)를 통하여 부호 레지스터(220)에 저장된다.
각 서브 레지스터들은 게이티드-클럭(gated-clock) 또는 로드-인에이블(load-enable) 제어 신호에 의해 선택적으로 데이터 적재(data loading)가 이루어진다. 레지스터(105)로부터 출력되는 피승수(AX_PIPO_REG[272:0])는 273 비트이다. 레지스터들(101-105)의 구조는 모두 동일하므로, 나머지 레지스터들(101-104)에 대한 설명은 생략한다. 레지스터들(101-105)로 입력되는 데이터는 REG_DI[31:0]이며 이것은 메모리 인터페이스(12)로부터 입력되며 메모리 인터페이스(12)가 메모리로부터 입력되는 워드 길이 데이터(RAM_DI[31:0])와 연산자들의 부호 비트 (SIGN_A, SIGN_B, SIGN_S), 그리고 이전 행 결과값의 두 번째 최상위 비트 (MS1B_S) 등을 조합하여 만든 데이터이고 어느 순간에 어떠한 조합을 사용하여 REG_DI[31:0]을 만들 것인지는 제어신호 FORCE_RI[2:0]에 의해 결정된다.
이전 결과값 레지스터(101)는 이전 행의 결과값 S를 현재 행의 계산에 반영하기 위해 사용된다. 피승수 A와 모듈러스 M을 저장하기 위한 레지스터들이 각각 2 개씩 사용된 이유는 처리 속도를 향상시키기 위함이다. 즉, 피승수 A를 저장하고 있는 2 개의 레지스터들(104, 105) 중 하나는 몽고메리 곱셈기 데이터 패스(100)에서 현재 단위 곱셈 연산 중인 피승수를 저장하고 있고, 다른 하나는 다음 단위 곱셈 연산에 사용될 피승수를 저장한다. 마찬가지로, 모듈러스 M을 저장하고 있는 2 개의 레지스터들(102, 103) 중 하나는 곱셈기 데이터 패스(100)에서 현재 단위 곱셈 연산 중인 모듈러스를 저장하고 있고, 다른 하나는 다음 단위 곱셈 연산에 사용될 모듈러스를 저장한다. 그러므로, 현재의 단위 곱셈 연산이 완료되고 나서, 메모리로부터 피승수 및 모듈러스를 읽어오기 위해 필요한 지연없이 다음 단위 곱셈 연산을 바로 시작할 수 있다.
곱셈기(10)는 반복적인 프로세스로 몽고메리 곱셈의 해답을 찾는다. 몽고메리 리코더(110) 및 모듈러스곱 발생기(120)는 모듈러스곱(MMI)을 선택하기 위해 사용된다. 모듈러스곱(MMI)을 선택하기 위하여, 몽고메리 리코더(110)는 누산기(150)로부터 반복적인 데이터를 받아들인다. 본 발명의 실시예에서 반복적인 데이터 SPPI[1:0]는 누산기(150)에 저장된 합(ACC_S_REGI[1:0])과 캐리(ACC_C_REGI[1:0]), 하위값(ACC_L_REGI[2:0]), 부분곱(PPI[1:0]) 그리고 누산기 궤환 입력의 쉬프트 제어 신호(SHIFT_ACC)에 근거한다. 본 발명의 실시예에 따른 상술한 설명에서 비트 크기는 한정되지 않는다. SPPI는 2 비트 이상일 수 있으며 그에 따라 본 발명의 다른 구성들은 변경될 것이다.
도 10은 모듈러스곱(MMI)을 발생하기 위한 모듈러스곱 발생기를 상세히 보여주고 있다. 모듈러스곱 발생기(120)는 멀티플렉서들(301-303)과 AND 게이트(304)를 포함한다. 멀티플렉서(301)는 레지스터 선택 신호(USE_X_REG)에 응답해서 레지스터들(102, 103)로부터의 모듈러스들(MY_PIPO_REG[272:0], MX_PIPO_REG[272:0]) 중 하나를 M[272:0]으로서 출력한다.
멀티플렉서(303)는 몽고메리 리코더(110)로부터의 모듈러스곱 선택 신호(SEL_MM[1:0])에 응답해서 이전값(SI_PIPO_REG[272:0]), M, 2M 및 -M 가운데 하나를 선택해서 출력한다. 2M은 멀티플렉서(302)로부터 출력되는 M을 1 비트 왼쪽으로 쉬프트하고, 최하위 비트에 '0'을 삽입해서 얻을 수 있다. 그리고 -M은 M 멀티플렉서(302)로부터 출력되는 M을 비트 반전 (bit-inversion) 하여서 얻을 수 있다.
AND 게이트(304)는 몽고메리 리코더(110)로부터의 모듈러스곱 인에이블 신호(EN_MM)와 멀티플렉서(303)로부터의 출력을 결합해서 모듈러스곱(MMI)을 출력한다. 모듈러스곱(MMI)은 (c + w/2)+ 2 비트이다. c=256, w=16일 때, MMI는 274 비트이다. 모듈러스곱 인에이블 신호(EN_MM)는 모듈러스곱(MMI)을 0으로 만들기 위해 사용된다. 모듈러스곱(MMI)은 누산기(150)로 입력된다.
도 11은 본 발명의 바람직한 실시예에 따른 몽고메리 리코더(110)의 코딩 스킴을 보여주고 있다. 도 11에는 몽고메리 리코더(110)로 입력되는 3 개의 입력들 M[1] 및 SPPI[1:0]을 보여주고 있으나, 본 발명은 입력들 및 출력들을 다양하게 변경할 수 있다.
앞서 설명한 바와 같이, 전형적인 래딕스-4 시스템의 경우에 모듈러스곱 MMI는 0, M, 2M 및 3M이다. 3M을 구하기 위해서는 1M에 2M을 더하기 위한 부가적인 가산기 또는 메모리 소자가 필요하다. 부가적인 가산기 및/또는 메모리 소자는 하드웨어 크기 및/또는 계산 지연 등을 초래하고 이는 계산 속도 및 전력 소모에 영향을 끼친다. 도 11의 코딩 스킴은 MMI의 값을 얻기 위해 부가적인 가산기 또는 메모리 소자없이 비트 반전 및 비트 쉬프트를 이용한다. 몽고메리 리코더(110)는 모듈러스 M의 두 번째 최하위 비트 M[1]과 SPPI의 최하위 2비트 SPPI[1:0]를 입력받는다. 몽고메리 리코더(110)는 모듈러스곱 선택 신호(SEL_MM[1:0]) 모듈러스곱 인에이블 신호(EM_MM), 그리고 부호 반전을 알리는 (즉, -M 이 선택되었음을 알리는) 신호 (NEG_MM)를 출력한다.
감소된 하드웨어 크기, 증가된 계산 속도 그리고 전력 감소를 위한 유사한 방법이 도 13 및 도 14에 도시된 바와 같은 부분곱 발생기(130)와 부스 리코더(140)에 사용될 수 있다. 앞서 언급한 곱셈기 데이터 패스(100)는 모듈러스곱(MMI) 및 부분곱(PPI)을 누산기(150)로 입력해서 반복적인 프로세스로 모듈러 곱셈을 수행한다.
도 12는 승수 B를 저장하는 레지스터(B_REG, 106)를 상세히 보여주고 있다. 레지스터(106)는 메모리(40)로부터 입력되는 승수 B를 저장하고 누산기 초기값 수정 사이클을 제외한 나머지 매 사이클마다 승수 B의 최하위 2-비트(B1과 B0)와 직전 사이클의 최하위 2-비트 중 상위 비트(BR)를 오른쪽으로 한 번 쉬프트해서 출력한다. 레지스터(106)는 쉬프트 레지스터(401), 멀티플렉서들(402, 405) 그리고 플립플롭들(403, 404)을 포함한다.
쉬프트 레지스터(401)는 워드 길이(w=32)와 동일한 크기를 가지며, 쉬프트 선택 신호(SFT_BI_PISO)에 응답하여 동작한다. 쉬프트 레지스터(401)는 쉬프트 선택 신호(SFT_BI_PISO)가 논리 '0'일 때 승수 데이터의 한 워드(word)를 메모리 인터이스(12)로부터 REG_DI[31:0]를 통해 새롭게 받아들이고, 쉬프트 선택 신호(SFT_BI_PISO)가 논리 '1'일 때 2-비트씩 오른쪽으로 쉬프트한다. 쉬프트 레지스터(401)의 최하위 2-비트(B1, B0)는 부스 리코더(140)로 출력된다.
신호(STO_BR_ROW)는 행의 마지막 단위 곱셈 연산의 마지막 사이클에 사용되었던 B1을 저장하도록 제어하는 신호이다. 멀티플렉서(402)는 신호(STO_BR_ROW)에 응답해서 플립플롭(403)에 저장된 값 또는 쉬프트 레지스터(202)의 두번째 최하위 비트(B1)를 선택적으로 출력한다. 플립플롭(403)은 멀티플렉서(402)의 출력을 저장하고, 플립플롭(404)은 쉬프트 레지스터(401)의 두번째 최하위 비트(B1)를 저장한다. 신호(USE_BR_ROW)는 각 단위 곱셈 연산에서 두번째 사이클(즉, 누산기 초기값을 수정한 다음 사이클에서 플립플롭(403)에 저장된 값(BR_ROW)이 값(BR)으로서 선택되도록 제어한다. 비트(BR)는 부스 리코더(140)로 제공된다.
부스 리코더(140) 및 부분곱 선택기(130)는 누산기(150)로 제공될 부분곱 PPI의 값들 0, A, 2A 및 2A를 선택하기 위해 사용된다. 도 8에 도시된 바와 같이 부스리코더(140)는 레지스터(106)로부터 승수 B1, B0 및 BR을 입력받고, 부분곱 선택 신호(SEL_PP[1:0]), 부분곱 인에이블 신호(EN_PP) 및 부분곱 반전 표시 신호(NEG_PP)를 부분곱 발생기(130)로 입력한다.
도 13은 부분곱 발생기(130)의 회로 구성 예를 보여주고 있다.
부분곱 발생기(130)는 멀티플렉서들(501-503)과 AND 게이트(504)를 포함한다. 멀티플렉서(501)는 레지스터 선택 신호(USE_X_REG)에 응답해서 레지스터들(104, 105)로부터의 피승수들(AY_PIPO_REG[272:0], AX_PIPO_REG[272:0]) 중 하나를 A[272:0]로서 출력한다. 멀티플렉서(501)는 레지스터 선택 신호(USE_X_REG)에 응답해서 레지스터들(104, 105)로부터의 피승수들(AY_PIPO_REG[272:0], AX_PIPO_REG[272:0]) 중 하나를 A[272:0]로서 출력한다.
멀티플렉서(503)는 부스 리코더(140)로부터의 모듈러스곱 선택 신호(SEL_PP[1:0])에 응답해서 2A, A, 2A 및 A 가운데 하나를 선택해서 출력한다. 2A는 멀티플렉서(501)로부터 출력되는 A를 1 비트 왼쪽으로 쉬프트하고 최하위 비트에 '1'을 삽입해서 얻는다. 2A는 멀티플렉서(502)로부터 출력되는 A를 1 비트 왼쪽으로 쉬프트하고 최하위 비트에 '0'을 삽입해서 얻는다.
AND 게이트(504)는 부스 리코더(140)로부터의 부분곱 인에이블 신호(EN_PP)와 멀티플렉서(503)로부터의 출력을 결합해서 부분곱(PPI)을 출력한다. 부분곱 인에이블 신호(EN_PP)는 부분곱(PPI)을 0으로 만들기 위해 사용된다. 부분곱(PPI)은 (c + w/2)+ 2 비트이다. c=256, w=32일 때, PPI는 274 비트이다. 부분곱(PPI)은 누산기(150)로 입력된다.
도 14은 본 발명의 바람직한 실시예에 따른 부스 리코더(140)의 코딩 스킴을 보여주고 있다. 도 14은 부스 리코더(140)로 입력되는 3 개의 입력들 B1, B0 및 BR을 보여주고 있으나, 본 발명은 입력들 및 출력들을 다양하게 변경할 수 있다.
다시 도 8를 참조하면, 모듈러스곱 발생기(120)로부터의 모듈러스곱 MMI[273:0]과 부분곱 발생기(130)로부터의 부분곱 PPI[273:0]은 누산기(150)로 출력된다.
본 발명의 바람직한 실시예에 따른 누산기(150)가 도 15에 도시되어 있다. 누산기(150)는 직렬로 연결된 c'(=c + w/2 + 5) 개의 4-2 컴프레서들(610-617)로 구성된다. 앞서, 도 10 및 도 13에서 설명한 바와 같이, 모듈러스곱(MMI)과 부분곱(PPI)은 각각 (c + w/2) + 2 비트이다.
누산기(150)는 연산 결과를 합 레지스터(620), 캐리 레지스터(630), 그리고 하위값 레지스터(650)에 나누어 저장한다. 합 레지스터(620)는 (c + w/2) + 3 개의 플립플롭들로 구성되어있고 캐리 레지스터(630)는 (c + w/2) + 4 개의 플립플롭들로 구성되어있으며 하위값 레지스터(650)는 3개의 플립플롭들로 구성되어있다. 합 레지스터(620)와 캐리 레지스터(630)의 출력들 가운데 각각 하위 (c + 1) 개 비트들(ACC_S_REG[c:0] 과 ACC_C_REG[c:0])과 하위값 레지스터(650)의 출력 가운데 최상위 비트(ACC_L_REG[2])는 도 8에 도시된 CPA 블록(160)으로 입력된다. 또한 하위 레지스터(650)의 하위 2개 비트(ACC_L_REG[1:0]) 은 결과값 출력 용 쉬프트 레지스터 (180) 인 SO_SIPO_REG[31:0]으로 입력된다.
이 실시예에서, 누산기(150)로의 입력은 모듈러스곱(MMI), 부분곱(PPI), 모듈러스곱 반전 신호(NEG_MM), 부분곱 반전 신호(NEG_PP) 그리고 누산기 궤환 입력의 쉬프트 제어 신호(SHIFT_ACC)이다. 본 발명의 바람직한 실시예에 따른 누산기(150)는 CSA(Carry Save Add) 구조로 설계되어서 캐리 전파 지연 시간(carry propagation delay time)에 따른 성능 저하를 방지한다. 또한, 컴프레서들(610-617)은 각각 4-2 컴프레서로 구현된다. 도 18는 4-2 컴프레서의 일 예를 보여주고 있다. 컴프레서(612)는 복수의 입력들을 갖는다. 컴프레서의 입력 값들은 루프 인덱스 I를 갖고 출력 값들은 루프 인덱스 I+1을 갖는다.
본 발명의 실시예에서, 컴프레서(612)는 2 개의 전가산기들(701, 702)을 포함한다. 제 1 전가산기(701)는 CI, SI 및 PPI를 입력받고, 제 1 전가산기 캐리(CO) 및 제 1 전가산기 합(SO)을 출력한다. 제 1 전가산기 캐리는 출력 캐리(CN)로 출력되어서 다음 높은 자리 컴프레서(k+1)의 입력(CP)이 된다. 제 2 전가산기(702)는 제 1 전가산기의 합(SO)과 모듈러스곱(MMI) 그리고 1 비트 낮은 자리 컴프레서로부터의 캐리(CP)를 입력받고 제 2 전가산기 캐리(CO) 및 제 2 전가산기 합(SO)을 출력한다. 제 2 전가산기 캐리(CO)는 다음 캐리 비트값(CI+1)으로서 출력되어서 1 비트 낮은 자리 컴프레서로 입력되는 캐리(CI)로 사용된다. 제 2 전가산기 합(SO)은 2 비트 낮은 자리 컴프레서로 입력되는 합(SI)으로 사용된다. 최하위 자리 컴프레서(610)는 캐리(CP) 입력으로서 부분곱 반전 신호(NEG_PP)를 입력받는다.
4-2 컴프레서(612)의 입출력 사이의 관계는 수학식 2와 같다.
다시 도 15를 참조하면, 전가산기(640)는 첫 번째 컴프레서(610)로부터 출력되는 합(SI[0]), 모듈러스곱의 최하위 비트(MMI[0]) 그리고 모듈러스곱 반전 신호(NEG_MM)를 입력받는다. 전가산기(641)는 두번째 컴프레서(611)로부터 출력되는 합 비트, 첫 번째 컴프레서(610)로부터 출력되는 캐리 비트 그리고 전가산기(640)로부터 출력되는 캐리 비트를 입력받는다. 전가산기(640)의 합과 전가산기(641)의 합 및 캐리는 하위값 레지스터(650)에 저장된다.
누산기(150)는 단위 곱셈 연산의 첫 번째 사이클에서 이전 행의 연산 결과들 중 현재 단위 곱셈 연산과 대응하는 연산 결과를 누산기 레지스터의 값에 누적해야 한다. 이러한 과정을 누산기의 초기값 수정 사이클이라고 하고 이러한 과정을 지원하기 위해서 멀티플렉서들(600-609)이 제공된다.
하나의 컴프레서의 입력단에는 2 개의 멀티플렉서들이 각각 연결된다. 모듈러스곱 및 부분곱의 최하위 비트(즉, MMI[0] 및 PPI[0])에 대응하는 첫 번째 컴프레서(610)와 연결된 멀티플렉서들(600, 601) 중 제 1 멀티플렉서(600)는 2 비트 높은 컴프레서로부터의 합 비트 ACC_S_REG[0]와 하위값 비트 ACC_L_REG[0]를 제 1 입력과 제 2 입력으로 각각 입력받는다. 제 2 멀티플렉서(601)는 1 비트 높은 컴프레서(611)의 캐리 비트 ACC_C_REG[0]와 하위값 비트 AC_L_REG[2]를 제 1 입력과 제 2 입력으로 각각 입력받는다.
두번째 컴프레서(611)와 연결된 멀티플렉서들(602, 603) 중 제 1 멀티플렉서(602)는 2 비트 높은 컴프레서로부터의 합 비트와 ACC_L_REG[1]와 하위값 비트 ACC_L_REG[1]을 제 1 입력과 제 2 입력으로 각각 입력받는다. 제 2 멀티플렉서(603)는 1 비트 높은 컴프레서(612)의 캐리 비트 ACC_C_REG[1]와 하위값 비트 ACC_L_REG[2]을 제 1 입력과 제 2 입력으로 각각 입력받는다.
세 번째 컴프레서(612)에 연결된 멀티플렉서들(604, 605) 중 제 1 멀티플렉서(604)는 2 비트 높은 컴프레서로부터의 합 비트 ACC_S_REG[2]와 자신과 연결된 컴프레서(612)의 합 비트 ACC_S_REG[0]를 제 1 입력과 제 2 입력으로 각각 입력받는다. 제 2 멀티플렉서(605)는 1 비트 높은 컴프레서의 캐리 비트 ACC_C_REG[2]와 1비트 낮은 컴프레서의 캐리 비트 ACC_C_REG[0]를 제 1 입력과 제 2 입력으로 각각 입력받는다. 세 번째 컴프레서(612)부터 마지막 컴프레서(617)에 각각 연결된 제 1 및 제 2 멀티플렉서들은 동일한 구조를 취한다. 다만, 최상위 컴프레서 (617)에 연결된 제 1 멀티플렉서(608)의 제 1 입력은 자신과 연결된 컴프레서의 합 비트를 입력으로 받고 제 2 멀티플렉서(609)의 제 1 입력은 자신과 연결된 컴프레서(617)의 캐리 비트를 입력으로 받는다. 또한 최상위에서 한 자리 낮은 컴프레서 (616)에 연결된 제 1 멀티플렉서(606)의 제 1 입력은 1비트 높은 컴프레서(617)의 합 비트를 입력으로 받는다. 최상위 4개의 컴프레서들 (617, 616, 615, 614)에 입력되는 PPI 와 MMI 는 동일하며 모두 PPI 와 MMI
의 최상위 비트이다.
누산기 초기값 수정 사이클 직후의 한 사이클에서 쉬프트 신호 (SHIFT_ACC) 는 논리 '0'이고 나머지 사이클들에서 쉬프트 신호 (SHIFT_ACC) 는 논리 '1'이다. 쉬프트 신호(SHIFT_ACC)가 논리 '1'일 때, 제 1 멀티플렉서들(600, 602, …, 608)과 제 2 멀티플렉서들(601, 602, …, 609) 각각은 자신들의 제 1 입력을 출력으로 보낸다. 도 16은 누산기 궤환 입력의 쉬프트 제어 신호(SHIFT_ACC)가 논리 '1'일 때 컴프레서들(610-617)로 입력되는 신호들을 보여주고 있다.
누산기 초기값 수정 사이클을 제외한 나머지 사이클들에서 레지스터(650)에 저장된 합 SO[1:0]이 출력된다. 컴프레서들(612-617)로부터 출력되는 캐리, 합, 그리고 하위값은 각각 캐리 캐리 레지스터(630), 합 레지스터(620), 그리고 하위값 레지스터(650)에 저장되고, 다음 사이클에 컴프레서들(610-617)로 궤환(feedback)된다. 다음 사이클에서 누적해야 할 부분곱과 모듈러스곱은 이전 사이클의 부분곱 및 모듈러스보다 2 비트만큼 높은 값들이므로, 이전 사이클에 저장된 위치보다 2비트 낮은 위치로 궤환 입력되어야 한다.
누산기 궤환 입력의 쉬프트 제어 신호(SHIFT_ACC)가 논리 '0'일 때, 제 1 멀티플렉서들(600, 602, …, 608)과 제 2 멀티플렉서들(601, 602, …, 609) 각각은 자신들의 제 2 입력을 출력으로 보낸다. 도 17는 누산기 궤환 입력의 쉬프트 제어 신호(SHIFT_ACC)가 논리 '0'일 때 컴프레서들(610-617)로 입력되는 신호들을 보여주고 있다.
각 box의 누산기 초기값 수정 사이클에서는 누산기(150b)의 레지스터에 저장되어 있는 값에 이전 행의 결과값 중 자리가 일치하는 부분을 누적하여 누산기 초기값을 수정하는 작업이 수행된다. 이 때에는 합 레지스터(620), 캐리 레지스터(630)및 하위값 레지스터(650)에 저장된 값을 자리 이동없이 누산기의 입력으로 궤환한다.
앞서 설명한 바와 같이, 부분곱 PP={-2A, -A, 0, +A, +2A}이고, 모듈러스곱 MM={SI, -M, 0, +M, +2M}이다. 누산기 초기값 수정 사이클에서는 0과 SI가 각각 부분곱(PP)과 모듈러스곱(MM)으로 선택된다. 누산기 초기값 수정 사이클을 제외한 나머지 사이클들에서 부분곱(PP)과 모듈러스곱(MM)은 도 11 및 도 14에 도시된 바와 같은 코딩 스킴에 의해 선택된다.
부분곱과 모듈러스곱으로 선택되는 -A와 -M은 비트 반전(bit-inversion)에 의해서 얻어지고, +2A와 +2M은 A와 M을 각각 1 비트 왼쪽 쉬프트해서 얻어지며, 그리고 -2A는 A를 1 비트 왼쪽 쉬프트와 비트 반전을 해서 얻어진다. 이와 같이, 비트 반전과 비트 쉬프트를 통해 구해진 부분곱과 모듈러스곱은 1의 보수(1's complement number)이다. 본 발명의 바람직한 실시예에 따른 곱셈기 데이터 패스(100)는 2의 보수(2's complement number) 체계이다. 2의 보수 숫자는 1의 보수 숫자에 1을 더한 것과 같다. 부분곱 반전 신호(NEG_PP) 및 모듈러스곱 반전 신호(NEG_MM)는 1의 보수로 표현된 -A, -2A 또는 -M를 2의 보수로 표현하기 위해 사용된다. 즉, 부분곱 반전 신호(NEG_PP)는 부분곱(PP)이 -A 또는 -2A일 때 '1'이고, 부분곱(PP)이 0, +A 또는 +2A일 때 '0'이다. 모듈러스곱 반전 신호(NEG_MM)는 모듈러스곱(MM)이 -M일 때 '1'이고, 모듈러스곱(MM)이 SI, 0, +M 또는 +2M일 때 '0'이다.
본 발명의 바람직한 실시예에 따른 몽고메리 곱셈기는 다중 세정도 연산을 수행하기 위해 도 1에 도시된 바와 같은 연산 매트릭스 형태로 동작한다. 본 발명의 몽고메리 곱셈기 내부의 데이터들은 연산의 진행 중에 데이터 오버플로우가 발생되지 않으면서 동시에 불필요하게 많은 비트가 할당되지 않도록 최적 비트 길이로 표현되어야 한다. 다음의 수학적 분석을 통해 연산 메트릭스의 각 행의 연산 결과값이 갖는 범위를 구하고 그에 따라 각 행의 연산 결과값을 표현하기 위해 필요한 비트 수를 정확히 결정할 수 있다. 도 1에 도시된 연산 매트릭스의 행들 중 마지막 행을 제외한 나머지 3 개의 행들에서 사용되는 피승수 A, 승수 B 및 모듈러스 M은 다음과 같다.
A : -M ≤ A < +M
B : -2c+w/2-1 ≤ B < 2c+w/2-1-1
첫 번째 행에서 발생되는 중간 결과(intermediate result) S0는 수학식 4와 같다.
위 수식에서 R은 2c+w/2 이라는 상수이다. 본 발명의 몽고메리 곱셈기는 radix-4 구조이므로 매 사이클마다 승수 B 의 2 비트를 처리한다. 그리고 각 사이클마다 사용되는 Q의 값은 {-1, 0, +1, +2} 가운데 하나이다. 따라서 하나의 행에서 사용된 Q의 최대값과 최소값은 다음과 같다.
이상의 조건을 사용하여 내부 결과 S0의 최대값과 최소값을 구하면 다음과 같다.
모듈러스 M이 n 비트로 구성되어 있으므로 위의 범위(boundary)를 갖는 수를 표현하는데 필요한 비트 수는 부호 비트를 포함하여 n+2 비트이다.
두 번째 행에서 발생되는 내부 결과 S1은 첫 번째 행의 내부 결과 S0를 초기값으로 갖고 계산을 진행한다. 따라서 S1의 계산식은 다음과 같다.
S1의 최대값과 최소값은 다음과 같다.
위와 같은 값의 범위를 갖는 수를 표현하는데 필요한 비트 수 역시 n+2 비트이다.
동일한 방법으로 세 번째 행의 중간 결과 S2 역시 n+2 개의 비트로 표현될 수 있다.
하지만, 다중 세정도의 마지막 행의 결과 값과 행이 단 한 개만 존재하는 단일 세정도의 결과값은 부호를 포함해서 n+1 비트로 표현될 수 있다. 이를 증명하면 다음과 같다.
피승수 A, 승수 B 및 모듈러스 M의 값의 범위는 다음과 같다.
A : -M ≤ A < +M
B : -M ≤ B < +M
그리고, 최종 결과 S는 다음과 같다.
수학식 10에서 R은 2(c+w/2)p인 상수이다. 수학식 10에 나타난 Q의 최대값과 최소값은 다음과 같다.
따라서, 최종 결과 S의 최대값과 최소값은 다음과 같다.
위와 같은 값의 범위를 갖는 수를 표현하는데 필요한 비트 수는 n+1 이다.
상술한 바와 같이, 다중 세정도의 경우 마지막 행을 제외한 다른 행들(내부 행들)에서 만들어지는 중간 결과가 최대값 쪽으로 접근하는 조건이 만들어 질 경우에 +M 을 넘어서는 데이터 오버플로우 상황이 발생한다. 이러한 상황은 매 사이클마다 선택되는 Q의 값이 상위자리 쪽에서 대부분 +2이고 또한 승수 A의 부호와 해당 내부 행에서 사용되는 피승수 B의 청크의 부호가 동일할 경우이다.
각 행의 결과는 n+2 비트로 표현된다. 그런데 n이 w의 정수 배이고 메모리는 w의 정수 배의 크기를 가지므로 추가된 2개 bit를 메모리에 저장하는 것은 매우 비효율적이다. 따라서 본 발명에서는 n+2 비트 중에 하위 n 비트는 메모리에 저장하고 나머지 2 비트(즉, 최상위에 있는 부호 비트와 둘째 최상위 비트)는 몽고메리 곱셈기 내부의 레지스터에 저장한다. 이들 최상위 2 비트는 각각 SIGN_S 와 MS1B_S 라 명명한다.
마지막 행까지 처리를 끝냈을 때 레지스터에 담겨 있는 부호 비트(SIGN_S)와 두번째 최상위 비트(MS1B_S)는 항상 같은 값을 갖는다. 하지만 내부 행들의 처리를 끝냈을 때 부호 비트가 0일 경우에 두번째 최상위 비트가 1이 될 수 있다.
본 발명의 바람직한 실시예에 따른 몽고메리 곱셈기 데이터 패스(100)는 쉬프트 레지스터들(106, 115, 116, 180)을 포함한다. 쉬프트 레지스터들(106, 115, 116, 180) 각각의 길이는 w이고, 클록에 반응하여서 한 사이클에 2-비트씩 오른쪽으로 쉬프트한다. 레지스터들(106, 115)는 병렬 입력 직렬 출력 쉬프트 레지스터이고, 레지스터들(116, 180)은 직렬 입력 병렬 출력 쉬프트 레지스터이다.
매 사이클마다 만들어지는 모듈러스곱(MM)은 누산기 초기값 수정 사이클에만 이전 결과(SI)이고 나머지 사이클들에서는 도 11에 도시된 바와 같은 리코딩 표에 의해 결정되는 값이며 qIM이다. 이 때, qI는 {-1, 0, 1, 2] 중 하나이다.
도 1에 도시된 행들에서 첫 번째 단위 곱셈 연산들(CSA0,0, CSA1,0, CSA2,0, CSA3,0)(이하, Gen-Q Box)에서는 qI를 계산해서 사용하고, 동일한 행에 있는 단위 곱셈 연산들에서 qI를 재 사용할 수 있도록 메모리에 저장한다. 도 8에 도시된 몽고메리 리코더(110)는 각 행의 첫 번째 단위 곱셈 연산들(Gen-Q Box)의 누산기 초기값 수정 사이클을 제외한 나머지 사이클마다 2 비트로 부호화된 QO[1:0]를 생성하고, 생성된 QO[1:0]를 쉬프트 레지스터(116)에 저장한다.
도 19는 쉬프트 레지스터(116) QO_SIPO_REG[31:0]를 상세히 보여주고 있다. 쉬프트 레지스터(116)는 클록에 반응하여서 한 사이클에 2 비트씩 오른쪽으로 쉬프트하고, 몽고메리 리코더(110)로부터의 QO[1:0]를 최상위 2비트에 저장한다. 쉬프트 레지스터(116)는 새로운 워드길이 데이터가 채워졌을 때 마다 자신의 데이터를 메모리(40)에 저장된다.
도 20은 쉬프트 레지스터(115) QI_SIPO_REG[31:0]를 보여주고 있다. 메모리에 저장된 QO는 워드 길이(w) 단위로 쉬프트 레지스터(115)에 입력된다. 쉬프트 레지스터(115)의 최하위 2비트(QI[1:0])는 몽고메리 리코더(110)로 입력되고, 쉬프트 레지스터(115)는 클록에 반응하여 쉬프트 제어 신호(SFT_QI_PISO)가 '0'일 때 메모리(40)로부터 새로운 데이터를 받아들이고, 쉬프트 제어 신호(SFT_QI_PISO)가 '1'일 때 2 비트씩 오른쪽으로 쉬프트한다.
각 행의 첫 번째 단위 곱셈 연산들(Gen-Q Box)을 제외한 나머지 단위 곱셈 연산들(CSA0,1- CSA0,3, CSA1,1-CSA1,3 CSA2,1-CSA
2,3, CSA3,1-CSA3,3)(이하, Gen-S Box)에서, 누산기 초기값 수정 사이클을 제외한 나머지 사이클마다 2 비트 곱셈 결과(SO[1:0])가 생성되어서 쉬프트 레지스터(180)에 차례로 저장된다.
도 21은 누산기(150)의 합(SO[1:0])을 입력받아 저장하는 쉬프트 레지스터(180) SO_SIPO_REG[31:0]를 보여준다. 레지스터(180)는 클록에 반응하여서 한 사이클에 2 비트씩 오른쪽으로 쉬프트하고, 누산기(150)로부터의 SO[1:0]를 최상위 2비트에 저장한다. 쉬프트 레지스터(180)는 새로운 워드길이 데이터가 채워졌을 때 마다 자신의 데이터를 메모리(40)에 저장된다.
도 22는 몽고메리 리코더(110)에서 사용되는 SPPI[1:0]를 발생하는 회로를 보여주고 있다. 본 발명의 실시예에서 반복적인 데이터 SPPI[1:0]는, 누산기(150)에 저장된 합과 캐리 레지스터들의 최하위 2 비트들(ACC_S_REGI[1:0], ACC_C_REGI[1:0]), [L]하위값 레지스터의 값(ACC_L_REGI[2:0]), 부분곱의 최하위 2 비트들(PPI[1:0]) 그리고 누산기 궤환 입력의 쉬프트 제어 신호(SHIFT_ACC)에 근거한다. ACC_S_REG[1:0], ACC_C_REG[1:0], 그리고 ACC_L_REG[2]는 2-비트 가산기(801)에서 합산된다. 합산된 신호는 2-비트 가산기(802)에서 (PPI[1:0])과 합산된다. 2-비트 가산기(803)는 (PPI[1:0])과 ACC_L_REG[1:0]을 합산한다. 멀티플렉서(804)는 쉬프트 제어 신호(SHIFT_ACC)가 논리 '0'일 때 가산기(802)의 출력을 선택하고, 누산기 궤환 입력의 쉬프트 제어 신호(SHIFT_ACC)가 논리 '1'일 때 가산기(803)의 출력을 선택해서 SPPI[1:0]를 출력한다. SPPI[1:0]는 몽고메리 리코더(110)로 제공된다. 본 발명의 실시예에 따른 상술한 설명에서 비트 크기는 한정되지 않는다. SPPI는 2 비트 이상일 수 있으며 그에 따라 본 발명의 다른 구성들은 변경될 것이다.
도 23은 본 발명의 바람직한 실시예에 따른 CPA 연산 블록(160)을 보여주고 있다. 도 23은 c=256, w=32 인 예제를 사용하였다. CPA 연산 블록(160)에서는 도 1에 도시된 CPA0, CPA1, CPA2및 CPA3이 순차적으로 연산된다. 누산기(150)의 캐리 레지스터(630)에 저장된 캐리 비트 중 청크 길이 만큼의 하위 부분(ACC_C_REG[255:0])은 멀티플렉서(901)로 입력된다 누산기(150)의 합 레지스터(620)에 저장된 합(S[255:0])은 멀티플렉서(902)로 입력된다. 멀티플렉서들(901, 902)은 입력 선택 신호(SEL_CPA_IN[2:0])에 응답해서 256 비트 입력 중에서 최하위 비트부터 32 비트씩 순차적으로 선택한다. 멀티플렉서들(901, 902)의 출력은 레지스터들(903, 904)에 각각 저장된다. 입력 선택 신호(SEL_CPA_IN[2:0])는 '000'부터 '111'까지 변화한다. 그러므로, CPA 블록(160)은 32 비트씩 8번 반복적으로 CPA 연산을 수행해서 256 비트 연산을 수행할 수 있다.
캐리 전파 가산기(905)는 레지스터들(903, 904)에 저장된 값들(CPA_A_REG[31:0], CPA_B_REG[31:0])과 멀티플렉서(920)로부터의 캐리 입력(C_IN)을 더한다. 각 행의 CSA 연산이 끝난 후 누산기에 남아있는 연산 결과값은 ACC_S_REG[256:0]+ ACC_C_REG[256:0]+ACC_L_REG[2] 이고 이 결과값을 CPA를 통해 합쳐서 단일 숫자 표현으로 변환하여 메모리에 저장하여야 한다. 그러므로, CPA 연산의 첫 번째 사이클(SEL_CPA_IN[2:0]='000')에서 캐리 입력(C_IN)은 ACC_L_REG[2]이고, 나머지 사이클들(SEL_CPA_IN[2:0]='001'부터 SEL_CPA_IN[2:0]='111'까지)에서 캐리 입력(C_IN)은 이전 연산 사이클의 캐리 출력(C_OUT)이다. 캐리 전파 가산기(905)로부터의 캐리 출력(C_OUT)은 레지스터(906)에 저장된다.
CPA 블록(150)에서 반복(iteration)에 의해 캐리(ACC_C_REG[255:0])와 합(ACC_S_REG[255:0])를 더하는 동작을 마친 후 만들어지는 C_OUT을 ACC_C_REG[256], ACC_S_REG[256] 과 XOR 시킴으로써 행 결과값의 새 부호 비트(SIGN_S)가 계산되고 부호 비트(SIGN_S)를 새로 계산된 값으로 변경할 것을 제어하는 신호로서 UPD_SIGN_S 가 존재한다. 제어 신호(UPD_MS1B_S)는 결과값 S의 두번째 최상위 비트(MS1B_S)가 새로 계산된 값으로 변경되도록 제어하는 신호이다.
짝수배 다중 세정도 즉, 2배 세정도(double precision) 또는 4배 세정도(quadruple precision)등인 경우, 각 행의 마지막 CSA 연산이 수행된 후 CPA 연산으로 넘어갈 때 누산기의 출력 중 마지막 하프-워드 (즉, w=32 일 경우 16-bit)는 메모리(40)로 전송되지 못한 채 레지스터(180)에 남게 된다. 이러한 현상을 도 24에서 보여주고 있다. 도 24과 같이, 4배 세정도로 구현된 곱셈기에서 CSA 단위 연산은 4 번 반복된다. 각 단위 곱셈 연산의 데이터 길이는 수학식 13과 같다(c=256, w=32).
두 번째 단위 연산(CSA1)의 마지막 하프-워드(16 비트)의 출력은 세 번째 단위 연산(CSA2)의 첫 번째 하프-워드와 함께 1개의 풀-워드로 구성되어서 메모리(40)에 저장된다. 그러나, 네 번째 단위 연산(CSA3)의 마지막 하프-워드 출력은 더 이상의 단위 연산 블록이 없으므로 메모리로 전송되지 못하고 레지스터(180)에 남겨진다. 이와 같이, 한 행에 대한 누산 동작이 끝나고도 메모리(40)로 저장되지 못한 채 남아있는 하프-워드 데이터를 CPA 연산 과정에서 메모리(40)에 저장하기 위해 제어 신호들(IS_1ST_CPA_WORD, IS_ODD_PREC)이 사용된다.
다시 도 23을 참조하면, 짝수배 세정도일 때(IS_ODD_PEC='0'), CPA 연산의 첫 번째 사이클(IS_1ST_CPA_WORD='1')에서 캐리 전파 가산기(905)로부터 출력되는 결과의 하위 16 비트(CPA_S_OUT[15:0])는 레지스터(180)에 저장된 상위 16 비트(SO_SIPO_REG[31:16])와 결합되어서 1 워드(32 비트)로 구성되고, 레지스터(925)에 저장된다. 캐리 전파 가산기(905)로부터 출력되는 결과의 상위 16 비트(CPA_S_OUT[31:16])는 레지스터(922)에 저장된다.
나머지 사이클들에서, 캐리 전파 가산기(905)의 출력중 하위 16 비트는 이전 사이클에서 레지스터(922)에 저장되었던 상위 16 비트와 결합하여 레지스터(925)에 저장된다. 레지스터(925)의 데이터는 매 사이클마다 메모리(40)에 저장된다.
앞서 설명한 부스 리코더(140)는 조합회로(combinational circuit)로 구성된다. 부스 리코더(140)의 입출력 신호간의 논리식은 도 25와 같이 다르게 구현할 수 있다.
도 25에서, A[1]와 A[0]은 현재 처리 중인 단위 곱셈 연산에서 사용하는 피승수 A의 최하위 2 비트이다. 따라서 -A 의 최하위 2 비트는{A[1] xor A[0], A[0]} 이고 +2A 와 -2A 의 최하위 2 비트는 {A[0], 0}이 된다.
강제 부분곱 제어 신호(FORCE_PP[1:0]) 가 '11'일 때에는 부분곱(PP)의 값이 승수(B1, B0, BR)에 의해 결정된다. 그러나 강제 부분곱 제어 신호(FORCE_PP[1:0])가 '01' 일땐 +A 로, '10' 일땐 -A 로, '00' 일땐 0 으로 강제 선택된다.
도 1에 도시된 바와 같은 단위 곱셈 연산들 각각의 누산기 초기값 수정 사이클에서 이전 행의 결과값(SI)은 누산기에 누적되어야 한다. 이 때, 부분곱(PP)은 0으로 선택하고 모듈러스곱(MM)의 값은 이전 행의 결과값(SI)으로 선택하여야 한다. 누산기 초기값 수정 사이클에서 부분곱(PP)의 값을 0으로 강제하기 위해서는 강제 부분곱 제어 신호(FORCE_PP[1:0])를 '11'로 설정하면 된다.
본 발명의 바람직한 실시예에 따른 몽고메리 곱셈기(10)를 이용하여 모듈로 멱승(modular exponentiation)을 구현하면 결과는 몽고메리 레지듀 숫자(Montgomery residue number)이고 "XR mod M" 으로 표현된다. 하지만 궁극적으로 원하는 결과는 노말 레지듀 숫자(normal residue number)인 "X mod M" 이다. 몽고메리 레지듀 수를 노말 레지듀 숫자로 변환하고자 할 때에 강제 부분곱 제어 신호(FORCE_PP[1:0])를 사용할 수 있다. 예컨대, 피승수 B를 '+1'로 설정하고 승수 A를 이전 몽고메리 곱셈의 결과값으로 설정하여서 몽고메리 곱셈을 한번 더 수행하면 노말 레지듀 숫자를 얻을 수 있다. 이러한 동작을 위해서 도 1에 도시된 연산 매트릭스의 첫 번째 행에 있는 각 단위 연산에서 누산기 초기값 수정 사이클 이후의 한 사이클에서만 강제 부분곱 제어 신호(FORCE_PP[1:0])를 '01 로 설정하여서 부분곱(PP)의 값이 +A가 되도록 하고 다른 모든 사이클에서 강제 부분곱 제어 신호(FORCE_PP[1:0]) 을 '11' 로 설정하여서 부분곱(PP)의 값이 0이 되도록 한다.
부스 리코더(140)의 입력인 B1, B0, BR 은 레지스터(106)로부터 입력되고, 입력 A[1:0]은 AX_PIPO_REG[1:0]와 AY_PIPO_REG[1:0] 중에서 선택된 값이며 입력 SEL_PP_D[1:0]는 지연기(141) 내 래치(FF1)에 의해 선택 신호(SEL_PP)가 한 사이클 지연된 신호이다. 부스 리코더(140)의 출력 SEL_PP[1:0] 및 부분곱 인에이블 신호(EN_PP)는 부분곱 발생기(130)로 제공되고, 부분곱 반전 신호(NEG_PP)는 누산기(150)로 제공되며, 그리고 부분곱(PP[1:0])은 SPP 발생기(170)로 제공된다.
몽고메리 리코더(110)는 조합회로로 구성된다. 몽고메리 리코더(110)의 새로운 입출력 신호간의 논리식이 도 26에 도시되어 있다. 도 26에서, qI(QI[1:0]와 QO[1:0])의 코딩은 수학식 14와 같다.
MM = +M → qI = "01"
MM = -M → qI = "10"
MM = +2M → qI = "11"
도 26에서, M1은 모듈러스(M)의 두번째 최하위 비트이다. 강제 모듈러스곱 제어 신호(FORCE_MM[1:0])가 '11' 일 때 모듈러스곱(MM)의 값은 SPP[1:0]와 M1에 의해 결정된다. 그러나 모듈러스곱(MM)는, 강제 모듈러스곱 제어 신호(FORCE_MM[1:0])가 '10' 일 때 이전 행의 결과값(SI)으로, '01 일 때 QI[1:0]에 의해 선택되는 값으로, '00' 일때 0으로 강제 선택된다.
연산 매트릭스의 모든 단위 연산에서 누산기 초기값 수정 사이클에는 모듈러스곱(MM)의 값은 이전 행의 결과값(SI)으로 선택하여야 한다. 연산 매트릭스의 각 행의 첫 번째 단위 연산(즉, Gen-Q Box)에서는 SPP[1:0]과 M1에 적합한 모듈러스곱(MM)을 결정하여야 하므로 누산기 초기값 수정 사이클을 제외한 나머지 사이클에서 강제 모듈러스곱 제어 신호(FORCE_MM[1:0])는 '00'으로 설정되어야 한다. 이 때 qI를 계산해서 QO[1:0]로 출력하고 출력된 QO[1:0]가 레지스터(116)를 통해서 메모리(40)에 저장된다.
연산 매트릭스의 각 행의 첫 번째를 제외한 단위 연산(즉, Gen-S Box)에서는 누산기 초기값 수정 사이클을 제외한 나머지 사이클들에서 강제 모듈러스곱 제어 신호(FORCE_MM[1:0])를 '01'로 설정하여서 첫 번째 단위 연산에서 메모리에 저장해 둔 qI(즉, 입력 QI[1:0])를 재사용하여 모듈러스곱(MM)을 선택하여야 한다.
또한 본 발명의 바람직한 실시예에 따른 곱셈기 데이터 패스(100)는 몽고메리 곱셈뿐만 아니라 노말 곱셈까지 지원할 수 있다. 이를 위해 강제 모듈러스곱 제어 신호(FORCE_MM[1:0])가 사용된다. 몽고메리 곱셈과 달리 노말 곱셈에서는 모듈러스가 필요없으므로 모듈러스곱(MM)이 없다. 따라서 각 단위 연산의 누산기 초기값 수정 사이클에서만 강제 모듈러스곱 제어 신호(FORCE_MM[1:0])를 '10'으로 설정하여 모듈러스곱(MM)이 이전 행의 결과값(SI)이 되도록 하고 나머지 사이클들에서는 강제 모듈러스곱 제어 신호(FORCE_MM[1:0])를 '00' 으로 설정하여 모듈러스곱(MM)의 값이 0이 되도록 만든다.
몽고메리 리코더(110)의 입력 SPP[1:0]는 SPP 발생기(170)로부터 입력되고, M1은 레지스터(102)에 저장된 모듈러스의 두번째 최하위 비트와 레지스터(103)에 저장된 두번째 최하위 비트 중에서 각 행의 첫 번째 단위 연산(즉, Gen-Q Box)에서 사용하는 것이다. 그리고 QI[1:0]는 레지스터(115)에 저장된 최하위 2 비트이다. 또한 입력 SEL_MM_D[1:0]은 플립플롭(111)에 의해서 SEL_MM[1:0]이 한 사이클만큼 지연된 신호이다. 몽고메리 리코더(110)의 출력 QO[1:0]은 레지스터(116)로 제공되고 모듈러스곱 선택 신호(SEL_MM[1:0])와 모듈러스곱 인에이블 신호(EN_MM)는 모듈러스곱 발생기(120)로 제공되고, 모듈러스곱 반전 신호(NEG_MM)는 누산기(150)로 제공된다.
다시 도 8를 참조하면, 글리치 제거기(glitch remover, 114)는 몽고메리 리코더(110)의 출력 신호들 SEL_MM[1:0], EN_MM, NEG_MM에 나타나는 글리치를 제거하여 소모 전력을 낮추기 위한 것이다. 글리치 제거기(114)는 래치 또는 플립플롭으로 구성되며 몽고메리 곱셈기 내의 다른 레지스터나 플립플롭이 사용하는 클록과 반전된 위상의 클록을 사용한다. 소모전력 보다는 동작속도가 중요한 응용에서는 글리치 제거기(110)를 사용하지 않음으로써 임계경로(critical path)의 길이를 단축할 수 있다.
파이프라인 레지스터(141)는 2단 파이프라인 레지스터로 구현하여서 하드웨어의 동작 주파수를 높이기 위한 것이다. 레지스터(106)와 부스 리코더(140)의 동작은 나머지 블록들의 동작보다 한 사이클 먼저 발생한다. 부스 리코더의 입력 신호 A[1:0]을 선택하는 멀티플렉서(142), 모듈러스곱 발생기(120), 부분곱 발생기(130), 그리고 몽고메리 리코더(110)로 입력되는 신호(M1)를 선택하는 멀티플렉서(113)와 플립플롭(112)은 공통된 제어 신호(USE_X_REG)에 의해 제어된다. 그러나, 파이프라인 동작 때문에 부스 리코더(140)의 입력 신호( A[1:0])를 선택하는 회로(142)만 제어 신호(USE_X_REG)를 그대로 사용하고 다른 회로들(142, 120, 130, 112)은 지연소자를 통해 1 사이클 지연된 제어 신호(USE_X_REG)를 받아들인다.
이와 같은 본 발명에 의하면, 한정된 크기의 몽고메리 곱셈기를 이용하여 다중 세정도의 곱셈 연산을 수행할 수 있다. 더욱이, 본 발명의 곱셈기는 강제 모듈러스곱 제어 신호를 이용하여 몽고메리 곱셈뿐만 아니라 노말 곱셈 연산을 수행할 수 있고 강제 부분곱 제어 신호를 이용하여 몽고메리 레지듀 숫자를 노말 레지듀 숫자로 전환하는 작업을 수행할 수 있다
도 1은 4배 세정도 연산을 수행하기 위한 연산 매트릭스 구조를 예시적으로 보여주는 도면;
도 2는 도 1에 도시된 4배 세정도 연산이 수행되는 단위 곱셈 연산 순서를 보여주는 도면;
도 3은 본 발명의 바람직한 실시예에 따른 암호화 시스템을 개략적으로 보여주는 블록도;
도 4는 본 발명의 바람직한 실시예에 따른 몽고메리 곱셈기;
도 8는 몽고메리 곱셈기의 전체적인 구성을 보여주는 도면;
도 9은 피승수를 저장하는 레지스터들의 상세한 구성을 보여주는 도면;
도 10은 모듈러스곱(MMI)을 발생하기 위한 모듈러스곱 발생기를 상세히 보여주는 도면;
도 11은 본 발명의 바람직한 실시예에 따른 몽고메리 리코더의 코딩 스킴;
도 12는 승수 B를 저장하는 레지스터;
도 13은 부분곱 발생기의 회로 구성 예;
도 14은 본 발명의 바람직한 실시예에 따른 부스 리코더의 코딩 스킴;
도 15는 본 발명의 바람직한 실시예에 따른 누산기(150);
도 16은 쉬프트 신호(SHIFT_ACC)가 논리 '1'일 때 컴프레서들로 입력되는 신호들을 보여주는 도면;
도 17는 쉬프트 신호(SHIFT_ACC)가 논리 '0'일 때 컴프레서들로 입력되는 신호들을 보여주는 도면;
도 18는 4-2 컴프레서의 일 예를 보여주는 도면;
도 19은 쉬프트 레지스터(116)를 상세히 보여주는 도면;
도 20은 쉬프트 레지스터(115)를 상세히 보여주는 도면;
도 21은 누산기(150)의 합(SO[1:0])을 입력받아 저장하는 쉬프트 레지스터(180)를 보여주는 도면;
도 22는 몽고메리 리코더(110)에서 사용되는 SPPI[1:0]를 발생하는 회로를 보여주는 도면;
도 23은 본 발명의 바람직한 실시예에 따른 CPA 연산 블록(160)을 보여주는 도면;
도 24은 짝수배 다중 세정도인 경우, 각 행의 마지막 CSA 연산이 수행된 후 CPA 연산으로 넘어갈때 누산기의 최상위 하프-워드가 레지스터(180)에 남는 현상을 보여주는 도면;
도 25는 부스 리코더(140)의 입출력 신호간의 다른 논리식; 그리고
도 26은 몽고메리 리코더(110)의 입출력 신호간의 다른 논리식을 보여주는 도면이다.
Claims (65)
- 이전 행의 결과(SI)와 -M, 0, M 및 2M(단, M은 n-비트 모듈러스 수 중 현재 입력된 확장 청크의 비트들) 중 하나를 모듈러스곱으로 선택하는 모듈러스곱 선택기와;-2A, -A, 0, +A 및 +2A(단, A은 n-비트 피승수 수 중 현재 입력된 확장 청크의 비트들) 중 하나를 부분곱으로 선택하는 부분곱 선택기; 그리고상기 선택된 모듈러스곱과 상기 선택된 부분곱을 누산하는 누산기를 포함하되;상기 이전 행의 결과는, 상기 누산기의 이전 행의 곱셈 결과들 중 상기 피승수의 현재 입력된 확장 청크와 상기 모듈러스의현재 입력된 확장 청크에 대응하는 비트들인 몽고메리 곱셈기.
- 제 1 항에 있어서,상기 모듈러스곱 선택기는,상기 누산기 초기값 수정 사이클에서 상기 이전 행의 결과를 상기 모듈러스곱으로 선택하는 몽고메리 곱셈기.
- 제 2 항에 있어서,상기 부분곱 선택기는,상기 누산기 초기값 수정 사이클에서 상기 부분곱을 '0'으로 설정하는 몽고메리 곱셈기.
- 제 2 항 또는 제 3 항에 있어서,상기 누산기 초기값 수정 사이클은,상기 n-비트 피승수(A) 중 현재 입력된 확장 청크의 비트들과 상기 n-비트 모듈러스(M) 중 현재 입력된 확장 청크의 비트들을 사용하는 단위 곱셈 연산의 최초 사이클인 몽고메리 곱셈기.
- 제 1 항에 있어서,상기 입력 -M은 상기 모듈러스 M을 반전시키는 것에 의해서 구해지는 몽고메리 곱셈기.
- 제 1 항에 있어서,상기 입력 2M은 상기 모듈러스 M을 쉬프트하는 것에 의해서 구해지는 몽고메리 곱셈기.
- 제 1 항에 있어서,상기 n-비트 모듈러스(M) 중 현재 입력된 비트들을 저장하기 위한 모듈러스 레지스터와;상기 n-비트 피승수(A) 중 현재 입력된 비트들을 저장하기 위한 피승수 레지스터; 그리고상기 n-비트 승수(B) 중 현재 입력된 비트들을 저장하기 위한 승수 레지스터를 더 포함하는 몽고메리 곱셈기.
- 제 7 항에 있어서,상기 모듈러스 레지스터 및 상기 피승수 레지스터 각각은,c'+1(c'은 n보다 작거나 같은 양의 정수이고 확장 청크의 비크길이 임)-비트 레지스터인 몽고메리 곱셈기.
- 제 8 항에 있어서,상기 모듈러스 레지스터는 하프-워드 크기의 서브 레지스터들과 1 비트 부호 레지스터를 포함하는 몽고메리 곱셈기.
- 제 9 항에 있어서,상기 서브 레지스터들 중 짝수 번째 레지스터들은 메모리 인터페이스 블록이 공급해 주는 워드 길이 데이터의 하위 하프-워드를 그리고 상기 서브 레지스터들 중 홀수 번째 레지스터들은 상기 메모리 인터페이스 블록이 공급해 주는 워드 길이 데이터의 상위 하프-워드를 저장하는 몽고메리 곱셈기.
- 제 10 항에 있어서,상기 피승수 레지스터는 하프-워드 크기의 서브 레지스터들과 1 비트 부호 레지스터를 포함하는 몽고메리 곱셈기.
- 제 11 항에 있어서,상기 서브 레지스터들 중 짝수 번째 레지스터들은 메모리 인터페이스 블록이 공급해 주는 워드 길이 데이터의 하위 하프-워드를 그리고 상기 서브 레지스터들 중 홀수 번째 레지스터들은 메모리 인터페이스 블록이 공급해 주는 워드 길이 데이터의 상위 하프-워드를 저장하는 몽고메리 곱셈기.
- 제 7 항에 있어서,상기 승수를 저장하고, 청크 길이(c) 보다 작거나 같은 워드 길이(w) (여기서 w ≤ c ≤ n) 만큼의 비트 길이를 가지며, 2 비트씩 쉬프트하는 쉬프트 레지스터를 포함하는 몽고메리 곱셈기.
- 제 13 항에 있어서,상기 부분곱 선택기는,상기 현재 입력된 승수의 세 비트(B0, B1, BR)를 이용하여 부분곱 선택 신호를 발생하고, 상기 피승수(A)의 입력된 비트들 중 A, 2A, -A 및 -2A 중 하나를 상기 부분곱으로 선택하는 몽고메리 곱셈기.
- 제 14 항에 있어서,상기 2A는 상기 A를 쉬프트하는 것에 의해서 구해지는 몽고메리 곱셈기.
- 제 14 항에 있어서,상기 -A는 상기 A를 반전시키는 것에 의해서 구해지는 몽고메리 곱셈기.
- 제 14 항에 있어서,상기 -2A는 상기 A를 반전시키고, 쉬프트하는 것에 의해서 구해지는 몽고메리 곱셈기.
- 메모리와;피승수 A, 승수 B 및 모듈러스 M을 상기 메모리에 저장하는 호스트와;상기 호스트의 제어에 따라서 상기 메모리에 저장된 피승수, 승수 및 모듈러스를 독출해서 몽고메리 곱셈 연산을 수행하고, 연산 결과를 상기 메모리에 저장하는 몽고메리 곱셈기를 포함하되;상기 몽고메리 곱셈기는,상기 메모리로부터 이전 행의 결과(SI)와 상기 모듈러스의 일부를 독출하고, 상기 이전 행의 결과와 상기 모듈러스로부터 구해진 -M, 0, M 및 2M 중 하나를 모듈러스곱으로 선택하는 모듈러스곱 선택기와;상기 메모리로부터 상기 피승수의 일부를 독출하고 상기 피승수로부터 구해진 A, -A, 0, +A, 및 +2A 중 하나를 부분곱으로 선택하는 부분곱 선택기; 그리고상기 선택된 모듈러스곱과 상기 선택된 부분곱을 누산하는 누산기를 포함하되;상기 이전 행의 결과는, 상기 누산기의 이전 행의 곱셈 결과 비트들 중 상기 피승수의 현재 독출된 확장 청크에 대응하는비트들인 몽고메리 연산 장치.
- 제 18 항에 있어서,상기 몽고메리 곱셈기는,상기 메모리로부터 상기 피승수, 승수 및 모듈러스 전체를 독출할 때까지 상기 몽고메리 곱셈 연산을 반복적으로 수행하는 몽고메리 연산 장치.
- 제 18 항에 있어서,상기 메모리에서 저장된 상기 피승수, 승수 및 모듈러스는 각각 n-비트이고,상기 몽고메리 곱셈기는 상기 단위 곱셈 연산마다 상기 피승수, 승수 및 모듈러스를 각각 c'-비트 만큼씩 메모리로부터 독출하여 처리하는 몽고메리 연산 장치.
- 제 20 항에 있어서,상기 몽고메리 곱셈기는,상기 메모리로부터 상기 승수를 w-비트씩 독출하여 w-비트 길이의 레지스터에 저장하고 매 사이클마다 상기 레지스터에 저장된 승수의 d-비트씩 차례로 꺼내어 사용하고 w-비트가 모두 사용된 후 상기 승수의 다음 w-비트를 상기 메모리로부터 독출하여 사용하는 몽고메리 연산 장치.
- 제 21 항에 있어서,상기 단위 곱셈 연산에서 사용되는 상기 피승수, 상기 승수, 및 상기 모듈러스는 각각 c'-비트이고 전체 연산 동안 (n/c)*(n/c) 번의 단위 곱셈 연산들이 수행되는 몽고메리 연산 장치.
- 제 22 항에 있어서,상기 몽고메리 곱셈기는,상기 메모리에 저장된 각각 n-비트의 피승수 및 모듈러스 중에서 w-비트 씩 반복적으로 독출하여 c'-비트 길이의 레지스터에 저장하고 단위 곱셈 연산에서 c'-비트를 한꺼번에 사용하는 몽고메리 연산 장치.
- 제 23 항에 있어서,상기 단위 곱셈 연산들 각각의 첫 번째 연산 사이클은 상기 누산기의 초기값을 수정하는 누산기 초기값 수정 사이클인 몽고메리 곱셈기.
- 제 24 항에 있어서,상기 모듈러스곱 선택기는,상기 누산기 초기값 수정 사이클에서 상기 이전 행의 결과를 상기 모듈러스곱으로 선택하는 몽고메리 연산 장치.
- 제 25 항에 있어서,상기 부분곱 선택기는,상기 누산기 초기값 수정 사이클에서 상기 부분곱을 '0'으로 설정하는 몽고메리 연산 장치.
- 제 23 항에 있어서,상기 모듈러스(M) 중 현재 입력된 확장 청크 길이(c')의 비트들을 저장하기 위한 모듈러스 레지스터와;상기 피승수(A) 중 현재 입력된 확장 청크 길이(c')의 비트들을 저장하기 위한 피승수 레지스터; 그리고상기 승수(B) 중 현재 입력된 워드 길이(w)의 비트들을 저장하기 위한 승수 레지스터를 더 포함하는 몽고메리 연산 장치.
- 제 27 항에 있어서,상기 모듈러스 레지스터 및 상기 피승수 레지스터 각각은,c'+1(c'는 c보다 큰 양의 정수이고, 확장 청크의 비트 길이)-비트 레지스터인 몽고메리 연산 장치.
- 제 27 항에 있어서,상기 모듈러스 레지스터 및 상기 피승수 레지스터 각각은 다수개의 서브 레지스터들과 1 비트 부호 레지스터로 구성되고 클록 또는 로드 인에이블 신호에 반응하여 선택적으로 새로운 값을 적재하는 몽고메리 연산 장치.
- 제 27 항에 있어서,상기 승수 레지스터는 w (w 는 워드의 비트 길이) 비트 길이를 갖고 클록과 제어신호에 반응하여 오른쪽으로 쉬프트하거나 또는 새로운 값을 적재하는 레지스터인 몽고메리 연산 장치.
- 제 21 항에 있어서,상기 몽고메리 곱셈기는,강제 부분곱 제어 신호를 발생하는 컨트롤러를 더 포함하는 몽고메리 연산 장치.
- 제 31 항에 있어서,상기 부분곱 선택기는,상기 강제 부분곱 제어 신호가 제 1 값을 가질 때, 상기 현재 입력된 승수의 세 비트(B0, B1, BR)를 이용하여 부분곱 선택 신호와 부분곱 인에이블 신호를 발생하고, 상기 피승수(A)의 입력된 비트들에 근거해서 A, 2A, -A 및 -2A 중 하나 또는 0을 상기 부분곱으로 선택하는 몽고메리 연산 장치.
- 제 30 항에 있어서,상기 부분곱 선택기는,노말 레지듀 수를 얻기 위하여 상기 강제 부분곱 제어 신호가 제 2 값을 가질 때 상기 피승수(A)를 상기 부분곱으로 선택하는 몽고메리 연산 장치.
- 제 31 항에 있어서,상기 부분곱 선택기는,상기 강제 부분곱 제어 신호가 제 3 값을 가질 때 상기 피승수(A)에 근거해서 -A를 상기 부분곱으로 선택하는 몽고메리 연산 장치.
- 제 34 항에 있어서,상기 누산기 초기값 수정 사이클에서, 상기 강제 부분곱 제어 신호는 제 4 값을 가지며, 상기 강제 부분곱 제어 신호가 상기 제 4 값을 가질 때 상기 부분곱 선택기는 0을 상기 부분곱으로 선택하는 몽고메리 연산 장치.
- 제 31 항에 있어서,상기 몽고메리 곱셈기는,상기 누산기에 저장된 값들 (즉, 합, 캐리, 및 하위값)과 상기 부분곱, 그리고 누산기 궤환 입력의 쉬프트 제어신호에 응답하여 반복적인 데이터 SPPI를 더 발생하는 몽고메리 연산 장치.
- 제 36 항에 있어서,상기 컨트롤러는, 강제 모듈러스곱 제어 신호를 더 발생하는 몽고메리 연산 장치.
- 제 35 항에 있어서,상기 모듈러스곱 선택기는,상기 강제 모듈러스곱 제어 신호가 제 1 값을 가질 때 상기 반복적인 데이터 SPPI와 모듈러스(M)의 두번째 최하위 비트로부터 상기 -M, 0, M 및 2M 중 하나를 선택하기 위한 모듈러스곱 선택 신호를 발생하는 몽고메리 연산 장치.
- 제 36 항에 있어서,상기 누산기 초기값 수정 사이클에서, 상기 강제 모듈러스곱 제어 신호는 제 2 값을 갖는 몽고메리 연산 장치.
- 제 39 항에 있어서,상기 모듈러스곱 선택기는,상기 강제 모듈러스곱 제어 신호가 제 2 값일 때 상기 이전 행의 결과를 상기 모듈러스곱으로 선택하는 몽고메리 연산 장치.
- 제 40 항에 있어서,상기 강제 모듈러스곱 제어 신호가 제 3 값을 가질 때, QI에 근거해서 상기 모듈러스곱 선택 신호를 발생하는 몽고메리 연산 장치.
- 제 41 항에 있어서,상기 초기값 수정 사이클을 제외한 나머지 사이클들에서, 상기 강제 모듈러스곱 제어 신호는 제 4 값을 갖는 몽고메리 연산 장치.
- 제 42 항에 있어서,상기 모듈러스곱 선택기는,노말 레지듀 수를 얻기 위하여 상기 강제 부분곱 제어 신호가 제 2 값을 가질 때 상기 피승수(A)를 상기 부분곱으로 선택하는 몽고메리 연산 장치.
- 제 33 항에 있어서,상기 부분곱 선택기는,상기 강제 부분곱 제어 신호가 제 3 값을 가질 때 상기 피승수(A)에 근거해서 -A를 상기 부분곱으로 선택하는 몽고메리 연산 장치.
- 제 44 항에 있어서,상기 누산기 초기값 수정 사이클에서, 상기 강제 부분곱 제어 신호는 제 4 값을 갖는 몽고메리 연산 장치.
- 제 45 항에 있어서,상기 부분곱 선택기는, 상기 강제 부분곱 제어 신호가 상기 제 4 값을 가질 때 0을 상기 부분곱으로 선택하는 몽고메리 연산 장치.
- 캐리 가산 모드로 동작하고, 각각이 모듈러스곱, 부분곱, 제 1 값 및 제 2 값을 받아들이고, 대응하는 다음 합과 다음 캐리 및 디음 하위 값을 발생하는 복수의 컴프레서들과;상기 복수의 컴프레서들 각각으로부터 상기 대응하는 다음 합을 받아들이고, 대응하는 갱신된 현재 합을 출력하는 합 레지스터와;상기 복수의 컴프레서들로부터 상기 대응하는 다음 캐리를 받아들이고, 대응하는 갱신된 현재 캐리를 출력하는 캐리 레지스터; 그리고상기 복수의 컴프레서들로부터 상기 대응하는 다음 하위값을 받아들이고, 대응하는 갱신된 현재 하위값을 출력하는 하위값 레지스터를 포함하되;상기 컴프레서들 각각은, 누산기 초기값 수정 사이클 직후의 한 개 사이클에서 자신으로부터 출력되는 상기 대응하는 다음 합, 다음 캐리 및 다음 하위값을 상기 제 1 값 및 상기 제 2 값으로 받아들이는 누산기.
- 제 47 항에 있어서,상기 누산기 초기값 수정 사이클 직후의 한 개 사이클을 제외한 나머지 사이클들에서 상기 컴프레서들 각각은 2 비트 높은 컴프레서로부터의 합과 1 비트 높은 컴프레서로 부터의 캐리를 상기 제 1 값 및 상기 제 2 값으로 받아들이는 누산기.
- 제 47 항에 있어서,상기 피승수, 승수 및 모듈러스는 각각 n-비트이고, 상기 누산기로 입력되는 상기 부분곱과 상기 모듈러스곱은 각각 c+k+2=c'+2 비트(단, k는 8의 정수배 숫자이고 c 는 청크의 비트 길이이며 c'는 확장 청크의 비트 길이이다. 또한 n 은 c 의 정수배 이고 c≤n 이며 c'=c+k 이다)인 누산기.
- 제 49 항에 있어서,상기 컴프레서들은 직렬로 연결된 최소한 c+k+5=c'+5 개의 컴프레서들을 포함하는 누산기.
- 제 47 항에 있어서,상기 복수의 컴프레서들은 각각 4:2 컴프레서인 누산기.
- 제 47 항에 있어서,상기 복수의 컴프레서들 각각은, 2 개의 전가산기들로 구성되는 누산기.
- 제 47 항에 있어서,상기 복수의 컴프레서들의 최하위 컴프레서는 부분곱 반전 신호 또는 모듈러스곱 반전 신호를 더 받아들이는 누산기.
- 제 48 항에 있어서,상기 복수개의 컴프레서들 중 최하위 컴프레서의 합은 첫 번째 추가 전가산기에 입력되고 상기 복수개의 컴프레서들 중 최하위 컴프레서의 캐리와 두 번째 최하위 컴프레서의 합, 그리고 상기 첫 번째 추가 전가산기의 캐리는 두 번째 추가 전가산기에 입력되며 첫 번째 추가 전가산기의 합과 두 번째 전가산기의 캐리 및 합이 다음 하위값이 되는 누산기.
- 제 50 항에 있어서,상기 누산기 초기값 수정 사이클 직추의 한 사이클을 나타내는 신호에 응답해서 상기 제 1 값 및 상기 제 2 값을 선택하기 위한 멀티플렉서들을 더 포함하는 누산기.
- (n/c)(n>c, n 및 c는 양의 정수) 개의 청크들을 포함하는 n-비트 피승수와;(n/c)(n>c, n 및 c는 양의 정수) 개의 청크들을 포함하는 n-비트 승수와;(n/c)(n>c, n 및 c는 양의 정수) 개의 청크들을 포함하는 n-비트 모듈러스; 및상기 피승수의 확장 청크들, 상기 승수의 확장 청크들 및 상기 모듈러스의 확장 청크들에 대한 (n/c)*(n/c) 번의 단위 곱셈 연산들을 순차적으로 수행하는 곱셈기를 포함하되;상기 곱셈기는,이전 행의 결과(SI)와 -M, 0, M 및 2M(단, M은 n-비트 모듈러스 중 현재 입력된 c'=c+k 비트 길이의 확장 청크) 중 하나를 모듈러스곱으로 선택하는 모듈러스곱 선택기와;-2A, -A, 0, +A, +2A(단, A는 n-비트 피승수 중 현재 입력된 c'=c+k 비트 길이의 확장 청크) 중 하나를 부분곱으로 선택하는 부분곱 선택기; 그리고상기 선택된 모듈러스곱과 상기 선택된 부분곱을 누산하는 누산기를 포함하는 연산 장치.
- 제 56 항에 있어서,상기 이전 행의 결과는, 상기 누산기의 이전 행의 곱셈 결과들 중 상기 피승수와 상기 모듈러스의 현재 입력된 확장 청크에 대응하는 곱셈 결과인 연산 장치.
- 제 57 항에 있어서,마지막 행을 제외한 나머지 행들의 곱셈 연산 결과는 n+2 비트인 연산 장치.
- 제 57 항에 있어서,마지막 행의 곱셈 연산 결과는 n+1 비트인 연산 장치.
- 제 56 항에 있어서,상기 n 은 상기 몽고메리 곱셈기에 주어지는 피승수, 승수, 모듈러스 등과 같은 오퍼랜드들의 비트 길이인 연산 장치.
- 제 60 항에 있어서,상기 c 는 청크의 비트 길이 이며 n 은 c의 정수배인 연산 장치.
- 제 61 항에 있어서,c'는 확장 청크의 비트 길이 이고 c'=c+k 이며 k 는 8의 배수인 연산 장치.
- 제 62 항에 있어서,상기 몽고메리 곱셈기 내부의 데이터 패스는 c'에 비례한 크기를 갖는 연산 장치.
- n/c 개의 행들을 포함하는 연산 매트릭스와;상기 행들 각각은 n/c 개의 단위 곱셈 연산들과 하나의 CPA 연산을 포함하며;상기 단위 곱셈 연산들은 CSA 구조의 누산기에서 수행되고; 그리고상기 CPA 연산은 독립된 CPA 가산기에서 수행되는 몽고메리 곱셈 장치.
- 제 64 항에 있어서,상기 n/c 개의 행들에 대한 상기 단위 곱셈 연산들과 상기 CPA 연산들이 모두 수행될 때 곱셈 연산이 완료되는 몽고메리 곱셈 장치.
Priority Applications (6)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
KR1020040013855A KR20050088506A (ko) | 2004-03-02 | 2004-03-02 | 다중 세정도를 지원하는 확장형 몽고메리 모듈러 곱셈기 |
FR0502052A FR2867579B1 (fr) | 2004-03-02 | 2005-03-01 | Multiplieur modulaire de montgomery |
JP2005056659A JP4870932B2 (ja) | 2004-03-02 | 2005-03-01 | 多重精度を支援する拡張型モンゴメリモジュラ掛け算器 |
US11/068,371 US7805478B2 (en) | 2004-03-02 | 2005-03-01 | Montgomery modular multiplier |
DE200510010764 DE102005010764A1 (de) | 2004-03-02 | 2005-03-02 | Multipliziereinheit und zugehörige Operationseinheit und Akkumuliereinheit |
CNA2005100788260A CN1702613A (zh) | 2004-03-02 | 2005-03-02 | 蒙哥马利模乘法器 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
KR1020040013855A KR20050088506A (ko) | 2004-03-02 | 2004-03-02 | 다중 세정도를 지원하는 확장형 몽고메리 모듈러 곱셈기 |
Publications (1)
Publication Number | Publication Date |
---|---|
KR20050088506A true KR20050088506A (ko) | 2005-09-07 |
Family
ID=34909984
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR1020040013855A KR20050088506A (ko) | 2004-03-02 | 2004-03-02 | 다중 세정도를 지원하는 확장형 몽고메리 모듈러 곱셈기 |
Country Status (6)
Country | Link |
---|---|
US (1) | US7805478B2 (ko) |
JP (1) | JP4870932B2 (ko) |
KR (1) | KR20050088506A (ko) |
CN (1) | CN1702613A (ko) |
DE (1) | DE102005010764A1 (ko) |
FR (1) | FR2867579B1 (ko) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR100946256B1 (ko) * | 2007-12-26 | 2010-03-08 | 대구대학교 산학협력단 | 다정도 캐리 세이브 가산기를 이용한 듀얼필드상의확장성있는 몽고매리 곱셈기 |
KR20130128701A (ko) * | 2012-05-17 | 2013-11-27 | 삼성전자주식회사 | 모듈러 곱셈기 및 그것의 모듈러 곱셈 방법 |
Families Citing this family (32)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR100458031B1 (ko) * | 2003-03-14 | 2004-11-26 | 삼성전자주식회사 | 몽고메리 유형의 모듈라 곱셈 장치 및 방법 |
US8073892B2 (en) * | 2005-12-30 | 2011-12-06 | Intel Corporation | Cryptographic system, method and multiplier |
DE102007014808A1 (de) * | 2007-03-28 | 2008-10-02 | Texas Instruments Deutschland Gmbh | Multiplizier- und Multiplizier- und Addiereinheit |
US8781112B2 (en) * | 2007-11-02 | 2014-07-15 | Certicom Corp. | Signed montgomery arithmetic |
KR101590322B1 (ko) * | 2009-05-15 | 2016-02-19 | 삼성전자주식회사 | 연산임계경로가 감소된 모듈러 곱셈기 및 연산임계경로 감소방법 |
KR101248912B1 (ko) * | 2009-12-31 | 2013-03-29 | 한양대학교 산학협력단 | 항혈관신생 활성을 가지는 재조합 아데노바이러스 |
KR20110105555A (ko) * | 2010-03-19 | 2011-09-27 | 삼성전자주식회사 | 효율적인 하드웨어 구성을 갖는 몽고메리 승산기 |
KR101925868B1 (ko) | 2012-05-17 | 2018-12-06 | 삼성전자주식회사 | 모듈러 계산 유닛 및 그것을 포함하는 보안 시스템 |
CN103645883A (zh) * | 2013-12-18 | 2014-03-19 | 四川卫士通信息安全平台技术有限公司 | 基于fpga的高基模乘器 |
US9535656B2 (en) * | 2014-03-14 | 2017-01-03 | International Business Machines Corporation | Pipelined modular reduction and division |
KR102132261B1 (ko) * | 2014-03-31 | 2020-08-06 | 삼성전자주식회사 | 비교 연산이 필요없이 최종 모듈러 감소를 하는 몽고메리 곱셈 방법 및 곱셈기 |
CN103970504B (zh) * | 2014-05-07 | 2017-03-29 | 广东顺德中山大学卡内基梅隆大学国际联合研究院 | 在ecc中实现位数自适应模乘运算的方法及模乘运算器 |
CN104090737B (zh) * | 2014-07-04 | 2017-04-05 | 东南大学 | 一种改进型部分并行架构乘法器及其处理方法 |
KR102338863B1 (ko) | 2015-09-09 | 2021-12-13 | 삼성전자주식회사 | 연산을 제어하기 위한 장치 및 방법 |
IL244842A0 (en) * | 2016-03-30 | 2016-07-31 | Winbond Electronics Corp | Efficient non-modular multiplexing is protected against side-channel attacks |
CN106528046B (zh) * | 2016-11-02 | 2019-06-07 | 上海集成电路研发中心有限公司 | 长位宽时序累加乘法器 |
KR102594656B1 (ko) * | 2016-11-25 | 2023-10-26 | 삼성전자주식회사 | 보안 프로세서, 이를 포함하는 어플리케이션 프로세서 및 보안 프로세서의 동작 방법 |
CN108241481B (zh) * | 2016-12-26 | 2022-08-23 | 航天信息股份有限公司 | 一种适用于rsa算法的部分求余乘法器设备 |
CN108242994B (zh) * | 2016-12-26 | 2021-08-13 | 阿里巴巴集团控股有限公司 | 密钥的处理方法和装置 |
CN108564169B (zh) * | 2017-04-11 | 2020-07-14 | 上海兆芯集成电路有限公司 | 硬件处理单元、神经网络单元和计算机可用介质 |
RU2653263C1 (ru) * | 2017-07-24 | 2018-05-07 | федеральное государственное автономное образовательное учреждение высшего образования "Северо-Кавказский федеральный университет" | Арифметико-логическое устройство для умножения чисел по модулю |
JP7129857B2 (ja) * | 2018-09-07 | 2022-09-02 | ルネサスエレクトロニクス株式会社 | 積和演算装置、積和演算方法、及びシステム |
CN109857368B (zh) * | 2018-12-20 | 2022-07-26 | 上海大学 | 一种位数众多、可分组、可重构的多值电子运算器及方法 |
CN109669670B (zh) * | 2018-12-26 | 2020-09-22 | 贵州华芯通半导体技术有限公司 | 用于蒙哥马利模乘中的不均等分块的数据处理方法及装置 |
EP4095830A4 (en) * | 2020-01-20 | 2023-10-18 | Nippon Telegraph And Telephone Corporation | SECURE COMPUTING DEVICE, SECURE CALCULATION METHOD AND PROGRAM |
WO2021149105A1 (ja) * | 2020-01-20 | 2021-07-29 | 日本電信電話株式会社 | 秘密計算装置、秘密計算方法、およびプログラム |
EP4080350A4 (en) * | 2020-04-01 | 2022-12-28 | Huawei Technologies Co., Ltd. | MULTIMODE FUSION MULTIPLIER |
CN112328962B (zh) * | 2020-11-27 | 2021-12-31 | 深圳致星科技有限公司 | 矩阵运算优化方法、装置、设备和可读存储介质 |
CN112506468B (zh) * | 2020-12-09 | 2023-04-28 | 上海交通大学 | 支持高吞吐多精度乘法运算的risc-v通用处理器 |
CN113032845B (zh) * | 2021-03-31 | 2022-02-11 | 郑州信大捷安信息技术股份有限公司 | 一种用于资源受限芯片的EdDSA签名实现方法和装置 |
CN113296733B (zh) * | 2021-04-25 | 2024-09-03 | 阿里巴巴创新公司 | 数据处理方法以及装置 |
TWI802095B (zh) | 2021-11-22 | 2023-05-11 | 財團法人工業技術研究院 | 模數乘法電路與對應之計算模數乘法之方法 |
Family Cites Families (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP0294476A1 (en) | 1986-12-30 | 1988-12-14 | Hughes Aircraft Company | N-bit sum-carry accumulator |
FR2726667B1 (fr) * | 1994-11-08 | 1997-01-17 | Sgs Thomson Microelectronics | Procede de mise en oeuvre de multiplication modulaire selon la methode montgomery |
KR100257124B1 (ko) | 1997-05-16 | 2000-05-15 | 문상재 | 공통 피승수 모듈라 곱셈을 이용한 고속 멱승 방법 |
US6356636B1 (en) * | 1998-07-22 | 2002-03-12 | Motorola, Inc. | Circuit and method for fast modular multiplication |
GB2352309B (en) * | 1999-07-21 | 2004-02-11 | Advanced Risc Mach Ltd | A system and method for performing modular multiplication |
JP2002236581A (ja) * | 2001-02-08 | 2002-08-23 | Matsushita Electric Ind Co Ltd | 演算回路、演算方法、及びプログラム記録媒体 |
FR2822260A1 (fr) | 2001-03-14 | 2002-09-20 | Bull Sa | Procedes et dispositifs pour accelerer le temps de calcul d'un produit de montgomery d'un multiplication et d'une exponentiation modulaire |
US20020172355A1 (en) * | 2001-04-04 | 2002-11-21 | Chih-Chung Lu | High-performance booth-encoded montgomery module |
JP2003216034A (ja) * | 2002-01-23 | 2003-07-30 | Ail Kk | べき乗剰余演算器 |
JP2003216411A (ja) * | 2002-01-23 | 2003-07-31 | Sony Corp | 多倍長演算処理装置およびicデバイス |
JP2004258141A (ja) * | 2003-02-24 | 2004-09-16 | Fujitsu Ltd | モンゴメリ乗算剰余の多倍長演算のための演算装置 |
-
2004
- 2004-03-02 KR KR1020040013855A patent/KR20050088506A/ko not_active Application Discontinuation
-
2005
- 2005-03-01 US US11/068,371 patent/US7805478B2/en active Active
- 2005-03-01 FR FR0502052A patent/FR2867579B1/fr active Active
- 2005-03-01 JP JP2005056659A patent/JP4870932B2/ja active Active
- 2005-03-02 CN CNA2005100788260A patent/CN1702613A/zh active Pending
- 2005-03-02 DE DE200510010764 patent/DE102005010764A1/de not_active Withdrawn
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR100946256B1 (ko) * | 2007-12-26 | 2010-03-08 | 대구대학교 산학협력단 | 다정도 캐리 세이브 가산기를 이용한 듀얼필드상의확장성있는 몽고매리 곱셈기 |
KR20130128701A (ko) * | 2012-05-17 | 2013-11-27 | 삼성전자주식회사 | 모듈러 곱셈기 및 그것의 모듈러 곱셈 방법 |
Also Published As
Publication number | Publication date |
---|---|
DE102005010764A1 (de) | 2005-09-29 |
FR2867579B1 (fr) | 2008-04-18 |
CN1702613A (zh) | 2005-11-30 |
FR2867579A1 (fr) | 2005-09-16 |
JP4870932B2 (ja) | 2012-02-08 |
JP2005250481A (ja) | 2005-09-15 |
US20050198093A1 (en) | 2005-09-08 |
US7805478B2 (en) | 2010-09-28 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP4870932B2 (ja) | 多重精度を支援する拡張型モンゴメリモジュラ掛け算器 | |
JP2722411B2 (ja) | モンゴメリ法によるモジュラリダクションの実施方法 | |
US7543011B2 (en) | Montgomery modular multiplier and method thereof using carry save addition | |
US7277540B1 (en) | Arithmetic method and apparatus and crypto processing apparatus for performing multiple types of cryptography | |
KR100591761B1 (ko) | 몽고메리 모듈러 곱셈기 및 캐리 저장 가산을 이용한몽고메리 모듈러 곱셈 방법 | |
EP1293891A2 (en) | Arithmetic processor | |
US20040167952A1 (en) | Method and apparatus for carrying out efficiently arithmetic computations in hardware | |
US5261001A (en) | Microcircuit for the implementation of RSA algorithm and ordinary and modular arithmetic, in particular exponentiation, with large operands | |
KR100682354B1 (ko) | 다배장 데이터 곱합 연산 처리 회로 및 몽고메리 곱합잉여 연산 회로 | |
CN113467750A (zh) | 用于基数为4的srt算法的大整数位宽除法电路及方法 | |
JP4180024B2 (ja) | 乗算剰余演算器及び情報処理装置 | |
US20090089350A1 (en) | Modular reduction operator | |
Gutub et al. | Efficient scalable VLSI architecture for Montgomery inversion in GF (p) | |
US7395295B2 (en) | Pipeline core in Montgomery multiplier | |
US7480691B2 (en) | Arithmetic device for multiple precision arithmetic for Montgomery multiplication residue arithmetic | |
JP4170267B2 (ja) | 乗算剰余演算器及び情報処理装置 | |
JP3297683B2 (ja) | 乗算器 | |
US6963644B1 (en) | Multi-word arithmetic device for faster computation of cryptosystem calculations | |
Hong et al. | Radix-4 modular multiplication and exponentiation algorithms for the RSA public-key cryptosystem | |
KR100836737B1 (ko) | 중국인 나머지 정리(crt)와 캐리 저장 가산 기반의모듈러 곱셈 장치 및 방법 | |
US7266577B2 (en) | Modular multiplication apparatus, modular multiplication method, and modular exponentiation apparatus | |
KR100946256B1 (ko) | 다정도 캐리 세이브 가산기를 이용한 듀얼필드상의확장성있는 몽고매리 곱셈기 | |
Gutub | High speed hardware architecture to compute galois fields GF (p) montgomery inversion with scalability features | |
KR100858559B1 (ko) | 잉여 이진수의 덧셈 방법, 잉여 이진수의 곱셈 방법, 잉여이진수 덧셈기 및 잉여 이진수 곱셈기 | |
JP3576155B2 (ja) | 乗算剰余演算器 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
WITN | Application deemed withdrawn, e.g. because no request for examination was filed or no examination fee was paid |