0.개요
요즘 쇼츠를 보다보니 아름다운 마인크래프트 경관을 보여주는 Seed 를 공유하는 쇼츠들이 많이 뜨게 되었는데 문득 Seed 가 정확하게 뭔지 내가 설명할수있는지 생각해보았는데 잘 말이 떠오르지않아서 조사를 하게 되었다.
1.사전 지식
Seed에 대해 내 경험적인 지식을 통해서 알고 있는것은 무언가 무작위로 생성되는 프로그램이 있을때 특정 시드를 입력하면 해당 시드를 가지고있는 값이 항상 동일하게 결과값이 튀어나온다는 것이다. 이것은 게임이나 Stable Diffusion기반 AI 이미지 생성등 다양한곳에서 볼수있었고 사용해 보았었다.
2.의사 난수(Pseudo-random number)
다들 알다시피 컴퓨터에서 무작위는 완전 무작위가 아니라 의사 난수(Pseudo-random number)를 기반으로 생성된 난수이다. 이거는 수학적인 알고리즘에 의해 생성된 난수이기 때문에 초기값을 알게 되면 예측이 가능하다.
이곳에서 초기값이 즉 씨앗 Seed다.
즉 시드는 의사 난수 생성기의 시작점 역할을 하며 동일한 알고리즘에서 같은 시드 → 같은 난수 시퀀스를 생성한다.
import random
random.seed(42)
print(random.random()) #값 출력: 0.6394267984578837
random.seed(42)
print(random.random()) # 동일한 값 출력: 0.6394267984578837
3.시드의 유출?
그렇다면 이 시드가 유출된다면 이는 해당 서비스에 큰 보안문제를 이르킬수있다. 예를 들어 간단한 난수 생성 예제에서 사용되는 현재시간을 기반으로 생성하는 난수는 보안이 중요한 곳에서 사용하면 위험할수있다.
이렇게 유출되면 해당 시드가 사용된 파트에 공격자가 공격할가능성이 높아지기에 다른 방법들을 사용하여 시드의 유출을 방지해야한다. 대칭키,공개키 암호와 같은곳은 특히나 주의해야한다.
import secrets
secure_token = secrets.token_hex(16)
print(secure_token) # 안전한 난수 기반 토큰
import os
# 16바이트 길이의 물리적 난수 생성
random_bytes = os.urandom(16)
print(random_bytes)
# 정수로 변환
secure_random_int = int.from_bytes(random_bytes, 'big')
print(secure_random_int)
'Computer Science > 개발지식' 카테고리의 다른 글
[개발지식] 트레이드오프(Trade-off)란? (0) | 2024.12.27 |
---|---|
YAML (0) | 2024.06.17 |
XML (0) | 2024.06.17 |