KR101794807B1 - 몽고메리 역원 계산 장치 및 이를 이용한 몽고메리 역원 계산 방법 - Google Patents

몽고메리 역원 계산 장치 및 이를 이용한 몽고메리 역원 계산 방법 Download PDF

Info

Publication number
KR101794807B1
KR101794807B1 KR1020110009584A KR20110009584A KR101794807B1 KR 101794807 B1 KR101794807 B1 KR 101794807B1 KR 1020110009584 A KR1020110009584 A KR 1020110009584A KR 20110009584 A KR20110009584 A KR 20110009584A KR 101794807 B1 KR101794807 B1 KR 101794807B1
Authority
KR
South Korea
Prior art keywords
value
stored
register
inverse
quotient
Prior art date
Application number
KR1020110009584A
Other languages
English (en)
Other versions
KR20120088316A (ko
Inventor
김영식
안경문
신종훈
신선수
강지수
Original Assignee
삼성전자주식회사
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 삼성전자주식회사 filed Critical 삼성전자주식회사
Priority to KR1020110009584A priority Critical patent/KR101794807B1/ko
Priority to US13/361,329 priority patent/US9043377B2/en
Publication of KR20120088316A publication Critical patent/KR20120088316A/ko
Application granted granted Critical
Publication of KR101794807B1 publication Critical patent/KR101794807B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F5/00Methods or arrangements for data conversion without changing the order or content of the data handled
    • G06F5/01Methods or arrangements for data conversion without changing the order or content of the data handled for shifting, e.g. justifying, scaling, normalising
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/38Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
    • G06F7/48Methods 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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/38Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
    • G06F7/48Methods 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/52Multiplying; Dividing
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/38Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
    • G06F7/48Methods 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/544Methods 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 for evaluating functions by calculation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/38Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
    • G06F7/48Methods 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/57Arithmetic logic units [ALU], i.e. arrangements or devices for performing two or more of the operations covered by groups G06F7/483 – G06F7/556 or for performing logical operations
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/60Methods 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/72Methods 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/728Methods 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)
  • General Physics & Mathematics (AREA)
  • Physics & Mathematics (AREA)
  • Theoretical Computer Science (AREA)
  • Mathematical Analysis (AREA)
  • Pure & Applied Mathematics (AREA)
  • Mathematical Optimization (AREA)
  • Computational Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • Computing Systems (AREA)
  • Mathematical Physics (AREA)
  • Complex Calculations (AREA)
  • Executing Machine-Instructions (AREA)

Abstract

몽고메리 역원 계산 장치가 개시된다. 상기 몽고메리 역원 계산 장치는 각각이 변수 값을 저장하기 위한 다수의 레지스터들, 모듈러스(P)를 저장하기 위한 모듈러스 레지스터, 상기 모듈러스(P)에 대한 다중 곱을 수행하기 위한 곱셈기, 상기 다수의 레지스터들 각각에 저장된 변수 값 및 상기 곱셈기의 출력 값을 비교하여 다수의 제어 신호들을 발생하는 비교기, 각각이 상기 다수의 제어 신호들 중 적어도 하나의 제1 제어 신호에 응답하여, 상기 다수의 레지스터들 중에서 대응되는 레지스터에 저장된 상기 변수 값의 비트들을 시프트시키기 위한 다수의 시프터들, 상기 다수의 제어 신호들 중 제2 제어 신호에 응답하여, 상기 다수의 시프터들 중 일부로부터 출력된 값들에 대한 mod2m의 몫(q)을 계산하기 위한 몫 생성 블럭, 및 상기 다수의 제어 신호들 중 적어도 하나의 제3 제어 신호에 응답하여, 상기 몫(q)을 이용하여 상기 다수의 시프터들 각각의 상기 출력 값의 업데이트 값을 계산하기 위한 연산 블럭을 포함하고, 상기 m은 2 이상의 자연수이다.

Description

