KR20100066309A - 소수 판정 방법 - Google Patents

소수 판정 방법 Download PDF

Info

Publication number
KR20100066309A
KR20100066309A KR1020090041380A KR20090041380A KR20100066309A KR 20100066309 A KR20100066309 A KR 20100066309A KR 1020090041380 A KR1020090041380 A KR 1020090041380A KR 20090041380 A KR20090041380 A KR 20090041380A KR 20100066309 A KR20100066309 A KR 20100066309A
Authority
KR
South Korea
Prior art keywords
modular
value
random number
test
prime
Prior art date
Application number
KR1020090041380A
Other languages
English (en)
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 한국전자통신연구원
Publication of KR20100066309A publication Critical patent/KR20100066309A/ko

Links

Images

Classifications

    • 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/58Random or pseudo-random number generators
    • 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/727Modulo N arithmetic, with N being either (2**n)-1,2**n or (2**n)+1, e.g. mod 3, mod 4 or mod 5
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2207/00Indexing scheme relating to methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F2207/72Indexing scheme relating to groups G06F7/72 - G06F7/729
    • G06F2207/7204Prime number generation or prime number testing

Landscapes

  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Computational Mathematics (AREA)
  • Mathematical Analysis (AREA)
  • Mathematical Optimization (AREA)
  • Pure & Applied Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • Computing Systems (AREA)
  • Mathematical Physics (AREA)
  • Test And Diagnosis Of Digital Computers (AREA)

Abstract

본 발명은 소수 판정 방법에 관한 것이다.
이를 위하여 본 발명은 소수 여부를 판정할 난수를 생성하고 생성된 난수보다 작은 수를 선택한 뒤, 모듈라 연산을 통해 제1 모듈라 값을 산출하여 사전에 설정된 제1 설정값과 동일하면 카마이클 수의 오류 존재 여부를 판정하는 카마이클 수 배제 과정을 수행하고, 제1 모듈라 값이 제1 설정값과 상이하면 제2 모듈라 연산을 수행하여 제2 모듈라 값을 산출하며, 제2 모듈라 값이 사전에 설정된 제2 설정값과 동일하거나, 카마이클 수 배제 과정을 통해 산출되는 제3 모듈라 값이 사전에 설정된 제3 설정값과 동일하면, 생성된 난수를 소수로 판정하는 소수 판정 방법을 제공한다.
본 발명에 따르면, RSA 공개키 암호화 방식을 사용하는 스마트 카드나 모바일 단말기 등의 소형 임베디드 시스템에서 소수 판정에 필요한 연산을 최소화하고, 오류 확인을 위한 연산 과정을 예외적인 경우에 한하여만 처리할 수 있어, 고속으로 소수 판정을 수행할 수 있는 효과가 있다.
Figure P1020090041380
소수 판정, 모듈라 연산, RSA, 공개키 암호화 방식

Description

