← Back to list

PRNG 란?

개발을 하다보면 꽤 자주 “무작위(랜덤)” 숫자가 필요할 때가 있습니다.

Su Bak · 2024-05-27 10:02 · 3 claps · 1.8 min read paywalled
#prng #cryptography #random-number-generator #programming #random
Open on Medium ↗
Wiki topics: CRY · Crypto & Web3 💻 · Programming 🔒 · Cybersecurity

PRNG 란?

사진: Unsplash의Carson Arias

사진: Unsplash의Carson Arias

개발을 하다보면 꽤 자주 “무작위(랜덤)” 숫자가 필요할 때가 있습니다.

게임에서 흔히 있는 랜덤 아이템 뽑기(가챠)에서 확률이 무작위로 정해지는데 이럴 때 필요할 수 있습니다.

그런데 사실 컴퓨터가 무작위 숫자를 생성한다는 것은 불가능합니다.

왜냐하면 컴퓨터는 명령어를 차례대로 실행하게 만들어져 있기 때문에 컴퓨터 자체로는 무작위성을 생성하는 것이 불가능합니다.

즉, 컴퓨터는 사용자가 시키는 대로만 실행하기 때문에 컴퓨터 자체로는 무작위성을 만들 수 없습니다.

그래서 PRNG(Pseudo Random Number Generator)가 등장하게 되었습니다.

PRNG는 “수학을 이용해 난수에 가까운 숫자를 생성하지만 실제로는 무작위가 아닌 숫자를 생성하는 알고리즘” 입니다

대부분의 프로그래밍 언어에서 무작위 숫자를 생성하는 수식은 아래와 같이 사용합니다.

랜덤숫자1 = (시스템 시간 * a + b) / c
랜덤숫자2 = (랜덤숫자1 * a + b) / c

PRNG는 시드(seed)라고 하는 초기 값이 필요한데 수학을 사용해서 초기 값으로부터 무작위적이고 예측 불가능한 숫자를 생성하려고 합니다.

그런데 위의 수식을 보시면 처음 만들어진 랜덤숫자1을 이용해 다음 랜덤숫자2를 만들 다 보니 어느정도 예측이 가능할 것 같습니다.

이렇듯 시드가 PRNG의 출력을 결정하기 때문에 결과 값은 절대 무작위가 될 수 없어서 가능한 예측할 수 없는 시드를 만들어야 합니다. 이를 “엔트로피” 라고 합니다

엔트로피란 암호학에선 예측 불가능성을 의미하는데요.

컴퓨터는 예측 불가능한 시드를 얻기 위해 사용자의 마우스 움직임이나, 컴퓨터가 켜진 후 경과한 시간, 기계의 온도 등을 엔트로피의 자원으로 사용합니다.

즉, 시드는 예측할 수 없어야 한다는 것이 핵심입니다.

그래서 요즘 OS의 경우 하드웨어의 노이즈를 이용해 난수를 생성한다고 합니다

추가적으로 random.org 사이트에서 생성한 난수는 일정한 패턴도 없이 실제 무작위 숫자를 만드므로 한번 참고해보시면 좋을 것 같습니다.


메타데이터
post_id
bb997db18c60
slug
prng-란-bb997db18c60
url
https://medium.com/@su_bak/prng-%EB%9E%80-bb997db18c60
canonical_url
https://medium.com/@su_bak/prng-%EB%9E%80-bb997db18c60
author_url
https://medium.com/@su_bak
status
ok
fetched_at
2026-06-28 04:42:08