Crypto

난수 생성기, PRNG와 TRNG

총알 2024. 4. 11. 23:09
728x90

Crypto 관련 분야를 공부하다 보면 임의의 수, 좌표 등을 생성하거나 지정한다.

이때 난수생성기(Random Number Generator)를 사용하여 임의의 수를 생성하는데

주로 PRNG와 TRNG를 사용한다.

 

그럼 이 난수생성기를 통해서 하는 것들은 무엇일까...?

그건 아래와 같다.

난수 생성기의 용도
1. 대칭키 또는 개인키 생성
2. Salt 생성
3. IV(Initial Vector), CTR(Counter) 생성

*Salt: password, data 등을 hash 처리하는 단방향 함수의 추가 입력으로 사용되는 랜덤 데이터

*IV: 대칭키 암호화에서 첫 블록을 암호화할 때 사용되는 값

 

다음으로 난수와 관련된 기본 개념들을 알아보자.

 

무작위성(Randomness)
수열이 특정한 패턴이 없거나 실제로 예측이 불가능한 것을 의미하며
아래와 같은 특징을 갖고 있다.

균일 분포: 생성된 수열의 비트 분포가 균일
비균일 분포: 생성된 수열의 비트 분포가 균일하지 않음
독립성: 수열의 부분 수열을 통해서 다른 부분 수열을 추정할 수 없음

 

 

Entropy
정보량을 측정하는 주요 개념중 하나로 불확실성 또는 무질서한 지를 수치화한 것으로
시스템에서 어떠한 정보를 얻기위해 필요한 기대 비용의 최솟값으로 단위는 bit를 사용한다.

엔트로피가 높을 수록 많은 정보량이 필요하다는 것을 의미(추측하기 어려움)하는데,
분포가 균등하지 않거나 어떤 확률로 수열이 편향되어 있을수록 엔트로피가 낮아진다.

 

예측 불가능성(Unpredictability)
앞서 생성된 수열을 통해서 다음에 생성될 수열을 예측할 수 없어야 함

 

재현 불가능성(Reconstruction is impossible)
앞서 생성된 수열이 반복적으로 생성되지 않아야 함

 

 

기본 개념들에 대해서 알아보았으니 이제 본격적으로 PRNG와 TRNG에 대해서 알아보자.

PRNG(Pseudo Random Number Generator)
PRNG를 한국어로 번역하면 유사난수 생성기로 난수를 흉내 내어 생성한 난수생성기를 의미하는데
알고리즘의 상태에 따라 값이 정해져서 생성된 수열의 일정한 주기나 패턴을 가지기 때문에 예측 불가능성이 없다.
PRNG를 통해 난수를 생성할 경우 초기화 된 seed값을 사용하는데, seed값이 같을 경우 동일한 결과가 나온다.

 

PRNG의 생성 방법은 아래와 같다.

1. Seed값을 통해 내부상태(Counter) 초기화

2. Hash 함수를 통해 Pseudorandom bit stream 생성

3. 다음 생성되는 난수는 Counter 값을 1을 증가시켜 다시 Hash 함수를 통해 Pseudorandom bit stream 생성

4. 원하는 길이의 난수를 얻을 때까지 2~3과정 반복

 

TRNG(True Random Number Generator)
TRNG는 입력 값을 실제 랜덤한 정보를 사용하는데 보통 하드웨어의 전기적 특성을 입력값으로 사용한다.
예를 들면 마우스의 움직임, CPU 온도, 클럭, 네트워크 사용량 등이다.
이러한 랜덤 한 값을 수집할 수 있는 것은 하드웨어의 전기적 특성을 이용한 게 유일하다.
PRNG와 다르게 고정된 값을 사용하지 않고, 하드웨어의 전기적 특성을 이용하기 때문에 난수 생성속도는 일반적으로 PRNG보다 느리다.

 

TRNG의 생성 방법은 아래와 같다.

1. 전기적 특성을 이용해 무작위성의 값 선택

2. 선택된 값을 2진수로 변환하여 난수 생성

 

그럼 마지막으로 PRNG와 TRNG의 특징을 표로 정리하며 마무리해야겠다.

 

  PRNG TRNG
Seed TRNG에 의해 생성된 난수 사용 하드웨어의 전기적 특성 사용
생성 속도 빠름 느림
주기성 주기적(재현하기 쉬움) 비주기적(재현하기 어려움)

 

728x90

'Crypto' 카테고리의 다른 글

키유도 함수 PBKDF2  (0) 2024.05.07
MAC(메시지 인증 코드), CMAC 그리고 HMAC  (1) 2024.04.14
ECC 알고리즘, ECDH와 ECDSA  (0) 2024.04.10
Hash function 알고리즘의 종류와 특징  (0) 2024.04.02
Hash Function의 특징과 용도  (0) 2024.04.01