몽고메리 역원 계산 장치 및 이를 이용한 몽고메리 역원 계산 방법{MONTGOMERY INVERSE CALCULATION DEVICE AND METHOD FOR CALCULATING MONTGOMERY INVERSE USING THE SAME}
본 발명의 개념에 따른 실시 예는 몽고메리 역원 계산 장치에 관한 것으로, 특히 몽고메리 역원 계산 과정에서 사용되는 다수의 변수들 각각의 여러 비트를 동시에 시프트할 수 있고 여러 비트를 동시에 모듈러 리덕션(modular reduction)할 수 있는 몽고메리 역원 계산 장치 및 이를 이용한 몽고메리 역원 계산 방법에 관한 것이다.
서로 소인 임의의 정수 A와 홀수 P가 주어졌을 때, 어떤 정수 k에 대해 수학식 1을 만족시키는 X를 몽고메리 역원이라 부른다.
[수학식 1]
A*X = 2k mod P
상기 몽고메리 역원은 다수의 암호 시스템에서 사용된다. 이때, 상기 몽고메리 역원을 계산하는데 소요되는 시간이 작을수록 상기 다수의 암호 시스템은 암호화 연산 및 복호화 연산을 보다 신속하게 수행할 수 있다.
따라서 본 발명이 이루고자 하는 기술적인 과제는 몽고메리 역원 계산 중의 시프트 연산 및 모듈러 리덕션 연산을 다중 비트 단위로 수행할 수 있는 몽고메리 역원 계산 장치 및 이를 이용한 몽고메리 역원 계산 방법을 제공하는 것이다.
본 발명의 실시 예에 따른 몽고메리 역원 계산 장치는 각각이 변수 값을 저장하기 위한 다수의 레지스터들, 모듈러스(P)를 저장하기 위한 모듈러스 레지스터, 상기 모듈러스(P)에 대한 다중 곱을 수행하기 위한 곱셈기, 상기 다수의 레지스터들 각각에 저장된 변수 값 및 상기 곱셈기의 출력 값을 비교하여 다수의 제어 신호들을 발생하는 비교기, 각각이 상기 다수의 제어 신호들 중 적어도 하나의 제1 제어 신호에 응답하여, 상기 다수의 레지스터들 중에서 대응되는 레지스터에 저장된 상기 변수 값의 비트들을 시프트시키기 위한 다수의 시프터들, 상기 다수의 제어 신호들 중 제2 제어 신호에 응답하여, 상기 다수의 시프터들 중 일부로부터 출력된 값들에 대한 mod2m의 몫(q)을 계산하기 위한 몫 생성 블럭, 및 상기 다수의 제어 신호들 중 적어도 하나의 제3 제어 신호에 응답하여, 상기 몫(q)을 이용하여 상기 다수의 시프터들 각각의 상기 출력 값의 업데이트 값을 계산하기 위한 연산 블럭을 포함하고, 상기 m은 2 이상의 자연수이다.
상기 몫 생성 블럭은 상기 제2 제어 신호에 응답하여, 상기 mod2m에 대한 역원을 계산하기 위한 역원 계산기, 및 상기 mod2m에 대한 상기 역원을 이용하여, 상기 몫(q)을 계산하기 위한 몫 생성기를 포함할 수 있다.
또한, 상기 m의 값은 4일 수 있다.
또한, 상기 다수의 시프터들 각각은 1비트 이상의 비트 단위로 시프트시킬 수 있다.
또한, 상기 연산 블럭은 상기 다수의 시프터들의 출력 값들 중 적어도 하나에 대한 모듈러 리덕션(modular reduction)을 수행할 수 있다.
본 발명의 다른 실시예에 따른 몽고메리 역원 계산 장치는 각각이 상기 다수의 시프터들 중 대응되는 시프터의 출력 값 또는 상기 연산 블럭의 출력 값을 상기 다수의 레지스터들 중 대응되는 레지스터로 출력하기 위한 다수의 선택기들을 더 포함할 수 있다.
본 발명의 일 실시예에 따른 몽고메리 역원 계산 장치를 이용한 몽고메리 역원 계산 방법은 다수의 변수들(U, V, R, 및 S) 각각의 변수 값이 다수의 레지스터들 중 대응되는 레지스터에 저장되고, 모듈러스(P)가 모듈러스 레지스터에 저장되는 단계, 상기 몽고메리 역원 계산 장치를 이용하여 임의의 정수 k에 대한 A의 역원(
Figure 112017041426133-pat00001
)을 계산하는 단계, 및 상기 몽고메리 역원 계산 장치를 이용하여 상기 역원의 지수로 사용되는 상기 임의의 정수 k를 보정하여 상기 A의 몽고메리 역원(
Figure 112017041426133-pat00002
)을 계산하는 단계를 포함하고, 상기 A는 임의의 정수이고, 상기 P는 홀수이고, 상기 A와 상기 P는 서로소이고, 상기 k는 상기 임의의 정수 k에 대한 A의 역원을 계산하는 단계에서 계산이 진행중인 비트이고, 상기 n은 2진수로 표현된 상기 P의 비트수이고, 상기 임의의 정수 k에 대한 A의 역원을 계산하는 단계는 다중 비트(m) 연산을 통해서 역원을 계산한다.
상기 저장되는 단계는, 상기 U의 값을 상기 P로 저장하고, 상기 V의 값을 상기 A로 저장하고, 상기 R의 값을 0으로 저장하고, 상기 S의 값을 1로 저장한다.
상기 임의의 정수 k에 대한 A의 역원을 계산하는 단계는 상기 U의 값이 2m으로 나누어 떨어지는 경우, 상기 U에 대응되는 레지스터에 저장된 상기 U의 값을 상기 2m으로 나눈 값으로 업데이트 하고, 상기 S에 대응되는 레지스터에 저장된 상기 S의 값을 상기 2m을 곱한 값으로 업데이트하고, 상기 k의 값을 m만큼 증가시키는 단계, 상기 U의 값이 2m으로 나누어 떨어지지 않고 상기 V의 값이 2m으로 나누어 떨어지는 경우, 상기 V에 대응되는 레지스터에 저장된 상기 V의 값을 상기 2m으로 나눈 값으로 업데이트 하고, 상기 R에 대응되는 레지스터에 저장된 상기 R의 값을 상기 2m을 곱한 값으로 업데이트하고, 상기 k의 값을 m만큼 증가시키는 단계, 상기 U의 값이 2m으로 나누어 떨어지지 않고 상기 V의 값이 2m으로 나누어 떨어지지 않는 경우, 상기 U의 절대값과 상기 V의 절대값의 크기를 비교하고, 비교 결과에 따라 상기 다수의 변수들 각각의 상기 변수 값 및 상기 k의 값을 업데이트 하는 단계, 및 연산 블럭을 이용하여, 상기 S의 값 및 상기 R의 값에 대하여 모듈러 리덕션(modular reduction)하는 단계를 포함한다.
또한, 상기 임의의 정수 k에 대한 A의 역원을 계산하는 단계는 상기 U의 절대값 또는 상기 V의 절대값이 1이 될 때까지 반복적으로 수행된다.
또한, 상기 몽고메리 역원 계산 방법은 상기 U의 값 및 상기 V의 값이 음의 값이 되는 것을 허용한다.
상기 모듈러 리덕션하는 단계는 상기 모듈러 리덕션의 결과가 -2m*P 보다 크고 2m*P 보다 작은 값을 갖도록 제한할 수 있다.
또한, 상기 몽고메리 역원 계산 방법에서, 상기 다수의 변수들 각각은 수학식을 만족시키면서 업데이트되고, 상기 수학식은
Figure 112011007750500-pat00003
, 및
Figure 112011007750500-pat00004
이다.
또한, 상기 다수의 변수들 각각의 상기 변수 값 및 상기 k의 값을 업데이트 하는 단계는, 상기 U의 절대값이 상기 V의 절대값보다 큰 경우, 2진수로 표현된 상기 V의 값의 최하위 비트부터 연속되는 0의 개수에 따라 상기 V에 대응되는 상기 레지스터에 저장된 상기 V의 값, 상기 R에 대응되는 상기 레지스터에 저장된 상기 R의 값, 및 상기 k의 값을 업데이트하는 단계, 몫 생성 블럭을 이용하여, 상기 U의 LSD(least significant digit)와 상기 V의 LSD(least significant digit)에 관하여 상기 mod 2m에 대한 상기 몫(q)을 구하는 단계, 및 상기 U에 대응되는 상기 레지스터에 저장된 상기 U의 값, 상기 R에 대응되는 상기 레지스터에 저장된 상기 R의 값, 및 상기 S에 대응되는 상기 레지스터에 저장된 상기 S의 값을 수학식에 의해 업데이트 하는 단계를 포함하고, 상기 수학식은 U = (U - q*V) / 2m, R = R + q*S, 및 S = 2m*S 이다.
또한, 상기 다수의 변수들 각각의 상기 변수 값 및 상기 k의 값을 업데이트 하는 단계는 상기 V의 절대값이 상기 U의 절대값보다 큰 경우, 2진수로 표현된 상기 U의 값의 최하위 비트부터 연속되는 0의 개수에 따라 상기 U에 대응되는 상기 레지스터에 저장된 상기 U의 값, 상기 S에 대응되는 상기 레지스터에 저장된 상기 S의 값, 및 상기 k의 값을 업데이트하는 단계, 몫 생성 블럭을 이용하여, 상기 V의 LSD(least significant digit)와 상기 U의 LSD(least significant digit)에 관하여 상기 mod 2m에 대한 상기 몫(q)을 구하는 단계, 및 상기 V에 대응되는 상기 레지스터에 저장된 상기 V의 값, 상기 S에 대응되는 상기 레지스터에 저장된 상기 S의 값, 및 상기 R에 대응되는 상기 레지스터에 저장된 상기 R의 값을 수학식에 의해 업데이트 하는 단계를 포함하고, 상기 수학식은 V = (V - q*U) / 2m, S = S + q*R, 및 R = 2m*R 이다.
결국, 상기 몽고메리 역원 계산 방법은 상기 U의 값이 1인 경우, 상기 k에 대한 상기 A의 역원(
Figure 112011007750500-pat00005
)을 P-R의 값으로 결정하고, 상기 U의 값이 -1인 경우, 상기 k에 대한 상기 A의 역원을 상기 R의 값으로 결정하고, 상기 V의 값이 1인 경우, 상기 k에 대한 상기 A의 역원을 상기 S의 값으로 결정하고, 상기 V의 값이 -1인 경우, 상기 k에 대한 상기 A의 역원을 P-S의 값으로 결정할 수 있다.
본 발명의 실시 예에 따른 몽고메리 역원 계산 장치 및 몽고메리 역원 계산 방법은 몽고메리 역원 계산 과정 중의 시프트 연산 및 모듈러 리덕션 연산을 다중 비트 단위로 수행할 수 있어, 상기 몽고메리 역원을 계산하기 위한 시간을 단축할 수 있는 효과가 있다.
본 발명의 상세한 설명에서 인용되는 도면을 보다 충분히 이해하기 위하여 각 도면의 상세한 설명이 제공된다.
도 1은 본 발명의 일 실시예에 따른 몽고메리 역원 계산 장치의 블럭도이다.
도 2는 도 1에 도시된 몫 생성 블럭을 도시한다.
도 3은 도 1에 도시된 몽고메리 역원 계산 장치의 다른 실시예를 도시한다.
도 4는 도 1 또는 도 3에 도시된 몽고메리 역원 계산 장치를 이용한 몽고메리 역원 계산 방법에 관한 흐름도이다.
본 명세서에 개시되어 있는 본 발명의 개념에 따른 실시 예들에 대해서 특정한 구조적 내지 기능적 설명들은 단지 본 발명의 개념에 따른 실시 예를 설명하기 위한 목적으로 예시된 것으로, 본 발명의 개념에 따른 실시 예들은 다양한 형태로 실시될 수 있으며 본 명세서 또는 출원에 설명된 실시 예들에 한정되는 것으로 해석되어서는 아니된다.
본 발명의 개념에 따른 실시 예는 다양한 변경을 가할 수 있고 여러 가지 형태를 가질 수 있으므로 특정 실시 예들을 도면에 예시하고 본 명세서 또는 출원에 상세하게 설명하고자 한다. 그러나, 이는 본 발명의 개념에 따른 실시 예를 특정한 개시 형태에 대해 한정하려는 것이 아니며, 본 발명의 사상 및 기술 범위에 포함되는 모든 변경, 균등물 내지 대체물을 포함하는 것으로 이해되어야 한다.
제1 및/또는 제2 등의 용어는 다양한 구성 요소들을 설명하는데 사용될 수 있지만, 상기 구성 요소들은 상기 용어들에 의해 한정되어서는 안된다. 상기 용어들은 하나의 구성 요소를 다른 구성 요소로부터 구별하는 목적으로만, 예컨대 본 발명의 개념에 따른 권리 범위로부터 이탈되지 않은 채, 제1 구성요소는 제2 구성요소로 명명될 수 있고, 유사하게 제2 구성요소는 제1 구성요소로도 명명될 수 있다.
어떤 구성요소가 다른 구성요소에 "연결되어" 있다거나 "접속되어" 있다고 언급된 때에는, 그 다른 구성요소에 직접적으로 연결되어 있거나 또는 접속되어 있을 수도 있지만, 중간에 다른 구성요소가 존재할 수도 있다고 이해되어야 할 것이다. 반면에, 어떤 구성요소가 다른 구성요소에 "직접 연결되어" 있다거나 "직접 접속되어" 있다고 언급된 때에는, 중간에 다른 구성요소가 존재하지 않는 것으로 이해되어야 할 것이다. 구성요소들 간의 관계를 설명하는 다른 표현들, 즉 "~사이에"와 "바로 ~사이에" 또는 "~에 이웃하는"과 "~에 직접 이웃하는" 등도 마찬가지로 해석되어야 한다.
본 명세서에서 사용한 용어는 단지 특정한 실시 예를 설명하기 위해 사용된 것으로, 본 발명을 한정하려는 의도가 아니다. 단수의 표현은 문맥상 명백하게 다르게 뜻하지 않는 한, 복수의 표현을 포함한다. 본 명세서에서, "포함하다" 또는 "가지다" 등의 용어는 설시된 특징, 숫자, 단계, 동작, 구성요소, 부분품 또는 이들을 조합한 것이 존재함을 지정하려는 것이지, 하나 또는 그 이상의 다른 특징들이나 숫자, 단계, 동작, 구성요소, 부분품 또는 이들을 조합한 것들의 존재 또는 부가 가능성을 미리 배제하지 않는 것으로 이해되어야 한다.
다르게 정의되지 않는 한, 기술적이거나 과학적인 용어를 포함해서 여기서 사용되는 모든 용어들은 본 발명이 속하는 기술 분야에서 통상의 지식을 가진 자에 의해 일반적으로 이해되는 것과 동일한 의미를 가지고 있다. 일반적으로 사용되는 사전에 정의되어 있는 것과 같은 용어들은 관련 기술의 문맥상 가지는 의미와 일치하는 의미를 가지는 것으로 해석되어야 하며, 본 명세서에서 명백하게 정의하지 않는 한, 이상적이거나 과도하게 형식적인 의미로 해석되지 않는다.
이하, 첨부한 도면을 참조하여 본 발명의 바람직한 실시 예를 설명함으로써, 본 발명을 상세히 설명한다.
도 1은 본 발명의 일 실시예에 따른 몽고메리 역원 계산 장치의 블럭도이다.
도 1을 참조하면, 몽고메리 역원 계산 장치(10)는 다수의 레지스터들(120, 140, 160, 및 180), 모듈러스 레지스터(190), 곱셈기(200), 비교기(300), 다수의 시프터들(420, 440, 460, 및 480), 몫 생성 블럭(500), 및 연산 블럭(600)을 포함한다.
다수의 레지스터들(120, 140, 160, 및 180) 각각은 몽고메리 역원 계산 과정에서 사용되는 다수의 변수들(U, V, R, 및 S) 중 대응되는 변수의 변수 값을 저장할 수 있다. 또한, 다수의 레지스터들(120, 140, 160, 및 180) 각각은 다수의 변수들(U, V, R, 및 S) 중 대응되는 변수의 업데이트 값을 저장할 수 있다.
다수의 레지스터들(120, 140, 160, 및 180)은 상기 S의 값을 저장하기 위한 S 레지스터(120), 상기 U의 값을 저장하기 위한 U 레지스터(140), 상기 V의 값을 저장하기 위한 V 레지스터(160), 및 상기 R의 값을 저장하기 위한 R 레지스터(180)를 포함한다.
다수의 레지스터들(120, 140, 160, 및 180) 각각에 저장된 변수 값은 다수의 시프터들(420, 440, 460, 및 480) 중 대응되는 시프터로 출력된다.
모듈러스 레지스터(190)에는 모듈러스(P)가 저장될 수 있다.
곱셈기(200)는 모듈러스(P)에 대한 다중 곱을 수행할 수 있다. 즉, 곱셈기(200)는 모듈러스 레지스터(190)의 출력 값을 이용하여 t*P(t는 정수)를 연산할 수 있다.
비교기(300)는 다수의 레지스터들(120, 140, 160, 및 180) 각각에 저장된 변수 값 및 곱셈기(200)의 출력 값을 비교하여 다수의 제어 신호들을 발생할 수 있다.
다수의 시프터들(420, 440, 460, 및 480) 각각은 상기 다수의 제어 신호들 중 적어도 하나의 제1 제어 신호에 응답하여, 다수의 레지스터들(120, 140, 160, 및 180) 중에서 대응되는 레지스터에 저장된 상기 변수 값의 비트들을 시프트, 예컨대 라이트 시프트(right shift) 또는 레프트 시프트(left shift)시킬 수 있다. 다수의 시프터들(420, 440, 460, 및 480) 각각은 다수의 레지스터들(120, 140, 160, 및 180) 중에서 대응되는 레지스터에 저장된 상기 변수 값의 비트들을 1비트 이상의 비트 단위로 시프트시킬 수 있다. 상기 적어도 하나의 제1 제어 신호는 다수의 시프터들(420, 440, 460, 및 480) 각각이 시프트시켜야 하는 비트수에 관한 정보를 포함한다.
다수의 시프터들(420, 440, 460, 및 480)은 상기 S 값의 비트들을 시프트시키기 위한 S 시프터(420), 상기 U 값의 비트들을 시프트시키기 위한 U 시프터(440), 상기 V 값의 비트들을 시프트시키기 위한 V 시프터(460), 및 상기 R 값의 비트들을 시프트시키기 위한 R 시프터(480)를 포함한다.
몫 생성 블럭(500)은 상기 다수의 제어 신호들 중 제2 제어 신호에 응답하여, 상기 다수의 시프터들(420, 440, 460, 및 480) 중 일부로부터 출력된 값들에 대한 mod2m의 몫(q)을 계산할 수 있다. 이때, 상기 m은 2 이상의 자연수이다.
연산 블럭(600)은 상기 다수의 제어 신호들 중 적어도 하나의 제3 제어 신호에 응답하여, 몫(q)을 이용하여 다수의 시프터들(420, 440, 460, 및 480) 각각의 상기 출력 값의 업데이트 값을 계산할 수 있다.
또한, 연산 블럭(600)은 상기 다수의 시프터들(420, 440, 460, 및 480)의 출력 값들 중 적어도 하나에 대한 모듈러 리덕션(modular reduction)을 수행할 수 있다. 즉, 연산 블럭(600)은 S 시프터(420)의 출력 값 및 R 시프터(480)의 출력 값에 대한 모듈러 리덕션을 수행할 수 있다.
도 2는 도 1에 도시된 몫 생성 블럭을 도시한다.
도 2를 참조하면, 몫 생성 블럭(500)은 역원 계산기(520) 및 몫 생성기(540)를 포함할 수 있다.
역원 계산기(520)는 상기 다수의 제어 신호들 중 제2 제어 신호에 응답하여, 다수의 시프터들(420, 440, 460, 및 480) 중 일부로부터 출력된 값들에 대한 mod2m의 역원을 계산할 수 있다. 즉, 역원 계산기(520)는 상기 제2 제어 신호에 응답하여, U 시프터(440)의 출력 값의 역원 또는 V 시프터(460)의 출력 값의 역원을 계산할 수 있다. 상기 제2 제어 신호에 따라, 역원 계산기(520)는 상기 U의 역원(U-1)을 구하거나, 상기 V의 역원(V-1)을 구할 수 있다.
몫 생성기(540)는 상기 mod2m에 대한 상기 역원을 이용하여, 몫(q)을 계산할 수 있다.
도 3은 도 1에 도시된 몽고메리 역원 계산 장치의 다른 실시예를 도시한다.
도 3을 참조하면, 몽고메리 역원 계산 장치(10')는 다수의 선택기들(720, 740, 760, 및 780)을 더 포함할 수 있다.
다수의 선택기들(720, 740, 760, 및 780) 각각은 비교기(300)가 발생하는 다수의 제어 신호들 중 적어도 하나의 제4 제어 신호에 응답하여, 다수의 시프터들(420, 440, 460, 및 480) 중 대응되는 시프터의 출력 값 또는 연산 블럭(600)의 출력 값을 다수의 레지스터들(120, 140, 160, 및 180) 중 대응되는 레지스터로 출력할 수 있다.
다수의 선택기들(720, 740, 760, 및 780)은 S 선택기(720), U 선택기(740), V 선택기(760), 및 R 선택기(780)를 포함한다.
S 선택기(720)는 상기 적어도 하나의 제4 제어 신호에 응답하여, 상기 S의 업데이트 값을 S 레지스터(120)로 출력한다. 즉, S 선택기(720)는 S 시프터(420)의 출력 값 또는 연산 블럭(600)의 출력 값을 S 레지스터(120)로 출력할 수 있다.
U 선택기(740)는 상기 적어도 하나의 제4 제어 신호에 응답하여, 상기 U의 업데이트 값을 U 레지스터(140)로 출력한다. 즉, U 선택기(740)는 U 시프터(440)의 출력 값 또는 연산 블럭(600)의 출력 값을 U 레지스터(140)로 출력할 수 있다.
V 선택기(760)는 상기 적어도 하나의 제4 제어 신호에 응답하여, 상기 V의 업데이트 값을 V 레지스터(160)로 출력한다. 즉, V 선택기(760)는 V 시프터(460)의 출력 값 또는 연산 블럭(600)의 출력 값을 V 레지스터(160)로 출력할 수 있다.
R 선택기(780)는 상기 적어도 하나의 제4 제어 신호에 응답하여, 상기 R의 업데이트 값을 R 레지스터(180)로 출력한다. 즉, R 선택기(780)는 R 시프터(480)의 출력 값 또는 연산 블럭(600)의 출력 값을 R 레지스터(120)로 출력할 수 있다. 상기 적어도 하나의 제4 제어 신호는 상기 다수의 선택기들(720, 740, 760, 및 780) 각각이 출력하여야 하는 출력 값에 관한 정보를 포함한다.
도 4는 도 1 또는 도 3에 도시된 몽고메리 역원 계산 장치를 이용한 몽고메리 역원 계산 방법에 관한 흐름도이다.
도 1 내지 도 4를 참조하면, 상기 몽고메리 역원 계산 방법은, 몽고메리 역원 계산 과정에서 사용되는 다수의 변수들(U, V, R, 및 S) 각각의 변수 값이 다수의 레지스터들(120, 140, 160, 및 180) 중 대응되는 레지스터에 저장되고, 모듈러스(P)가 모듈러스 레지스터(190)에 저장되는 단계(S100), 몽고메리 역원 계산 장치(10)를 이용하여 임의의 정수 k에 대한 A의 역원(
Figure 112011007750500-pat00006
)을 계산하는 단계(S200), 및 몽고메리 역원 계산 장치(10)를 이용하여 상기 역원의 지수로 사용되는 상기 임의의 정수 k를 보정하여 상기 A의 몽고메리 역원(
Figure 112011007750500-pat00007
)을 계산하는 단계(S300)를 포함한다.
이때, 상기 A는 임의의 정수이고, 상기 P는 홀수이고, 상기 A와 상기 P는 서로소이다. 상기 k는 상기 임의의 정수 k에 대한 A의 역원을 계산하는 단계(S200)에서 계산이 진행중인 비트이다. 상기 n은 2진수로 표현된 상기 P의 비트수이다. 또한, 상기 임의의 정수 k에 대한 A의 역원을 계산하는 단계(S200)는 다중 비트(m) 연산을 통해서 역원을 계산할 수 있다.
실시예에 따라, 상기 P는 소수(prime number)가 될 수 있다. 이 경우, 본 발명에 따른 몽고메리 역원 계산 장치 및 몽고메리 역원 계산 방법은 타원 곡선 암호 시트템(elliptic curve cryptosystem)에 사용될 수 있다.
또한, 실시예에 따라 상기 P는 두 소수(prime number)들의 곱이 될 수 있다. 이 경우, 본 발명에 따른 몽고메리 역원 계산 장치 및 몽고메리 역원 계산 방법은 RSA(Rivest Shamir Adleman) 암호 시스템에 사용될 수 있다. 이때, 두 소수들 각각은 비밀 정보에 해당한다.
상기 저장되는 단계(S100)에서, 상기 U의 값은 상기 P로 저장되고, 상기 V의 값은 상기 A로 저장되고, 상기 R의 값은 0으로 저장되고, 상기 S의 값은 1로 저장된다.
상기 임의의 정수 k에 대한 A의 역원을 계산하는 단계(S200)는 상기 U의 값이 2m으로 나누어 떨어지는 경우, U 레지스터(140)에 저장된 상기 U의 값을 상기 2m으로 나눈 값으로 업데이트하고, 상기 S 레지스터(120)에 저장된 상기 S의 값을 상기 2m을 곱한 값으로 업데이트하고, 상기 k의 값을 m만큼 증가시킨다.
상기 U의 값이 2m으로 나누어 떨어지지 않고 상기 V의 값이 2m으로 나누어 떨어지는 경우, 상기 V 레지스터(160)에 저장된 상기 V의 값은 상기 2m으로 나눈 값으로 업데이트되고, 상기 R 레지스터(180)에 저장된 상기 R의 값은 상기 2m을 곱한 값으로 업데이트되고, 상기 k의 값을 m만큼 증가된다.
상기 U의 값이 2m으로 나누어 떨어지지 않고 상기 V의 값이 2m으로 나누어 떨어지지 않는 경우, 비교기(300)는 상기 U의 절대값과 상기 V의 절대값의 크기를 비교하고, 비교 결과에 따라 상기 다수의 변수들(U, V, R, 및 S) 각각의 상기 변수 값 및 상기 k의 값이 업데이트된다.
비교 결과, 상기 U의 절대값이 상기 V의 절대값보다 큰 경우, 2진수로 표현된 상기 V의 값의 최하위 비트부터 연속되는 0의 개수에 따라 V 레지스터(160)에 저장된 상기 V의 값, R 레지스터(180)에 저장된 상기 R의 값, 및 상기 k의 값이 업데이트된다.
이후, 몫 생성 블럭(500)에 의해, 상기 U의 LSD(least significant digit)와 상기 V의 LSD(least significant digit)에 관하여 상기 mod 2m에 대한 상기 몫(q)이 계산된다.
U 레지스터(140)에 저장된 상기 U의 값, R 레지스터(180)에 저장된 상기 R의 값, 및 S 레지스터(120)에 저장된 상기 S의 값이 수학식 2에 의해 업데이트된다.
[수학식 2]
U = (U - q*V) / 2m;
R = R + q*S; 및
S = 2m*S
이 후, 연산 블럭(600)을 이용하여, 상기 S의 값 및 상기 R의 값에 대하여 모듈러 리덕션(modular reduction)이 수행된다. 이때, 상기 모듈러 리덕션의 결과는 -2m*P 보다 크고 2m*P 보다 작은 값으로 제한될 수 있다.
상기 임의의 정수 k에 대한 A의 역원을 계산하는 단계(S200)는 상기 U의 절대값 또는 상기 V의 절대값이 1이 될 때까지 반복적으로 수행된다.
상기 U의 값 및 상기 V의 값 각각은 업데이트되는 과정 중에 음의 값이 될 수 있다.
다수의 변수들(U, V, R, 및 S) 각각은 수학식 3을 만족시키면서 업데이트된다.
[수학식 3]
Figure 112011007750500-pat00008
상기 수학식 3으로부터 수학식 4와 같은 두 개의 합동식이 얻어진다. 따라서, 다수의 변수들(U, V, R, 및 S) 각각은 수학식 4를 만족시켜야 한다.
[수학식 4]
Figure 112011007750500-pat00009
Figure 112011007750500-pat00010
비교 결과 상기 V의 절대값이 상기 U의 절대값보다 큰 경우, 2진수로 표현된 상기 U의 값의 최하위 비트부터 연속되는 0의 개수에 따라 U 레지스터(140)에 저장된 상기 U의 값, S 레지스터(120)에 저장된 상기 S의 값, 및 상기 k의 값이 업데이트된다.
이 후, 몫 생성 블럭(500)에 의해, 상기 V의 LSD(least significant digit)와 상기 U의 LSD(least significant digit)에 관하여 상기 mod 2m에 대한 상기 몫(q)이 계산된다.
V 레지스터(160)에 저장된 상기 V의 값, S 레지스터(120)에 저장된 상기 S의 값, 및 R 레지스터(180)에 저장된 상기 R의 값이 수학식 5에 의해 업데이트된다.
[수학식 5]
V = (V - q*U) / 2m;
S = S + q*R; 및
R = 2m*R
결국, 상기 k에 대한 상기 A의 역원(
Figure 112011007750500-pat00011
)은 상기 U의 값 또는 상기 V의 값에 따라 결정된다. 즉, 상기 U의 값이 1인 경우, 상기 k에 대한 상기 A의 역원(
Figure 112011007750500-pat00012
)은 P-R의 값으로 결정된다. 상기 U의 값이 -1인 경우, 상기 k에 대한 상기 A의 역원은 상기 R의 값으로 결정된다. 상기 V의 값이 1인 경우, 상기 k에 대한 상기 A의 역원은 상기 S의 값으로 결정된다. 상기 V의 값이 -1인 경우, 상기 k에 대한 상기 A의 역원은 P-S의 값으로 결정된다.
이하에서는, 몽고메리 역원 알고리즘을 사용하여, 몽고메리 역원 계산 장치 및 몽고메리 역원 계산 방법이 자세히 설명된다. 특히, 이하의 몽고메리 역원 알고리즘은 m의 값이 4인 경우의 알고리즘이다. 그러나, 상기 m의 값은 2보다 큰 자연수일 수 있다.
상기 몽고메리 역원 알고리즘은 제1 알고리즘과 제2 알고리즘을 포함한다.
상기 제1 알고리즘은 임의의 정수(A) 및 모듈러스(P)를 입력받고, 임의의 정수 k에 대한 상기 A의 역원(
Figure 112011007750500-pat00013
)을 계산하기 위한 알고리즘이다.
상기 제2 알고리즘은 상기 역원의 지수로 사용되는 상기 k를 보정하여 상기 A의 몽고메리 역원(
Figure 112011007750500-pat00014
)을 계산하기 위한 알고리즘이다.
상기 제1 알고리즘은 아래와 같다.
[Input]: A, P
[Output]: A-12k mod P
U = P, V = A, R = 0, S = 1, k = 0
1. while ((|U| != 1) && (|V| != 1)) do
2. if ( U%16 == 0 ) then
3. U = U/16; S = S*16; k = k+4;
4. else if ( (V%16) == 0 ) then
5. V = V/16; R = R*16; k = k+4;
6. else if ( |U| > |V| ) then
7. if ( |V|%2 == 1 ) then
8. k = k+4;
9. else if ( |V|%4 == 2 ) then
10. V = V/2; R = 2R; k = k+5;
11. else if ( |V|%8 == 4 ) then
12. V = V/4; R = 4R; k = k+6;
13. else if ( |V|%16 == 8 ) then
14. V = V/8; R = 8R; k = k+7;
15. q = QUOT(LSD_U, LSD_V);
16. U = (U - q * V)/16;
17. R = R + q * S;
18. S = 16 * S;
19. else if ( |U| < |V| ) then
20. if ( |U|%2 == 1 ) then
21. k = k+4;
22. else if ( |U|%4 == 2 ) then
23. U = U/2; S = 2S; k = k+5;
24. else if ( |U|%8 == 4 ) then
25. U = U/4; S = 4S; k = k+6;
26. else if ( |U|%16 == 8 ) then
27. U = U/8; S = 8S; k = k+7;
28. q = QUOT(LSD_V, LSD_U);
29. V = (V - q * U)/16;
30. S = S + q * R;
31. R = 16 * R;
32. end if
33. S = S mod P
34. R = R mod P
35. end while
36. if (U == 1) then return (D = P - R) and k
37. else if (U == -1) then return (D = R) and k
38. else if (V == 1) then return (D = S) and k
39. else if (V == -1) then return (D = P - S) and k
상기 A가 7451이고, 상기 P가 7883인 경우, 상기 제1 알고리즘에 의한 계산 과정은 표 1과 같다.
단계 k U S V R q
1 0 7883 1 7451 0 0
2 4 27 16 7451 1 1
3 8 27 17 464 16 1
4 12 27 17 29 256 1
5 16 27 1809 -10 4096 7
6 21 2 5295 -5 2118 1
7 26 1 2356 -1 2356 11
상기 표 1의 제1 단계가 설명된다.
상기 k는 0으로 정의되고, 상기 U의 값은 상기 P로 정의되고, 상기 S의 값은 1로 정의되고, 상기 V의 값은 상기 A로 정의되고, 상기 R의 값은 0으로 정의된다.
즉, U 레지스터(140)에는 상기 P가 저장되고, S 레지스터(120)에는 1이 저장되고, V 레지스터(160)에는 A가 저장되고, R 레지스터(180)에는 0이 저장된다.
또한, 모듈러스 레지스터(190)에는 상기 P가 저장될 수 있다.
이때, 비교기(300)는 제1 내부 카운터를 포함할 수 있다. 이 경우, 상기 k는 상기 제1 내부 카운터에 저장될 수 있다.
상기 표 1의 제2 단계가 설명된다.
상기 제1 알고리즘의 제1행의 조건이 만족된다. 즉, 상기 U의 절대값 및 상기 V의 절대값이 1이 아니다. 따라서, 상기 제1 알고리즘의 제2행 내지 제32행의 과정이 수행된다. 이때, 상기 U의 절대값의 크기 및 상기 V의 절대값의 크기는 비교기(300)에 의해서 비교된다.
상기 제1 알고리즘의 제6행의 조건이 만족된다. 즉, 상기 U의 절대값이 상기 V의 절대값보다 크다. 따라서, 상기 제1 알고리즘의 제7행 내지 제18행의 과정이 수행된다. 이때, 상기 U의 절대값의 크기와 상기 V의 절대값의 크기는 비교기(300)에 의해서 비교된다.
상기 V의 값은 상기 제1 알고리즘의 제7행의 조건을 만족한다. 따라서, 상기 k는 4만큼 증가되어 4가되고, 상기 제1 알고리즘의 제15행 내지 제18행의 과정이 수행된다.
상기 제1 알고리즘의 제15행에 따라, 상기 U의 LSD 및 상기 V의 LSD에 관하여 mod 24에 대한 몫(q)이 계산된다. 상기 몫(q)은 1이다.
상기 제1 알고리즘의 상기 QUOT 함수는 다음과 같은 과정으로 몫을 계산한다. 일예로, 임의의 정수 X와 임의의 정수 Y에 대한 몫, 즉 QUOT(X, Y)를 구하는 과정이 설명된다.
우선 상기 Y에 대한 mod24의 역원(Y-1)이 계산된다. 즉, 몫 생성 블럭(500)은 제2 제어 신호에 응답하여, 상기 Y- 1를 계산한다. 상기 Y- 1를 계산하기 위한 여러 가지 방법들이 이미 공지되어 있다. 상기 Y- 1를 계산하기 위한 여러 가지 방법들 중 대표적인 방법은 O. Arazi와 H. Qi의 논문("On calculating multiplicative inverse modulo 2m", IEEE Trans. Computers, vol.57, no.10, pp.1435-1438, Oct. 2008)에 기재되어 있다.
상기 Y- 1를 이용하여 몫(q = X*Y-1 mod 24)이 계산된다. 즉, 몫 생성 블럭(500)은 상기 몫(q)을 계산할 수 있다.
본 발명은 상기 Y- 1를 계산하는 방법의 종류를 한정하지 않는다.
상기 제1 알고리즘의 제16행 내지 제18행의 과정이 수행된다.
상기 U의 값이 27로 업데이트된다. 즉, 연산 블럭(600)은 적어도 하나의 제3 제어 신호에 응답하여, 상기 U의 업데이트 값을 계산한다. 상기 U의 업데이트 값은 U 레지스터(140)에 저장됨으로써, 상기 U의 값이 업데이트된다.
또한, 상기 R의 값 및 상기 S의 값은 상기와 동일한 과정으로 업데이트된다.
상기 제1 알고리즘의 제33행 및 제34행의 과정이 수행된다.
즉, 상기 S의 값 및 상기 R의 값에 대한 모듈러 리덕션(modular reduction)이 수행된다.
상기 S의 값은 상기 모듈러스(P)보다 작기 때문에, 상기 모듈러 리덕션을 수행하더라도, 상기 S의 값은 변동되지 않는다. 상기 모듈러 리덕션은 연산 블럭(600)에 의해 수행된다. 즉, 비교기(300)는 상기 S의 값과 곱셈기(200)의 출력 값(t*P , t ∈ {-15, -14, ···, 14, 15})을 비교하고, 적어도 하나의 제4 제어 신호를 발생한다. 상기 적어도 하나의 제4 제어 신호는 상기 모듈러 리덕션을 수행하기 위한 상기 t의 값에 관한 정보를 포함한다.
연산 블럭(600)은 상기 적어도 하나의 제4 제어 신호에 응답하여, 상기 모듈러 리덕션을 수행한다. 즉, 연산 블럭(600)은 S - t*P 값을 연산한다. 상기 예에서, 상기 t는 0이다.
상기 모듈러 리덕션의 수행 결과로 얻어진 상기 S의 값은 S 레지스터(120)에 저장됨으로써, 상기 S의 값이 업데이트된다.
또한, 상기 R의 값도 상기와 동일한 과정으로 업데이트된다.
상기 표 1의 제3 단계 내지 제7 단계는 상기 제2 단계와 유사한 과정을 거치는 바, 이에 관한 설명은 생략한다.
상기 제7 단계의 수행 결과, 상기 U의 값은 1이다. 따라서, 상기 제1 알고리즘의 제36행에 따라, 상기
Figure 112011007750500-pat00015
의 값은 P-R로 결정되고, 상기 k는 26이 된다.
상기 제1 알고리즘의 수행 결과가 올바른 결과인지 여부를 확인하기 위해서는 수학식 6이 만족되어야 한다.
[수학식 6]
A*(P-R) = 226 mod 7883
상기 수학식 6의 좌변의 모듈러 곱셈 결과는 수학식 7과 같이 표현된다.
[수학식 7]
7451 * 5527 = 885 mod 7883
상기 수학식 6의 우변의 곱셈 결과는 수학식 8과 같이 표현된다.
[수학식 8]
226 = 885 mod 7883
상기 수학식 7과 상기 수학식 8을 비교하면, 상기 수학식 6이 성립함을 알 수 있다.
상기 제2 알고리즘은 아래와 같다.
[Input]: D = A-12k mod P, k from Phase 1, and n
[Output]: X = A-122n mod P
1. If k < 2n
2. j = 2n - k
3. While j > 0
4. If j = 1 then D = 2D, j = j-1
5. Else D = 4D, j = j -2
6. If D > 3P then D = D - 3P
7. Else if D > 2P then D = D - 2P
8. Else if D > P then D = D - P
9. Else
10. f = (k - 2n) mod 4 // r ∈ {0, 1, 2, 3}
11. e = (k - 2n - r)/4
12. For i = 1 to e
13. q = QUOT (LSD_D, LSD_P)
14. D = (D - qP)/16
15. For i = 1 to f
16. If D%2 == 0 then D = D/2
17. Else D = (D+P)/2
18. Return X = D
상기 제2 알고리즘에서는, 상기 k의 크기에 따라 두 가지 서로 다른 형태의 연산이 수행된다. 상기 제2 알고리즘의 제1행부터 제8행까지의 과정에서는, 2비트 단위씩 상기 D를 구성하는 2의 지수 값을 보정한다.
상기 제2 알고리즘의 제9행부터 제17행까지의 과정에서는, 4비트 단위씩 상기 D를 구성하는 2의 지수 값을 보정한다.
상기 제2 알고리즘을 수행하기 위해, 상기 제1 알고리즘의 결과 값인 상기 D가 U 레지스터(140)에 저장되고, 모듈러스(P)가 V 레지스터(160)에 저장된다.
비교기(300)는 상기 k와 2*n의 크기를 비교한다.
비교 결과, 상기 k가 상기 2*n보다 작은 경우, 상기 제2 알고리즘의 제2행 내지 제8행의 과정이 수행된다.
상기 제2 알고리즘의 제2행의 과정이 수행된다. 즉, 비교기(300)에 포함되고 상기 j의 값을 저장하기 위한 제2 내부 카운터에 2*n - k 의 값이 저장된다.
상기 j의 값이 1보다 큰 경우, 상기 제2 알고리즘의 제4행 내지 제8행의 과정이 반복적으로 수행된다.
상기 j의 값이 1인 경우, U 시프터(440)는 U 레지스터(140)에 저장된 값의 비트를 1 비트만큼 레프트 시프트하고, U 시프터(440)의 출력 값은 U 레지스터(140)에 저장된다. 이에 따라, 상기 U 레지스터(140)에 저장된 값은 업데이트된다. 상기 j의 값은 1만큼 감소된다.
상기 j의 값이 1이 아닌 경우, U 시프터(440)는 U 레지스터(140)에 저장된 값의 비트를 2 비트만큼 레프트 시프트하고, 상기 U 시프터(440)의 출력 값은 U 레지스터(140)에 저장된다. 이에 따라, 상기 U 레지스터(140)에 저장된 값은 업데이트된다. 상기 j의 값은 2만큼 감소된다.
이후, 상기 제2 알고리즘의 제6행 내지 제8행의 과정이 수행된다.
연산 블럭(600)은 U - 3*V 값을 연산한 후, 연산 결과에 기초한 부호 신호(sign signal)를 비교기(300)로 전송한다. 상기 부호 신호는 상기 연산 결과 값의 보호에 관한 정보를 포함한다. 비교기(300)는 상기 부호 신호를 검사하고, 상기 결과 값이 양수이면, U 레지스터(140)에 저장된 값을 상기 결과 값으로 업데이트한다.
상기 연산 결과 값이 음수이면, 연산 블럭(600)은 U - 2*V 값을 연산한 후, 연산 결과에 기초한 부호 신호를 비교기(300)로 전송한다. 비교기(300)는 상기 부호 신호를 검사하고, 상기 결과 값이 양수이면, U 레지스터(140)에 저장된 값을 상기 결과 값으로 업데이트한다.
상기 연산 결과 값이 음수이면, 연산 블럭(600)은 U - V 값을 연산한 후, 연산 결과에 기초한 부호 신호를 비교기(300)로 전송한다. 비교기(300)는 상기 부호 신호를 검사하고, 상기 결과 값이 양수이면, U 레지스터(140)에 저장된 값을 상기 결과 값으로 업데이트한다.
상기 제2 알고리즘의 제10행 내지 제17행의 과정은 상기 k가 상기 2*n보다 작지 않은 경우에 수행된다.
비교기(300)는 f 레지스터 및 e 레지스터를 더 포함할 수 있다.
연산 블럭(600)은 k - 2*n 값을 계산한다. 상기 k - 2*n 값의 하위 2비트는 상기 f 레지스터에 저장되고, 상기 k - 2*n 값의 하위 2비트를 제외한 나머지 비트는 상기 e 레지스터에 저장된다.
U 레지스터(140)에는 상기 D가 저장되고, V 레지스터(160)에는 상기 P가 저장된다.
역원 계산기(520)는 P-1 mod 2k 를 계산한다. 몫 생성기(540)는 역원 계산기(520)의 출력 값을 이용하여 몫(q)를 구한다. 연산 블럭(600)은 (U - q*V)/16을 계산하고, 상기 연산 블럭(600)의 출력 값은 U 레지스터(140)에 저장된다. 이를 통하여 상기 U의 값은 업데이트된다. 상기 과정은 상기 e의 값에 해당하는 횟수만큼 반복 수행된다.
U 레지스터(140)에 저장된 값이 짝수이면, U 시프터(440)는 U 레지스터(140)에 저장된 값을 1 비트만큼 라이트 시프트시키고, U 시프터(440)의 출력 값은 U 레지스터(140)에 저장된다. U 레지스터(140)에 저장된 값이 홀수이면, 연산 블럭(600)은 U 레지스터(140)에 저장된 값에 상기 P를 더한다. 연산 블럭(600)의 출력 값은 U 레지스터(140)에 저장된다. U 시프터(440)는 U 레지스터(140)에 저장된 값을 1비트만큼 라이트 시프트시키고, U 시프터(440)의 출력 값은 U 레지스터(140)에 저장된다. 상기 과정은 상기 f의 값에 해당하는 횟수만큼 반복 수행된다.
또한, 본 발명의 실시예들은 컴퓨터로 읽을 수 있는 기록매체에 컴퓨터가 읽을 수 있는 프로그램으로서 구현하는 것이 가능하다. 컴퓨터가 읽을 수 있는 기록매체는 컴퓨터 시스템에 의해 읽혀질 수 있는 데이터가 저장되는 모든 종류의 기록 장치를 포함한다. 컴퓨터가 읽을 수 있는 기록매체의 예로는 ROM, RAM, CD-ROM, 자기 테이프, 플로피 디스크, 광데이터 저장장치 등이 있다. 또한, 컴퓨터가 읽을 수 있는 기록매체는 네트워크로 연결된 컴퓨터 시스템에 분산되어, 분산방식으로 컴퓨터가 읽을 수 있는 프로그램이 저장되고 실행될 수 있다. 그리고, 본 발명을 구현하기 위한 기능적인(functional) 프로그램, 코드 및 코드 세그먼트들은 본 발명이 속하는 기술분야의 프로그래머들에 의해 용이하게 추론될 수 있다.
본 발명은 도면에 도시된 일 실시 예를 참고로 설명되었으나 이는 예시적인 것에 불과하며, 본 기술 분야의 통상의 지식을 가진 자라면 이로부터 다양한 변형 및 균등한 타 실시 예가 가능하다는 점을 이해할 것이다. 따라서, 본 발명의 진정한 기술적 보호 범위는 첨부된 등록청구범위의 기술적 사상에 의해 정해져야 할 것이다.
10, 10' : 몽고메리 역원 계산 장치 120 : S 레지스터
140 : U 레지스터 160 : V 레지스터
180 : R 레지스터 190 : 모듈러스 레지스터
200 : 곱셈기 300 : 비교기
420 : S 시프터 440 : U 시프터
460 : V 시프터 480 : R 시프터
500 : 몫 생성 블럭 520 : 역원 계산기
540 : 몫 생성기 600 : 연산 블럭

Claims (10)

  1. 각각이 변수 값을 저장하기 위한 다수의 레지스터들;
    모듈러스(P)를 저장하기 위한 모듈러스 레지스터;
    상기 모듈러스(P)에 대한 다중 곱을 수행하기 위한 곱셈기;
    상기 다수의 레지스터들 각각에 저장된 변수 값 및 상기 곱셈기의 출력 값을 비교하여 다수의 제어 신호들을 발생하는 비교기;
    각각이 상기 다수의 제어 신호들 중 적어도 하나의 제1 제어 신호에 응답하여, 상기 다수의 레지스터들 중에서 대응되는 레지스터에 저장된 상기 변수 값의 비트들을 시프트시키기 위한 다수의 시프터들;
    상기 다수의 제어 신호들 중 제2 제어 신호에 응답하여, 상기 다수의 시프터들 중 일부로부터 출력된 값들에 대한 mod2m의 몫(q)을 계산하기 위한 몫 생성 블럭; 및
    상기 다수의 제어 신호들 중 적어도 하나의 제3 제어 신호에 응답하여, 상기 몫(q)을 이용하여 상기 다수의 시프터들 각각의 상기 출력 값의 업데이트 값을 계산하기 위한 연산 블럭을 포함하고,
    상기 m은 2 이상의 자연수인 몽고메리 역원 계산 장치.
  2. 제1항에 있어서, 상기 몫 생성 블럭은,
    상기 제2 제어 신호에 응답하여, 상기 mod2m에 대한 역원을 계산하기 위한 역원 계산기; 및
    상기 mod2m에 대한 상기 역원을 이용하여, 상기 몫(q)을 계산하기 위한 몫 생성기를 포함하는 몽고메리 역원 계산 장치.
  3. 제2항에 있어서, 상기 몽고메리 역원 계산 장치는,
    각각이 상기 다수의 시프터들 중 대응되는 시프터의 출력 값 또는 상기 연산 블럭의 출력 값을 상기 다수의 레지스터들 중 대응되는 레지스터로 출력하기 위한 다수의 선택기들을 더 포함하는 몽고메리 역원 계산 장치.
  4. 몽고메리 역원 계산 장치를 이용한 몽고메리 역원 계산 방법에 있어서,
    다수의 변수들(U, V, R, 및 S) 각각의 변수 값이 다수의 레지스터들 중 대응되는 레지스터에 저장되고, 모듈러스(P)가 모듈러스 레지스터에 저장되는 단계;
    상기 몽고메리 역원 계산 장치를 이용하여 임의의 정수 k에 대한 A의 역원(
    Figure 112017041426133-pat00016
    )을 계산하는 단계; 및
    상기 몽고메리 역원 계산 장치를 이용하여 상기 역원의 지수로 사용되는 상기 임의의 정수 k를 보정하여 상기 A의 몽고메리 역원(
    Figure 112017041426133-pat00017
    )을 계산하는 단계를 포함하고,
    상기 A는 임의의 정수이고, 상기 P는 홀수이고, 상기 A와 상기 P는 서로소이고,
    상기 k는 상기 임의의 정수 k에 대한 상기 A의 역원을 계산하는 단계에서 계산이 진행중인 비트이고,
    상기 n은 2진수로 표현된 상기 P의 비트수이고,
    상기 저장되는 단계는 상기 U의 값을 상기 P로 저장하고, 상기 V의 값을 상기 A로 저장하고, 상기 R의 값을 0으로 저장하고, 상기 S의 값을 1로 저장하고,
    상기 임의의 정수 k에 대한 상기 A의 역원을 계산하는 단계는 다중 비트(m) 연산을 통해서 역원을 계산하고,
    상기 임의의 정수 k에 대한 상기 A의 역원을 계산하는 단계는,
    상기 U의 값이 2m으로 나누어 떨어지는 경우, 상기 U에 대응되는 레지스터에 저장된 상기 U의 값을 상기 2m으로 나눈 값으로 업데이트 하고, 상기 S에 대응되는 레지스터에 저장된 상기 S의 값을 상기 2m을 곱한 값으로 업데이트하고, 상기 k의 값을 m만큼 증가시키는 단계;
    상기 U의 값이 2m으로 나누어 떨어지지 않고 상기 V의 값이 2m으로 나누어 떨어지는 경우, 상기 V에 대응되는 레지스터에 저장된 상기 V의 값을 상기 2m으로 나눈 값으로 업데이트 하고, 상기 R에 대응되는 레지스터에 저장된 상기 R의 값을 상기 2m을 곱한 값으로 업데이트하고, 상기 k의 값을 m만큼 증가시키는 단계;
    상기 U의 값이 2m으로 나누어 떨어지지 않고 상기 V의 값이 2m으로 나누어 떨어지지 않는 경우, 상기 U의 절대값과 상기 V의 절대값의 크기를 비교하고, 비교 결과에 따라 상기 다수의 변수들 각각의 상기 변수 값 및 상기 k의 값을 업데이트 하는 단계; 및
    연산 블럭을 이용하여, 상기 S의 값 및 상기 R의 값에 대하여 모듈러 리덕션(modular reduction)하는 단계를 포함하는 몽고메리 역원 계산 방법.
  5. 삭제
  6. 삭제
  7. 제4항에 있어서, 상기 임의의 정수 k에 대한 상기 A의 역원을 계산하는 단계는,
    상기 U의 절대값 또는 상기 V의 절대값이 1이 될 때까지 반복적으로 수행되는 몽고메리 역원 계산 방법.
  8. 제4항에 있어서, 상기 다수의 변수들 각각의 상기 변수 값 및 상기 k의 값을 업데이트 하는 단계는,
    상기 U의 절대값이 상기 V의 절대값보다 큰 경우, 2진수로 표현된 상기 V의 값의 최하위 비트부터 연속되는 0의 개수에 따라 상기 V에 대응되는 상기 레지스터에 저장된 상기 V의 값, 상기 R에 대응되는 상기 레지스터에 저장된 상기 R의 값, 및 상기 k의 값을 업데이트하는 단계;
    몫 생성 블럭을 이용하여, 상기 U의 LSD(least significant digit)와 상기 V의 LSD(least significant digit)에 관하여 상기 mod 2m에 대한 상기 몫(q)을 구하는 단계; 및
    상기 U에 대응되는 상기 레지스터에 저장된 상기 U의 값, 상기 R에 대응되는 상기 레지스터에 저장된 상기 R의 값, 및 상기 S에 대응되는 상기 레지스터에 저장된 상기 S의 값을 수학식에 의해 업데이트 하는 단계를 포함하고,
    상기 수학식은,
    U = (U - q*V) / 2m;
    R = R + q*S; 및
    S = 2m*S인 몽고메리 역원 계산 방법.
  9. 제8항에 있어서, 상기 다수의 변수들 각각의 상기 변수 값 및 상기 k의 값을 업데이트 하는 단계는,
    상기 V의 절대값이 상기 U의 절대값보다 큰 경우, 2진수로 표현된 상기 U의 값의 최하위 비트부터 연속되는 0의 개수에 따라 상기 U에 대응되는 상기 레지스터에 저장된 상기 U의 값, 상기 S에 대응되는 상기 레지스터에 저장된 상기 S의 값, 및 상기 k의 값을 업데이트하는 단계;
    몫 생성 블럭을 이용하여, 상기 V의 LSD(least significant digit)와 상기 U의 LSD(least significant digit)에 관하여 상기 mod 2m에 대한 상기 몫(q)을 구하는 단계; 및
    상기 V에 대응되는 상기 레지스터에 저장된 상기 V의 값, 상기 S에 대응되는 상기 레지스터에 저장된 상기 S의 값, 및 상기 R에 대응되는 상기 레지스터에 저장된 상기 R의 값을 수학식에 의해 업데이트 하는 단계를 포함하고,
    상기 수학식은,
    V = (V - q*U) / 2m;
    S = S + q*R; 및
    R = 2m*R인 몽고메리 역원 계산 방법.
  10. 제9항에 있어서, 상기 몽고메리 역원 계산 방법은,
    상기 U의 값이 1인 경우, 상기 k에 대한 상기 A의 역원(
    Figure 112011007750500-pat00018
    )을 P-R의 값으로 결정하고,
    상기 U의 값이 -1인 경우, 상기 k에 대한 상기 A의 역원을 상기 R의 값으로 결정하고,
    상기 V의 값이 1인 경우, 상기 k에 대한 상기 A의 역원을 상기 S의 값으로 결정하고,
    상기 V의 값이 -1인 경우, 상기 k에 대한 상기 A의 역원을 P-S의 값으로 결정하는 몽고메리 역원 계산 방법.
KR1020110009584A 2011-01-31 2011-01-31 몽고메리 역원 계산 장치 및 이를 이용한 몽고메리 역원 계산 방법 KR101794807B1 (ko)

Priority Applications (2)

Application Number Priority Date Filing Date Title
KR1020110009584A KR101794807B1 (ko) 2011-01-31 2011-01-31 몽고메리 역원 계산 장치 및 이를 이용한 몽고메리 역원 계산 방법
US13/361,329 US9043377B2 (en) 2011-01-31 2012-01-30 Montgomery inverse calculation device and method of calculating montgomery inverse using the same

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR1020110009584A KR101794807B1 (ko) 2011-01-31 2011-01-31 몽고메리 역원 계산 장치 및 이를 이용한 몽고메리 역원 계산 방법

Publications (2)

Publication Number Publication Date
KR20120088316A KR20120088316A (ko) 2012-08-08
KR101794807B1 true KR101794807B1 (ko) 2017-11-08

Family

ID=46578261

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020110009584A KR101794807B1 (ko) 2011-01-31 2011-01-31 몽고메리 역원 계산 장치 및 이를 이용한 몽고메리 역원 계산 방법

Country Status (2)

Country Link
US (1) US9043377B2 (ko)
KR (1) KR101794807B1 (ko)

Families Citing this family (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
DE102012005427A1 (de) * 2012-03-16 2013-09-19 Giesecke & Devrient Gmbh Verfahren und System zur gesicherten Kommunikation zwischen einen RFID-Tag und einem Lesegerät
KR101321259B1 (ko) * 2013-05-23 2013-10-29 목포대학교산학협력단 몽고메리 역원 알고리즘을 위한 뺄셈 연산 장치 및 그 방법
KR101977873B1 (ko) 2017-08-25 2019-08-28 국방과학연구소 하드웨어 구현된 모듈러 역원 모듈
CN115276960B (zh) * 2022-08-02 2024-03-15 山东大学 一种sm2蒙哥马利域上的快速模逆芯片实现装置及方法
CN116881090B (zh) * 2023-09-06 2024-01-26 北京壁仞科技开发有限公司 计算装置以及控制计算装置中的计算核的能耗的方法

Family Cites Families (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6088453A (en) 1997-01-27 2000-07-11 Kabushiki Kaisha Toshiba Scheme for computing Montgomery division and Montgomery inverse realizing fast implementation
EP0917047B1 (en) * 1997-11-04 2004-10-13 Nippon Telegraph and Telephone Corporation Apparatus for modular inversion for information security
US7050579B1 (en) 2000-03-31 2006-05-23 State Of Oregon Acting By And Through The State Board Of Education On Behalf Of Oregon State University Cryptographic methods and apparatus using word-wise montgomery multiplication
JP2004205870A (ja) 2002-12-26 2004-07-22 Hitachi Ltd 超楕円曲線スカラー倍演算方法及び装置
GB0412084D0 (en) * 2004-05-29 2004-06-30 Univ Belfast "Method of calculating a modular inverse"
US8243919B2 (en) 2007-03-07 2012-08-14 Research In Motion Limited Method and apparatus for performing elliptic curve scalar multiplication in a manner that counters power analysis attacks

Also Published As

Publication number Publication date
US20120197953A1 (en) 2012-08-02
US9043377B2 (en) 2015-05-26
KR20120088316A (ko) 2012-08-08

Similar Documents

Publication Publication Date Title
US6049815A (en) Method and apparatus for finite field multiplication
EP2283417B1 (en) Implementation of arbitrary galois field arithmetic on a programmable processor
KR101794807B1 (ko) 몽고메리 역원 계산 장치 및 이를 이용한 몽고메리 역원 계산 방법
US8862651B2 (en) Method and apparatus for modulus reduction
KR100442218B1 (ko) 몽고메리의 알고리즘을 이용한 멱승 잉여 연산기
US7412474B2 (en) Montgomery modular multiplier using a compressor and multiplication method
US6763366B2 (en) Method for calculating arithmetic inverse over finite fields for use in cryptography
US20010054053A1 (en) Method and apparatus for finite field multiplication
US8527570B1 (en) Low cost and high speed architecture of montgomery multiplier
CN108228135B (zh) 一种运算多种超越函数的装置
Knežević et al. Modular Reduction in GF (2 n) without Pre-computational Phase
Saldamli et al. Spectral modular exponentiation
CN101055516A (zh) 一种实现二进制多项式运算的硬件配置方法及硬件系统
US7068785B2 (en) Table driven method for calculating arithmetic inverse for use in cryptography
RU2401513C2 (ru) Способ формирования и проверки подлинности электронной цифровой подписи, заверяющей электронный документ
US20210064340A1 (en) Arithmetic circuit
US7610519B1 (en) Vector generation for codes through symmetry
Knezevic et al. Modular reduction without precomputational phase
Tian et al. Towards Low Space Complexity Design of Gaussian Normal Basis Multiplication
US20230093203A1 (en) Arithmetic device and method
JP4293665B2 (ja) 剰余乗算装置
KR20090070061A (ko) 다정도 캐리 세이브 가산기를 이용한 듀얼필드상의확장성있는 몽고매리 곱셈기
CN106941356B (zh) 用于可分解的解码器的电路装置和方法
CN116755658A (zh) 一种基于巴雷特约减的模乘器及约减计算方法
JP2558687B2 (ja) 剰余乗算装置

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