소수 판정 방법{Method for Primality Test}
본 발명은 소수 판정 방법에 관한 것이다. 특히 본 발명은 모바일 TPM(Trusted Platform Module), IC 카드, USIM 등과 같이 RSA 공개키 암호화 방식을 사용하는 소형 시스템에서 RSA용 키의 생성을 위한 소수 판정 기능을 구현함에 있어서, 소수 판정에 필요한 연산 과정을 최소화 및 단순화하여, 고속으로 소수를 판정하는 방법에 관한 것이다.
본 발명은 지식경제부 및 정보통신연구진흥원의 IT성장동력기술개발사업의 일환으로 수행한 연구로부터 도출된 것이다[과제관리번호: 2006-S-041-03, 과제명: 차세대 모바일 단말기의 보안 및 신뢰 서비스를 위한 공통 보안 핵심 모듈 개발].
이동 통신이나 금융 분야의 웹 사이트에서는 송수신되는 데이터의 보안을 위하여 RSA 공개키 암호화 방식을 널리 사용하고 있다.
RSA 공개키 암호화 방식은 2 개의 키 즉, 공개키와 비밀키를 이용하여 데이터의 암호화 및 복호화를 수행하는 방법이다. 즉, 데이터 전송하려는 제1 매체가 데이터를 공개키를 이용하여 암호화한 후 전송하면, 데이터 수신한 제2 매체는 사전에 저장되어 있는 비밀키를 이용하여 암호화된 데이터를 복호화하는 방법이다. 이와 같은 RSA 공개키 암호화 방식에서는 데이터의 복호화를 위하여 사용되는 비밀키가 공개되지 않으므로, 보안성이 강한 특징을 가진다.
RSA 공개키 암호화 방식에서는 정수의 소인수 분해에 대한 계산이 어려운 점을 안전성의 근거로 한다. 즉, 모듈러스(Modulus)인 정수 N이 소수인 두 파라미터 p와 q의 곱으로 이루어졌을 때, 정수 N에 대한 두 소수 p와 q를 구하는 방법이 난해함을 의미한다.
또한, RSA 공개키 암호화 방식에서 사용되는 공개키와 비밀키 역시 두 소수 p와 q의 연산을 통해 산출된다. RSA 공개키 암호화 방식을 사용하기 위한 장치에서는 두 개의 소수를 생성하기 위한 구성 요소가 요구된다.
이와 같이 RSA 공개키 암호화 방식에 사용되는 소수와, 공개키 및 비밀키 등의 시스템용 파라미터는 일반적으로 인증 서버와 같은 대형 시스템에서 생성 및 관리되고, 인증 서버에서 분배되는 암호키, 즉 공개키 및 비밀키를 이용하여 주변 기기들 사이의 암호화 및 복호화가 이루어진다.
그러나, 최근에는 스마트 카드나 모바일 단말기와 같은 소형 임베디드 시스템에서도 데이터 보안이 요구되는 각종 서비스를 제공을 위하여 RSA 기능이 요구되고 있으며, 이에 따라, 소수, 공개키 및 비밀키를 생성하는 기능이 요구되고 있다.
일반적으로 인증 서버와 같은 대형 시스템에서는 특정 기능의 추가를 위하여, 별도의 하드웨어 프로세서를 구현하는데 있어서 하드웨어 자원에 대한 제한이 크지 않으므로, 소수 및 암호키 생성 기능을 구현함에 있어서, 포함된 자원을 충분히 활용하여 고속으로 구현하는 것이 가능하다.
그러나, 스마트 카드나 모바일 단말기 등의 소형 임베디드 시스템에서는 공급 전원량이나, 공간 등의 하드웨어 자원이 제한되므로, 시스템에 요구되는 기능을 제한된 리소스의 범위 내에서 고속으로 수행하기 위해서는, 해당 기능을 수행함에 있어서 가장 수행 시간이 많이 소요되는 연산에 대한 최적화를 필요로 한다.
소수 생성 기능에 있어서 가장 핵심이 되는 기능은 모듈라 지수승, 곱셈, 나눗셈 등의 수행 시간이 많이 소요되는 연산들이 반복 수행되는 소수 판정 기능이다. 이에 따라, 스마트 카드나 모바일 단말기 등의 소형 임베디드 시스템에서 RSA 공개키 암호화 방식 사용을 위한 소수 생성 기능을 수행함에 있어서, 소수 판정 시간을 최소화하는 방법이 요구된다.
본 발명이 이루고자 하는 기술적 과제는 모바일 TPM(Trusted Platform Module), IC 카드, USIM 등과 같이 RSA 공개키 암호화 방식을 사용하는 소형 임베디드 시스템에서, 공개키 및 비밀키 생성을 위한 소수 판정을 고속으로 하기 위한 소수 판정 방법을 제공하는 것이다.
이를 위하여 본 발명의 실시예에 따른 소수 판정 방법은 (a) 소수 판정의 대상이 되는 난수를 생성하는 단계; (b) 난수보다 작은 수를 선택한 뒤, 선택된 수에 대한 모듈라 연산을 수행하여, 제1 모듈라 값을 산출하는 단계; (c) 제1 모듈라 값을 확인하여 사전에 설정된 제1 설정값과 동일하면 카마이클 수의 오류 존재 여부 를 판정하는 카마이클 수 배제 과정을 수행하며, 제1 모듈라 값이 제1 설정값과 상이하면 제1 모듈라 값을 이용한 제2 모듈라 연산을 수행하여 제2 모듈라 값을 산출하는 단계; 및 (d) 제2 모듈라 값이 사전에 설정된 제2 설정값과 동일하거나, 카마이클 수 배제 과정을 통해 산출되는 제3 모듈라 값이 사전에 설정된 제3 설정값과 동일하면, 난수를 소수로 판정하는 단계를 포함한다.
본 발명에 따르면, RSA 공개키 암호화 방식을 사용하는 스마트 카드나 모바일 단말기 등의 소형 임베디드 시스템에서 소수 생성을 위한 소수 여부 판정을 수행함에 있어서, 밀러-라빈 테스트보다 단순화된 연산 과정을 통해 소수 판정에 필요한 연산을 최소화하며, 페르마 테스트에서의 오류 확인을 위한 연산 과정을 예외적인 경우에 한하여만 처리할 수 있도록 함에 따라, 고속으로 소수 판정을 수행할 수 있는 효과가 있다.
아래에서는 첨부한 도면을 참고로 하여 본 발명의 실시예에 대하여 본 발명이 속하는 기술 분야에서 통상의 지식을 가진 자가 용이하게 실시할 수 있도록 상세히 설명한다. 그러나 본 발명은 여러 가지 상이한 형태로 구현될 수 있으며 여기에서 설명하는 실시예에 한정되지 않는다. 그리고 도면에서 본 발명을 명확하게 설명하기 위해서 설명과 관계없는 부분은 생략하였으며, 명세서 전체를 통하여 유사한 부분에 대해서는 유사한 도면 부호를 붙였다.
명세서 전체에서, 어떤 부분이 어떤 구성요소를 "포함"한다고 할 때, 이는 특별히 반대되는 기재가 없는 한 다른 구성요소를 제외하는 것이 아니라 다른 구성요소를 더 포함할 수 있는 것을 의미한다. 또한, 명세서에 기재된 "…부", "…기", "모듈" 등의 용어는 적어도 하나의 기능이나 동작을 처리하는 단위를 의미하며, 이는 하드웨어나 소프트웨어 또는 하드웨어 및 소프트웨어의 결합으로 구현될 수 있다.
본 발명이 적용되는 RSA 공개키 암호화 방식을 구현하기 위해서는 모듈러스(N), 제1 소수(p), 제2 소수(q), 공개키(e), 비밀키(d)의 다섯 개의 파라미터가 필요하다.
여기서, 모듈러스(N)는 수학식 1과 같이 서로 다른 두 소수의 곱으로 이루어진다.
N = p * q
그리고, 공개키(e)는 수학식 2를 만족한다.
gcd(e, Φ(N)) = 1, 여기서, 1 < e < Φ(N)
여기서, Φ(N)은 오일러 함수이며, 수학식 3에 의하여 산출된다.
Φ(N) = (p - 1) * (q - 1)
이 때, 공개키(e)에 대응되는 비밀키(d)는 모듈라(Φ(N))에 대한 공개키(e)의 역수로 정의된다. 이에 따라, 비밀키(d)는 수학식 4와 같이 정의된다.
d = e-1 mod Φ(N)
여기서, mod는 모듈라 연산자로서, 수학식 4에서는 e-1을 Φ(N)으로 나눈 나머지를 산출하는 연산자이다.
이상과 같이 정의되는 파라미터를 이용하여, 모듈러스(N), 평문(M), 공개키(e)에 대하여 암호문(C)을 산출하는 연산을 RSA 암호화 연산이라고 하며, 수학식 5와 같이 정의된다.
C = Me mod N, 여기서, 0 < M < N
또한, 암호문(C)에 대하여 평문(M)을 구하는 복호화 연산은 비밀키(d)를 이용하여, 수학식 6을 통해 산출할 수 있다.
M = Cd mod N
수학식 5와 수학식 6에 나타난 것처럼, RSA 암호화 방식에서 암호화 연산 및 복호화 연산은 모두 동일한 연산 방식 즉, 모듈라 지수승 연산을 통해 처리 가능하다. 또한, 모듈라 연산은 모듈라 곱셈을 반복하여 수행 가능하며, 모듈라 곱셈 연산은 수학식 7과 같이 정의될 수 있다.
R = A * B mod N
여기서, A는 승수, B는 피승수, R은 결과값을 나타낸다.
수학식 7과 같이 정의되는 모듈라 곱셈 기능을 수행함에 있어서, 소프트웨어로만 기능이 구현되는 경우, 그 수행 시간이 너무 길어지는 문제점을 갖게 된다. 이에 따라서, 일반적으로 RSA 암호화 기능을 구현한 시스템에서는 모듈라 곱셈을 위한 별도의 연산기를 하드웨어로 설계하여 내장하고 있다.
그러나, RSA 공개키 암호화 방식에서 안전성을 보장하기 위하여 1024 비트 이상의 큰 데이터에 대한 암호화가 요구되는 경우가 있다. 이와 같은 요구를 만족시키기 위해서는 모듈라 곱셈기의 하드웨어 크기를 증가시켜야 한다.
따라서, 스마트 카드나 모바일 단말기와 같이 제한된 면적을 갖는 소형 시스템에서는 제한된 자원의 범위 내에서 모듈라 곱셈기를 구현하기 위하여, 전체 데이터에 대한 모듈라 곱셈기를 하나의 하드웨어로 구현하기 보다는, 전체 데이터를 특정 크기의 비트 단위로 나누어 처리하는 모듈라 곱셈기를 설계하고, 모듈라 곱셈기의 동작을 소프트웨어로 제어하여 전체 데이터에 대한 연산을 수행하는 형태로 모듈라 곱셈을 구현한다.
이와 같은 RSA 공개키 암호화 방식을 사용하기 위해서는 제1 소수(p) 및 제2 소수(q)를 생성해야 한다.
소수를 생성하는 방법으로서는 확률적 소수(Probable Prime) 생성 방법과 확정적 소수(Provable Prime) 생성 방법이 사용될 수 있다. 여기서, 확률적 소수 생성 방법과 확정적 소수 생성 방법을 구분하는 핵심은, 적용되는 소수 판정 방법이 확률적 소수 판정 방법인지, 확정적 소수 생성 방법인가 하는 점이다.
확률적 소수 생성 방법(Probalilistic Primality test)은 확률적으로 수수일 가능성이 높은 소수를 생성하는 방법이다. 즉, 확정적으로 소수라고 단언할 수 없으며, 두 개 이상의 소수가 결합된 합성수일 가능성도 포함하고 있는, 확률적 소수를 생성하는 방법이다. 이와 같은 확률적 소수 생성 방법에 사용되는 소수 판정 방법으로는 페르마 테스트와 밀러-라빈 테스트의 두 가지 방법이 일반적으로 사용된다.
확정적 소수 생성 방법(Deterministic Primality test)은 수학적으로 소수일 가능성이 없는 완전한 소수를 생성하는 방법이다.
그러나, 확정적 소수 생성 방법은 기본적인 연산 과정이 확률적 소수 생성 방법에 비해 복잡하며, 소수 판정에 있어서도 많은 연산과 처리 시간을 요구하는 점에서 소형 임베디드 시스템에서 구현하는 것은 비효율적이다.
도 1은 확률적 소수 판정 방법 중 페르마 테스트를 이용한 소수 판정 방법을 설명하기 위한 순서도이다.
소형 임베디드 시스템에서는 임의의 난수(n)를 생성한다. 이 때, 생성되는 임의의 난수(n)는 페르마 테스트를 통해 소수로 판정되면 RSA 공개키 암호화 방식을 위한 제1 소수(p) 및 제2 소수(q)로 사용된다. 즉, 임의의 난수(n)는 소수일 가능성이 있는 수를 생성하는 것이 바람직하며, 이에 따라 홀수가 임의의 난수(n)로 선택되는 것이 바람직하다. 또한, 임의의 난수(n)는 RSA 공개키 암호화 방식에서 사용하고자 하는 소수의 비트 크기의 해당되는 수를 선택하는 것이 바람직하 다(S100).
임의의 난수(n)가 생성되면, 소수 판정 과정을 반복할 횟수(t)를 설정한다. 즉, 소수 판정 과정이 설정된 반복 횟수(t)만큼 성공해야만, 생성된 임의의 난수(n)가 소수로 판정된다. 이에 따라, 반복 횟수(t)가 큰 값을 가질수록 생성된 임의의 난수(n)가 합성수일 확률은 감소된다(S102). 반복 횟수(t)가 설정되면, 실행 횟수(i)를 1로 설정한다(S104).
생성된 임의의 난수(n)에 대한 소수 판정을 위하여, 소형 임베디드 시스템에서는 임의의 난수(n)와 1 사이의 임의의 수(a)를 선택한다. 즉, 선택되는 임의의 수(a)는 '1 < a < n'의 조건을 만족한다(S106).
임의의 수(a)가 선택되면 수학식 8에 정의된 공식에 따른 모듈라 값(r)을 산출한다(S108).
r = an-1 mod n
수학식 8을 통하여 산출된 모듈라 값(r)을 확인한 결과, 모듈라 값(r)이 1이면(S110), 임의의 난수(n)에 대한 소수 판정 성공으로 간주한다. 소수 판정 성공이 확인되면, 실행 횟수(i)와 사전에 설정된 반복 횟수(t)를 비교한다(S112). 비교 결과, 실행 횟수(i)가 사전에 설정된 반복 횟수(t)에 도달한 경우, 즉, 임의의 난수(n)에 대하여, 사전에 설정된 반복 횟수(t)만큼 소수 판정 성공이 이루어진 경우에는, 생성된 임의의 수(n)를 소수로 판정한다(S114).
그러나, S112 단계에서 실행 횟수(i)와 반복 횟수(t)를 비교한 결과, 실행 횟수(i)가 반복 횟수(t)에 도달하지 않았으면, 실행 횟수(i)를 1 증가시킨 뒤, 임의의 난수(n)와 1 사이의 임의의 수(a)를 선택하는 S106 이후의 단계를 반복한다(S116).
여기서, S110 단계에서 수학식 8을 통하여 산출된 모듈라 값(r)을 확인한 결과 모듈라 값(r)이 1이 아니면, 임의의 수(n)를 합성수로 판정하고, 새로운 임의의 난수(n)을 생성하여, S100 이후의 단계를 실행한다.
이와 같은 페르마 테스트를 이용한 소수 생성 방법은 수학식 9와 같은 알고리즘으로 표현될 수 있다.
제1 단계 : 임의의 난수(n) 생성
제2 단계 : 반복 횟수(t) 결정, 실행 횟수(i) = 1
제3 단계 : while i<=t do
제3-1 단계 : 임의의 수(a) 선택, 여기서, 1 < a < n
제3-2 단계 : 모듈라 값(r) = an-1 mod n
제3-3 단계 : 만일 r ≠ 1이면, n을 합성수로 판정하고, 제1 단계로 복귀
제3-4 단계 : i = i + 1
제4 단계 : n은 소수라 판정
이와 같은 페르마 테스트를 이용한 소수 판정 방법에서는 합성수이면서도 페 르마 테스트를 통과하는 카마이클 수(Carmichael Number)가 존재한다는 것이다. 여기서, 카마이클 수는 3개 이상의 소수의 곱으로 이루어지는 수이며, 최소 카마이클 수는 561(=3*11*17)이다. 그러나, 카마이클 수는 매우 적고, 카마이클 수가 선택되어 페르마 테스트를 통과할 확률도 매우 낮아 openSSL 등에서도 소수 판정에 사용할 수 있다.
도 2는 확률적 소수 판정 방법 중 밀러-라빈 테스트를 이용한 소수 판정 방법을 설명하기 위한 순서도이다.
밀러-라빈 테스트는 페르마 테스트가 카마이클 수에 대한 소수 판정을 항상 통과시키는 것을 보완하기 위한 테스트 방법이다. 밀러-라빈 테스트를 이용한 소수 생성을 위하여, 먼저 소형 임베디드 시스템에서는 임의의 난수(n)를 생성한다. 이 때, 생성되는 임의의 난수(n)는 밀러-라빈 테스트를 통해 소수로 판정되면 RSA 공개키 암호화 방식을 위한 제1 소수(p) 및 제2 소수(q)로 사용된다. 즉, 임의의 난수(n)는 소수일 가능성이 있는 수를 생성하는 것이 바람직하며, 이에 따라 홀수가 임의의 난수(n)로 선택되는 것이 바람직하다. 또한, 임의의 난수(n)는 RSA 공개키 암호화 방식에서 사용하고자 하는 소수의 비트 크기의 해당되는 수를 선택하는 것이 바람직하다(S200).
임의의 난수(n)가 생성되면, 소형 임베디드 시스템에서는 두 개의 변수(r, s)를 생성한다. 여기서, 제1 변수(r)와 제2 변수(s) 사이에는 수학식 10과 관계가 성립된다.
n - 1 = r * 2s , 여기서, r은 홀수, s > 0 임
이는 n-1 비트 값 중 최하위 비트부터 연속해서 값이 0인 비트의 개수를 찾아 제2 변수(s)의 값으로 지정하고, 그 비트만큼 쉬프트(Shift)된 값, 즉 (n-1)/2s된 값을 제1 변수(r)로 지정하는 것을 의미한다(S202).
제1 변수(r) 및 제2 변수(s)가 생성되었으면, 소수 판정 과정을 반복할 횟수(t)를 설정한다. 여기서, 소수 판정 과정이 설정된 제1 반복 횟수(t)만큼 성공해야만, 생성된 임의의 난수(n)가 소수로 판정된다. 이에 따라, 제1 반복 횟수(t)가 증가할수록 생성된 임의의 난수(n)가 합성수일 확률은 감소된다(S204). 제1 반복 횟수(t)가 설정되면, 제1 실행 횟수(i)를 1로 설정한다(S206).
생성된 임의의 난수(n)에 대한 소수 판정을 위하여, 소형 임베디드 시스템에서는 임의의 난수(n)와 1 사이의 임의의 수(a)를 선택한다. 즉, 선택되는 임의의 수(a)는 '1 < a < n'의 조건을 만족한다(S208).
임의의 수(a)가 선택되면, 수학식 11에 정의된 공식에 따른 모듈라 값(b)을 산출한다(S210).
b = ar mod n
수학식 11을 통하여 산출된 모듈라 값(b)을 확인하여, 모듈라 값(b)이 '1 mod n'과 동일하면, 즉 'b = 1 mod n'의 관계가 성립되면(S212), 생성된 임의의 난수(n)에 대한 소수 판정 성공으로 간주한다. 소수 판정 성공이 확인되면, 제1 실행 횟수(i)와 사전에 설정된 제1 반복 횟수(t)를 비교한다(S220). 비교 결과, 제1 실행 횟수(i)가 사전에 설정된 제1 반복 횟수(t)에 도달한 경우, 즉, 임의의 난수(n)에 대하여, 사전에 설정된 제1 반복 횟수(t)만큼 소수 판정 성공이 이루어진 경우에는, 생성된 임의의 수(n)를 소수로 판정한다(S230).
그러나, 수학식 11을 통해 산출된 모듈라 값(b)이 'b = 1 mod n'의 관계를 만족시키지 못하면, 카마이클 수를 배제하는 과정을 수행한다. 카마이클 수 배제 과정의 실행을 위하여, 먼저 제2 실행 횟수(j)를 0으로 설정한다. 이 때, 카마이클 수 배제 과정이 반복되는 횟수는 '제2 변수(s)-1'로 설정된다(S240).
제2 실행 횟수(j)가 설정되면, 모듈라 값(b)을 확인하여, 모듈라 값(b)이 '(n-1) mod n'과 동일한지, 즉 'b = (n-1) mod n'의 조건을 만족하는지 여부를 확인한다(S242). 이 때, 'b = (n-1) mod n'의 조건을 만족하는 경우, 생성된 임의의 난수(n)에 대한 소수 판정 성공으로 간주한다.
그러나, S232 단계에서 'b = (n-1) mod n'의 조건을 만족하지 않으면, 'b = b2 mod n'의 연산을 수행한다(S234).
그리고, 제2 실행 횟수(j)가 제2 반복 횟수(s-1)인지 여부를 확인하여(S246), 상이하면 제2 실행 횟수(j)를 1만큼 증가시켜 S242 단계 내지 S246 단계를 반복 수행한다(S248).
제2 실행 횟수(j)가 제2 반복 횟수(s-1)만큼 실행되었으나, 생성된 임의의 난수(n)에 대한 소수 판정이 성공하지 못한 경우에는 임의의 수(n)를 합성수로 판 정하고, 새로운 임의의 수(n)를 생성하여 밀러-라빈 테스트를 수행하는 S200 이후의 단계를 반복하여 수행한다.
이와 같은 밀러-라빈 테스트 과정에서 카마이클 수 배제 과정의 수행하는 이유는 다음과 같다.
제2 변수(s) 길이 만큼의 '0' 값을 갖는 최하위 비트들을 그대로 포함하여 모듈라 연산을 수행하는 경우, 모듈라 연산 과정은 수학적으로는 이전 결과값을 계속 제곱해나가는 과정이 된다. 이를 역으로 생각하면, 페르마 테스트를 통과한 수의 경우에는, 반대로 제2 변수(s) 길이 만큼의 비트를 거슬러 올라가면 제곱근을 찾을 수가 있게 된다.
임의의 수(x)에 대하여, 'x2 mod n = 1'이 될 수 있는 경우는 'x = 1' 이거나, 'x = n-1 = -1'인 경우뿐이다. 이와 같은 점을 고려하면, 시작 값이 1이 아닌 경우에, 페르마 테스트를 통과한 수를 거슬러 올라가는 과정을 통해 'n-1'의 값을 찾을 수 있게 된다.
앞서 언급된 카마이클 수의 오류는 이와 같은 과정에서 'x = 1' 또는 'x = n-1'이 아닌 또 다른 제3의 제곱근을 가지게 되는 오류를 말한다.
따라서, 밀러-라빈 테스트 과정에서는 S230 내지 S238 단계를 거치면서, 이후 제2 변수(s)의 길이만큼의 제곱 연산을 수행하는 동안 'n-1'이 되는 경우가 발생하는지 여부를 확인함으로써, 페르마 테스트 방법에 비하여 소수를 구할 수 있는 확률을 높일 수 있다.
이와 같은 밀러-라빈 테스트를 이용한 소수 판정 방법은 수학식 12와 같은 알고리즘으로 표현될 수 있다.
제1 단계 : 임의의 난수(n) 생성
제2 단계 : 제1 변수(r) 및 제2 변수(s) 생성, 여기서, n-1= r*2s, r은 홀수, s > 0
제3 단계 : 반복 횟수(t) 결정, 실행 횟수(i) = 1
제4 단계 : while i<=t do
제4-1 단계 : 임의의 수(a) 선택, 여기서, 1 < a < n
제4-2 단계 : 모듈라 값(b) = ar mod n
제4-3 단계 : 모듈라 값(b) = 1 mod n 이면, 제4-6 단계로 진행
제4-4 단계 : for j=0 to s-1 do
제4-4-1 단계 : b = (n-1) mod n 이면, 제4-6 단계로 진행
제4-4-2 단계 : b = b2 mod n
제4-5 단계 : n을 합성수로 판정하고, 제1 단계로 복귀
제4-6 단계 : i = i + 1
제5 단계 : n은 소수라 판정
이와 같은 밀러-라빈 테스트를 이용한 소수 판정 방법에서 수학식 12의 제4 단계 내지 제4-3 단계를 1차 테스트 단계라 칭하고, 제4-4 단계 및 제4-5 단계를 2 차 테스트 단계라 칭한다.
그런데, 밀러-라빈 테스트의 2차 테스트 단계는 페르마 테스트의 단점을 보완하는 것 이상의 많은 동작을 수행한다. 즉, 1차 테스트를 통해 산출된 결과값이 '1' 또는 'n-1'이 아닌 경우에는, 모든 경우에 대하여 2차 테스트를 수행하도록 되어 있다.
2차 테스트의 주된 목적은 페르마 테스트의 단점을 보완하는 것이나, 밀러-라빈 테스트의 2차 테스트 단계는 페르마 테스트의 통과 여부와는 상관없이 1차 테스트를 통과하지 못한 모든 경우에 대하여 2차 테스트를 수행하고, 그 결과값이 n-1이 아니면, 합성수임을 판별하도록 되어 있다.
이것은 페르마 테스트를 통과한 수가 실제로 소수가 아님을 판별하는 것이 아니라, 일부 페르마 테스트를 통과하지 못한 수에 대한 판별도 같이 수행하도록 되어 있다.
이와 같은 2차 테스트 과정은 각 제곱 이후에 결과값을 확인하기 위하여, 1차 테스트에서 사용한 모듈라 연산과는 별도로 곱셈 및 나눗셈 연산을 수행한다. 이에 따라, 제2 변수(s)의 값이 큰 경우에 곱셈 및 나눗셈 연산으로 인한 성능 저하가 발생될 수도 있다.
본 발명을 TPM, IC 카드 또는 USIM과 같은 소형 임베디드 시스템에 적용시키는 경우, 1차 테스트에서 사용되는 모듈라 연산은 하드웨어로 구현되어 고속 동작이 가능하나, 2차 테스트 과정은 소프트웨어로 구현되므로, 많은 연산 반복에 의한 CPU에서의 부하로 인하여 수행 시간의 저하가 발생될 수도 있다.
이에 따라, 수학식 12에 정의된 밀러-라빈 테스트를 최소화하여 2차 테스트에 의한 성능 저하를 방지하기 위하여, 수학식 13에 정의된 밀러-라빈 테스트 소수 판정 방법을 사용할 수 있다.
제1 단계 : 임의의 난수(n) 생성
제2 단계 : 제1 변수(r) 및 제2 변수(s) 생성, 여기서, n-1= r*2s, r은 홀수, s > 0
제3 단계 : 반복 횟수(t) 결정, 실행 횟수(i) = 1
제4 단계 : while i<=t do
제4-1 단계 : 임의의 수(a) 선택, 여기서, 1 < a < n
제4-2 단계 : r' = 2s-1, a' = ar' mod n, 여기서, a' = 1이면 제6 단계로 진행
제4-3 단계 : 모듈라 값(b) = a'r mod n
제4-4 단계 : 모듈라 값(b) = 1, 또는 b = n-1이면, 제4-6 단계로 진행
제4-5 단계 : n을 합성수로 판정하고, 제1 단계로 복귀
제4-6 단계 : i = i + 1
제5 단계 : n은 소수라 판정
제6 단계 : for j=0 to s-1 do
제6-1 단계 : b = n-1이면, 제4-6 단계로 진행
제6-2 단계 : b = b2 mod n
제7 단계 : n을 합성수로 판정하고, 제1 단계로 복귀
수학식 13에 제안된 소수 판정 방법에서 제5 단계까지의 과정에 필요한 연산은 오직 모듈라 연산만으로 이루어지므로, 수학식 12에 기재된 밀러-라빈 테스트에 비하여 연산이 단순화된다.
여기서, 제6 단계 내지 제7 단계는 아주 예외적인 경우에만 동작하도록 설정되며, 기본적인 동작은 밀러-라빈 테스트의 2차 테스트 단계와 동일하다.
그러나, 밀러-라빈 테스트의 2차 테스트가 이전 연산과 종속적이며 많은 경우에 대하여 판단 절차를 수행하는 것과 달리, 수학식 13에 제안된 소수 판정 방법에서의 제6 단계 및 제7 단계는 제4-2 단계에서 a'가 1이라고 판단되는 예외적인 경우에만 동작하며, 제6 단계를 실행함에 있어서, 추가적인 모듈라 연산 작업 없이, 소수 판정을 수행할 수 있는 독립적인 과정으로 존재하는 특징이 있다.
여기서, 제3 단계까지의 과정은 밀러-라빈 테스트와 동일하다.
수학식 13에 제안된 소수 판정 방법이 밀러-라빈 테스트와 가장 차이 나는 부분은 제4 단계이다.
먼저, 제4-1 단계에서 임의의 수(a)를 선택하면, 제4-2 단계에서는 제2 단계에서 생성된 제2 변수(s)를 이용하여 새로운 임의의 수(a')를 산출한다. 이 때, a'는 a'= ar' mod n의 관계를 통해 산출된다. 여기서, r'=2s-1의 관계를 갖는다.
a'가 산출되면, a'를 입력으로 하여, 밀러-라빈 테스트의 1차 테스트와 동일 한 방식으로 제4-3 단계의 연산을 수행하고, 제4-4 단계의 판정을 통해 소수 여부를 확인한다.
수학식 13에 제안된 소수 판정 방법은 2차 테스트를 수행하지 않고, 테스트 통과를 확인할 수 있다는 점에서 밀러-라빈 테스트와 가장 큰 차이점을 나타낸다.
즉, 밀러-라빈 테스트는 먼저 지수로 사용되는 제1 변수(r)에 대한 모듈라 연산을 수행한 후, 제2 변수(s) 비트 길이 만큼의 제곱 연산을 반복 수행한다. 그러나, 수학식 13에 제안된 소수 판정 방법에서는 연산 순서를 바꿔, 먼저 제2 변수(s) 비트 길이만큼의 제곱 연산을 수행한 후, 제1 변수(r)에 대한 모듈라 연산을 수행하도록 한다.
이와 같은 경우, 제2 변수(s) 비트 길이만큼의 제곱 연산을 수행하는 절차는 2s-1을 지수로 하는 모듈라 연산으로 대체 가능하게 되므로, 전체 소수 판정 과정에서 필요한 연산은 모듈라 연산 하나만으로도 가능하게 된다.
이와 같은 방법이 가능한 이유는 다음과 같다.
페르마 테스트나 밀러-라빈 테스트는 임의의 수(a)가 어떤 값이냐는 것이 중요한 것이 아니라, 서로 다른 다수의 임의의 수(a)에 대하여 난수(n)가 소수 판정을 통과할 수 있는지 여부가 중요하다.
여기서, 수학식 13에 제안된 소수 판정 방법에서 제4 단계를 모두 수행했다는 것은 두 가지로 해석될 수 있다.
첫번째는 임의의 수(a)에 대하여 페르마 테스트를 통과했다고 할 수 있다. 제4-2 단계 및 제4-3 단계를 살펴보면, 제4-2 단계에서 a'를 구하기 위하여 사용한 지수는 2s-1이며, 제4-3 단계에서 사용한 지수는 r이다. 즉, 제4-2 단계에서 지수 연산이 끝난 결과에 대하여, 제4-3 단계에서 다시 지수 연산을 수행하므로, 제4-2 단계와 제4-3 단계를 하나의 지수 연산으로 생각하면, 전체 지수는 2s-1 * r이 된다. 이 값은 (n-1)/2와 동일하므로, 페르마 테스트라고 생각하면, 지수 연산의 결과가 '1' 또는 'n-1'이 되면 페르마 테스트를 통과한 것으로 판단할 수 있다.
두번째는 a'에 대하여 밀러-라빈 테스트를 통과했다고 할 수 있다. a'에 대하여 제4-3 단계 내지 제4-5 단계를 통과했다는 것은 밀러-라빈 테스트의 1차 테스트를 통과한 것이므로, 제4 단계를 수행했다는 것은 밀러-라빈 테스트를 통과했다고 말할 수 있다.
그런데, 수학식 13에 따른 소수 판정 방법에서 a'에 대하여 1차 테스트를 통과하지 못한 경우, 2차 테스트를 수행하지 않고 바로 난수(n)를 합성수로 판정할 수 있다.
다시 말하면, 앞서 언급된 바와 같이 수학식 13에 제안된 소수 판정 방법은 a'에 대한 밀러-라빈 테스트와 동시에 a에 대한 페르마 테스트를 수행하는 것이라고 판단할 수 있으므로, 제4-3 단계의 모듈라 연산을 수행한 후 산출된 결과값은 a'에 대해서는 밀러-라빈 테스트의 1차 테스트 결과일 뿐이지만, a에 대해서는 페르마 테스트의 결과에 해당된다. 이에 따라서, 임의의 수(a)에 대하여 페르마 테스트를 통과하지 못한 난수(n)는 밀러-라빈 테스트 역시 통과할 수 없으므로, 난 수(n)를 합성수라고 판단할 수 있다.
즉, 결론적으로, a의 페르마 테스트가 성공할 경우에는 a'의 새로운 값에 대해서 밀러-라빈 테스트를 1차 테스트만으로 통과할 수 있게 되고, a의 페르마 테스트가 실패할 경우에는 a'라는 새로운 값에 대한 밀러-라빈 테스트도 통과할 수 없게 된다. 다시 말해서, 난수(n)에 대한 소수 판정이 성공하는 경우는 밀러-라빈 테스트의 1차 테스트를 통과했기 때문이고, 소수 판정이 실패하는 경우는 페르마 테스트를 실패했기 때문이라고 간주할 수 있다.
이와 같은 결과로 인하여 수학식 13에 따른 소수 판정 방법에서 제5 단계까지의 과정만으로 밀러-라빈 테스트와 동일한 확률의 소수 판정이 가능하게 된다.
앞서 기술한 바와 같이, 수학식 13의 소수 판정 방법에서 제5 단계까지의 연산 과정은 지수 연산만으로 이루어지므로, 연산 과정이 최소화되며 단순한 형태로 구현될 수 있다. 또한, 전체 연산 수행 시간 측면에서 보면, 총 연산량이 일반적인 페르마 테스트의 연산량과 거의 동일한 수준이 되므로, 밀러-라빈 테스트에 비하여 단순하며 빠른 연산이 가능해진다.
한편, 수학식 13의 소수 판정 방법에서 제6 단계는 a'를 산출하는 제4-2 단계의 연산 결과가 1이 되는 경우에 수행되는 단계이다. 난수(n)에 대한 소수 판정이 제5 단계까지의 과정을 거친다면, 당연히 소수라고 판정될 수 있으나, 제4-2 단계에서 산출된 a'가 1이 되면, 임의의 수(a)는 밀러-라빈 테스트에 적용시킬 수로써 적합하지 않게 된다. 따라서, a'가 1이 되는 경우에 대한 별도의 판단 과정이 필요하며, 이에 따라, 밀러-라빈 테스트의 2차 테스트 과정과 거의 동일한 제6 단 계가 수행된다.
여기서, a는 다른 임의의 값(x)에 대한 1차 테스트를 통해 a = x' mod n로 정의된 값이라고 가정할 수 있다.
밀러-라빈 테스트 수행 과정에서 보면, 1이 아닌 a에 대해서 제2 변수(s) 길이 만큼의 제곱 과정을 거친 결과가 1로 나왔으므로, 페르마 테스트는 통과했으나 카마이클 수의 오류는 판단되지 않은 상태라고 할 수 있다.
즉, 밀러-라빈 테스트에서 카마이클 수의 오류 판정을 위한 2차 테스트는 일부 페르마 테스트를 통과하지 못하는 수에 대한 판정까지 포함하고 있는 반면, 수학식 13에 따른 소수 판정 방법의 제6 단계는 카마이클 수의 오류가 존재하는지 여부를 판정하기 위한 단계라고 할 수 있다. 이에 따라, 제6 단계를 통과하지 못하면 난수(n)를 합성수로 판단하고, 제6 단계를 통과하게 되면 난수 (n)을 소수로 판단한다.
이와 같은 소수 판정 방법에 있어서, 난수(n)의 소수 여부 판단이 중요할 뿐, 소수 판단을 위하여 사용되는 파라미터 값이 중요한 것이 아니다. 따라서, a = x' mod n인 것으로 가정하면, x의 값에 상관없이 제6 단계에서의 판단 결과만으로 밀러-라빈 테스트를 수행할 수 있다.
즉, 수학식 13에 따른 소수 판정 방법의 제6 단계는 a'를 구하기 위한 모듈라 연산 과정 및 밀러-라빈 테스트의 2차 테스트와 동일한 곱셈 및 나눗셈 연산 과정을 포함한다. 그러나, 수학식 13에 따른 소수 판정 방법의 제6 단계는 밀러-라빈 테스트와는 달리 지수 r에 대한 모듈라 연산을 수행하지 않으며, 제2 변수(s)가 제 1 변수(r)보다 작은 수로 결정되어지므로, 밀러-라빈 테스트보다 빠르게 수행된다.
이와 같이 수학식 13에 따른 소수 판정 방법은 도 3의 순서도로 표현될 수 있다.
도 3은 본 발명의 실시예에 따른 확률적 소수 판정 방법을 설명하기 위한 순서도이다.
소수 판정을 위한 연산이 시작되면, 먼저 소형 임베디드 시스템에서는 임의의 난수(n)를 생성한다. 이 때, 생성되는 임의의 난수(n)는 홀수이며, RSA 공개키 암호화 방식에서 사용하고자 하는 소수의 비트 크기의 해당되는 수를 선택하는 것이 바람직하다(S300).
임의의 난수(n)가 생성되면, 소형 임베디드 시스템에서는 판정 과정에서 사용될 지수에 해당하는 두 개의 변수(r, s)를 생성한다. 여기서, 제1 변수(r)와 제2 변수(s) 사이에는 수학식 10과 관계가 성립된다(S302).
제1 변수(r) 및 제2 변수(s)가 생성되었으면, 소수 판정 과정을 반복할 횟수(t)를 설정한다. 여기서, 소수 판정 과정이 설정된 제1 반복 횟수(t)만큼 성공해야만, 생성된 임의의 난수(n)가 소수로 판정된다. 이에 따라, 제1 반복 횟수(t)가 증가할수록 생성된 임의의 난수(n)가 합성수일 확률은 감소된다. 제1 반복 횟수(t)가 설정되면, 제1 실행 횟수(i)를 1로 초기화한다(S304).
생성된 임의의 난수(n)에 대한 소수 판정을 위하여, 소형 임베디드 시스템에서는 임의의 난수(n)와 1 사이의 임의의 수(a)를 선택한 후(S306), 첫번째 모듈라 연산을 수행하여 제1 모듈라 값(a')을 생성한다. 이 때, 제1 모듈라 값(a')은 a'= ar' mod n의 관계를 통해 산출되며, r'=2s-1의 관계를 갖는다(S308).
a'가 산출되면, 소형 임베디드 시스템에서는 산출된 a'가 1의 값을 갖는지 여부를 확인하여(S310), 1로 확인된 경우에는 예외 경우에 해당되는 판정 단계로 진행하고, 1이 아닌 경우에는 두번째 모듈라 연산을 수행하여 제2 모듈라 값(b)을 생성한다. 이 때, 제2 모듈라 값(b)은 b = a'r mod n의 관계를 통해 산출된다(S312). 그리고, 제2 모듈라 연산을 통해 산출된 제2 모듈라 값(b)을 확인하여, 제2 모듈라 값(b)이 1 또는 n-1인지 여부를 확인한다(S314).
확인 결과, 제2 모듈라 값(b)이 1 또는 n-1이 아님이 확인되면, 새로운 난수(n)를 생성하는 S300 단계 이후의 단계를 반복하여 수행한다. 그러나, 제2 모듈라 값(b)이 1 또는 n-1임이 확인되면, 소수 판정이 성공적으로 이루어진 것으로 판단하고, 제1 실행 횟수(i)가 사전에 설정된 제1 반복 횟수(t)에 도달하였는지 여부를 확인한다(S316).
S316 단계의 판단 결과, 제1 실행 횟수(i)가 사전에 설정된 제1 반복 횟수(t)에 도달하지 않았으면, 실행 횟수(i)를 1 증가시킨 뒤, 임의의 난수(n)와 1 사이의 임의의 수(a)를 선택하는 S306 이후의 단계를 반복한다(S318).
그러나, S316 단계의 판단 결과, 소수 판정이 성공적으로 이루어진 실행 횟수(i)가 사전에 설정된 제1 반복 횟수(t)에 도달한 경우, 즉, 임의의 난수(n)에 대하여, 사전에 설정된 제1 반복 횟수(t)만큼 소수 판정 성공이 이루어진 경우에는, 생성된 임의의 수(n)를 소수로 판정한다(S320).
한편, S310 단계에서 a'가 1로 확인된 경우에는, 예외 경우의 판정 단계 진행을 위하여, 제2 실행 횟수(j)를 0으로 초기화한다.
그리고, 제3 모듈라 값(b)을 a로 설정한다. 이에 따라, b = a의 관계가 성립된다. 이 때, 제3 모듈라 값(b)은 S312 단계에서 산출되는 제2 모듈라 값(b)과는 기호만 동일할 뿐, 상이한 값이다(S330).
제3 모듈라 값(b) 및 제2 실행 횟수(j)가 설정되면, 제3 모듈라 값(b)을 확인하여, 제3 모듈라 값(b)이 'n-1'인지 여부를 확인한다. 제3 모듈라 값(b)이 'n-1'로 확인되면, 소수 판정이 성공적으로 이루어진 것으로 판단하고, 제1 실행 횟수(i)가 사전에 설정된 제1 반복 횟수(t)에 도달하였는지 여부를 확인하는 S316로 진행한다(S332).
그러나, S332 단계에서의 판단 결과, 제3 모듈라 값(b)이 'n-1'이 아닌 경우, 'b = b2 mod n'의 연산을 수행한다(S334).
제3 모듈라 값(b)의 연산이 처리된 후, 제2 실행 횟수(j)가 제2 반복 횟수(s-1)인지 여부를 확인하여(S336), 상이하면 제2 실행 횟수(j)를 1만큼 증가시켜 S332 단계 내지 S336 단계를 반복 수행한다. 그러나, 제2 실행 횟수(j)가 제2 반복 횟수(s-1)만큼 실행되었으나, 생성된 임의의 난수(n)에 대한 소수 판정이 성공하지 못한 경우에는 임의의 수(n)를 합성수로 판정하고, 새로운 임의의 수(n)를 생성하여 S300 이후의 단계를 반복하여 수행한다(S338).
이와 같이 수학식 13에 따른 소수 판정 방법을 이용하면, 적은 면적을 차지 하면서 고속 처리를 요구하는 모바일 TPM, IC 카드, USIM 등의 소형 임베디드 시스템에서 RSA 공개키 암호화 방식의 사용을 위한 암호화 키 생성에 필요한 소수 생성 기능 중 핵심이 되는 소수 판정 과정을 구현함에 있어서, 밀러-라빈 테스트보다 단순화된 연산 과정을 통해 소수 판정에 필요한 연산을 최소화할 수 있으며, 페르마 테스트에서의 오류 확인을 위한 연산 과정을 예외적인 경우에 한하여 독립적으로 처리할 수 있도록 함에 따라, 고속으로 소수 판정을 수행할 수 있다.
이상에서 설명한 본 발명의 실시예는 장치 및 방법을 통해서만 구현이 되는 것은 아니며, 본 발명의 실시예의 구성에 대응하는 기능을 실현하는 프로그램 또는 그 프로그램이 기록된 기록 매체를 통해 구현될 수도 있으며, 이러한 구현은 앞서 설명한 실시예의 기재로부터 본 발명이 속하는 기술분야의 전문가라면 쉽게 구현할 수 있는 것이다.
이상에서 본 발명의 실시예에 대하여 상세하게 설명하였지만 본 발명의 권리범위는 이에 한정되는 것은 아니고 다음의 청구범위에서 정의하고 있는 본 발명의 기본 개념을 이용한 당업자의 여러 변형 및 개량 형태 또한 본 발명의 권리범위에 속하는 것이다.
도 1은 확률적 소수 판정 방법 중 페르마 테스트를 이용한 소수 판정 방법을 설명하기 위한 순서도,
도 2는 확률적 소수 판정 방법 중 밀러-라빈 테스트를 이용한 소수 판정 방법을 설명하기 위한 순서도,
도 3은 본 발명의 실시예에 따른 확률적 소수 판정 방법을 설명하기 위한 순서도이다.

Claims (10)

  1. 소수 판정 방법에 있어서,
    (a) 소수 판정의 대상이 되는 난수를 생성하는 단계;
    (b) 상기 난수보다 작은 수를 선택한 뒤, 상기 선택된 수에 대한 모듈라 연산을 수행하여, 제1 모듈라 값을 산출하는 단계;
    (c) 상기 제1 모듈라 값을 확인하여 사전에 설정된 제1 설정값과 동일하면 카마이클 수의 오류 존재 여부를 판정하는 카마이클 수 배제 과정을 수행하며, 상기 제1 모듈라 값이 상기 제1 설정값과 상이하면 상기 제1 모듈라 값을 이용한 제2 모듈라 연산을 수행하여 제2 모듈라 값을 산출하는 단계; 및
    (d) 상기 제2 모듈라 값이 사전에 설정된 제2 설정값과 동일하거나, 상기 카마이클 수 배제 과정을 통해 산출되는 제3 모듈라 값이 사전에 설정된 제3 설정값과 동일하면, 상기 난수를 소수로 판정하는 단계
    를 포함하는 소수 판정 방법.
  2. 제1항에 있어서,
    상기 단계 (a)와 상기 단계 (b) 사이에,
    상기 난수의 소수 판정을 위한 제1 모듈라 연산 및 제2 모듈라 연산의 파라미터로 사용되는 제1 변수 및 제2 변수를 생성하는 변수 생성 단계
    를 추가로 포함하는 소수 판정 방법.
  3. 제2항에 있어서,
    상기 단계 (b)는,
    a' = ar' mod n (여기서, a'는 제1 모듈라 값, a는 상기 단계 (b)에서 선택된 수, r은 상기 변수 생성 단계에서 생성된 제1 변수, s는 상기 변수 생성 단계에서 생성된 제2 변수, r' = 2s-1, n은 상기 단계 (a)에서 생성된 난수임)
    의 관계를 통하여, 상기 제1 모듈라 값을 산출하는 것을 특징으로 하는 소수 판정 방법.
  4. 제2항에 있어서,
    상기 단계 (c)는,
    상기 제1 모듈라 값을 확인하여, 상기 제1 모듈라 값이 '1'이면 상기 카마이클 수 배제 과정을 수행하고, 상기 제1 모듈라 값이 '1'이 아니면 상기 제1 모듈라 값을 이용하여 제2 모듈라 연산을 수행하는 것을 특징으로 하는 소수 판정 방법.
  5. 제4항에 있어서,
    상기 단계 (c)는,
    b = a'r mod n (여기서, b는 제2 모듈라 값, a'는 제1 모듈라 값, r은 상기 변수 생성 단계에서 생성된 제1 변수, n은 상기 단계 (a)에서 생성된 난수임)
    의 관계를 통하여, 상기 제2 모듈라 값을 산출하는 것을 특징으로 하는 소수 판정 방법.
  6. 제5항에 있어서,
    상기 단계 (d)는,
    상기 제2 모듈라 값이 '1' 또는 'n-1'이 아님이 확인되면 상기 단계 (a) 이후의 과정을 반복하여 수행하고, 상기 제2 모듈라 값이 '1' 또는 'n-1'과 동일함이 확인되면 상기 난수를 소수로 판정하는 것을 특징으로 하는 소수 판정 방법.
  7. 제4항에 있어서,
    상기 단계 (d)는,
    b = b2 mod n (여기서, b는 제3 모듈라 값이며 초기값은 a임, n은 상기 (a) 단계에서 생성된 난수)
    의 관계를 통하여, 상기 제3 모듈라 값을 산출하는 것을 특징으로 하는 소수 판정 방법.
  8. 제7항에 있어서,
    상기 단계 (d)는,
    상기 제3 모듈라 값이 'n-1'과 동일함을 확인하면 상기 난수를 소수로 판정 하고, 상기 제3 모듈라 값이 'n-1'과 상이함을 확인하면 사전에 설정된 횟수만큼 상기 카마이클 수 배제 과정을 반복하여 수행하는 것을 특징으로 하는 소수 판정 방법.
  9. 제6항 또는 제8항에 있어서,
    상기 단계 (d)는,
    상기 제2 모듈라 값이 '1' 또는 'n-1'과 동일하거나, 상기 제3 모듈라 값이 'n-1'과 동일하면, 소수 판정 성공적으로 간주하여 상기 (b) 단계 이후의 과정을 반복하여 수행하고, 상기 소수 판정 성공의 횟수가 사전에 설정된 횟수와 동일해지면, 상기 난수를 소수로 판정하는 것을 특징으로 하는 소수 판정 방법.
  10. 제1항에 있어서,
    상기 단계 (a)는,
    홀수이며, 생성되어야하는 소수의 비트 크기와 동일한 비트 크기의 난수를 상기 소수 판정의 대상이 되는 난수로 생성하는 것을 특징으로 하는 소수 판정 방법.
