KR20200003111A - 난수 생성기 - Google Patents

난수 생성기 Download PDF

Info

Publication number
KR20200003111A
KR20200003111A KR1020197035399A KR20197035399A KR20200003111A KR 20200003111 A KR20200003111 A KR 20200003111A KR 1020197035399 A KR1020197035399 A KR 1020197035399A KR 20197035399 A KR20197035399 A KR 20197035399A KR 20200003111 A KR20200003111 A KR 20200003111A
Authority
KR
South Korea
Prior art keywords
bits
prng
aes
state
round
Prior art date
Application number
KR1020197035399A
Other languages
English (en)
Other versions
KR102217865B1 (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 KR20200003111A publication Critical patent/KR20200003111A/ko
Application granted granted Critical
Publication of KR102217865B1 publication Critical patent/KR102217865B1/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/582Pseudo-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/0618Block ciphers, i.e. encrypting groups of characters of a plain text message using fixed encryption transformation
    • H04L9/0625Block ciphers, i.e. encrypting groups of characters of a plain text message using fixed encryption transformation with splitting of the data block into left and right halves, e.g. Feistel based algorithms, DES, FEAL, IDEA or KASUMI
    • 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/0618Block ciphers, i.e. encrypting groups of characters of a plain text message using fixed encryption transformation
    • H04L9/0631Substitution permutation network [SPN], i.e. cipher composed of a number of stages or rounds each involving linear and nonlinear transformations, e.g. AES algorithms
    • 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/08Key distribution or management, e.g. generation, sharing or updating, of cryptographic keys or passwords
    • H04L9/0861Generation of secret information including derivation or calculation of cryptographic keys or passwords
    • H04L9/0869Generation of secret information including derivation or calculation of cryptographic keys or passwords involving random numbers or seeds

Abstract

난수(202)를 생성하기 위한 방법(300)은 내부 비트들 및 외부 비트들을 포함하는 2048 비트들의 상태를 갖는 의사 난수 생성기(PRNG)(200)를 초기화하는 단계를 포함하고, 내부 비트들은 2048 비트들 중 첫 128 비트들을 포함하고 외부 비트들은 2048 비트들 중 나머지 비트들을 포함한다. 방법은 또한 키 소스(192)로부터 AES 라운드 키들(192)을 검색하는 단계, 및 임계 횟수 동안, 128 비트들의 16 개 브랜치들을 갖는 페이스텔 네트워크의 홀수 번호 브랜치들(220)을 페이스텔 네트워크의 대응하는 짝수 번째 이웃 브랜치들의 함수와 XOR함으로써 AES 라운드 키들을 사용하여 라운드 함수를 실행하는 단계, 및 128 비트들의 각 브랜치를 규정된 순서로 셔플링하는 단계를 포함한다. 방법은 또한 치환된 상태의 내부 비트들과 이전 상태의 내부 비트의 XOR을 실행하는 단계를 포함한다.

Description

난수 생성기
본 개시내용은 난수들을 생성하는 것에 관한 것이다.
난수화 알고리즘들은 일반적으로 클라이언트들에 속하는 데이터를 안전하게 유지하기 위해 대량 데이터 스트림들을 정렬, 셔플링(shuffling) 및/또는 그로부터 샘플링할 때 의사 난수 생성기(pseudorandom number generator)(PRNG)에 의존한다. PRNG는 결정론적 알고리즘을 사용하여 시드(seed)라고 부르는 무작위 입력으로부터 매우 빠른 속도로 의사 난수들을 생성한다. PRNG에 의존하는 알고리즘은 상대자가 PRNG의 거동을 예측할 수 있을 때 성능 보증을 상실할 수 있다. 강력한 PRNG는 상대자들로부터의 공격에 대한 저항을 제공하지만, 일반적으로는 해결(workaround) 시간들이 느려지는 것을 겪는다. 한편, 빠른 PRNG들은 일반적으로 쉽게 예측 가능하며, 이는 공격자들/상대자들에 의한 예상치 못한 상관들(correlations) 또는 이용(exploitation)에 PRNG들이 취약하게 한다. 따라서, 개발자들은 난수화 애플리케이션에 대한 PRNG를 선택할 때 적절한 보안/속도 트레이드오프(tradeoff)를 결정해야 하는 일을 종종 방치해 놓는다. 종종 개발자들은 난수화 애플리케이션들이 상대자들에게 취약할 수 있다는 것을 알지 못하며, 그래서 보안을 위해 속도를 희생하기를 주저한다. 보안/속도 트레이드오프들을 식별하기 위해 수만 건들의 랜덤 생성기 사용량들을 감사하는 작업은 비용이 많이 드는 만큼 벅차다.
본 개시내용의 일 양태는 의사 난수들을 생성하기 위한 방법을 제공한다. 방법은 데이터 처리 하드웨어에 의해, 내부 비트들 및 외부 비트들을 포함하는 2048 비트들의 상태를 갖는 의사 난수 생성기(pseudo-random number generator)(PRNG)를 초기화하는 단계를 포함한다. 내부 비트들은 2048 비트들 중 첫 128 비트들을 포함하고 외부 비트들은 2048 비트들 중 나머지 비트들을 포함한다. 방법은 또한 데이터 처리 하드웨어에 의해, 키 소스로부터 고급 암호화 표준(Advanced Encryption Standard)(AES) 라운드 키들을 검색(retrieving)함으로써 PRNG의 상태를 치환하는 단계를 포함한다. 방법은 AES 라운드 키들을 사용하여 라운드 함수를 실행함으로써 임계 횟수 동안 PRNG의 상태를 치환하는 단계를 더 포함한다. 라운드 함수는 128 비트들의 16개 브랜치들을 갖는 페이스텔 네트워크(Feistel network)의 홀수 번째 브랜치들을 페이스텔 네트워크의 대응하는 짝수 번째 이웃 브랜치들의 함수와 XOR하는 것을 포함한다. 임계 횟수 동안, 방법은 또한 128 비트들의 각각의 브랜치를 규정된 순서로 셔플링함으로써 PRNG의 상태를 치환하는 단계를 포함한다. 방법은 또한 데이터 처리 하드웨어에 의해, 이전 상태의 내부 비트들과 치환된 상태의 내부 비트들의 XOR을 실행하는 단계를 포함한다.
그 다음에, 상태의 일부 또는 전부, 및 특히 외부 비트들의 일부 또는 전부는 필요에 따라 추가 사용 또는 조작을 위해 의사 난수로서 사용되거나 또는 의사 난수를 제공하는 데 사용될 수 있다.
페이스텔 네트워크는 일반화된 페이스텔 네트워크이거나, 또는 보다 구체적으로는 일반화된 타입-2 페이스텔 네트워크일 수 있다.
본 개시내용의 구현예들은 다음의 선택적인 특징들 중 하나 이상을 포함할 수 있다. 일부 구현예들에서, PRNG를 초기화하는 단계는 PRNG의 상태를 0으로 설정하고 외부 비트들을 임의의 시드 값들로 설정하는 단계를 포함한다. 임의로, PRNG를 초기화하는 단계는 또한 PRNG의 상태를 이전 상태로 설정하는 단계를 포함할 수 있다. 임계 횟수는 적어도 17 회를 포함할 수 있다. 일부 예들에서, 라운드 함수는 AES의 적어도 두 개 라운드들을 포함한다. 이러한 예들에서, AES의 적어도 두 개 라운드들 각각은 AES의 다른 라운드들의 AES 라운드 키들과는 상이한 대응하는 AES 라운드 키를 사용할 수 있다.
일부 예들에서, 페이스텔 네트워크의 홀수 번째 브랜치들을 페이스텔 네트워크의 대응하는 짝수 번째 이웃 브랜치들의 함수와 XOR하는 것은 무작위 비트들을 발생시킨다. 이러한 예들에서, 외부 비트들은 결과적인 무작위 비트들을 포함한다. 128 비트들의 각각의 브랜치를 규정된 순서로 셔플링하는 단계는 라운드 함수를 실행하고 각 브랜치를 여덟 회 셔플링한 이후에 완전 서브-브랜치 확산(full sub-branch diffusion)을 달성할 수 있다. 일부 구현예들에서, 규정된 순서는 {7, 2, 13, 4, 11, 8, 3, 6, 15, 0, 9, 10, 1, 14, 5, 12}를 포함한다. 임의로, 방법은 내부 비트들에 액세스하는 것을 방지하고 외부 비트들에 액세스하는 것을 가능하게 하는 단계를 포함할 수 있다.
본 개시내용은 또한 적합한 컴퓨터 장치에서 구현될 때 설명된 방법들을 수행하도록 배열된 컴퓨터 프로그램 코드를 포함하는 하나 이상의 컴퓨터 판독 가능 매체를 제공한다.
본 개시내용은 또한 설명된 방법들을 구현하도록 배열된 장치를 제공한다. 예를 들어, 본 개시내용의 다른 양태는 난수들을 생성하기 위한 시스템을 제공한다. 시스템은 데이터 처리 하드웨어 및 데이터 처리 하드웨어와 통신하는 메모리 하드웨어를 포함한다. 메모리 하드웨어는 데이터 처리 하드웨어상에서 실행될 때 데이터 처리 하드웨어로 하여금 동작들을 수행하게 하는 명령어들을 저장한다. 동작들은 내부 비트들 및 외부 비트들을 포함하는 2048 비트들의 상태를 갖는 의사 난수 생성기(PRNG)를 초기화하는 동작을 포함한다. 내부 비트들은 2048 비트들 중 첫 128 비트들을 포함하고 외부 비트들은 2048 비트들 중 나머지 비트들을 포함한다. 동작들은 또한 키 소스로부터 고급 암호화 표준(AES) 라운드 키들을 검색함으로써 PRNG의 상태를 치환하는 동작을 포함한다. PRNG의 상태를 치환하는 동작은 또한 임계 횟수 동안, AES 라운드 키들을 사용하여 라운드 함수를 실행하는 동작을 포함한다. 라운드 함수는 128 비트들의 16 개 브랜치들을 갖는 페이스텔 네트워크의 홀수 번째 브랜치들을 페이스텔 네트워크의 대응하는 짝수 번째 이웃 브랜치들의 함수와 XOR하는 것을 포함한다. PRNG의 상태를 치환하는 동작은, 임계 횟수 동안, 128 비트들의 각각의 브랜치를 규정된 순서로 셔플링하는 동작을 더 포함한다. 동작들은 또한 이전 상태의 내부 비트들과 치환된 상태의 내부 비트들의 XOR을 실행하는 동작을 포함한다.
본 개시내용의 구현예들은 다음의 임의적 특징들 중 하나 이상을 포함할 수 있다. 시스템의 일부 구성들에서, PRNG를 초기화하는 동작은 PRNG의 상태를 0으로 설정하고 외부 비트들을 임의의 시드 값들로 설정하는 동작을 포함한다. 임계 횟수는 적어도 17 회를 포함할 수 있다. 일부 예들에서, 라운드 함수는 AES의 적어도 두 개 라운드들을 포함한다. 이러한 예들에서, AES의 적어도 두 개 라운드들 각각은 AES의 다른 라운드들의 AES 라운드 키들과 상이한 대응하는 AES 라운드 키를 사용할 수 있다.
일부 구현예들에서, 페이스텔 네트워크의 홀수 번째 브랜치들을 페이스텔 네트워크의 대응하는 짝수 번째 이웃 브랜치들의 함수와 XOR하는 동작은 무작위 비트들을 발생시킨다. 128 비트들의 각 브랜치를 규정된 순서로 셔플링하는 동작은, 라운드 함수를 실행하고 각 브랜치를 여덟 회 셔플링한 이후에, 완전 서브-브랜치 확산을 달성할 수 있다. 일부 구현예들에서, 규정된 순서는 {7, 2, 13, 4, 11, 8, 3, 6, 15, 0, 9, 10, 1, 14, 5, 12}를 포함한다. 임의로, 방법은 내부 비트에 액세스하는 것을 방지하고 외부 비트에 액세스하는 것을 가능하게 하는 단계를 포함할 수 있다.
본 개시내용의 하나 이상의 구현예들의 세부 사항은 첨부 도면들 및 이하의 설명에서 제시된다. 다른 양태들, 특징들 및 장점들은 상세한 설명 및 도면들 및 청구범위로부터 명백해질 것이다.
도 1은 난수를 생성하기 위한 예시적인 시스템의 개략도이다.
도 2a 및 도 2b는 128 비트들의 16 개 브랜치들을 갖는 일반화된 페이스텔 네트워크를 구현하는 예시적인 의사 난수 생성기(PRNG)의 개략도들이다.
도 2c는 치환된 상태의 내부 비트들과 이전 상태의 내부 비트들 사이에 XOR을 실행하는 도 2a 및 도 2b의 RPNG의 개략도를 도시한다.
도 3은 난수를 생성하기 위한 예시적인 방법의 흐름도이다.
도 4는 예시적인 컴퓨팅 디바이스의 개략도이다.
다양한 도면들에서 유사한 참조 부호들은 유사한 요소들을 나타낸다.
본 명세서에서의 구현예들은 기존의 범용 난수 생성기들과 동등한 런타임 비용들을 달성하면서, 더 높은 기준선 레벨의 보안을 제공하는 의사 난수 생성기(PRNG)에 관한 것이다. 예를 들어, '더 높은 기준선 레벨의 보안'은 경험적 무작위성(empirical randomness), 예측 불가능성(unpredictability) 및 역추적 저항(backtracking resistance)의 특성들을 특징으로 하는 PRNG를 지칭한다. 기존의 범용 난수 생성기들은 경험적 무작위성, 예측 불가능성 및 역추적 저항의 이러한 특성들 중 하나 또는 둘을 나타낼 수 있지만, 속도를 심하게 희생시키지 않고(예를 들어, 런타임 비용들을 증가시키지 않고) 세 가지를 모두 나타내는 것으로 알려진 것은 없다.
본 명세서에 사용된 것으로 '경험적 무작위성'은 PRNG이 시뮬레이션들에 영향을 미칠 수 있는 상관들과 같은 결함들의 가능성이 줄어든 것을 나타내는 것을 지칭하며, '예측 불가능성'은, 264 개 이상의 무작위 출력들을 생성하여 저장할 수 있는 비교적 강력한 상대자들이 PRNG의 현재 상태를 알지 못하는 한, 이 상대자들이 미래 출력들을 예측하는 것을 PRNG가 방지할 수 있다는 것을 지칭한다. 따라서, 상대자들은 상대자들이 현재 상태에 액세스하는 권한을 획득하지 않는 한 또는 적어도 264 개 쿼리들을 발행할 수 없는 한 PRNG에 의해 미래 출력들을 정확하게 예측하는 무시할만한 확률만을 가질 뿐이다. 적어도 264 개 쿼리들의 공격을 발행하는 데 상대자에게 110,000 USD 이상의 비용이 들기 때문에, 264 개 하한선은 잠재적 공격자들이 무작위 출력들을 예측하려 시도하는 것을 단념시키는 보수적인 추정치로서 선택된다. PRNG의 '예측 불가능성'은 또한 상대자들이 무작위화 알고리즘들에서 최악의 경우들을 트리거하기를 더 어렵게 함으로써 또는 무작위화 온라인 샘플링 알고리즘들에 의해 인출된 샘플들에 영향을 미치도록 함으로써 PRNG를 비암호화 애플리케이션들에 유용하게 만들어 준다. 마지막으로 '역추적 저항'은 PRNG의 현재 상태가 손상되더라도 PRNG가 과거 출력들을 재구성하는 것을 방지하는 것을 지칭한다. '역추적 저항'의 특성은 시뮬레이션 애플리케이션들에 필요하지 않을 수 있지만, 이러한 특성은 입력 샘플들이 스니핑/샘플링되었던 과거 거동의 출력들을 상대자들이 발견하는 것을 방지할 것이다.
일부 구현예들에서, PRNG는 128 비트들의 16 개 브랜치들을 갖는 일반화된 타입-2 페이스텔 네트워크를 채용하며, 고급 암호화 표준 라운드 키들을 사용하여 라운드 함수를 실행하고 라운드 함수를 실행한 이후에 128 비트들의 각 브랜치를 규정된 순서로 셔플링함으로써 PRNG의 상태를 치환한다. 치환은 셔플링이 완전 비트 확산(full-bit diffusion)을 성공적으로 달성하기 위해 라운드 함수 및 후속 셔플링의 실행을 임계 횟수 동안 반복할 수 있다. 본 명세서에서 사용되는 것으로, "임계 횟수"이라는 용어는 임계 횟수의 치환 라운드를 지칭할 수 있고, 각각의 치환 라운드는 AES 키들을 사용한 대응하는 라운드 함수 및 후속 셔플링을 실행한다. 일부 예들에서, 셔플링은 16 라운드들 이후에 두 개의 서브블록 확산들을 달성하기 때문에 임계 횟수는 완전 비트 확산에 대해 적어도 17 회를 포함한다. 더욱이, 라운드 함수를 실행하는 것은 완전 비트 확산을 달성하기 위해 AES의 적어도 두 개 라운드들을 실행하는 것을 포함할 수 있다. 일반적으로, AES의 단일 라운드는 활성적인 치환 박스들의 비(ratio)의 측면에서 두 AES 라운드들보다 덜 효율적이다.
도 1을 참조하면, 일부 구현예들에서, 시스템(100)은 네트워크(130)를 통해 원격 시스템(140)과 통신할 수 있는 사용자(10)와 연관된 하나 이상의 클라이언트 디바이스들(110, 110a-n)을 포함한다. 원격 시스템(140)은 스케일러블(scalable)/융통성이 있는 자원들(142)을 갖는 분산 시스템(예를 들어, 클라우드 환경)일 수 있다. 자원들(142)은 컴퓨팅 자원들(144)(예를 들어, 데이터 처리 하드웨어) 및/또는 저장 자원들(146)(예를 들어, 메모리 하드웨어)를 포함한다. 일부 구현예들에서, 원격 시스템(140)은 고급 암호화 표준(AES) 라운드 키들(192)을 포함하는 키 소스(190) 및 키 소스(190)와 통신하고 그리고 키 소스(190)로부터 검색된 AES 라운드 키들(192)을 사용하는 라운드 함수를 실행함으로써 무작위 비트들(202)을 생성하도록 구성된 의사 난수 생성기(PRNG)(200)를 실행한다. 본 명세서에서 사용되는 것으로, 무작위 비트들(202) 및 난수(들)이라는 용어는 상호 교환 가능한 것으로 사용될 수 있다. 라운드 함수는 또한 AES의 두 라운드들을 포함할 수 있으며, AES의 각 라운드는 AES의 다른 라운드의 AES 라운드 키(192)와 상이한 대응하는 AES 라운드 키(192)를 사용한다. 라운드 함수는 또한 AES의 두 개 초과의 라운드들을 포함할 수 있으며, AES의 라운드들 각각은 대응하는 상이한 AES 라운드 키(192)를 사용한다. AES 라운드 키들(192)은 밀집되고 서로 독립적이어서 AES의 대응하는 라운드가 모든 열들이 동일한 평문의 대칭성을 파괴하여서 상대자들로부터의 공격들을 피하는 것을 보장할 수 있다.
일부 예들에서, 원격 시스템(140)은 PRNG(200)로의 액세스를 관리하기 위한 PRNG 관리자(150)를 실행한다. 클라이언트 디바이스들(110)은 네트워크(130)를 통해 PRNG 관리자(150)와 통신할 수 있는 임의의 컴퓨팅 디바이스들일 수 있다. 클라이언트 디바이스들(110)은 랩톱들, 태블릿들, 스마트 폰들, 및 웨어러블 컴퓨팅 디바이스들(예를 들어, 헤드셋들 및/또는 시계들)과 같은 데스크톱 컴퓨팅 디바이스들 및 모바일 컴퓨팅 디바이스들(그러나, 이에 제한되지 않음)을 포함한다. 클라이언트 디바이스들(110)은 원격 시스템(140) 상에서 실행되는 소프트웨어 애플리케이션들(170)을 배치하고/배치하거나 액세스하는 원격 시스템(140)의 사용자들(10)에 대응할 수 있다. 예를 들어, 원격 시스템(140)은 하나 이상의 컨테이너들(180)의 내용들이 원격 시스템(140) 상에서 실행되는 소프트웨어 애플리케이션(170)과 집합적으로 연관될 수 있는 메모리 하드웨어 내의 하나 이상의 컨테이너들(180, 180a-n)을 갖는 컨테이너 환경을 실행할 수 있다. 클라이언트 디바이스(110)는 소프트웨어 애플리케이션들(170)을 부가적으로 또는 대안적으로 실행할 수 있다.
일부 구현예들에서, PRNG(200)는 클라이언트 디바이스(110)로부터 난수 요청(120)을 수신하는 것에 응답하여 난수(202)를 생성하고, PRNG 관리자(150)는 난수(202)를 다시 클라이언트 디바이스(110)로 송신한다. 부가적으로 또는 대안적으로, 원격 시스템(140) 상에서 실행되는 소프트웨어 애플리케이션(170)은 난수 요청(120)을 제공하고 PRNG(200)에 의해 생성된 난수(202)를 PRNG 관리자(150)로부터 직접 수신할 수 있다. 본 개시내용은 요청(120)을 제공하는 임의의 하나의 특정 소스로 제한되지 않는다. 실제로, PRNG(200)는 요청(120)의 수신과 무관하게 무작위 비트들(202)을 생성하도록 구성될 수 있다. 일부 시나리오들에서, 소프트웨어 애플리케이션(170)은 난수(202)를 입력 시드 값으로서 사용한다. 다른 시나리오들에서, 소프트웨어 애플리케이션(164)은 PRNG(200)에 의해 출력된 난수(202)를 복권 번호(또는 복권 번호들의 시퀀스)로서 사용하는, 전자 복권과 같은 게임 애플리케이션에 대응한다. PRNG(200)는 난수들을 필요로 하는 임의의 작업/알고리즘에 의해 사용하기 위한 난수들/비트들(202)을 생성할 수 있다.
도 1 및 도 2a 내지 도 2c를 참조하면, 일부 구현들에서, PRNG(200)는 내부 비트들(210i) 및 외부 비트들(210o)을 포함하는 2,048 비트들(210)의 상태를 갖는다. 내부 비트들(210i)은 첫 128 비트들을 포함하고 외부 비트들(210o)은 2,048 비트들 중 나머지 비트들을 포함한다. 내부 비트들(210i)은 스펀지의 '용량'과 연관된 액세스할 수 없는 '내부' 부분에 대응한다. 암호화에서, 스펀지 함수 또는 스펀지 구성은 임의의 길이의 입력 비트 스트림을 취하고 임의의 원하는 길이의 출력 비트 스트림을 생성하는 유한 내부 상태를 갖는 알고리즘들의 클래스이다. 데이터 처리 하드웨어(142)는 (i) PRNG(200)를 초기화한 다음 페이스텔 네트워크를 구현하여 난수(202)를 생성하기 위한 PRNG(200)의 상태를 치환한다. PRNG(200)는 난수들(202)의 재현 가능한 시퀀스들을 생성하도록 구성되기 때문에, 외부 엔트로피 소스들로부터 상태를 시딩(seeding)하는 것은 바람직하지 않다. 일부 시나리오들에서, PRNG(200)를 초기화하는 것은 PRNG(200)의 상태를 0으로 설정하는 것 및 임의로는 외부 비트들(210o)의 적어도 일부를 임의의 사용자 명시된 시드 값들로 설정하는 것을 포함한다. 다른 시나리오들에서, PRNG(200)를 초기화하는 것은 PRNG(200)의 상태를 이전 상태로 설정하는 것을 포함한다. PRNG(200)를 초기화하는 이러한 시나리오는, PRNG(200)가 상태를 0으로 설정하고 외부 비트들(210o)을 임의의 사용자 명시된 시드 값들로 설정하는 초기화를 통해 먼저 구성된 이후에 사용될 수 있다.
PRNG(200)를 초기화한 이후에, 데이터 처리 하드웨어(142)는 키 소스(190)로부터 AES 라운드 키들(192)을 검색함으로써 치환을 시작한다. 페이스텔 네트워크는 각각의 브랜치가 128 비트들을 갖는 16 개 브랜치들(220)을 포함한다. 페이스텔 네트워크는 더 작은 블록들/브랜치들(예를 들어, 16 내지 32 비트 블록들)로부터 더 큰 치환들을 구성하기 위해 통상적으로 예약된 타입-2 일반화된 페이스텔 네트워크를 포함한다. 타입-2 일반화된 페이스텔 네트워크 구성들은 이들이 의사 랜덤 함수의 충분한 횟수의 치환 라운드들 이후에 강력한 의사 랜덤 치환들을 생성한다는 의미에서 '견실하다(sound)'. 그러나, 여덟(8) 개 초과의 브랜치들/블록들을 갖는 페이스텔 네트워크를 사용하는 기존의 일부 넘버 생성기들과는 달리, 본 명세서에 개시된 페이스텔 네트워크는 다수의 독립적인 입력들에 의존하지 않는다. 도 2a에 도시된 예에서, PRNG(200)가 초기화될 때 (i), 제1 브랜치 S0(220)는 내부 비트들(210i)(예를 들어, 128 비트들)을 포함하고, 제2 내지 제16 브랜치들(S1-S15)(220)은 외부 비트들(210o)(예를 들어, 각 브랜치(S1-S15)에서 128 개의 외부 비트들)을 포함한다. 치환은 두 단계들: (1) 라운드 함수 실행하는 단계; 및 (2) 라운드 함수를 실행한 이후에 128 비트들의 각 브랜치(220)를 규정된 순서로 셔플링하는 단계를 포함한다.
치환의 제1 단계 동안, 데이터 처리 하드웨어(142)는 AES 라운드 키들(192)을 사용하여 라운드 함수를 실행한다. 라운드 함수는 데이터 처리 하드웨어(142) 상에서 가속된 AES 블록 암호 하드웨어를 포함할 수 있으며, AESNI 명령어들을 사용하므로 라운드 함수는 최적화된 소프트웨어 구현예들보다 다섯 내지 열 배 더 빠르면서, 기존 난수 생성기들에 의한 치환을 능가할 수 있다. PRNG(200)에 의해 사용되는 라운드 함수는 페이스텔 네트워크의 홀수 번째 브랜치들(220)을 페이스텔 네트워크의 대응하는 짝수 번째 이웃 브랜치들(220)의 함수(230)와 XOR하기 위한 XOR(240)을 사용한다. 도시된 예에서, 라운드 함수는 홀수 번째 브랜치 S1(220)을 대응하는 짝수 번째 이웃 브랜치 S0(220)의 함수(230)와 XOR하여 대응하는 무작위 외부 비트들(
Figure pct00001
)를 출력한다. 유사하게, 라운드 함수는 홀수 번째 브랜치 S3(220)를 대응하는 짝수 번째 이웃 브랜치 S2(220)와 XOR하여 대응하는 무작위 외부 비트들(
Figure pct00002
)을 출력하는 식으로 라운드 함수가 마지막 홀수 번째 브랜치 S15(220)를 대응하는 짝수 번째 이웃 브랜치 S14(220)와 XOR하여 대응하는 무작위 외부 비트들(
Figure pct00003
)을 출력할 때까지 계속된다. 따라서, 치환은, 하나의 라운드 함수가 두(2) 개의 이웃한 짝수-홀수 브랜치들(220)을 포함하기 때문에 여덟(8) 라운드 함수들을 병렬로 실행한다. 대조적으로, 전통적인 치환 기술들은 한 번에 하나의 라운드 함수만을 실행하거나, 또는 대부분은 네 개 내지 여섯 개의 라운드 함수들을 병렬로 실행한다. 그러나, 하드웨어 가속 프로세서들의 최근의 발전들로 인해, PRNG(200)는 동시에 여덟(8) 라운드 함수들을 실행할 수 있고, 각각의 라운드 함수는 AES의 적어도 두 번의 라운드들을 포함한다.
PRNG(200)에 2,048 비트들의 상태를 제공하면 라운드 함수들의 병렬 평가가 가능해지고, 그럼으로써 AESENC 명령어들과 연관된 긴 대기 시간(latency)을 감출 수 있다. 대조적으로, 더 느린 컴퓨팅 성능에 의해 제한되는 기존의 난수 생성기들은 전형적으로 256 비트들의 상태들을 가지며, 그럼으로써 브랜치들을 치환하는데 필요한 총 네(4) 라운드 함수들에 대해 각각 32 비트들의 8 개 브랜치들을 갖는 페이스텔 네트워크만을 필요로 한다.
일부 예들에서, 라운드 함수는 AES의 적어도 두 번의 라운드들을 포함하고, AES의 각 라운드는 AES의 다른 라운드의 AES 라운드 키(192)와 상이한 대응하는 AES 라운드 키(192)를 사용한다. 예를 들어, AES의 두 라운드들을 포함하는 라운드 함수는 다음과 같이 표현될 수 있다.
Figure pct00004
Figure pct00005
치환의 제2 단계 동안, 셔플러(250)는 128 비트들의 각 브랜치(220)를 규정된 순서로 셔플링한다. 예를 들어, 셔플러는 짝수 번째 브랜치들 S0, S2, ..., S14(220) 각각으로부터 비트들(210) 및 페이스텔 네트워크의 각 홀수 번째 브랜치(220)와 페이스텔 네트워크의 대응하는 짝수 번째 이웃 브랜치(220)의 함수(230)와 XOR하는 라운드 함수들에 의해 생성된 무작위 외부 비트들(
Figure pct00006
)을 수신한다. 일부 예들에서, 셔플러(250)의 규정된 순서는 여덟(8) 치환 라운드들, 예를 들어, 라운드 함수 및 후속 셔플링의 실행이 여덟(8) 회 수행된 후에 페이스텔 네트워크가 완전 서브-브랜치 확산(full sub-branch diffusion)에 도달하도록 선택된다. 여기서, "완전 서브-브랜치 확산"이라는 용어는 모든 다른 입력 브랜치(220)에 종속하는 페이스텔 네트워크의 각 브랜치(220)를 지칭한다. 대조적으로, 순환 시프트들(cyclic shift)을 이용하는 전통적인 셔플링 기술들은 완전 서브-브랜치 확산을 달성하기 위해 16 개 브랜치들에서 16 개 치환 라운드들을 필요로 할 것이고, 그래서 더 느리다. 일 구현예에서, 셔플러(250)의 규정된 순서는 {7, 2, 13, 4, 11, 8, 3, 6, 15, 0, 9, 10, 1, 14, 5, 12}, 즉 16 개 브랜치들을 치환하기 위한 최선의 공격 저항을 제공하는 알려진 순서를 포함한다. 예를 들어, 브랜치들(220)을 규정된 순서로 셔플링하기 위한 치환 단계는 다음과 같이 표현될 수 있다.
Figure pct00007
도 2a에 도시된 바와 같이, 셔플러(250)는 셔플 브랜치들 S'1, S'2, S'3, S'4, ..., S'14, S'15(220')을 제1 치환 라운드 동안 규정된 순서로 출력한다. 위에서 언급한 바와 같이, 치환은 셔플링이 완전 비트 확산을 성공적으로 달성하기 위해 치환 라운드들의 임계 수(n)(예를 들어, 임계 횟수) 동안 라운드 함수 및 후속 셔플링의 실행을 반복할 수 있다. 따라서, 제1 치환 라운드 이후에 발생하는 각각의 치환 라운드는 직전의 치환 라운드 동안 셔플러(250)에 의해 출력된 셔플링된 브랜치들(220)을 사용한다. 예를 들어, 도 2b는 도 2a를 참조하여 위에서 설명한 바와 같이, 라운드 함수 및 후속 셔플링의 실행을 위한 대응하는 입력들로서 제1 치환 라운드로부터 출력된 셔플 브랜치들 S'1, S'2, ..., S'14, S'15(220')을 사용하는 제2 치환 라운드를 도시한다. 여기서, 셔플러(250)는 제2 치환 라운드 동안 규정된 순서로 셔플 브랜치들(S"1, S"2, ..., S"14, S"15(220")을 출력하며, 이에 의해 제3 치환 라운드는 이들 라운드 함수 및 후속 셔플링의 실행을 위한 입력들로서 이러한 셔플링된 브랜치들을 사용하여 셔플링된 브랜치들 S"'1, S"'2, ..., S"'14, S"'15(220"')을 규정된 순서로 출력한다. 도 2b는 치환 라운드들의 임계 수(n)에 도달할 때까지 라운드 함수 및 후속 셔플링의 실행을 반복하고, 이에 의해 셔플러(250)는 셔플 브랜치들 Sn 1, Sn 2, ..., Sn 1, Sn 15(220n)을 규정된 순서로 출력하는 치환을 도시한다. 여기서, 브랜치들 Sn 1, Sn 2, ..., Sn 1, Sn 15(220n)은 치환된 상태의 2,048 비트들을 포함한다. 일부 구현예들에서, 128 비트들의 각 브랜치를 {7, 2, 13, 4, 11, 8, 3, 6, 15, 0, 9, 10, 1, 14, 5, 12}의 규정된 순서로 셔플링하면 16 개 치환 라운드들 이후에 두 개의 서브-블록 확산들을 달성하기 때문에, 치환 라운드들의 임계 수(n)는 완전 비트 확산을 달성하기 위해 적어도 17 개 치환 라운드들(예를 들어, n = 17)을 포함한다.
위에서 언급한 바와 같이, 데이터 처리 하드웨어(142)는 치환의 시점에 키 소스(190)로부터 AES 라운드 키들(192)을 검색할 수 있다. 키 소스(190)는 암호화적으로 안전하며, PRNG(200)를 초기화하는 시점에 임의의 기술을 사용하여 AES 라운드 키들(192)을 생성할 수 있다. PRNG(200)를 초기화하고 17 개 치환 라운드들 동안 PRNG(200)의 상태를 치환하는 것은 다음과 같이 표현될 수 있다.
Figure pct00008
Figure pct00009
계속해서 도 2b를 참조하면, 제1 브랜치 Sn 1(220n)는 치환된 상태의 2,048 비트들 중 첫 128 비트들에 대응하는 치환된 내부 비트들(210iP) 및 제2 내지 제16 브랜치들(Sn 2-Sn 15)을 포함하고, 각각의 브랜치는 치환된 상태의 2,048 비트들의 나머지 비트들에 대응하는 치환된 무작위 외부 비트들(
Figure pct00010
)을 포함한다. 여기서, 무작위 외부 비트들(
Figure pct00011
)은 원격 시스템(140) 상에서 및/또는 클라이언트 디바이스(110) 상에서 실행되는 소프트웨어 애플리케이션(170)에 의해 사용하기 위해 PRNG(200)에 의해 생성되고 출력되는 난수(들)/비트들(202)에 대응한다.
도 2c를 참조하면, 일부 구현예들에서, PRNG(200)는 (예를 들어, 데이터 처리 하드웨어(142)를 통해) 치환된 상태(예를 들어, 상태 [1])의 치환된 내부 비트들(210iP)과 이전 상태(예를 들어, 상태 [0])의 내부 비트들(210i)의 XOR을 실행하여 XOR된 내부 비트들(210iX)을 생성한다. 도시된 예에서, 이전 상태의 내부 비트들(210i)은 PRNG(200)가 초기화될 때 제1 브랜치 S0(220)의 첫 128 비트들을 포함한다(도 2a). 여기서, XOR된 내부 비트들(210iX)은 PRNG(200)의 현재 상태(예를 들어, 치환된 상태 [1])가 손상되더라도 과거 출력들의 재구성을 방지하기 위해 전술한 '역추적 저항'을 PRNG(200)에 제공한다. 따라서, 상대자들은 (예를 들어, XOR된 내부 비트들(210iX)을 추측함으로써) 치환을 향한 2127 개 미만의 순방향 또는 역방향 쿼리들을 갖는 난수와 이전 출력들을 구별할 것으로 기대할 수 없다. 따라서, PRNG(200)는 난수(들)/비트들(202)에 대응하는 무작위 외부 비트들(
Figure pct00012
)에 액세스하는 것을 가능하게 하고, 내부 비트들(210i, 210iX)에 액세스하는 것을 방지한다. 치환된 상태의 내부 비트들과 이전 상태의 내부 비트들의 XOR을 실행하는 것은 다음과 같이 표현될 수 있다.
Figure pct00013
Figure pct00014
도 3은 난수들을 생성하기 위한 예시적인 방법(300)의 흐름도이다. 흐름도는 동작(302)에서 데이터 처리 하드웨어(142)가 내부 비트들(210i, 210) 및 외부 비트들(210o, 210)을 포함하는 2048 비트들의 상태를 갖는 의사 난수 생성기(PRNG)를 초기화할 때 시작한다. 내부 비트들(210i)은 2048 비트들 중 첫 128 비트들을 포함하고 외부 비트들(210o)은 2048 비트들 중 나머지 비트들을 포함한다. PRNG(200)의 상태를 초기화하는 단계는 PRNG(200)의 상태를 0으로 설정하고 외부 비트들(210o)을 임의의 시드 값들로 설정하는 단계를 포함할 수 있다. 임의의 시드 값들은 사용자 명시될 수 있다. 다른 예들에서, PRNG(200)의 상태를 초기화하는 단계는 PRNG(200)의 상태를 이전 상태로 설정하는 단계를 포함한다.
동작(304)에서, 데이터 처리 하드웨어(142)는 키 소스(190)로부터 고급 암호화 표준(AES) 라운드 키들(192)을 먼저 검색함으로써 PRNG(200)의 상태를 치환한다. 데이터 처리 하드웨어(142)는 AES의 적어도 두 개의 상이한 라운드 키들(192)을 검색하고, 키 소스(190)는 암호적으로 안전할 수 있다. 임계 횟수 동안, 데이터 처리(142)는 또한 AES 라운드 키들(192)을 사용한 라운드 함수 및 셔플링 브랜치들(220)을 실행함으로써 PRNG(200)의 상태를 치환한다. 구체적으로는, 동작(306)에서, AES 라운드 키들(192)을 사용하여 라운드 함수를 실행하는 단계는 128 비트들의 16개 브랜치들을 갖는 페이스텔 네트워크의 홀수 번째 브랜치들(220)을 페이스텔 네트워크의 대응하는 짝수 번째 이웃 브랜치들(220)의 함수와 XOR하는 단계를 포함한다. 일부 예들에서, 라운드 함수는 AES의 적어도 두 라운드들을 포함한다. AES의 적어도 두 라운드들의 각각은 AES의 다른 라운드들의 AES 라운드 키들(192)과는 상이한 대응하는 AES 라운드 키(192)를 포함할 수 있다. 동작 (308)에서, 브랜치들(220)을 셔플링하는 단계는 128 비트들의 각각의 브랜치(220)를 규정된 순서로 셔플링하는 단계를 포함한다. 규정된 순서는 라운드 함수를 실행하고 각각의 브랜치(220)를 여덟 회 셔플링한 이후에 완전 서브-브랜치 확산을 달성하도록 선택될 수 있다. 일부 예들에서, 규정된 순서는 {7, 2, 13, 4, 11, 8, 3, 6, 15, 0, 9, 10, 1, 14, 5, 12}를 포함한다. 일부 구현예들에서, 임계 횟수는 치환이 완전 비트 확산을 달성하도록 적어도 17 회를 포함한다. 동작 (308)에서, 데이터 처리 하드웨어(142)는 치환된 상태의 내부 비트들(210, 210iP)과 이전 상태의 내부 비트들(210i)의 XOR을 실행한다. XOR은 PRNG(200)의 현재 상태(예를 들어, 치환된 상태 [1])가 손상되더라도 과거 출력들의 재구성을 방지하기 위해 XOR의 내부 비트들(210iX)를 생성하여 PRNG(200)에 '역추적 저항'을 제공한다.
소프트웨어 애플리케이션(즉, 소프트웨어 자원)은 컴퓨팅 디바이스로 하여금 작업을 수행하게 하는 컴퓨터 소프트웨어를 지칭할 수 있다. 일부 예들에서, 소프트웨어 애플리케이션은 "애플리케이션", "앱" 또는 "프로그램"으로 지칭될 수 있다. 예시적인 애플리케이션들은 시스템 진단 애플리케이션들, 시스템 관리 애플리케이션들, 시스템 유지 보수 애플리케이션들, 워드 프로세싱 애플리케이션들, 스프레드시트 애플리케이션들, 메시징 애플리케이션들, 미디어 스트리밍 애플리케이션들, 소셜 네트워킹 애플리케이션들 및 게임 애플리케이션들(그러나, 이에 제한되지 않음)을 포함한다.
비 일시적 메모리는 컴퓨팅 디바이스에 의해 사용하기 위해 일시적 또는 영구적으로 프로그램들(예를 들어, 명령어들의 시퀀스들) 또는 데이터(예를 들어, 프로그램 상태 정보)를 저장하는 데 사용되는 물리적 디바이스들일 수 있다. 비 일시적 메모리는 휘발성 및/또는 비 휘발성 어드레싱 가능 반도체 메모리일 수 있다. 비 휘발성 메모리의 예들은 플래시 메모리 및 판독 전용 메모리(read-only memory)(ROM)/프로그램 가능 판독 전용 메모리(programmable read-only memory)(PROM)/소거 가능 프로그램 가능 판독 전용 메모리(erasable programmable read-only memory)(EPROM)/전자적으로 소거 가능한 프로그램 가능 판독 전용 메모리(electronically erasable programmable read-only memory)(EEPROM)(예를 들면, 부팅 프로그램들과 같은, 전형적으로 펌웨어 용으로 사용됨)을 포함한다(그러나, 이에 제한되지 않는다). 휘발성 메모리의 예들은 랜덤 액세스 메모리(random access memory)(RAM), 동적 랜덤 액세스 메모리(dynamic random access memory)(DRAM), 정적 랜덤 액세스 메모리(static random access memory)(SRAM), 위상 변화 메모리(phase change memory)(RAM) 및 디스크들 또는 테이프들을 포함한다(그러나, 이에 제한되지 않는다).
도 4는 본 문서에서 설명된 시스템들 및 방법들을 구현하는 데 사용될 수 있는 예시적인 컴퓨팅 디바이스(400)의 개략도이다. 컴퓨팅 디바이스(400)는 랩톱들, 데스크톱들, 워크스테이션들, 개인 휴대 정보 단말기들, 서버들, 블레이드 서버들, 메인프레임들 및 그 밖의 다른 적절한 컴퓨터들과 같은 다양한 형태들의 디지털 컴퓨터들을 나타내는 것으로 의도된다. 여기에 도시된 컴포넌트들, 그들의 연결들 및 관계들, 및 그들의 기능들은 단지 예시적인 것으로 여겨지며, 본 문서에 설명되고/되거나 청구된 발명들의 구현예들을 제한하려 의도하는 것은 아니다.
컴퓨팅 디바이스(400)는 프로세서(410), 메모리(420), 저장 디바이스(430), 메모리(420)에 연결되는 고속 인터페이스/제어기(440) 및 고속 확장 포트들(440), 및 저속 버스(470) 및 저장 디바이스(430)에 연결되는 저속 인터페이스/제어기(460)를 포함한다. PRNG(200)는 컴퓨팅 디바이스(400) 상에 상주할 수 있다. 컴포넌트들(410, 420, 430, 440, 450 및 460)의 각각은 다양한 버스들을 사용하여 상호 연결되며, 공통 마더보드 상에 또는 적절할 경우 다른 방식들로 장착될 수 있다. 프로세서(410)(예를 들어, 데이터 처리 하드웨어(142))는 그래픽 사용자 인터페이스(graphical user interface)(GUI)에 필요한 그래픽 정보를 고속 인터페이스(440)에 연결된 디스플레이(480)와 같은 외부의 입력/출력 디바이스 상에 표시하기 위해 메모리(420) 내에 또는 저장 디바이스(430) 상에 저장된 명령어들을 비롯한, 컴퓨팅 디바이스(400) 내에서 실행을 위한 명령어들을 처리할 수 있다. 다른 구현예들에서, 다수의 프로세서들 및/또는 다수의 버스들이, 적절한 경우, 다수의 메모리들 및 메모리의 유형들과 함께 사용될 수 있다. 또한, 다수의 컴퓨팅 디바이스들(400)이 연결될 수 있으며, 각각의 디바이스는 (예를 들어, 서버 뱅크, 블레이드 서버들의 그룹, 또는 멀티 프로세서 시스템으로서) 필요한 동작들의 부분들을 제공한다.
메모리(420)(예를 들어, 메모리 하드웨어(144))는 정보를 컴퓨팅 디바이스(400) 내에 비 일시적으로 저장한다. 메모리(420)는 컴퓨터 판독 가능 매체, 휘발성 메모리 유닛(들) 또는 비 휘발성 메모리 유닛(들)일 수 있다. 비 일시적 메모리(420)는 컴퓨팅 디바이스(400)에 의해 사용하기 위해 일시적 또는 영구적으로 프로그램들(예를 들어, 명령어들의 시퀀스들) 또는 데이터(예를 들어, 프로그램 상태 정보)를 저장하는 데 사용되는 물리적 디바이스들일 수 있다. 비 휘발성 메모리의 예들은 플래시 메모리 및 판독 전용 메모리(ROM)/프로그램 가능 판독 전용 메모리(PROM)/소거 가능 프로그램 가능 판독 전용 메모리(EPROM)/전기적으로 소거 가능 프로그램 가능 판독 전용 메모리(EEPROM Memory)(예를 들어, 부팅 프로그램들과 같은, 전형적으로 펌웨어용으로 사용됨)을 포함한다(그러나, 이에 제한되지 않는다). 휘발성 메모리의 예들은 랜덤 액세스 메모리(RAM), 동적 랜덤 액세스 메모리(DRAM), 정적 랜덤 액세스 메모리(SRAM), 위상 변화 메모리(PCM) 및 디스크들 또는 테이프들을 포함한다(그러나, 이에 제한되지 않는다).
저장 디바이스(430)는 컴퓨팅 디바이스(400)에 대용량 저장소를 제공할 수 있다. 일부 구현들에서, 저장 디바이스(430)는 컴퓨터 판독 가능 매체이다. 다양한 상이한 구현예들에서, 저장 디바이스(430)는 플로피 디스크 디바이스, 하드 디스크 디바이스, 광학 디스크 디바이스, 또는 테이프 디바이스, 플래시 메모리 또는 다른 유사한 솔리드 스테이트 메모리 디바이스, 또는 저장 영역 네트워크 또는 다른 구성들 내의 디바이스들을 비롯한 디바이스들의 어레이일 수 있다. 부가적인 구현예들에서, 컴퓨터 프로그램 제품은 정보 캐리어에서 유형적으로 구현된다. 컴퓨터 프로그램 제품은 실행될 때 위에서 설명한 것들과 같은 하나 이상의 방법들을 수행하는 명령어들을 내장한다. 정보 캐리어는 메모리(420), 저장 디바이스(430), 또는 프로세서(410) 상의 메모리와 같은 컴퓨터 또는 머신 판독 가능 매체이다.
고속 제어기(440)는 컴퓨팅 디바이스(400)의 대역폭 집약적 동작들을 관리하는 반면, 저속 제어기(460)는 보다 낮은 대역폭 집약적 동작들을 관리한다. 이러한 임무들의 할당은 예시적일 뿐이다. 일부 구현예들에서, 고속 제어기(440)는 메모리(420), 디스플레이(480)(예를 들어, 그래픽 프로세서 또는 가속기를 통해) 및 다양한 확장 카드들(도시되지 않음)을 수용할 수 있는 고속 확장 포트들(450)에 연결된다. 일부 구현예들에서, 저속 제어기(460)는 저장 디바이스(430) 및 저속 확장 포트(490)에 연결된다. 다양한 통신 포트들(예를 들어, USB, 블루투스, 이더넷, 무선 이더넷)을 포함할 수 있는 저속 확장 포트(490)는 키보드, 포인팅 디바이스, 스캐너, 또는 예를 들어 네트워크 어댑터를 통해 스위치 또는 라우터와 같은 네트워킹 디바이스와 같은 하나 이상의 입력/출력 디바이스들에 연결될 수 있다.
컴퓨팅 디바이스(400)는 도면에 도시된 바와 같이 다수의 상이한 형태들로 구현될 수 있다. 예를 들어, 이것은 표준 서버(400a)로서 구현될 수 있거나 또는 이러한 서버들(400a)의 그룹에서 여러 번 랩톱 컴퓨터(400b)로서 또는 랙 서버 시스템(400c)의 일부로서 구현될 수 있다.
본 명세서에 설명된 시스템들 및 기술들의 다양한 구현예들은 디지털 전자 및/또는 광학 회로, 집적 회로, 특별히 설계된 ASIC들(application specific integrated circuit), 컴퓨터 하드웨어, 펌웨어, 소프트웨어 및/또는 이들의 조합들로 실현될 수 있다. 이러한 다양한 구현예들은 저장 시스템, 적어도 하나의 입력 디바이스 및 적어도 하나의 출력 디바이스로부터 데이터 및 명령어들을 수신하고, 이들로 데이터 및 명령어들을 송신하도록 연결된, 특수 목적 또는 범용일 수 있는, 적어도 하나의 프로그램 가능 프로세서를 포함하는 프로그램 가능 시스템상에서 실행 가능한 및/또는 해석 가능한 하나 이상의 컴퓨터 프로그램들에서의 구현예들을 포함할 수 있다.
이러한 컴퓨터 프로그램(프로그램들, 소프트웨어, 소프트웨어 애플리케이션들 또는 코드라고도 알려져 있음)은 프로그래밍 가능 프로세서를 향한 머신 명령어들을 포함하고, 상위 레벨 절차 및/또는 객체 지향 프로그래밍 언어로 및/또는 어셈블리/머신 언어로 구현될 수 있다. 본 명세서에서 사용되는 것으로, "머신 판독 가능 매체" 및 "컴퓨터 판독 가능 매체"라는 용어들은 머신 명령어들 및/또는 데이터를 프로그램 가능 프로세서에 제공하는데 사용되는, 머신 명령어들을 머신 판독 가능 신호로서 수신하는 머신 판독 가능 매체를 비롯한, 임의의 컴퓨터 프로그램 제품, 비 일시적 컴퓨터 판독 가능 매체, 장치 및/또는 디바이스(예를 들어, 자기 디스크들, 광학 디스크들, 메모리, 프로그램 가능 로직 디바이스들(Programmable Logic Devices)(PLDs))을 지칭한다. "머신 판독 가능 신호"라는 용어는 머신 명령어들 및/또는 데이터를 프로그램 가능 프로세서에 제공하는 데 사용되는 임의의 신호를 지칭한다.
본 명세서에 설명된 프로세스들 및 논리 흐름들은 입력 데이터에 대해 동작하고 출력을 발생함으로써 하나 이상의 컴퓨터 프로그램들을 실행하여 기능들을 수행하는 하나 이상의 프로그램 가능 프로세서들에 의해 수행될 수 있다. 프로세스들 및 로직 흐름들은 또한 특수 목적 로직 회로, 예를 들어 필드 프로그램 가능 게이트 어레이(field programmable gate array)(FPGA) 또는 주문형 집적 회로(application specific integrated circuit)(ASIC)에 의해 수행될 수 있다. 컴퓨터 프로그램의 실행에 적합한 프로세서들은, 예로서 두 범용 마이크로프로세서 및 특수 목적 마이크로 프로세서, 및 임의의 종류의 디지털 컴퓨터의 임의의 하나 이상의 프로세서들을 포함한다. 일반적으로, 프로세서는 판독 전용 메모리 또는 랜덤 액세스 메모리 또는 둘 다로부터 명령어들 및 데이터를 수신할 것이다. 컴퓨터의 필수 요소들은 명령어들을 수행하기 위한 프로세서 및 명령어들 및 데이터를 저장하기 위한 하나 이상의 메모리 디바이스들이다. 일반적으로, 컴퓨터는 또한, 데이터를 저장하기 위한 하나 이상의 대용량 저장 디바이스들, 예를 들면 자기, 광자기 디스크들 또는 광학 디스크들을 포함하거나, 또는 이들로부터 데이터를 수신하거나 이들로 데이터를 전송하기 위해, 또는 그 둘 모두를 위해 동작적으로 연결될 것이다. 그러나 컴퓨터는 이러한 디바이스들을 가질 필요가 없다. 컴퓨터 프로그램 명령어들 및 데이터를 저장하기에 적합한 컴퓨터 판독 가능 매체는, 예로서 반도체 메모리 디바이스들, 예를 들면 EPROM, EEPROM 및 플래시 메모리 디바이스들; 자기 디스크들, 예를 들면 내부 하드 디스크들 또는 착탈식 디스크들; 광자기 디스크들; 및 CD ROM 및 DVD-ROM 디스크들을 비롯한, 모든 형태들의 비 휘발성 메모리, 매체 및 메모리 디바이스들을 포함한다. 프로세서 및 메모리는 특수 목적 로직 회로에 의해 보완되거나, 특수 목적 로직 회로에 포함될 수 있다.
사용자와의 상호 작용을 제공하기 위해, 본 개시내용의 하나 이상의 양태들은 디스플레이 디바이스, 예를 들어 음극선관(cathode ray tube)(CRT), 액정 디스플레이(liquid crystal device)(LCD) 모니터 또는 사용자에게 정보를 디스플레이하기 위한 터치 스크린 및 임의로 사용자가 컴퓨터에 입력을 제공할 수 있는 키보드 및 포인팅 디바이스, 예를 들어, 마우스 또는 트랙볼을 갖는 컴퓨터 상에서 구현될 수 있다. 다른 종류들의 디바이스들이 사용되어 마찬가지로 사용자와의 상호 작용을 제공할 수 있고; 예를 들어, 사용자에게 제공되는 피드백은 임의의 형태의 감각 피드백, 예를 들어 시각적 피드백, 청각 피드백 또는 촉각 피드백일 수 있으며; 사용자로부터의 입력은 음향, 음성 또는 촉각 입력을 비롯한, 임의의 형태로 수신될 수 있다. 또한, 컴퓨터는, 사용자에 의해 사용되는 디바이스에 문서들을 전송하고 디바이스로부터 문서들을 수신함으로써; 예를 들어, 사용자의 클라이언트 디바이스 상의 웹 브라우저로부터 수신된 요청들에 응답하여 웹 페이지들을 이 웹 브라우저에 전송함으로써, 사용자와 상호 작용할 수 있다.
다수의 구현예들이 설명되었다. 그럼에도 불구하고, 본 개시내용의 사상 및 범위를 벗어나지 않고 다양한 변형들이 이루어질 수 있다는 것이 이해될 것이다. 따라서, 다른 구현예들은 다음의 청구 범위의 범주 내에 있다.

Claims (20)

  1. 데이터 처리 하드웨어(142)에 의해, 내부 비트들(210i) 및 외부 비트들(210o)을 포함하는 2048 비트들의 상태를 갖는 의사 난수 생성기(pseudo-random number generator)(PRNG)(200)를 초기화하는 단계 ― 상기 내부 비트들(210i)은 상기 2048 비트들 중 첫 128 비트들을 포함하고 상기 외부 비트들(210o)은 상기 2048 비트들 중 나머지 비트들을 포함함 ―;
    상기 데이터 처리 하드웨어(142)에 의해,
    키 소스(190)로부터 고급 암호화 표준(Advanced Encryption Standard)(AES) 라운드 키들(192)을 검색(retrieving)하며; 그리고
    임계 횟수 동안:
    상기 AES 라운드 키들(192)을 사용하여 라운드 함수를 실행하며 ― 상기 라운드 함수는 128 비트들의 16 개 브랜치들(220)을 갖는 페이스텔 네트워크(Feistel network)의 홀수 번째 브랜치들(220)을 상기 페이스텔 네트워크의 대응하는 짝수 번째 이웃 브랜치들(220)의 함수와 XOR하는 것을 포함함 ―; 그리고
    128 비트들의 각 브랜치(220)를 규정된 순서로 셔플링(shuffling)함으로써;
    상기 PRNG(200)의 상태를 치환(permuting)하는 단계; 및
    상기 데이터 처리 하드웨어(142)에 의해, 이전 상태의 내부 비트들(210i)과 상기 치환된 상태의 내부 비트들(210i)의 XOR을 실행하는 단계;
    를 포함하는,
    난수들(202)을 생성하기 위한 방법(300).
  2. 제1 항에 있어서,
    상기 PRNG(200)를 초기화하는 단계는,
    상기 PRNG(200)의 상태를 0으로 설정하는 단계; 및
    상기 외부 비트들(210o)을 임의의 시드 값들로 설정하는 단계;
    를 포함하는,
    난수들(202)을 생성하기 위한 방법(300).
  3. 제1 항에 있어서,
    상기 PRNG(200)를 초기화하는 단계는 상기 PRNG(200)의 상태를 이전 상태로 설정하는 단계를 포함하는,
    난수들(202)을 생성하기 위한 방법(300).
  4. 제1 항 내지 제3 항 중 어느 한 항에 있어서,
    상기 임계 횟수는 적어도 17 회를 포함하는,
    난수들(202)을 생성하기 위한 방법(300).
  5. 제1 항 내지 제4 항 중 어느 한 항에 있어서,
    상기 라운드 함수는 AES의 적어도 두 라운드들을 포함하는,
    난수들(202)을 생성하기 위한 방법(300).
  6. 제1 항 내지 제5 항 중 어느 한 항에 있어서,
    상기 AES의 적어도 두 라운드들 각각은 AES의 다른 라운드들의 AES 라운드 키들(192)과 상이한 대응하는 AES 라운드 키(192)를 사용하는,
    난수들(202)을 생성하기 위한 방법(300).
  7. 제1 항 내지 제6 항 중 어느 한 항에 있어서,
    상기 페이스텔 네트워크의 상기 홀수 번째 브랜치들(220)을 상기 페이스텔 네트워크의 상기 대응하는 짝수 번째 이웃 브랜치들(220)의 함수와 XOR하는 것은 무작위 비트들(210)을 발생시키고, 상기 외부 비트들(210o)은 상기 결과적인 무작위 비트들(210)을 포함하는,
    난수들(202)을 생성하기 위한 방법(300).
  8. 제1 항 내지 제7 항 중 어느 한 항에 있어서,
    128 비트들의 각 브랜치(220)를 규정된 순서로 셔플링하는 것은, 라운드 함수를 실행하고 각 브랜치(220)를 여덟 회 셔플링한 이후에, 완전 서브-브랜치 확산(full sub-branch diffusion)을 달성하는,
    난수들(202)을 생성하기 위한 방법(300).
  9. 제1 항 내지 제8 항 중 어느 한 항에 있어서,
    상기 규정된 순서는 {7, 2, 13, 4, 11, 8, 3, 6, 15, 0, 9, 10, 1, 14, 5, 12}를 포함하는,
    난수들(202)을 생성하기 위한 방법(300).
  10. 제1 항 내지 제9 항 중 어느 한 항에 있어서,
    상기 내부 비트들(210i)에 액세스하는 것을 방지하고 상기 외부 비트들(210o)에 액세스하는 것을 가능하게 하는 단계
    를 더 포함하는,
    난수들(202)을 생성하기 위한 방법(300).
  11. 데이터 처리 하드웨어(142); 및
    상기 데이터 처리 하드웨어(142)와 통신하는 메모리 하드웨어(144)
    를 포함하고,
    상기 메모리 하드웨어(144)는 상기 데이터 처리 하드웨어(142) 상에서 실행될 때 상기 데이터 처리 하드웨어(142)로 하여금 동작들을 수행하게 하는 명령어들을 저장하고,
    상기 동작들은:
    내부 비트들(210i) 및 외부 비트들(210o)을 포함하는 2048 비트들의 상태를 갖는 의사 난수 생성기(pseudo-random number generator)(PRNG)(200)를 초기화하는 동작 ― 상기 내부 비트들(210i)은 상기 2048 비트들 중 첫 128 비트들을 포함하고 상기 외부 비트들(210o)은 상기 2048 비트들 중 나머지 비트들을 포함함 ―;
    키 소스(190)로부터 고급 암호화 표준(Advanced Encryption Standard)(AES) 라운드 키들(192)을 검색하며; 그리고
    임계 횟수 동안:
    상기 AES 라운드 키들(192)을 사용하여 라운드 함수를 실행하며 ― 상기 라운드 함수는 128 비트들의 16 개 브랜치들(220)을 갖는 페이스텔 네트워크의 홀수 번째 브랜치들(220)을 상기 페이스텔 네트워크의 대응하는 짝수 번째 이웃 브랜치들(220)의 함수와 XOR하는 것을 포함함 ―; 그리고
    128 비트들의 각 브랜치(220)를 규정된 순서로 셔플링함으로써;
    상기 PRNG(200)의 상태를 치환하는 동작; 및
    이전 상태의 내부 비트들(210i)과 상기 치환된 상태의 내부 비트들(210i)의 XOR을 실행하는 동작;
    을 포함하는,
    시스템(100).
  12. 제11 항에 있어서,
    상기 PRNG(200)를 초기화하는 동작은:
    상기 PRNG(200)의 상태를 0으로 설정하는 동작; 및
    상기 외부 비트들(210o)을 임의의 시드 값들로 설정하는 동작;
    을 포함하는,
    시스템(100).
  13. 제11 항에 있어서,
    상기 PRNG(200)를 초기화하는 동작은 상기 PRNG(200)의 상태를 이전 상태로 설정하는 동작을 포함하는,
    시스템(100).
  14. 제11 항 내지 제13 항 중 어느 한 항에 있어서,
    상기 임계 횟수는 적어도 17 회를 포함하는,
    시스템(100).
  15. 제11 항 내지 제14 항 중 어느 한 항에 있어서,
    상기 라운드 함수는 AES의 적어도 두 라운드들을 포함하는,
    시스템(100).
  16. 제11 항 내지 제15 항 중 어느 한 항에 있어서,
    AES의 상기 적어도 두 라운드들 각각은 AES의 다른 라운드들의 AES 라운드 키들(192)과 상이한 대응하는 AES 라운드 키(192)를 사용하는,
    시스템(100).
  17. 제11 항 내지 제16 항 중 어느 한 항에 있어서,
    상기 페이스텔 네트워크의 상기 홀수 번째 브랜치들(220)을 상기 페이스텔 네트워크의 상기 대응하는 짝수 번째 이웃 브랜치들(220)의 함수와 XOR하는 것은 무작위 비트들(202)을 발생시키고, 상기 외부 비트들(210o)은 상기 결과적인 무작위 비트들(202)을 포함하는,
    시스템(100).
  18. 제11 항 내지 제17 항 중 어느 한 항에 있어서,
    128 비트들의 각 브랜치(220)를 규정된 순서로 셔플링하는 것은, 라운드 함수를 실행하고 각 브랜치(220)를 여덟 회 셔플링한 이후에, 완전 서브-브랜치 확산을 달성하는,
    시스템(100).
  19. 제11 항 내지 제18 항 중 어느 한 항에 있어서,
    상기 규정된 순서는 {7, 2, 13, 4, 11, 8, 3, 6, 15, 0, 9, 10, 1, 14, 5, 12}를 포함하는,
    시스템(100).
  20. 제11 항 내지 제19 항 중 어느 한 항에 있어서,
    상기 동작들은 상기 내부 비트들(210i)에 액세스하는 것을 방지하고 상기 외부 비트들(210o)에 액세스하는 것을 가능하게 하는 동작을 더 포함하는,
    시스템(100).
KR1020197035399A 2017-11-07 2017-11-07 난수 생성기 KR102217865B1 (ko)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
PCT/US2017/060275 WO2019093992A1 (en) 2017-11-07 2017-11-07 Random number generator

Publications (2)

Publication Number Publication Date
KR20200003111A true KR20200003111A (ko) 2020-01-08
KR102217865B1 KR102217865B1 (ko) 2021-02-18

Family

ID=60409424

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020197035399A KR102217865B1 (ko) 2017-11-07 2017-11-07 난수 생성기

Country Status (6)

Country Link
US (2) US11449311B2 (ko)
EP (1) EP3616052B1 (ko)
JP (1) JP6782863B1 (ko)
KR (1) KR102217865B1 (ko)
CN (1) CN111279307B (ko)
WO (1) WO2019093992A1 (ko)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2022177984A1 (en) * 2021-02-16 2022-08-25 Cassy Holdings Llc High clock-efficiency random number generation system and method

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20020051597A (ko) * 2000-12-23 2002-06-29 오길록 비대칭키 암호 알고리즘을 이용한 데이터 암호화 시스템및 그 방법
KR20120062287A (ko) * 2010-12-06 2012-06-14 삼성에스디에스 주식회사 암호학적 안전성이 보장된 의사난수 생성 장치 및 그 방법
KR20170067133A (ko) * 2015-12-07 2017-06-15 더 보잉 컴파니 하드웨어 지원 빠른 의사 난수 생성 방법 및 시스템

Family Cites Families (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9361617B2 (en) * 2008-06-17 2016-06-07 Verifone, Inc. Variable-length cipher system and method
DE102009050493A1 (de) * 2009-10-23 2011-04-28 Röllgen, Bernd Blockdatenverschlüsselungsverfahren
US20130168450A1 (en) * 2011-12-30 2013-07-04 Clay W. von Mueller Format preserving cipher system and method
CN105376055B (zh) * 2015-12-09 2019-11-01 捷德(中国)信息科技有限公司 一种生成伪随机数的方法及伪随机数发生器
US10103873B2 (en) * 2016-04-01 2018-10-16 Intel Corporation Power side-channel attack resistant advanced encryption standard accelerator processor

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20020051597A (ko) * 2000-12-23 2002-06-29 오길록 비대칭키 암호 알고리즘을 이용한 데이터 암호화 시스템및 그 방법
KR20120062287A (ko) * 2010-12-06 2012-06-14 삼성에스디에스 주식회사 암호학적 안전성이 보장된 의사난수 생성 장치 및 그 방법
KR20170067133A (ko) * 2015-12-07 2017-06-15 더 보잉 컴파니 하드웨어 지원 빠른 의사 난수 생성 방법 및 시스템

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2022177984A1 (en) * 2021-02-16 2022-08-25 Cassy Holdings Llc High clock-efficiency random number generation system and method
US11907684B2 (en) 2021-02-16 2024-02-20 Cassy Holdings Llc High clock-efficiency random number generation system and method

Also Published As

Publication number Publication date
JP6782863B1 (ja) 2020-11-11
CN111279307B (zh) 2023-05-12
US11755287B2 (en) 2023-09-12
WO2019093992A1 (en) 2019-05-16
JP2021501902A (ja) 2021-01-21
US20200401375A1 (en) 2020-12-24
EP3616052A1 (en) 2020-03-04
US20220405058A1 (en) 2022-12-22
US11449311B2 (en) 2022-09-20
EP3616052B1 (en) 2021-08-25
CN111279307A (zh) 2020-06-12
KR102217865B1 (ko) 2021-02-18

Similar Documents

Publication Publication Date Title
US10007488B2 (en) Secured pseudo-random number generator
CN107017981B (zh) 硬件辅助快速伪随机数生成
KR101143041B1 (ko) 리볼빙 버퍼들을 이용한 스트림 암호 설계 방법
KR101829267B1 (ko) 암호문의 크기가 감소되는 동형 암호화 방법
EP2953052B1 (en) Systems and methods for dynamic data storage
US11328097B2 (en) Encryption circuit for performing virtual encryption operations
KR20200005603A (ko) 차등적 프라이버시를 갖는 불확정 액세스
US11755287B2 (en) Random number generator
Syam Kumar et al. RSA-based dynamic public audit service for integrity verification of data storage in cloud computing using Sobol sequence
US11321475B2 (en) Entropy data based on error correction data
US20150331671A1 (en) Generating pseudo-random numbers using cellular automata
Karimovich et al. Computer's source based (Pseudo) random number generation
Kaur et al. 3D—Playfair cipher using LFSR based unique random number generator
Beckers et al. Fault analysis of the chacha and salsa families of stream ciphers
JP2007041199A (ja) データ分割装置、データ分割方法およびコンピュータプログラム
Jókay et al. Steganographic file system based on JPEG files
Singh et al. 3D—Playfair cipher using Linear Feedback Shift Register
Tobin et al. Secrecy and Randomness: Encoding Cloud data Locally using a One-Time Pad
Li Potential Weaknesses In Pseudorandom Number Generators!
Tripathy et al. Efficiency Comparison and Analysis of Pseudo-random Generators in Network Security
Paju Distributed EaaS simulation using TEEs: A case study in the implementation and practical application of an embedded computer cluster
Jackson A Trivium-Inspired Pseudorandom Number Generator with a Statistical Comparison to the Randomness of SecureRandom and Trivium
Harmouch et al. Statistical properties for sequence produced by pseudorandom number generator used in well-known stream cipher
CN117240434A (zh) 一种数据加密方法、装置、电子设备及存储介质
Johnston et al. Protecting Nuclear Safeguards Monitoring Data from Tampering

Legal Events

Date Code Title Description
A201 Request for examination
E701 Decision to grant or registration of patent right
GRNT Written decision to grant