KR101004269B1 - 암호 보안 의사 랜덤 넘버 생성기 - Google Patents

암호 보안 의사 랜덤 넘버 생성기 Download PDF

Info

Publication number
KR101004269B1
KR101004269B1 KR1020087007124A KR20087007124A KR101004269B1 KR 101004269 B1 KR101004269 B1 KR 101004269B1 KR 1020087007124 A KR1020087007124 A KR 1020087007124A KR 20087007124 A KR20087007124 A KR 20087007124A KR 101004269 B1 KR101004269 B1 KR 101004269B1
Authority
KR
South Korea
Prior art keywords
seed
number generator
internal state
pseudo random
random number
Prior art date
Application number
KR1020087007124A
Other languages
English (en)
Other versions
KR20080041272A (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 퀄컴 인코포레이티드
Publication of KR20080041272A publication Critical patent/KR20080041272A/ko
Application granted granted Critical
Publication of KR101004269B1 publication Critical patent/KR101004269B1/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
    • G06F7/588Random number generators, i.e. based on natural stochastic processes
    • 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
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L9/00Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
    • H04L9/06Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols the encryption apparatus using shift registers or memories for block-wise or stream coding, e.g. DES systems or RC4; Hash functions; Pseudorandom sequence generators
    • H04L9/065Encryption by serially and continuously modifying data stream elements, e.g. stream cipher systems, RC4, SEAL or A5/3
    • H04L9/0656Pseudorandom key sequence combined element-for-element with data sequence, e.g. one-time-pad [OTP] or Vernam's cipher
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L9/00Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
    • H04L9/06Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols the encryption apparatus using shift registers or memories for block-wise or stream coding, e.g. DES systems or RC4; Hash functions; Pseudorandom sequence generators
    • H04L9/065Encryption by serially and continuously modifying data stream elements, e.g. stream cipher systems, RC4, SEAL or A5/3
    • H04L9/0656Pseudorandom key sequence combined element-for-element with data sequence, e.g. one-time-pad [OTP] or Vernam's cipher
    • H04L9/0662Pseudorandom key sequence combined element-for-element with data sequence, e.g. one-time-pad [OTP] or Vernam's cipher with particular pseudorandom sequence generator
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L2209/00Additional information or applications relating to cryptographic mechanisms or cryptographic arrangements for secret or secure communication H04L9/00
    • H04L2209/04Masking or blinding
    • H04L2209/043Masking or blinding of tables, e.g. lookup, substitution or mapping
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L2209/00Additional information or applications relating to cryptographic mechanisms or cryptographic arrangements for secret or secure communication H04L9/00
    • H04L2209/24Key scheduling, i.e. generating round keys or sub-keys for block encryption

Landscapes

  • Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Theoretical Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Mathematical Optimization (AREA)
  • Computational Mathematics (AREA)
  • Signal Processing (AREA)
  • Mathematical Analysis (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Pure & Applied Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • Computer Security & Cryptography (AREA)
  • Storage Device Security (AREA)
  • Executing Machine-Instructions (AREA)
  • Mobile Radio Communication Systems (AREA)
  • Electrotherapy Devices (AREA)
  • Measurement Of The Respiration, Hearing Ability, Form, And Blood Characteristics Of Living Organisms (AREA)

Abstract

암호 보안 의사 랜덤 넘버 생성기가 시드를 제공하는 엔트로피의 하나 이상의 예측 불가능한 소스를 획득하도록 구성된다. 넘버 생성기의 현재 내부 상태는 엔트로피를 누산하기 위해, 현재 내부 상태와 시드의 함수로서 변경된다. 변경된 내부 상태는 내부 상태 및 시드에 대한 비선형 피드백 시프트 레지스터 연산을 사용함으로써 획득될 수도 있다. 그 다음에, 의사 랜덤 넘버가 넘버 생성기의 변경된 내부 상태에 기초하여 생성된다. 엔트로피의 하나 이상의 예측 불가능한 소스는 시드에 조합될 수도 있다. 넘버 생성기의 내부 상태는 하나 이상의 예측 불가능한 소스로부터 획득된 추가적인 시드 및 현재 내부 상태로 지속적으로 변경될 수도 있다. 또한, 넘버 생성기의 내부 상태는 요청 시 호출 애플리케이션으로부터 수신된 새로운 시드로 변경될 수도 있다.
엔트로피, 의사 랜덤 넘버, 시드, 내부 상태

Description

암호 보안 의사 랜덤 넘버 생성기{CRYPTOGRAPHICALLY SECURE PSEUDO-RANDOM NUMBER GENERATOR}
배경
35 U.S.C. §119 하의 우선권 주장
본원은 본원의 양수인에게 양도되고, 본원에 참고로서 병합되는, 2005년 8월 24일 출원된 "Cryptographically Secure Pseudo-Random Number Generator" 라는 제목의 미국 가출원 제 60/711,148 호에 대하여 우선권을 주장한다.
분야
본원은 일반적으로 암호 기법에 관한 것으로, 특히 전자 디바이스에서의 의사 랜덤 넘버의 보안 생성에 관한 것이다.
배경
랜덤 넘버의 생성은 예컨대 암호 사용을 포함하는 다수의 애플리케이션 (예컨대, 암호화 및 무결성 (integrity) 보호를 위해 사용되는 키, 보안 프로토콜을 위해 사용되는 넌스 (nonces) 등) 을 갖는다. 진정한 랜덤 넘버는 평균보다 높은 확률로 예측되는 것이 불가능하다. 실세계에서, 완벽한 랜덤 넘버 소스를 획득하는 것은 굉장히 어려운 일이다.
회로 구성요소로부터의 열잡음과 같은 물리적인 소스는 때때로 매우 양호한 랜덤 출력을 생산한다. 그러나, 물리적인 소스는 외부 간섭에 노출되고, 이는 출력이 상당한 바이어스를 부담하게 할 수 있다. 또한, 물리적인 소스는 새로운 엔트로피 (랜덤성) 를 얼마나 신속하게 제공할 수 있는가에 제한된다. 다수의 애플리케이션은 랜덤 넘버를 위해 장시간 대기할 여유가 없다. 또한, 하드웨어 종속 생성기는 연장된 기간 후 때때로 실패하고 이 경우 매우 불량한 랜덤 넘버를 생산한다.
의사 랜덤 넘버를 생성하기 위해 결정론적 알고리즘을 사용하는 의사 랜덤 넘버 생성기 (pseudo-random number generator; PRNG) 가 종종 채용된다. PRNG는 매우 신속한 속도로 넘버를 생산할 수 있다. 시드 (seed) 라 지칭되는 랜덤 입력이 주어지면, 의사 랜덤 넘버의 매우 긴 시퀀스가 결정론적으로 생성될 수 있다. 이 시드의 지식이 없이는, 랜덤 소스로부터 생성기를 구별하는 것이 매우 어렵거나 불가능하다. 다수의 PRNG가 이용 가능하지만, 대부분이 보안 애플리케이션을 위해 디자인된 것이 아니다. PRNG가 결정론적 알고리즘을 사용하기 때문에, PRNG는 해킹에 노출되고, 따라서 PRNG의 보안을 약화시킨다. 예컨대, 선형 합동 생성기가 PRNG로서 광범위하게 사용되지만, 출력의 짧은 시퀀스가 분석된 후 깨질 수 있다.
암호 애플리케이션은 초기화 벡터, 키, 넌스, 솔트 (salt) 등을 위해 통상 "랜덤" 넘버를 사용한다. 일반적으로, 암호 보안 PRNG (CSPRNG) 는 랜덤 비트의 시퀀스로부터의 그 출력을 구별하는 것이 불가능하도록, 보안 방식으로 예측 불가능한 입력으로 시드된다. 여기서 정의되는 바와 같이, CSPRNG는 노멀 PRNG의 모든 특성을 가지고, 추가로 적어도 2개의 다른 특성을 갖는다. "다음 비트 테 스트 (next bit test) "라고 지칭되는, 이들 특성 중 하나는, 생성기로부터 생성된 m 비트의 시퀀스가 주어지면, 1/2 보다 상당히 더 높은 확률로 (m+1) 번째 비트를 예측할 수 있는 가능한 방법이 존재하지 않는다고 한다. "악성 시드 저항 (malicious seeding resistance) "이라 지칭되는 제 2 특성은, 기간 동안 CSPRNG로의 입력의 전체 또는 일부 제어를 공격자가 획득할 수 있다 하더라도, CSPRNG로부터의 어떤 랜덤 출력도 예측 또는 재생산하는 것이 여전히 불가능하다고 한다.
의사 랜덤 넘버 생성 기법은 CSPRNG에서 상대적으로 간단하다. 예컨대, 카운터 모드 또는 출력 피드백 모드에서 실행하는 블록 암호, 암호 키로서 시드를 사용하는 스트림 암호, 또는 해싱의 네스트된 구조 (nested structure) 일 수 있다. CSPRNG 디자인에서 복잡한 부분은 CSPRNG를 시드 및 리시드 (reseed) 하는 방법이다. 리시드는 이전에 시드되었던 CSPRNG의 순차 논리를 새로운 시드로 갱신하기 위해 사용되는 프로세스이다. 이러한 리시드는 결정론적 넘버 생성 알고리즘을 깨뜨리는 것을 더 어렵게 한다.
FIPS 186-2, ANSI X9.17-1985 부록 C, ANSI X9.31-1998 부록 A.2.4, 및 ANSI X9.62-1998 부록 A.4 와 같은 다수의 표준화된 CSPRNG 디자인이 존재한다. 불행히도, 대부분의 이들 디자인은 일정 상황 하에서는 만족스럽지 못하다. 예컨대, ANSI X9.17 PRNG 의 2개의 디자인 결함이 1998년, 스프링거-베르라그, 제5회 국제 워크샵 회보, "신속한 소프트웨어 암호화 (Fast Software Encryption)" 에서 J.Kelsey 등에 의해 확인되었다.
야로 (Yarrow) 및 포르투나 (Fortuna) 는 잘 알려진 CSPRNG 디자인이다. 1999년 8월, 스프링거-베르라그, 암호 기법에서 선택된 영역에 관한 6회 연간 워크샵의 J.Kelsey, B. Schneier, 및 N.Ferguson 에 의한 "야로-160: 야로 암호 의사 랜덤 넘버 생성기의 디자인 및 분석에 관한 노트 (Yarrow-160: Notes on the Design and Analysis of the Yarrow Cryptographic Pseudorandom Number Generator) ", 및 2003년 Wiley 발행, N.Ferguson 및 B.Schneier 에 의한 "실용적 암호 기법 (Practical Cryptography) " 을 참조하라.
야로 및 포르투나 양자는 엔트로피 누산을 위한 복잡한 기법으로부터의 지원으로 리시드 제어를 갖는다. 포르투나는 가장 신속한 엔트로피 풀 소스가 준비될 때 주기적으로 시스템을 리시드하지만, 야로는 리시드를 위한 엔트로피를 평가하기 위해 구체적인 방법을 특정하지 않는다. 양자는 의사 랜덤 넘버 생성을 위해 카운터 모드에서 블록 암호를 사용하고, 리시드를 위해 해시 알고리즘을 광범위하게 사용한다. 카운터 모드에서의 블록 암호의 사용 및 리시드를 위한 해시 알고리즘의 사용은 계산적으로 고가이고 시간 소모적이다.
따라서, 더 좋고, 덜 복잡하고, 및/또는 더 효율적인 의사 랜덤 넘버 생성기에 대한 필요성이 존재한다.
요약
보안 의사 랜덤 넘버 생성기를 동작시키는 방법이 제공된다. 상기 방법은, (1) 엔트로피의 하나 이상의 예측 불가능한 소스를 획득하여 시드를 제공하는 단계, (2) 넘버 생성기의 현재 내부 상태와 시드의 함수로서 내부 상태를 변경함으로써 넘버 생성기의 내부 상태 내 엔트로피를 누산하는 단계, 및 (3) 넘버 생성기 의 변경된 내부 상태에 기초하여 의사 랜덤 넘버를 생성하는 단계를 포함한다. 변경된 내부 상태는 현재 내부 상태 및 시드에 대한 비선형 피드백 시프트 레지스터 연산을 이용하여 획득될 수도 있다. 엔트로피의 하나 이상의 예측 불가능한 소스가 시드에 조합될 수도 있다.
초기화 시드가 넘버 생성기의 셧다운 시 저장될 수도 있고, 여기서 초기화 시드는 넘버 생성기에 의해 생성된 의사 랜덤 넘버이다. 그 다음에, 넘버 생성기의 스타트업 (startup) 내부 상태가 넘버 생성기의 스타트업 시, 저장된 초기화 시드로 초기화될 수 있다. 초기화 시드는 보안 파일 시스템에 저장된다. 넘버 생성기의 스타트업 내부 상태의 초기화 전에, 초기화 시드의 무결성이 손상되었는지 여부에 대한 판정이 이루어진다. 저장된 초기화 시드의 무결성이 손상된 경우, 대안의 (alternative) 예측 불가능한 소스가 넘버 생성기의 스타트업 내부 상태를 초기화하기 위해 이용된다.
넘버 생성기에 대한 변경된 내부 상태를 획득하고 의사 랜덤 넘버를 생성하기 위해 단일 암호 원시 연산 (single cryptographic primitive operation) 이 사용된다. 단일 암호 원시 연산은 이진 워드 연산, 상수 오프셋 (constant offset) 을 이용한 비트-시프트 연산, 또는 테이블 룩업 중 어느 하나일 수도 있다.
넘버 생성기는 넘버 생성기의 내부 상태를 변화시키기 위해 하나 이상의 예측 불가능한 소스로부터 지속적으로 리시드될 수도 있다. 예측 불가능한 소스는 정량화 가능한 정보를 갖는 물리적인 소스를 포함한다. 또한, 넘버 생성기 는 넘버 생성기에 대한 내부 상태를 변화시키기 위해 호출 애플리케이션으로부터 수신된 새로운 시드로 리시드될 수도 있다.
넘버 생성기의 변경된 내부 상태는, (1) 하나 이상의 상태 레지스터의 현재 컨텐츠와의 배타적 논리합 연산에 의해 넘버 생성기의 하나 이상의 상태 레지스터에 시드를 로드하고, (2) 복수의 상태 레지스터의 비트 시프트된 컨텐츠를 비선형 함수에 공급하여 결과를 획득하고, (3) 그 결과와 하나 이상의 상태 레지스터 중 하나의 상태 레지스터 간에 배타적 논리합 연산을 수행하여 피드백 넘버를 획득하며, (4) 제 1 상태 레지스터로부터 제 2 상태 레지스터로 컨텐츠를 시프트하고 피드백 넘버를 제 3 레지스터에 로드하여 하나 이상의 상태 레지스터를 변경함으로써 획득될 수도 있다.
또 다른 특징은, 리시드 동작 사이에 하나 이상의 상태 레지스터가 시프트되는 횟수의 카운터를 유지하는 것이다. 그 다음에, 하나 이상의 상태 레지스터 중 하나가 카운터에 기초하여 변경된다.
추가적인 특징은, 의사 랜덤 넘버가 생성될 때마다 변화하는 간격 카운터를 유지하는 것이다. 넘버 생성기는, 간격 카운터에 의해 정의된 간격으로만 넘버 생성기의 내부 상태를 변화시키기 위해 하나 이상의 예측 불가능한 소스로부터 리시드된다. 넘버 생성기는 간격 카운터에 의해 정의된 간격으로 시스템 시간을 이용하여 리시드될 수도 있다. 시드는 적어도 128 비트 길이일 수도 있고, 넘버 생성기의 내부 상태는 18 워드 사이즈 레지스터일 수도 있다.
또 다른 실시형태는, (1) 시드를 제공하기 위해, 시드 정보의 하나 이상의 예측 불가능한 소스를 획득하도록 구성된 시드 로더, (2) 넘버 생성기의 내부 상태를 저장하는 복수의 상태 레지스터로서, 시드 로더는 넘버 생성기의 내부 상태를 변경하고 엔트로피를 누산하기 위해, 상태 레지스터의 현재 컨텐츠 및 시드에 기초하여 상태 레지스터를 리시드하는, 상기 복수의 상태 레지스터, 및 (3) 넘버 생성기의 변경된 내부 상태에 기초하여 의사 랜덤 넘버를 생성하도록 구성된 의사 랜덤 넘버 생성기를 포함하는 암호 보안 넘버 생성기를 제공한다. 변경된 내부 상태는 상태 레지스터의 컨텐츠 및 시드에 대한 비선형 피드백 시프트 레지스터 연산을 사용하여 획득된다. 의사 랜덤 넘버 생성기는 또한, (1) 넘버 생성기의 셧다운 시 초기화 시드를 생성하고, (2) 그 초기화 시드를 저장하도록 구성될 수도 있다. 시드 로더는 또한, 넘버 생성기의 재시작 시, 저장된 초기화 시드로 복수의 상태 레지스터를 초기화하도록 구성될 수도 있다. 시드 로더는 또한, 하나 이상의 예측 불가능한 소스로부터 획득된 추가적인 시드로 복수의 상태 레지스터를 지속적으로 변경하도록 구성될 수도 있다. 예측 불가능한 소스는 정량화 가능한 정보를 갖는 물리적인 소스를 포함할 수도 있다.
시드 로더는 또한, 요청 시, 호출 애플리케이션으로부터 수신된 새로운 시드로 복수의 상태 레지스터를 변경할 수도 있다. 단일 암호 원시 연산은 상태 레지스터를 리시드하고 의사 랜덤 넘버를 생성하기 위해 사용될 수도 있다.
또 다른 구현은, (1) 엔트로피의 하나 이상의 예측 불가능한 소스로부터 시드를 획득하고, (2) 현재 내부 상태와 시드의 함수로서 넘버 생성기의 내부 상태를 변경하여, 넘버 생성기 내 엔트로피를 누산하며, (3) 넘버 생성기의 변경된 내부 상태에 기초하여 의사 랜덤 넘버를 생성하도록 구성된 처리 디바이스를 포함하는 처리 회로를 제공한다. 처리 회로는, 넘버 생성기의 내부 상태를 저장하는 하나 이상의 내부 상태 레지스터를 포함하는 메모리 디바이스를 또한 포함할 수도 있다. 처리 회로는 또한, (1) 넘버 생성기의 셧다운 시, 넘버 생성기에 의해 생성된 의사 랜덤 넘버인 초기화 시드를 메모리 디바이스에 저장하고, (2) 초기화 시드의 무결성이 넘버 생성기의 스타트업 내부 상태를 초기화하기 전에 손상되었는지 여부를 판정하며, (3) 넘버 생성기의 스타트업 내부 상태를, (a) 저장된 초기화 시드의 무결성이 손상된 경우, 대안의 예측 불가능한 소스로 리시드하고, (b) 그렇지 않은 경우, 저장된 초기화 시드로 리시드하도록 구성될 수도 있다. 처리 회로는 또한, (1) 시드 정보의 하나 이상의 예측 불가능한 소스로부터 획득된 추가적인 시드로 내부 상태를 지속적으로 변경하고, (2) 요청 시, 호출 애플리케이션으로부터 수신된 새로운 시드로 내부 상태를 변경하도록 구성될 수도 있다.
또 다른 구현은, 프로세서에 의해 실행될 때 프로세서로 하여금, (1) 엔트로피의 하나 이상의 예측 불가능한 소스로부터 시드를 획득하고, (2) 현재 내부 상태와 시드의 함수로서 넘버 생성기의 내부 상태를 변경하여, 넘버 생성기 내 엔트로피를 누산하며, (3) 넘버 생성기의 변경된 내부 상태에 기초하여 의사 랜덤 넘버를 생성하게 하는, 의사 랜덤 넘버를 생성하기 위한 하나 이상의 명령을 갖는 머신 판독가능 매체를 제공한다.
도면의 간단한 설명
도 1은 암호 보안 의사 랜덤 넘버 생성기 (CSPRNG) 를 구현하기 위해 변경될 수도 있는 스트림 암호 NLS를 예시하는 블록도이다.
도 2는 일 구현에 따라, 의사 랜덤 넘버 생성기가 어떻게 개별 함수로서 표현될 수도 있는지를 예시한다.
도 3은 시드 함수의 일 예를 예시하는 블록도이다.
도 4는 시드 함수에 의해 사용되는 상태 레지스터 이니셜라이저의 일 예를 예시하는 블록도이다.
도 5는 일 예에 따라, 넘버 생성기를 시드 및/또는 리시드하기 위해 사용될 수도 있는 시드 로더에 의해 수행되는 함수를 예시하는 블록도이다.
도 6은 NLS 키 스케줄링으로부터 변경된 시드 함수를 실행하기 위한 방법을 예시한다.
도 7은 의사 랜덤 넘버 생성기와 연관된 보안 파일 시스템에 시드를 저장하는 방법을 예시한다.
도 8은 스타트업 시, 의사 랜덤 넘버 생성기를 초기화하기 위해 시드 파일에 저장된 시드를 사용하기 위한 방법을 예시한다.
도 9는 애플리케이션이 어떻게 넘버 생성기를 리시드할 수도 있는지를 예시한다.
도 10은 암호 보안 의사 랜덤 넘버 생성기를 구현하도록 구성된 프로세서 및 저장 매체를 포함하는 컴퓨팅 디바이스를 예시하는 블록도이다.
도 11은 일 구현에 따른 의사 랜덤 넘버 생성기 회로를 예시하는 블록도이다.
상세한 설명
다음 설명에서, 본 실시형태의 완전한 이해를 제공하기 위해 특정 세부사항이 주어진다. 그러나, 실시형태가 이들 특정 세부사항이 없이 실시될 수도 있음이 당업자에 의해 이해될 것이다. 예컨대, 불필요한 세부사항으로 실시형태를 불명료하게 하지 않기 위해, 회로가 블록도로 도시될 수도 있거나, 회로가 도시되지 않을 수도 있다. 다른 경우에, 잘 알려진 회로, 구조, 및 기술이 실시형태를 불명료하게 하지 않기 위해 상세히 도시될 수도 있다.
또한, 실시형태가 플로우 차트, 흐름도, 구조도, 또는 블록도로 묘사되는 프로세스로서 기술될 수도 있음이 주의된다. 플로우 차트가 순차 프로세스로서 동작을 기술하더라도, 다수의 동작이 병렬 또는 동시에 수행될 수 있다. 또한, 동작의 순서는 재배열될 수도 있다. 프로세스는 동작이 완료될 때 종료된다. 프로세스는 방법, 함수, 절차, 서브루틴, 및 서브프로그램 등에 대응할 수도 있다. 프로세스가 함수에 대응할 때, 그 종료는 호출 함수 또는 메인 함수로의 그 함수의 리턴에 대응한다.
또한, 저장 매체는, ROM, RAM, 자기 디스크 저장 매체, 광학 저장 매체, 플래시 메모리 디바이스, 및/또는 정보를 저장하는 다른 머신 판독가능 매체를 포함하는, 데이터를 저장하는 하나 이상의 디바이스를 표현할 수도 있다. 용어 "머신 판독가능 매체"는, 휴대용 또는 고정 저장 디바이스에 제한되지 않으면서, 광학 저장 디바이스, 무선 채널, 및 명령(들) 및/또는 데이터를 저장, 포함, 또는 운반할 수 있는 여러 다른 매체를 포함한다.
또한, 실시형태는 하드웨어, 소프트웨어, 펌웨어, 미들웨어, 마이크로코드, 또는 이들의 조합에 의해 구현될 수도 있다. 소프트웨어, 펌웨어, 미들웨어, 또는 마이크로코드로 구현될 때, 필요한 태스크 (task) 를 수행하기 위한 프로그램 코드 또는 코드 세그먼트는 저장 매체 또는 다른 저장 수단과 같은 머신 판독가능 매체에 저장될 수도 있다. 프로세서는 필요한 태스크를 수행할 수도 있다. 코드 세그먼트는 절차, 함수, 서브프로그램, 프로그램, 루틴, 서브루틴, 모듈, 소프트웨어 패키지, 클래스, 또는 명령, 데이터 구조, 또는 프로그램 문장의 조합을 표현할 수도 있다. 코드 세그먼트는 정보, 데이터, 인수, 파라미터, 또는 메모리 컨텐츠를 패스 및/또는 수신함으로써 다른 코드 세그먼트 또는 하드웨어 회로에 결합될 수도 있다. 정보, 인수, 파라미터, 데이터 등은 메모리 공유, 메시지 패스, 토큰 패스, 및 네트워크 전송을 포함하는 적합한 수단을 통해 여럿 사이에서 패스, 포워드, 또는 전송될 수도 있다.
보안 애플리케이션을 위한 의사 랜덤 시퀀스를 획득하기 위해 넘버 생성기를 리시드하기 위한, 암호 보안 의사 랜덤 넘버 생성기 (CSPRNG) 를 위한 신규한 알고리즘이 일 특징으로서 제공된다. 일 구현에서, 상태 기반 리시드 메카니즘이 상이한 물리적인 소스로부터 엔트로피를 계속 누산하도록, 스트림 암호 비선형 SOBER (NLS) 생성기가 변경된다. (HAWKES, Philip 등의 "원시 명세 NLS (Primitive Specification NLS)" 참조, [온라인], [2006-08-21 에 검색됨], 인터넷 <URL:www.ecrypt.eu.org/stream/ciphers/nls/nls.pdf> 로부터 검색됨). NLS는 간단한 워드 지향 연산에 기초하여 비밀 키를 생성하기 위해 사용되는 동기식 스트 림 암호이다.
또한, 종래 기술과 달리, 이 리시드 기법은 넘버 생성기를 알려진 상태로 재설정하지 않고, 따라서 넘버 생성기를 해킹할 기회를 감소시킨다. 대신, 생성기의 다음 상태는 현재 상태와 새로운 시드의 함수이다.
또한, 시스템이 셧다운하기 전에 생성되고 저장되고, 시스템이 재시작될 때 시스템을 초기화하기 위해 이어서 사용되는, 보안된 시드가 다른 특징으로서 제공된다.
다른 양태는 CSPRNG의 액티브 및 패시브 리시드 양자를 제공한다. 액티브 리시드는 생성기 (CSPRNG) 에 의해 규칙적으로 또는 지속적으로 수행된다. 패시브 리시드는 애플리케이션 자신의 엔트로피를 생성기 (CSPRNG) 에 독립적으로 기부하기 위해 CSPRNG를 인보크 (invoke) 하는 애플리케이션에 의해 수행된다. 새로운 엔트로피는, 현재 상태에 의해 또한 영향을 받는 방식으로 CSPRNG의 순차 논리의 상태를 변화시킨다. 이 신규한 CSPRNG에는 2576 가능한 상태가 존재하므로, 어떠한 애플리케이션도 자신의 엔트로피 기부에 기초하여 다음 상태를 추론할 수 없다.
또 다른 특징은, 의사 랜덤 넘버의 스트림이 대부분의 현재 디자인보다 훨씬 신속하게 생성될 수도 있다는 것이다. 스트림 암호 NLS에서 사용되는 동작은 32 비트 프로세서에 대해 잘 최적화된다. 결과로서, 프로세서 집중적인, 카운터 모드에서 블록 암호를 사용하는 것들 (예컨대, 야로 및 포르투나) 보다, 소프트 웨어 및 내장된 하드웨어에서 랜덤 비트가 훨씬 신속하게 생성된다.
또한, 덜 복잡한 구조가 리시드 및 엔트로피 누산을 위해 제공되고, 따라서 구현 비용 및 프로세서 요구를 감소시킨다. 야로 및 포르투나 양자는 엔트로피를 로컬하게 유지하기 위해 해시 컨텍스트의 다수의 조각을 요구한다. 반대로, 공개된 넘버 생성 기법은 시드 함수를 외부적으로 호출하기 위해 외부 애플리케이션을 위한 인터페이스를 제공한다. 결과로서, 어떤 별도의 로컬 메모리도 엔트로피 누산을 위해 할당될 필요가 없다. 실제로, 일부 실시형태에서, 생성기의 내부 상태를 저장하기 위해 72 바이트만이 필요할 수도 있다. 상태 전이 동안, 엔트로피 입력은 내부 상태 비트의 긴 범위에서 확산된다.
또한, CSPRNG의 일 구현은 비선형 피드백 시프트 레지스터를 사용하여 의사 랜덤 시퀀스를 생성한다. 이 경량의 리시드 메카니즘 및 비선형 내부 구조는 암호 보안을 향상시키고 시스템 효율을 최적화하기 위해 선택된다.
도 1은 암호 보안 의사 랜덤 넘버 생성기 (CSPRNG) 를 구현하기 위해 변경될 수도 있는 스트림 암호 NLS를 예시하는 블록도이다. 스트림 암호 NLS (104) 에서, 비밀 키 (102) 가 스트림 암호 (104) 를 발견될 수 없는 상태로 구성하기 위해 사용된다. 키 스케줄러 (106) 는 스트림 암호 NLS (104) 의 상태 (예컨대, 순차 논리) 를 구성할 수도 있다. 또한, 내부 상태 레지스터 (108) 가 스트림 암호 NLS (104) 에 의해 유지된다. 스트림 암호 NLS (104) 는 128 비트보다 긴 비트를 비밀 키 (102) 에 지원할 수도 있고, 스트림 암호 NLS (104) 를 위한 내부 레지스터 상태 (108) 를 저장하기 위해 18 워드 사이즈 레지스터 (r[0] 내지 r[16], 및 Konst) (108) 를 사용한다. 비밀 키 (102) 및 상태 레지스터 (108) 의 길이는 폭력 공격을 사용하여 스트림 암호 NLS (104) 를 깨뜨리기 위해 시도하는 것을 비현실적이게 한다. 키스트림 생성기 (110) 는 내부 상태 레지스터 (108) 및 비밀 키 (102) 에 기초하여 출력 키스트림 (112) 을 생성한다. 출력 키스트림 (112) 은 평문 데이터 (114) 를 암호문 (116) 으로 암호화하기 위해 사용될 수 있다. NLS는 modulo 2 가산을 사용하여 스트림 암호 출력 (즉, 키스트림) (112) 과 평문 (114) 을 혼합하는 가산 스트림 암호이다.
스트림 암호 NLS (104) 는 보안 애플리케이션에 대해 충분히 튼튼한 넘버 생성기를 구현하기 위하여, 신속한 속도 랜덤 넘버 생성을 위해 약간 변경될 수도 있다. 간단하고, 유효하고, 및/또는 효율적인 시드 및 리시드 메카니즘이 상이한 소스로부터 엔트로피를 수집하고, 낮은 처리 오버헤드로 그리고 보안적으로 랜덤 넘버를 생성하기 위해 구현된다. 넘버 생성기의 다음 상태는 현재 상태와 새로운 시드의 함수이다. 넘버 생성기는 물리적인 소스로부터의 충분한 랜덤 비트로 시스템에 의해 최초 시드된다. 넘버 생성기가 장시간 동안 리시드되지 않더라도, 제 1 시드를 추론하는 것은 128 비트 키 스트림 암호를 깨뜨리는 것만큼 어려운 일이고, 이는 계산적으로 불가능하다. 넘버 생성기의 특징으로서, 출력은 랜덤 비트의 시퀀스로부터 구별 불가능해야 한다. 예컨대, 넘버 생성기의 의사 랜덤 출력은 (r[0] + r[16])
Figure 112008021306958-pct00001
(r[1] + r[13])
Figure 112008021306958-pct00002
(r[6] + Konst) 로서 정의된 넘버 일 수도 있고, 이는 스트림 암호 NLS에 의해 사용된 출력 알고리즘이다. 의사 랜덤 넘버 (들) 는 초기화 벡터, 키, 넌스, 솔트 등으로서 사용될 수도 있다.
본 발명을 예시하는 목적을 위해, 넘버 생성기는 32 비트 동작에 대해 최적화될 수도 있고, 인텔 펜티엄 계열의 CISC (Complex Instruction Set Computer) 프로세서 및 ARM 계열의 RISC (Reduced Instruction Set Computer) 프로세서와 같은 32 비트 프로세서에서 구현될 수 있다. 본원에서, "워드"는 32 비트 스트링이고, "바이트"는 8 비트 스트링이다. 그러나, 공개된 CSPRNG는 상이한 수의 비트로 다른 동작을 위해 구현될 수도 있음이 당업자에게 명백할 것이다.
도 2는 일 구현에 따라, 의사 랜덤 넘버 생성기 (202) 가 어떻게 개별 함수로서 표현될 수도 있는지를 예시한다. 시드 함수 SEED() (204) 는 생성기 (202) 를 구성하기 위해 시드로서 하나 이상의 예측 불가능한 소스 (206) 를 사용한다. 특히, 하나 이상의 예측 불가능한 소스 (206) 는 시드가 생성되는 하나 이상의 상이한 물리적인 소스를 포함할 수도 있다. 일부 구현에서, 각각의 예측 불가능한 소스 (206) 로부터의 정보는 시드 함수 SEED() (204) 에 순차적으로 공급되는 개별 시드로 정량화될 수도 있다. 다른 구현에서, 2 이상의 예측 불가능한 소스 (206) 로부터의 정보가, 시드 함수 SEED() (204) 에 파라미터로서 공급되는 단일 시드로 정량화되고 조합될 수도 있다 (예컨대, 멀티플렉스, XOR 등). 시드 함수 SEED()가 파라미터로서 "시드"로 인보크될 때마다, 넘버 생성기 (202) 의 내부 상태는 내부 상태 레지스터의 시프트를 포함하는 비선형 연산에 의해 갱신된다 (즉, "리시드"된다).
의사 랜덤 시퀀스 생성 함수 RAND() (208) 는 의사 랜덤 출력 (210) 을 획득하기 위해 넘버 생성기 (202) 의 내부 상태를 사용한다. 생성된 의사 랜덤 넘 버 (출력) (210) 는 넌스, 초기화 벡터 등으로서 사용될 수도 있다.
예측 불가능한 소스 (206) 는 정량화 가능한 정보의 상이한 소스로부터 나올수도 있다. 예컨대, 전송 에러, 대역폭 내 잡음 피크, 프로세서의 온도 판독, CDMA 탐색기 등과 같은 물리적인 소스가 시드로의 입력으로서 사용될 수 있다.
입력 소스 (206) 의 일부가 해커에 의해 조작되는 경우에, 하나 이상의 소스로부터 넘버 생성기 (202) 를 지속적이거나 빈번하게 리시드함으로써 해커 공격이 좌절되기가 쉽다. 시드가 예측 불가능한 입력 (206) 으로 지속적이거나 빈번하게 갱신되기 때문에, 해커는 입력 소스 (206) 의 일부를 조작함으로써 새로운 의사 랜덤 출력 (210) 을 예측하기가 더 힘들어진다.
도 3은 시드 함수 (204) 의 일 예를 예시하는 블록도이다. 상태 레지스터 이니셜라이저 (302) (NLS_INITSTATE) 는 넘버 생성기가 처음 시작될 때 넘버 생성기의 상태 레지스터를 초기화한다. 예컨대, 피보나치 수가 상태 레지스터 r[0] 내지 r[16]을 초기화하기 위해 사용된다. Konst 레지스터가 랜덤하게 선택된 넘버 (예컨대 0x6996c53a) 로 또한 초기화된다. 예컨대, 특정 고정된 값이 상호 운용성 목적을 위해 Konst를 위해 사용될 수도 있다. 두번째로, 시드 로더 (304) (NLS_LOADKEY) 가 배타적 논리합 (논리 XOR 연산, "
Figure 112008021306958-pct00003
" 로 표시) 을 사용하여, 시드 (300) 를 상태 레지스터 (r[0] 내지 r[16]) 에 워드 단위로 로드한다. 시드 (300) 의 길이가 워드로서 또한 로드될 수도 있다. 시드 로더 (304) 는 또한, 비선형 피드백 모드에서 상태 레지스터 (r[0] 내지 r[16]) 를 동시에 시프트하고, 이는 시드 (300) 가 어떠한 길이로도 될 수 있도록 허용한다. 세번째로, Konst 생성기 (306) (GENKONST) 는 현재 생성기 상태 및 현재 Konst 값에 기초하여 새로운 Konst 값으로 Konst 레지스터를 갱신한다. 이 Konst 값은 의사 랜덤 출력 (210) 동안 상수로서 사용된다.
도 4는 시드 함수 (204) 에 의해 사용되는 상태 레지스터 이니셜라이저 (302) 의 일 예를 예시하는 블록도이다. 넘버 생성기가 처음 시작될 때, 그 상태 레지스터는 초기화된다. 상태 레지스터 이니셜라이저 (302) 는 피보나치 수 테이블 (402) 을 포함할 수도 있고, 이 테이블 (402) 로 넘버 생성기 상태 레지스터 r[0]...r[16]가 초기화된다. 예컨대, 2 ≤ i ≤ 16 에 대해, rt[0] = rt[1] = 1, 및 rt[i] = rt[i-1] + rt[i-2] 이다. 상수 (404) 는 Konst 레지스터를 초기화하기 위해 사용된다. 상수 (404) 값은 그 비트 시퀀스에 다소의 엔트로피를 바람직하게 갖는 임의의 수일 수도 있다.
도 5는 일 예에 따라 넘버 생성기를 시드 및/또는 리시드하기 위해 사용될 수 있는 시드 로더 (304) 에 의해 수행되는 함수를 예시하는 블록도이다. 시드 로더 (304) 는 시드 입력의 모든 비트가 결과 상태 레지스터의 모든 비트에 영향을 미치는 것을 보장하는 비선형 메카니즘을 포함할 수도 있다. (HAWKES, Philip 등의 "원시 명세 NLS" 참조, [온라인], [2006-08-21 에 검색됨], 인터넷 <URL:www.ecrypt.eu.org/stream/ciphers/nls/nls.pdf> 로부터 검색됨). 인클루더 함수 (501) 는 시드 (514) 의 각각의 워드를 상태 레지스터 r[15] modulo 232에 가산한다. 시드 길이 (바이트 단위) 가 상태 레지스터 r[15]에 또한 가산된다. 디퓨저 함수 (503) 는 i = 0...15 에 대해, rt +1[i] = rt[i+1] 이 되도록, 상태 레지스터 r[0] 내지 r[16] 의 레지스터 시프트 (500) 를 수행한다. 피드백 함수 (502) 는 (rt[0]<<<19) + (rt[15]<<<9) + Konst 로서 그 입력을 획득하고, 여기서 "<<< k" 는 k 비트의 좌측 로테이션을 표시하는 것이다. 피드백 함수 (502) 의 출력은 피드백 컨텐츠 (508) 를 획득하기 위해 rt[4]와 XOR된다 (504). rt+1[4]가 rt +1[4] XOR output(t+1)이면서, 상태 레지스터 rt[16]는 피드백 컨텐츠 (508) 로 설정되고, 여기서 output(t+1) 함수 (208) 는 의사 랜덤 넘버 출력 (210) 이다. 그러나, 시드 로더 (304) 의 일부로서 인보크될 때, output(t+1) (208) 은 넘버 생성기 내부에 보유되고 외부 애플리케이션에 제공되지 않는다.
피드백 함수 (502) 는 4개의 8x8 대입 박스에 기초하여 32 비트 매핑을 수행할 수도 있다.
레지스터 시프터 (500) 의 출력이 싸이클에 빠질 것이라 거의 여겨지지 않지만, 여전히 가능하다. 이러한 싸이클 출력이 발생하는 것을 방지하기 위해, 이전 리시드 동작으로부터 레지스터 시프터 (500) 에 의해 시프트되는 워드의 수의 카운트를 유지하기 위해 카운터 t가 사용될 수도 있다. 카운터 t는 싸이클 출력이 발생하는 것을 방지하기 위해 상태 레지스터에 부가된다. 예컨대, t가 (216 + 1) 의 배수일 때, r[2]는 r[2] + t(modulo 232) 로 설정된다. 다른 구현에서, 카운터 t는 상이한 레지스터 (들) (예컨대, r[0] 와 r[16] 사이) 에 부가될 수도 있고, 및/또는 상이한 동작을 수행함으로써 레지스터 (들) 에 삽입될 수도 있다.
일 구현에서, 시드 (514) 가 인클루더 함수 (501) 를 사용하여 로드되고, 그 다음에 디퓨저 함수 (503) 가 인보크된다. 그 다음에, 시드 길이가 인클루더 함수 (501) 를 사용하여 로드되고, 시드 입력의 모든 비트가 결과 상태 레지스터 r[0]...r[16]의 모든 비트에 비선형 방식으로 영향을 미치는 것을 보장하기 위해 디퓨저 함수 (503) 가 17 회 인보크된다.
도 6은 NLS 키 스케줄링으로부터 변경된 시드 함수를 실행하기 위한 방법을 예시한다. 시드는 하나 이상의 예측 불가능한 소스에 기초하여 획득되고 (602), 시드 함수에 파라미터로서 패스된다. 시드는 다소의 엔트로피를 포함하고 완벽하게 랜덤일 필요는 없는, 임의의 길이의 바이트 스트링으로서 정의된다. 예컨대, 시드를 생성하기 위한 소스는 프로세서 온도, 통신 링크 에러, 채널 내에서 검출된 주파수 피크 등과 같은 물리적인 소스로부터의 측정치를 정량화함으로써 획득될 수도 있다.
시드 함수가 인보크될 때, 생성기 상태 레지스터가 초기화되었는지 여부를 판정하기 위해 state _ initialized 플래그가 체크된다 (604). 종래의 스트림 암호 NLS 알고리즘은 리시드 시 상태 레지스터를 재설정 또는 클리어하고, 따라서 엔트로피를 누산하는데 실패한다. 반대로, 본 변경된 알고리즘은 새로운 시드와 현재 상태 레지스터를 조합함으로써 (예컨대, 상태 레지스터를 클리어하지 않고) 엔트로피를 누산한다. 생성기가 시작된 후 시드 함수가 인보크되는 첫회라면, 내부 상태 레지스터는 초기화되고 (606) (예컨대, r[0] 내지 r[16], Konst 등), state_initialized 플래그가 생성기를 위한 상태 레지스터가 초기화되었음을 표시하기 위해 설정된다 (608). 예컨대, NLS_INITSTATE 함수가 NLS 알고리즘을 위해 미리 정의된 내부 상태 레지스터를 초기화하기 위해 호출될 수도 있다. 그렇지 않다면, 상태 레지스터가 이미 초기화되었다면 (state _ initialized 플래그가 설정됨으로 표시됨), 초기화 단계가 생략된다.
넘버 생성기를 위한 새로운 상태가 현재 상태와 시드의 함수로서 획득되는 NLS_LOADKEY 함수에, 시드가 패스된다 (610). 예컨대, 새로운 상태가 현재 상태와 시드 양자의 함수이도록 시드 및 그 길이가 XOR을 사용하여 상태 레지스터에 로드된다. 결국, 생성기의 이전, 현재, 또는 다음 상태를 추론하기 위해 현재 시드의 지식을 사용하는 것이 가능하지 않다. 시스템은 새롭고, 예측 불가능한 시드로부터의 엔트로피를 넘버 생성기에 지속적으로 가산한다. 또한, 시드 함수는 넘버 생성기를 호출하는 애플리케이션에 의해 인보크될 수도 있다. 이러한 관점에서, 애플리케이션은 랜덤성을 위한 엔트로피를 기부하기 위해 시드 함수를 호출하고, 생성기 상태를 예측 불가능한 방식으로 변화시킨다. 결과로서, 동일한 입력 시드로 리시드하는 것이 상이한 시간에 상이한 출력을 초래한다. 이는, 동일한 시드가 사용되면 언제나 동일한 출력 시퀀스를 생산하는 일반 PRNG와 구별 가능하다. 그 다음에, Konst의 값이 현재 생성기 상태에 기초하여 갱신된다 (612). 예컨대, 변화하는 생성기 상태로부터 새로운 Konst를 획득하기 위해 NLS_GENKONST 함수가 인보크될 수도 있다. Konst는 이전에 예시된 바와 같이 출력을 마스크하기 위해 사용될 수도 있다. 출력 버퍼는 다음 시드를 생성하기 위한 새로운 의사 랜덤 비트를 유지하기 위해 플러시된다 (614).
CSPRNG를 구현하는 것의 편의성을 위해, 시드 및 의사 랜덤 시퀀스 양자는 바이트의 스트링일 수도 있다. 스트림 암호 NLS가 워드 지향이기 때문에, 시드는 SEED()에 의해 0 내지 3 바이트의 0으로 내부적으로 패드 (pad) 된다. 유사하게, 마지막 워드의 0 내지 3 별도의 바이트는 RAND()가 의사 랜덤 시퀀스를 출력 버퍼에 전달하기 전에 폐기된다.
다시 도 2를 참조하면, 구현 동안, 생성기 (202) 를 여러 물리적인 소스로 주기적으로 및/또는 랜덤하게 시드하는 것이 바람직할 수도 있다. CDMA 모바일 전화기에서 이용 가능한 하나의 제안되는 소스는 탐색기로부터의 낮은 차수 에너지 샘플 (low order energy samples) 이다. 탐색기는 랜덤성을 위한 연속적인 소스를 제공하는, 다중 경로 에너지 피크를 획득하기 위해 안테나를 사용한다. 패킷 스트림의 지연 지터와 같은 일부 덜 랜덤한 소스가 통합될 수 있다.
생성기의 랜덤성을 위한 예측 불가능한 물리적인 소스의 도입은 생성기 출력을 예측하는 것에 대한 공격을 좌절시킨다. 하나의 공격 타입에서, 전부가 아닌 일부의 물리적인 소스를 해커가 제어할 수도 있다. 해법으로서, 생성기는 파워 업 동안 모든 소스로 시드된다. 일부 소스가 실 엔트로피를 여전히 제공하므로, 해커는 출력 시퀀스가 생성될 때의 상태를 추정할 방도가 없다. 다른 공격 타입에서, 생성기를 시드하기 위해 사용된 모든 이용 가능한 물리적인 소스를 해커가 제어한다. 이러한 경우에서, RAND() 함수 (208) 를 호출하는 애플리케 이션은 자신이 생성기를 시드함으로써 엔트로피를 획득할 수 있다. 예컨대, 애플리케이션은 소스로서 자신의 예측 불가능한 이벤트 (들) 로 SEED() 함수 (204) 를 호출함으로써 생성기를 시드할 수도 있다.
물리적인 소스의 성질에 따라, 파워 업 동안의 시드 절차는 다소 시간 소모적일 수도 있다. 일 개선은 파워 셧다운 직전 시드 파일을 저장하기 위해 보안 파일 시스템 (Secure File System: SFS) 을 사용하는 것이다. 도 7은 의사 랜덤 넘버 생성기와 연관된 보안 파일 시스템에서 시드를 저장하는 방법을 예시한다. 보안 파일 시스템은 파일 컨텐츠의 비밀성 및 무결성을 보호하기 위해 암호 원시를 사용한다. 디바이스가 턴오프되기 전에, 보안 파일 시스템이 이용 가능하다면 (702), 시스템은 시드로서 128 비트의 스트링을 생성하기 위해 RAND()를 호출한다 (704). 시드는 파일로서 SFS에 저장된다 (706).
도 8은 스타트업 시, 의사 랜덤 넘버 생성기를 초기화하기 위해 시드 파일에 저장된 시드를 사용하기 위한 방법을 예시한다. 예컨대, CDMA 모바일 전화기의 CSPRNG는 스타트업 시 이 시드 파일을 사용하여 초기화될 수도 있다. 디바이스의 파워 업 초기화 시 (802), 시스템은 보안 파일 시스템이 이용 가능한지 여부를 판정한다 (804). 파워 업 동안 SFS가 이용 가능하다면, 시드 파일은 무결성 검증으로 복호화된다 (806). 성공한다면 (808), 컨텐츠가 시드 파일로부터 복원되고 (810), SEED() 함수를 시드하기 위해 사용된다 (812). 시드 파일은 그 컨텐츠가 추출되면 SFS로부터 제거된다. 통상적인 파워 다운 절차가 손상 (compromise) 될 때, 이러한 구성은 동일한 시드가 전화기가 다음 번 파워 업하는 때를 위해 사용되는 것을 방지한다. SFS가 이용 가능하지 않거나, 또는 시드 파일이 무결성 테스트를 실패한 경우, 예측 불가능한 소스가 제 1 시드로서 (예컨대) 128 비트를 제공하기 위해 사용된다 (814).
일 특징에 따라, 애플리케이션은 SEED() 함수를 사용함으로써 그 자신의 엔트로피를 가산할 수 있다. 애플레케이션에 의해 제공된 시드는 완벽하게 랜덤일 필요는 없지만, 일부 새로운 엔트로피를 포함하고 있어야만 한다. 이는 랜덤 넘버 요청에 대한, 예컨대 시스템 시간 또는 CPU 싸이클 카운터와 같은 어떤 종류의 정보일 수 있다. 예측 가능한 데이터로 리시드하는 것은 안전하고, 따라서 애플리케이션이 입력 데이터를 어떤 방식으로도 "트림 (trim)"할 필요가 없다. 예측 가능한 데이터가 엔트로피를 가산하기 위해 사용된다면, 애플리케이션이 해커가 생성기를 손상하는 것을 방지하면서 그 자신의 엔트로피를 가산할 수 있도록, 예측 가능한 데이터는 돌발적으로 또는 불규칙한 리시드 패턴으로 사용될 수도 있다.
도 9는 애플리케이션이 어떻게 넘버 생성기를 리시드할 수도 있는지를 예시한다. 카운터 n 이 이미 초기화되었는지를 결정하기 위해 체크가 수행된다 (902). 초기화되지 않았다면, 카운터 n은 파라미터 N (예컨대, 32) 으로 초기화된다 (904). 그 다음에, 랜덤 넘버 R이 RAND() 함수를 사용하여 생성된다 (906). RAND()가 호출될 때마다, 카운터 n은 1 씩 감소한다 (908). n=0일 때, 넘버 생성기는 입력 소스로서 system _ time을 취하는 SEED() 함수를 사용하여 리시드된다 (912). 카운터 n은 N/2 + (R modulo N/2) 으로 재설정되고, 여기서 R은 애플리케이션이 획득한 최신의 랜덤 넘버이다 (914). 그렇지 않다면, n
Figure 112008021306958-pct00004
0 인 경우 (910), 리시드가 수행되지 않는다. 리시드가 너무 빈번하게 일어난다면, 시스템 시간이 엔트로피 누산에 대해 상당히 충분하게 변화하지 않을 수도 있다. 카운터 n에 따라 리시드를 함으로써, 도 9의 기법은 2개의 리시드 호출 간의 시간이 충분히 길게 되는 것 (즉, RAND() 실행의 N/2 배보다 큰) 을 보장한다. (R modulo N/2) 이 포함되기 때문에, 언제 리시드되는지 예측하기가 더 어렵다.
일 구현에서, 넘버 생성기 (즉, CSPRNG) 는 보호되는 메모리에서 서버 프로세스로서 실행되고, 애플리케이션은 클라이언트 프로세스로부터 랜덤 시퀀스를 리시드 또는 요청한다. 데이터는 인터-프로세스 통신을 사용하여 CSPRNG와 애플리케이션 간에 전달된다. 모든 랜덤 소스를 함께 혼합하기 위해, 모든 애플리케이션에 대해 하나의 CSPRNG 인스턴스를 보유하는 것이 바람직하다. 즉, 넘버 생성기 및 레지스터 상태가 모든 호출 애플리케이션에 대해 사용된다.
시드 함수 SEED() 및 랜덤 출력 함수 RAND()는 원자적이고, 상호 배타적임을 주의해야 한다. 예컨대, 공격자가 시드 함수 SEED() 및 RAND() 함수로부터의 랜덤 시퀀스 출력 양자에 액세스했다고 가정한다. 공격자는 빈약한 엔트로피를 갖는 일부 알려진 값으로 CSPRNG를 시드할 수도 있다. 생성기 (즉, CSPRNG) 가 다른 독립 소스에 의해 또는 SFS 시드 파일로부터 시드되었기 때문에, CSPRNG의 현재 상태를 짐작하는 것이 여전히 불가능하다. 내부 상태가 공개되지 않는 한, RAND() 함수의 출력 시퀀스는 예측 가능하지 않다.
반면에, CSPRNG가 리시드 없이 장시간 동안 실행하고 있는 경우라 할지라도, 어떤 공격의 복잡도도 스트림 암호 NLS를 깨뜨리는 것보다 덜 복잡하지 않을 것이다. 스트림 암호 NLS를 깨뜨리기 위해 소모적인 키 탐색이 요구될 수 있고, 이러한 폭력 탐색은 주어진 현재 키 탐색 기술에서 주어진 키 사이즈 (예컨대, 128 비트) 에서 비현실적이다. 여기서 기술된 실시형태에 의해 생성된 랜덤 비트는, 암호 애플리케이션을 위한 랜덤 넘버 생성기 및 의사 랜덤 넘버 생성기의 확인용 미국 표준 기술 연구소 (NIST) 통계 검사 슈트 (NIST 특별판. 800-22) 의 모든 테스트를 패스했다.
도 10은 암호 보안 의사 랜덤 넘버 생성기를 구현하도록 구성된 저장 매체 (1002) 및 프로세서 (1004) 를 포함하는 컴퓨팅 디바이스 (1000) 를 예시하는 블록도이다. 저장 매체 (1002) 는 예컨대 메모리 디바이스 및/또는 하드 드라이브일 수도 있다. 저장 매체 (1002) 는, 프로세서 (1004) 에 의해 실행될 때 의사 랜덤 넘버를 생성하는 명령을 저장한다. 명령은 프로세서 (1004) 로 하여금, (1) 시드를 제공하기 위해, 엔트로피의 하나 이상의 예측 불가능한 소스를 획득하고, (2) 현재 내부 상태와 시드의 함수로서 넘버 생성기의 현재 내부 상태를 변경하여, 엔트로피를 누산하며, (3) 넘버 생성기의 변경된 내부 상태에 기초하여 의사 랜덤 넘버를 생성하고, (4) 엔트로피의 하나 이상의 예측 불가능한 소스를 시드에 조합하고, (5) 시드 정보의 하나 이상의 예측 불가능한 소스로부터 획득된 시드로 현재 내부 상태를 지속적으로 변경하며, 및/또는 (6) 요청 시, 호출 애플리케이션으로부터 수신된 정보로 현재 내부 상태를 변경하게 할 수도 있다. 프로세서는, (1) 넘버 생성기의 셧다운 시, 넘버 생성기에 의해 생성된 의사 랜덤 넘버인 초기화 시드를 저장하고, (2) 초기화 시드의 무결성이 넘버 생성기의 스타트업 내부 상태를 초기화하기 전에 손상되었는지 여부를 판정하고, (3) 넘버 생성기의 스타트업 내부 상태를, (a) 저장된 초기화 시드의 무결성이 손상된 경우, 대안의 예측 불가능한 소스로 리시드하고, (b) 그렇지 않은 경우, 저장된 초기화 시드로 리시드하도록 또한 구성될 수도 있다.
따라서, (1) 시드를 제공하기 위해, 엔트로피의 하나 이상의 예측 불가능한 소스를 획득하는 수단, (2) 엔트로피를 누산하기 위해, 현재 내부 상태와 시드의 함수로서 넘버 생성기의 현재 내부 상태를 변경하는 수단, 및 (3) 넘버 생성기의 변경된 내부 상태에 기초하여 의사 랜덤 넘버를 생성하는 수단을 포함하는, 넘버 생성기가 제공된다.
도 11은 일 구현에 따른 의사 랜덤 넘버 생성기 회로 (1100) 를 예시하는 블록도이다. 의사 랜덤 넘버 생성기 회로 (1100) 는 시드 넘버를 생성하기 위해 엔트로피의 하나 이상의 소스를 이용하는 시드 생성기 (1102), 생성기 상태의 메모리 (1104), 및 키스트림을 획득하기 위해 시드 생성기 (1102) 로부터의 시드를 인가하는 넘버 생성기 (1106) 를 포함한다. 생성기 회로 (1100) 는 본원에 기술된 여러 실시형태에 따라 그 함수를 실행하기 위해 소프트웨어 및/또는 내장된 하드웨어 구성요소를 포함할 수도 있다.
여러 구현에 따라, 디바이스 (1000) 및/또는 디바이스 (1100) 는 모바일 전화기, PDA, 스마트 폰, 서버, 데스크탑 컴퓨터, 랩톱 컴퓨터, 전자 게임 디바이스, 또는 다른 여러 전자 디바이스일 수도 있다. 또한, 디바이스 (1000 및 1100) 가 설명의 목적으로 간략화되면서, 디바이스 (1000 및/또는 1100) 는 구현에 따라 다른 엘리먼트 또는 구성요소를 포함할 수도 있다.
본원에 기술된 신규한 알고리즘은 소프트웨어 및/또는 내장된 하드웨어로 효율적으로 구현될 수도 있다. 특히, 본 발명이 시드 함수 SEED()를 외부적으로 호출하기 위해 외부 애플리케이션을 위한 인터페이스를 제공하기 때문에, 엔트로피 누산을 위해 별도의 로컬 메모리가 할당될 필요가 없다. 실제로, 본원에 기술된 넘버 생성 알고리즘은 생성기의 내부 상태를 저장하기 위해 72 바이트만을 사용하고, 이는 메모리 한정된 환경에서 매력적이다. 비교에 의해, 야로 및 포르투나 알고리즘은 엔트로피를 로컬하게 유지하기 위해 해시 컨텍스트의 다수의 조각을 통상적으로 요구한다 (각각 2 및 32 컨텍스트). 또한, 야로 또는 포르투나에 의해 사용되는 블록 암호는 라운드 키를 저장하기 위해 더 많은 메모리를 요구한다.
본원에 기술된 일부 실시형태는 일부 종래 기술보다 더 적은 오버헤드로 더 신속한 리시드를 제공한다. 특히, m 바이트의 정보로 리시드하는 것은 m + 72 바이트의 의사 랜덤 출력을 생성하는 것과 대략 동일한 시간이 걸릴 수도 있다. 비교에 의해, 야로는 리시드를 위해 엔트로피 입력을 Pt+2 회 해시하고, 여기서 Pt는 음수가 아니고 사용자 정의된 파라미터이다. 포르투나는 32 엔트로피 풀이 포함되는 더 복잡한 리시드 제어 기법을 갖는다. NLS 키 스케줄링 알고리즘이 해시 함수와 동일한 시간 복잡도를 갖는다고 보수적으로 가정하면, CSPRNG는 야로 보다 적어도 Pt+2 배 신속하고, 포르투나보다 세 (3) 배 신속하게 리시드를 수행한다.
또 다른 특징은 의사 랜덤 시퀀스 생성 속도가 카운터 모드에서 블록 암호보다 (예컨대, AES) 훨씬 신속하다는 것이다. 이는 스트림 암호 NLS 가 가산, XOR, 상수 오프셋을 이용한 로테이션, 및 테이블 룩업과 같은 간단한 워드 연산을 사용하기 때문이다. 결과로서, 1 바이트 출력은 예컨대 인텔 센트리노 프로세서에서 평균 7.347 클럭을 요하고, 이는 카운터 모드에서 블록 암호를 사용하는 것보다 덜 프로세서 집중적이다.
따라서, 공개된 실시형태는 종래 기술의 것보다 다방면에 우수할 수도 있다. 그 중 하나는, 공개된 실시형태는 해시 함수 및 블록 암호의 조합이 아닌 단일 암호 프로미티브만을 사용할 수도 있다는 것이다.
도 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 및/또는 11에 예시된 하나 이상의 구성요소, 단계, 및/또는 함수는 의사 랜덤 넘버 생성의 동작에 영향을 미치지 않고, 단일 구성요소, 단계, 또는 함수에 재배열되고 및/또는 조합될 수도 있거나, 또는 여러 구성요소, 단계, 또는 함수에 내장될 수도 있다. 추가 엘리먼트, 구성요소, 단계, 및/또는 함수가 본 발명으로부터 벗어나지 않게 또한 추가될 수도 있다. 도 1, 2, 3, 4, 5, 10, 및/또는 11에 예시된 장치, 디바이스, 및/또는 구성요소는 도 6, 7, 8, 및/또는 9에 기술된 하나 이상의 방법, 특징, 또는 단계를 수행하도록 구성될 수도 있다.
본원에 공개된 실시형태와 연관하여 기술된 여러 예시적인 논리 블록, 모듈, 회로, 및 알고리즘 단계는 전자 하드웨어, 컴퓨터 소프트웨어, 또는 이 둘의 조합으로서 구현될 수도 있음을 당업자는 또한 인지할 것이다. 하드웨어와 소프트웨어의 이 교환성을 명료하게 예시하기 위해, 여러 예시적인 구성요소, 블록, 모듈, 회로, 및 단계가 그 기능성의 관점에서 일반적으로 상술되었다. 이러한 기능성이 하드웨어로서 구현되는지 또는 소프트웨어로서 구현되는지는 특정 애플리케이션 및 전체 시스템에 부과된 디자인 제약조건에 따른다.
실시형태의 기술은 예시적인 것으로서 의도된 것이고, 청구항의 범위를 제한하려는 것이 아니다. 이와 같이, 본 발명의 가르침은 다른 타입의 장치에 손쉽게 적용될 수 있고, 다수의 대안, 변경, 및 변화가 당업자에 명백할 것이다.

Claims (36)

  1. 보안 의사 랜덤 넘버 생성기를 동작시키는 방법으로서,
    시드 (seed) 정보의 하나 이상의 예측 불가능한 소스를 획득하여 시드를 제공하는 단계;
    상기 보안 의사 랜덤 넘버 생성기의 현재 내부 상태와 상기 시드의 함수로서 상기 현재 내부 상태를 변경함으로써, 상기 보안 의사 랜덤 넘버 생성기의 상기 현재 내부 상태 내 엔트로피를 누산하는 단계;
    상기 보안 의사 랜덤 넘버 생성기의 상기 변경된 현재 내부 상태에 기초하여 의사 랜덤 넘버를 생성하는 단계; 및
    상기 보안 의사 랜덤 넘버 생성기의 셧다운 시 초기화 시드를 저장하는 단계로서, 상기 초기화 시드는 상기 보안 의사 랜덤 넘버 생성기에 의해 생성된 의사 랜덤 넘버인, 상기 초기화 시드 저장 단계를 포함하는, 보안 의사 랜덤 넘버 생성기 동작 방법.
  2. 제 1 항에 있어서,
    상기 변경된 현재 내부 상태는 상기 현재 내부 상태 및 상기 시드에 대한 비선형 피드백 시프트 레지스터 연산을 이용하여 획득되는, 보안 의사 랜덤 넘버 생성기 동작 방법.
  3. 제 1 항에 있어서,
    상기 시드 정보의 하나 이상의 예측 불가능한 소스를 상기 시드에 조합하는 단계를 더 포함하는, 보안 의사 랜덤 넘버 생성기 동작 방법.
  4. 제 1 항에 있어서,
    상기 보안 의사 랜덤 넘버 생성기의 스타트업 (startup) 시, 상기 보안 의사 랜덤 넘버 생성기의 스타트업 내부 상태를 상기 저장된 초기화 시드로 초기화하는 단계를 더 포함하는, 보안 의사 랜덤 넘버 생성기 동작 방법.
  5. 제 4 항에 있어서,
    상기 초기화 시드는 보안 파일 시스템에 저장되고,
    상기 초기화 시드의 무결성 (integrity) 이 상기 보안 의사 랜덤 넘버 생성기의 상기 스타트업 내부 상태를 초기화하기 전에 손상되었는지 여부를 판정하는 단계; 및
    상기 저장된 초기화 시드의 무결성이 손상된 경우, 상기 보안 의사 랜덤 넘버 생성기의 상기 스타트업 내부 상태를 초기화하기 위해 대안의 (alternative) 예측 불가능한 소스를 이용하는 단계를 더 포함하는, 보안 의사 랜덤 넘버 생성기 동작 방법.
  6. 제 1 항에 있어서,
    상기 보안 의사 랜덤 넘버 생성기에 대한 상기 변경된 현재 내부 상태를 획득하고, 상기 의사 랜덤 넘버를 생성하기 위해 단일 암호 원시 연산 (single cryptographic primitive operation) 이 사용되는, 보안 의사 랜덤 넘버 생성기 동작 방법.
  7. 제 6 항에 있어서,
    상기 단일 암호 원시 연산은 이진 워드 연산, 상수 오프셋 (constant offset) 을 이용한 비트 시프트 연산, 또는 테이블 룩업 중 어느 하나를 포함하는, 보안 의사 랜덤 넘버 생성기 동작 방법.
  8. 제 1 항에 있어서,
    상기 보안 의사 랜덤 넘버 생성기의 상기 현재 내부 상태를 변화시키기 위해, 상기 하나 이상의 예측 불가능한 소스로부터 상기 보안 의사 랜덤 넘버 생성기를 지속적으로 리시드 (reseed) 하는 단계를 더 포함하는, 보안 의사 랜덤 넘버 생성기 동작 방법.
  9. 제 8 항에 있어서,
    상기 예측 불가능한 소스는 정량화 가능한 정보를 갖는 물리적인 소스를 포함하는, 보안 의사 랜덤 넘버 생성기 동작 방법.
  10. 제 8 항에 있어서,
    상기 보안 의사 랜덤 넘버 생성기의 상기 현재 내부 상태를 변화시키기 위해, 호출 애플리케이션으로부터 수신된 새로운 시드로 상기 보안 의사 랜덤 넘버 생성기를 리시드하는 단계를 더 포함하는, 보안 의사 랜덤 넘버 생성기 동작 방법.
  11. 제 1 항에 있어서,
    상기 보안 의사 랜덤 넘버 생성기는 비선형 SOBER 구조를 갖는, 보안 의사 랜덤 넘버 생성기 동작 방법.
  12. 제 11 항에 있어서,
    상기 변경된 현재 내부 상태는,
    상기 보안 의사 랜덤 넘버 생성기의 복수의 상태 레지스터의 현재 컨텐츠와의 배타적 논리합 연산에 의해 상기 복수의 상태 레지스터에 상기 시드를 로드하고;
    상기 복수의 상태 레지스터의 워드 시프트된 컨텐츠를 비선형 함수에 공급하여 결과를 획득하고;
    상기 결과와 상기 복수의 상태 레지스터 중 하나의 상태 레지스터 간에 배타적 논리합 연산을 수행하여 피드백 넘버를 획득하며;
    제 1 상태 레지스터로부터 제 2 상태 레지스터로 컨텐츠를 시프트하고 상기 피드백 넘버를 제 3 상태 레지스터에 로드하여 상기 복수의 상태 레지스터를 변경함으로써,
    획득되고,
    상기 제 1 상태 레지스터, 상기 제 2 상태 레지스터 및 상기 제 3 상태 레지스터는 상기 복수의 상태 레지스터에 포함되는, 보안 의사 랜덤 넘버 생성기 동작 방법.
  13. 제 12 항에 있어서,
    리시드 동작 사이에 상기 복수의 상태 레지스터가 시프트되는 횟수의 카운터를 유지하는 단계; 및
    상기 카운터에 기초하여 상기 복수의 상태 레지스터 중 하나를 변경하는 단계를 더 포함하는, 보안 의사 랜덤 넘버 생성기 동작 방법.
  14. 제 1 항에 있어서,
    의사 랜덤 넘버가 생성될 때마다 변화하는 간격 카운터를 유지하는 단계; 및
    상기 간격 카운터에 의해 정의된 간격으로만 상기 보안 의사 랜덤 넘버 생성기의 상기 현재 내부 상태를 변화시키기 위해, 상기 하나 이상의 예측 불가능한 소스로부터 상기 보안 의사 랜덤 넘버 생성기를 리시드하는 단계를 더 포함하는, 보안 의사 랜덤 넘버 생성기 동작 방법.
  15. 제 14 항에 있어서,
    상기 간격 카운터에 의해 정의된 간격으로 시스템 시간을 이용하여 상기 보안 의사 랜덤 넘버 생성기를 리시드하는 단계를 더 포함하는, 보안 의사 랜덤 넘버 생성기 동작 방법.
  16. 제 1 항에 있어서,
    상기 시드는 적어도 128 비트 길이이고, 상기 보안 의사 랜덤 넘버 생성기의 상기 현재 내부 상태는 18 워드 사이즈 레지스터인, 보안 의사 랜덤 넘버 생성기 동작 방법.
  17. 암호 보안 넘버 생성기로서,
    시드를 제공하기 위해, 시드 정보의 하나 이상의 예측 불가능한 소스를 획득하도록 구성된 시드 로더;
    상기 암호 보안 넘버 생성기의 내부 상태를 저장하는 복수의 상태 레지스터로서, 상기 시드 로더는 상기 암호 보안 넘버 생성기의 상기 내부 상태를 변경하고 엔트로피를 누산하기 위해, 상기 복수의 상태 레지스터의 현재 컨텐츠 및 상기 시드에 기초하여 상기 복수의 상태 레지스터를 리시드하는, 상기 복수의 상태 레지스터; 및
    상기 암호 보안 넘버 생성기의 상기 변경된 내부 상태에 기초하여 의사 랜덤 넘버를 생성하고, 상기 암호 보안 넘버 생성기의 셧다운 시 초기화 시드를 생성하고, 상기 초기화 시드를 저장하도록 구성된 의사 랜덤 넘버 생성기를 포함하는, 암호 보안 넘버 생성기.
  18. 제 17 항에 있어서,
    상기 변경된 내부 상태는 상기 복수의 상태 레지스터의 컨텐츠 및 상기 시드에 대한 비선형 피드백 시프트 레지스터 연산을 사용하여 획득되는, 암호 보안 넘버 생성기.
  19. 삭제
  20. 제 17 항에 있어서,
    상기 시드 로더는 또한, 상기 암호 보안 넘버 생성기의 재시작 시, 상기 저장된 초기화 시드로 상기 복수의 상태 레지스터를 초기화하도록 구성된, 암호 보안 넘버 생성기.
  21. 제 17 항에 있어서,
    상기 시드 로더는 또한, 상기 하나 이상의 예측 불가능한 소스로부터 획득된 새로운 시드를 상기 복수의 상태 레지스터에 지속적으로 로드하도록 구성된, 암호 보안 넘버 생성기.
  22. 제 17 항에 있어서,
    상기 예측 불가능한 소스는 정량화 가능한 정보를 갖는 물리적인 소스를 포함하는, 암호 보안 넘버 생성기.
  23. 제 17 항에 있어서,
    상기 시드 로더는 또한, 호출 애플리케이션으로부터 획득된 새로운 시드를 상기 복수의 상태 레지스터에 로드하도록 구성된, 암호 보안 넘버 생성기.
  24. 제 17 항에 있어서,
    단일 암호 원시 연산이 상기 복수의 상태 레지스터를 리시드하고 상기 의사 랜덤 넘버를 생성하기 위해 사용되는, 암호 보안 넘버 생성기.
  25. 제 17 항에 있어서,
    상기 시드 로더, 상기 복수의 상태 레지스터, 및 상기 의사 랜덤 넘버 생성기는 비선형 SOBER 구조로서 배열되는, 암호 보안 넘버 생성기.
  26. 넘버 생성기로서,
    시드를 제공하기 위해, 시드 정보의 하나 이상의 예측 불가능한 소스를 획득하는 수단;
    상기 넘버 생성기의 현재 내부 상태와 상기 시드의 함수로서 상기 현재 내부 상태를 변경함으로써, 상기 넘버 생성기의 상기 현재 내부 상태 내 엔트로피를 누산하는 수단;
    상기 넘버 생성기의 상기 변경된 현재 내부 상태에 기초하여 의사 랜덤 넘버를 생성하는 수단; 및
    상기 넘버 생성기의 셧다운 시, 상기 넘버 생성기에 의해 생성된 의사 랜덤 넘버인 초기화 시드를 저장하는 수단을 포함하는, 넘버 생성기.
  27. 제 26 항에 있어서,
    상기 시드 정보의 하나 이상의 예측 불가능한 소스를 상기 시드에 조합하는 수단을 더 포함하는, 넘버 생성기.
  28. 제 26 항에 있어서,
    상기 초기화 시드의 무결성이 상기 넘버 생성기의 스타트업 내부 상태를 초기화하기 전에 손상되었는지 여부를 판정하는 수단; 및
    상기 넘버 생성기의 상기 스타트업 내부 상태를,
    상기 저장된 초기화 시드의 무결성이 손상된 경우, 대안의 예측 불가능한 소스로 리시드하고,
    그렇지 않은 경우, 상기 저장된 초기화 시드로 리시드하는 수단을 더 포함하는, 넘버 생성기.
  29. 제 26 항에 있어서,
    상기 시드 정보의 하나 이상의 예측 불가능한 소스로부터 획득된 추가적인 시드로 상기 현재 내부 상태를 지속적으로 변경하는 수단; 및
    요청 시, 호출 애플리케이션으로부터 수신된 새로운 시드로 상기 현재 내부 상태를 변경하는 수단을 더 포함하는, 넘버 생성기.
  30. 처리 회로로서,
    시드 정보의 하나 이상의 예측 불가능한 소스로부터 시드를 획득하고,
    넘버 생성기의 현재 내부 상태와 상기 시드의 함수로서 상기 현재 내부 상태를 변경하여, 상기 넘버 생성기 내 엔트로피를 누산하고,
    상기 넘버 생성기의 상기 변경된 현재 내부 상태에 기초하여 의사 랜덤 넘버를 생성도록 구성된 처리 디바이스; 및
    상기 넘버 생성기의 상기 현재 내부 상태를 저장하는 하나 이상의 내부 상태 레지스터를 포함하는 메모리 디바이스를 포함하고,
    상기 처리 회로는 또한,
    상기 넘버 생성기의 셧다운 시, 상기 넘버 생성기에 의해 생성된 의사 랜덤 넘버인 초기화 시드를 상기 메모리 디바이스에 저장하도록 구성된, 처리 회로.
  31. 제 30 항에 있어서,
    상기 처리 회로는 또한,
    상기 초기화 시드의 무결성이 상기 넘버 생성기의 스타트업 내부 상태를 초기화하기 전에 손상되었는지 여부를 판정하며;
    상기 넘버 생성기의 상기 스타트업 내부 상태를,
    상기 저장된 초기화 시드의 무결성이 손상된 경우, 대안의 예측 불가능한 소스로 리시드하고,
    그렇지 않은 경우, 상기 저장된 초기화 시드로 리시드하도록 구성된, 처리 회로.
  32. 제 30 항에 있어서,
    상기 처리 회로는 또한,
    상기 넘버 생성기의 상기 현재 내부 상태를 변경하기 위해 상기 시드 정보의 하나 이상의 예측 불가능한 소스로부터 추가적인 시드를 지속적으로 획득하고;
    호출 애플리케이션으로부터 수신된 새로운 시드에 기초하여, 상기 넘버 생성기의 상기 현재 내부 상태를 변경하도록 구성된, 처리 회로.
  33. 제 30 항에 있어서,
    상기 처리 회로는 또한, 상기 현재 내부 상태 및 상기 시드에 기초하여, 단일 암호 원시 연산 및 비선형 피드백 함수를 사용하여, 상기 현재 내부 상태를 변경하도록 구성된, 처리 회로.
  34. 프로세서에 의해 실행될 때, 상기 프로세서로 하여금,
    시드 정보의 하나 이상의 예측 불가능한 소스로부터 시드를 획득하고;
    현재 내부 상태와 상기 시드의 함수로서 넘버 생성기의 내부 상태를 변경하여, 상기 넘버 생성기 내 엔트로피를 누산하고;
    상기 넘버 생성기의 상기 변경된 현재 내부 상태에 기초하여 의사 랜덤 넘버를 생성하며;
    상기 넘버 생성기의 셧다운 시, 상기 넘버 생성기에 의해 생성된 의사 랜덤 넘버인 초기화 시드를 메모리 디바이스에 저장하게 하는, 의사 랜덤 넘버를 생성하기 위한 하나 이상의 명령을 갖는 머신 판독가능 매체.
  35. 제 34 항에 있어서,
    프로세서에 의해 실행될 때, 상기 프로세서로 하여금,
    상기 현재 내부 상태 및 상기 시드에 기초하여 단일 암호 원시 연산 및 비선형 피드백 함수를 사용하여 상기 현재 내부 상태를 변경하게 하는, 하나 이상의 명령을 더 갖는, 머신 판독가능 매체.
  36. 제 34 항에 있어서,
    프로세서에 의해 실행될 때, 상기 프로세서로 하여금,
    상기 넘버 생성기의 상기 현재 내부 상태를 변경하기 위해, 시드 정보의 하나 이상의 예측 불가능한 소스로부터 추가적인 시드를 지속적으로 획득하고;
    호출 애플리케이션으로부터 수신된 새로운 시드에 기초하여, 상기 넘버 생성기의 상기 현재 내부 상태를 변경하게 하는, 하나 이상의 명령을 더 갖는, 머신 판독가능 매체.
KR1020087007124A 2005-08-24 2006-08-24 암호 보안 의사 랜덤 넘버 생성기 KR101004269B1 (ko)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US71114805P 2005-08-24 2005-08-24
US60/711,148 2005-08-24

Publications (2)

Publication Number Publication Date
KR20080041272A KR20080041272A (ko) 2008-05-09
KR101004269B1 true KR101004269B1 (ko) 2011-01-03

Family

ID=37575097

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020087007124A KR101004269B1 (ko) 2005-08-24 2006-08-24 암호 보안 의사 랜덤 넘버 생성기

Country Status (8)

Country Link
US (1) US8019802B2 (ko)
EP (1) EP1927214A1 (ko)
JP (1) JP4669046B2 (ko)
KR (1) KR101004269B1 (ko)
CN (1) CN101292464B (ko)
AR (1) AR055392A1 (ko)
TW (1) TWI327855B (ko)
WO (1) WO2007037869A1 (ko)

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR101888548B1 (ko) 2018-05-08 2018-08-14 (주)위즈네트 랜덤 넘버 생성 방법, 랜덤 넘버 생성기 및 이를 포함하는 통신 장치
WO2019050343A1 (ko) * 2017-09-08 2019-03-14 국민대학교산학협력단 화이트박스 암호가 적용된 블록 암호 기반의 난수 생성 방법 및 장치
KR20190052605A (ko) * 2017-11-08 2019-05-16 삼성전자주식회사 적어도 두 개의 알고리즘을 이용하여 랜덤 넘버를 생성하는 랜덤 넘버 생성기 및 이를 포함하는 보안 장치

Families Citing this family (71)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8094811B2 (en) * 2005-03-31 2012-01-10 Panasonic Corporation Data encryption device and data encryption method
US8374351B2 (en) * 2006-07-21 2013-02-12 Nec Corporation Encryption device, program, and method
US8457304B2 (en) * 2007-02-23 2013-06-04 Choy Sai Foundation L.L.C. Efficient encoding processes and apparatus
US20080263117A1 (en) * 2007-04-23 2008-10-23 Gregory Gordon Rose Initial seed management for pseudorandom number generator
US8145905B2 (en) * 2007-05-07 2012-03-27 Qualcomm Incorporated Method and apparatus for efficient support for multiple authentications
DE102007025780A1 (de) * 2007-05-22 2008-11-27 Atmel Germany Gmbh Vorrichtung und Verfahren zur Erzeugung einer Zufallszahl
US20080298583A1 (en) * 2007-05-31 2008-12-04 Lucent Technologies Inc. System and method of quantum encryption
US20090083361A1 (en) * 2007-09-24 2009-03-26 Moore Charles H Shift-add based multiplication
US8788552B2 (en) * 2008-01-25 2014-07-22 Tata Consultancy Services Ltd. Deterministic random number generator for cryptography and digital watermarking
US8539596B2 (en) * 2008-06-24 2013-09-17 Cisco Technology Inc. Security within integrated circuits
US8832122B2 (en) * 2008-09-30 2014-09-09 Apple Inc. Media list management
US8369521B2 (en) * 2008-10-17 2013-02-05 Oracle International Corporation Smart card based encryption key and password generation and management
US9026571B2 (en) * 2008-10-27 2015-05-05 Microsoft Technology Licensing, Llc Random number generation failure detection and entropy estimation
US9552191B2 (en) 2008-11-12 2017-01-24 Igt Canada Solutions Ulc Secure random number generation
FR2941114B1 (fr) * 2009-01-13 2011-07-01 Viaccess Sa Procede et module de renouvellement du code d'un algorithme cryptographique, procede et module de generation d'une graine, processeur de securite et support d'enregistrement pour ces procedes
US8738676B2 (en) * 2009-05-29 2014-05-27 International Business Machines Corporation Entropy generation on a parallel computer system
US9495190B2 (en) * 2009-08-24 2016-11-15 Microsoft Technology Licensing, Llc Entropy pools for virtual machines
GB2469393C (en) * 2010-04-22 2014-08-06 Cen Jung Tjhai Public encryption system using deliberatily corrupted codewords from an error correcting code
US8626656B2 (en) * 2010-04-28 2014-01-07 Ing Direct N.V. System and method for securing payment instruments
GB2484931B (en) 2010-10-26 2014-04-30 Nds Ltd Efficient delivery of structured data items
GB2473154B (en) 2010-11-16 2011-06-15 Martin Tomlinson Public key encryption system using error correcting codes
US9465582B1 (en) * 2010-11-18 2016-10-11 The Boeing Company Significant random number generator
CN102541508A (zh) * 2010-12-29 2012-07-04 鸿富锦精密工业(深圳)有限公司 真随机数产生系统及方法
GB2491896A (en) * 2011-06-17 2012-12-19 Univ Bruxelles Secret key generation
US9300472B2 (en) 2011-09-30 2016-03-29 Nokia Technologies Oy Method and apparatus for improving digital signatures
US9008303B1 (en) * 2011-12-22 2015-04-14 Emc Corporation Method and apparatus for generating forward secure pseudorandom numbers
JP6042820B2 (ja) * 2011-11-09 2016-12-14 Kddi株式会社 非線形処理器、ストリーム暗号の暗号化装置、ストリーム暗号の復号化装置、マスク処理方法、ストリーム暗号の暗号化方法、ストリーム暗号の復号化方法およびプログラム
EP2600561B8 (en) * 2011-11-30 2019-12-04 BlackBerry Limited Assessing Cryptographic Entropy
US8837720B2 (en) 2012-03-16 2014-09-16 Paul de Roulet Cryptographically secure pseudorandom number generator
US8954723B2 (en) 2012-05-09 2015-02-10 International Business Machines Corporation Anonymization of data within a streams environment
US8879733B2 (en) * 2012-07-10 2014-11-04 Infineon Technologies Ag Random bit stream generator with guaranteed minimum period
US8861725B2 (en) * 2012-07-10 2014-10-14 Infineon Technologies Ag Random bit stream generator with enhanced backward secrecy
US9086936B2 (en) 2012-07-31 2015-07-21 International Business Machines Corporation Method of entropy distribution on a parallel computer
KR101425600B1 (ko) * 2012-11-02 2014-08-04 한국전자통신연구원 입력 시간 정보를 이용하는 난수 생성 장치 및 방법
CN103906048B (zh) * 2012-12-25 2017-06-20 广东乐心医疗电子股份有限公司 通过蓝牙技术安全地传送数据的方法与装置
US9049232B2 (en) * 2013-02-28 2015-06-02 Amazon Technologies, Inc. Configurable-quality random data service
US9819727B2 (en) 2013-02-28 2017-11-14 Amazon Technologies, Inc. Computing infrastructure for configurable-quality random data
EP3691220B1 (en) * 2013-02-28 2021-08-25 Amazon Technologies, Inc. Configurable-quality random data service
US9270649B1 (en) * 2013-03-11 2016-02-23 Emc Corporation Secure software authenticator data transfer between processing devices
US9201629B2 (en) * 2013-03-14 2015-12-01 International Business Machines Corporation Instruction for performing a pseudorandom number seed operation
US9542156B2 (en) 2013-05-15 2017-01-10 Synopsys, Inc. Automatic control system and method for a true random number generator
US9449197B2 (en) * 2013-06-13 2016-09-20 Global Foundries Inc. Pooling entropy to facilitate mobile device-based true random number generation
KR20150033895A (ko) 2013-09-25 2015-04-02 삼성전자주식회사 소모품 유닛에 탑재 가능한 crum 칩과 이를 인증하는 화상형성장치 및 그 인증 방법
TWI712915B (zh) * 2014-06-12 2020-12-11 美商密碼研究公司 執行一密碼編譯操作之方法,以及電腦可讀非暫時性儲存媒體
JP6348019B2 (ja) * 2014-08-28 2018-06-27 ルネサスエレクトロニクス株式会社 通信システム、通信装置、自動車および通信方法
WO2016038428A1 (en) * 2014-09-14 2016-03-17 Alexandre Durand Cryptographic system based on reproducible random sequences
US9569176B2 (en) 2014-10-30 2017-02-14 Seagate Technology Llc Deriving entropy from multiple sources having different trust levels
US9548862B1 (en) * 2014-11-17 2017-01-17 Safelogic, Inc. Managing entropy in computing devices for cryptographic key generation
US9658832B2 (en) 2015-05-18 2017-05-23 Red Hat Israel, Ltd. Multi-factor entropy sourcing for random number generators
US10116441B1 (en) 2015-06-11 2018-10-30 Amazon Technologies, Inc. Enhanced-security random data
US10348704B2 (en) * 2015-07-30 2019-07-09 Helder Silvestre Paiva Figueira Method for a dynamic perpetual encryption cryptosystem
US10142103B2 (en) * 2015-12-07 2018-11-27 The Boeing Company Hardware assisted fast pseudorandom number generation
US9755792B1 (en) * 2016-05-09 2017-09-05 Xilinx, Inc. Generating and checking a quaternary pseudo random binary sequence
US9891889B2 (en) * 2016-06-30 2018-02-13 International Business Machines Corporation Injecting CPU time jitter to improve entropy quality for random number generator
US10140095B2 (en) * 2016-08-19 2018-11-27 Oracle International Corporation Collecting entropy from diverse sources
US10078493B2 (en) 2016-10-10 2018-09-18 International Business Machines Corporation Secured pseudo-random number generator
US10503475B1 (en) * 2016-11-09 2019-12-10 The Florida State University Research Foundation, Inc. Forensically reproducible random number generator and associated method of use
CN107196760B (zh) * 2017-04-17 2020-04-14 徐智能 具有可调整性的伴随式随机重构密钥的序列加密方法
US10536266B2 (en) * 2017-05-02 2020-01-14 Seagate Technology Llc Cryptographically securing entropy for later use
US10402169B2 (en) * 2017-07-12 2019-09-03 Dell Products L.P. Method and system of secure random seed generation for a cryptographically secure pseudo-random number generator
US11175893B2 (en) * 2017-10-17 2021-11-16 Blue ArmorTechnologies, LLC Statistical object generator
US11082432B2 (en) 2017-12-05 2021-08-03 Intel Corporation Methods and apparatus to support reliable digital communications without integrity metadata
WO2020028971A1 (en) * 2018-08-09 2020-02-13 Wgames Incorporated Multi-process interface controller
JP2020088458A (ja) * 2018-11-16 2020-06-04 株式会社デンソーテン 情報処理装置
KR102156568B1 (ko) * 2018-12-21 2020-09-16 국민대학교산학협력단 구명용 비상신호 발신장치 및 방법
CN111465008B (zh) * 2019-01-21 2024-05-24 苹果公司 在无线通信中执行加密和认证时的初始化向量生成
CN110058843B (zh) * 2019-03-27 2023-03-03 创新先进技术有限公司 伪随机数的生成方法、装置和服务器
CN110851112A (zh) * 2019-11-06 2020-02-28 成都卫士通信息产业股份有限公司 一种随机比特生成方法、装置及电子设备和存储介质
TWI754900B (zh) * 2020-01-17 2022-02-11 旺宏電子股份有限公司 亂數產生器、亂數產生電路及亂數產生方法
WO2023023988A1 (en) * 2021-08-25 2023-03-02 Boe Technology Group Co., Ltd. Method for generating pseudo-random number, random number generator, and computer-program product
WO2023158500A1 (en) * 2022-02-21 2023-08-24 Google Llc Secure pseudo-random number generator (prng) reseeding

Family Cites Families (15)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH06342257A (ja) 1993-06-02 1994-12-13 Matsushita Electric Ind Co Ltd 逐次暗号方式
JPH0736672A (ja) 1993-07-20 1995-02-07 Canon Inc 乱数発生器、及びそれを用いた通信システム及びその方法
US5778069A (en) * 1996-04-10 1998-07-07 Microsoft Corporation Non-biased pseudo random number generator
US6628786B1 (en) * 1997-09-30 2003-09-30 Sun Microsystems, Inc. Distributed state random number generator and method for utilizing same
JP2000244480A (ja) 1999-02-23 2000-09-08 Nec Corp データ暗号化/復号化回路およびデータ暗号化/復号化方法
US20040162864A1 (en) * 2002-07-08 2004-08-19 Globespan Virata Inc. System and method for generating pseudo-random numbers
US7826613B2 (en) * 2002-08-19 2010-11-02 Qualcomm Incorporated Stream cipher cryptographic system and method
US7139785B2 (en) 2003-02-11 2006-11-21 Ip-First, Llc Apparatus and method for reducing sequential bit correlation in a random number generator
DE10347455B4 (de) * 2003-10-13 2010-08-26 Infineon Technologies Ag Pseudozufallszahlengenerator für einen Stream Cipher
KR100576714B1 (ko) 2003-12-23 2006-05-03 한국전자통신연구원 디지털 로직을 이용한 난수 발생 장치 및 방법
US7496616B2 (en) * 2004-11-12 2009-02-24 International Business Machines Corporation Method, apparatus and system for resistance to side channel attacks on random number generators
US7894602B2 (en) * 2006-03-31 2011-02-22 Sap Ag System and method for generating pseudo-random numbers
ES2590280T3 (es) * 2006-08-03 2016-11-21 Tubitak Generación de números aleatorios usando caos de tiempo continuo
ATE459912T1 (de) * 2006-11-28 2010-03-15 Koninkl Philips Electronics Nv Verfahren zur generierung von zufallszahlen mit einer ausgangszahl
US20080263117A1 (en) * 2007-04-23 2008-10-23 Gregory Gordon Rose Initial seed management for pseudorandom number generator

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
Philip Hawkes 외 1명, Primitive Specification for SOBER-128, Cryptology ePrint Archive:Report 2003/081 (2003.04.29.)*

Cited By (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2019050343A1 (ko) * 2017-09-08 2019-03-14 국민대학교산학협력단 화이트박스 암호가 적용된 블록 암호 기반의 난수 생성 방법 및 장치
KR20190028066A (ko) * 2017-09-08 2019-03-18 국민대학교산학협력단 화이트박스 암호가 적용된 블록 암호 기반의 난수 생성 방법 및 장치
KR101971001B1 (ko) 2017-09-08 2019-04-22 국민대학교산학협력단 화이트박스 암호가 적용된 블록 암호 기반의 난수 생성 방법 및 장치
KR20190052605A (ko) * 2017-11-08 2019-05-16 삼성전자주식회사 적어도 두 개의 알고리즘을 이용하여 랜덤 넘버를 생성하는 랜덤 넘버 생성기 및 이를 포함하는 보안 장치
KR102628008B1 (ko) * 2017-11-08 2024-01-23 삼성전자주식회사 적어도 두 개의 알고리즘을 이용하여 랜덤 넘버를 생성하는 랜덤 넘버 생성기 및 이를 포함하는 보안 장치
KR101888548B1 (ko) 2018-05-08 2018-08-14 (주)위즈네트 랜덤 넘버 생성 방법, 랜덤 넘버 생성기 및 이를 포함하는 통신 장치

Also Published As

Publication number Publication date
CN101292464B (zh) 2011-11-09
JP2009506438A (ja) 2009-02-12
US20070230694A1 (en) 2007-10-04
AR055392A1 (es) 2007-08-22
US8019802B2 (en) 2011-09-13
EP1927214A1 (en) 2008-06-04
KR20080041272A (ko) 2008-05-09
WO2007037869A1 (en) 2007-04-05
TW200740164A (en) 2007-10-16
TWI327855B (en) 2010-07-21
JP4669046B2 (ja) 2011-04-13
CN101292464A (zh) 2008-10-22

Similar Documents

Publication Publication Date Title
KR101004269B1 (ko) 암호 보안 의사 랜덤 넘버 생성기
Aumasson Serious cryptography: a practical introduction to modern encryption
Pereida García et al. Make sure DSA signing exponentiations really are constant-time
Kong et al. Deconstructing new cache designs for thwarting software cache-based side channel attacks
Daemen et al. Fast hashing and stream encryption with PANAMA
KR101237104B1 (ko) 의사 난수 생성기에 대한 초기 시드 관리
CN107017981B (zh) 硬件辅助快速伪随机数生成
Garmany et al. PRIME: private RSA infrastructure for memory-less encryption
Spreitzer et al. On the applicability of time-driven cache attacks on mobile devices
EP1583278A1 (en) Stream Cipher Design with Revolving Buffers
Tsoutsos et al. Advanced techniques for designing stealthy hardware trojans
Andrade et al. Lyra2: Efficient password hashing with high security against time-memory trade-offs
Paar et al. Stream ciphers
Jassim et al. A survey on stream ciphers for constrained environments
JP6287785B2 (ja) 暗号処理装置、および暗号処理方法、並びにプログラム
Reinbrecht et al. Earthquake—A NoC-based optimized differential cache-collision attack for MPSoCs
Johnson et al. An FPGA architecture for the recovery of WPA/WPA2 keys
Lafitte et al. SAT based analysis of LTE stream cipher ZUC
Alzhrani et al. Windows and linux random number generation process: A comparative analysis
Nishinaga et al. Implementation of µNaCl on 32-bit ARM Cortex-M0
ALMashrafi et al. Analysis of indirect message injection for mac generation using stream ciphers
Bangerter et al. Cache games-bringing access based cache attacks on aes to practice
WO2018066951A1 (en) Improved lightweight block cipher
Weerasena et al. Lightweight encryption using chaffing and winnowing with all-or-nothing transform for network-on-chip architectures
仲野有登 Design and Analysis of Memory Access Pattern Protection

Legal Events

Date Code Title Description
A201 Request for examination
E902 Notification of reason for refusal
E701 Decision to grant or registration of patent right
GRNT Written decision to grant
FPAY Annual fee payment

Payment date: 20131129

Year of fee payment: 4

FPAY Annual fee payment

Payment date: 20141128

Year of fee payment: 5

FPAY Annual fee payment

Payment date: 20150930

Year of fee payment: 6

FPAY Annual fee payment

Payment date: 20161125

Year of fee payment: 7

FPAY Annual fee payment

Payment date: 20170929

Year of fee payment: 8

LAPS Lapse due to unpaid annual fee