KR1020090041380A 2008-12-08 2009-05-12 소수 판정 방법 KR20100066309A (ko)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
KR1020080124214 2008-12-08
KR20080124214 2008-12-08

Publications (1)

Publication Number Publication Date
KR20100066309A true KR20100066309A (ko) 2010-06-17

Family

ID=42365422

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020090041380A KR20100066309A (ko) 2008-12-08 2009-05-12 소수 판정 방법

Country Status (1)

Country Link
KR (1) KR20100066309A (ko)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20190081904A (ko) 2017-12-29 2019-07-09 이상지 자연수에 적용가능하며 무조건적이며 결정론 방식을 이용한 소수판별 및 소인수분해 방법

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20190081904A (ko) 2017-12-29 2019-07-09 이상지 자연수에 적용가능하며 무조건적이며 결정론 방식을 이용한 소수판별 및 소인수분해 방법

Similar Documents

Publication Publication Date Title
EP2936731B1 (en) Managed secure computations on encrypted data
Wang et al. Oruta: Privacy-preserving public auditing for shared data in the cloud
Young et al. Kleptography: Using cryptography against cryptography
JP3659178B2 (ja) 分散ディジタル署名作成方法及び装置及び分散ディジタル署名付ディジタル文書作成方法及び装置及び分散ディジタル署名作成プログラム及び分散ディジタル署名作成プログラムを格納した記憶媒体
US7853013B2 (en) Cryptographic method and system for encrypting input data
US10367637B2 (en) Modular exponentiation with transparent side channel attack countermeasures
Kounavis et al. Encrypting the internet
US7903811B2 (en) Cryptographic system and method for encrypting input data
US8379844B2 (en) Methods and apparatus for performing an elliptic curve scalar multiplication operation using splitting
CN110637441A (zh) 应用于数据重复数据删除的加密密钥生成
JP5648177B2 (ja) サイドチャネル攻撃に対する素数生成の保護
Caminata et al. Solving multivariate polynomial systems and an invariant from commutative algebra
Pisa et al. Somewhat homomorphic encryption scheme for arithmetic operations on large integers
EP2119100B1 (en) Methods and apparatus for performing an elliptic curve scalar multiplication operation using splitting
JP2008252299A (ja) 暗号処理システム及び暗号処理方法
JP2010277085A (ja) Rsaアルゴリズムにおける素数生成の保護
EP3503459B1 (en) Device and method for protecting execution of a cryptographic operation
JP2019515353A (ja) 暗号化べき乗アルゴリズムへのセーフ−エラーフォールトインジェクション攻撃に対する対策
Savvides et al. Efficient confidentiality-preserving data analytics over symmetrically encrypted datasets
US8548161B2 (en) Crytographically transforming data text
Kuang et al. A new quantum-safe multivariate polynomial public key digital signature algorithm
WO2016155565A1 (en) Improvements on multivariate digital signature schemes based on hfev- and new applications of multivariate digital signature schemes for white-box encryption
US8014520B2 (en) Exponentiation ladder for cryptography
CN1985458A (zh) 增强的自然蒙哥马利指数掩蔽
KR20100066309A (ko) 소수 판정 방법

Legal Events

Date Code Title Description
A201 Request for examination
E902 Notification of reason for refusal
E601 Decision to refuse application