Q> UUID 사용할때 고려해야 하는 보안사항에 대한 문의

SaaS형태로 클라우드상에서 streaming service를 제공하고 있는 회사에서 개발팀을 담당하고 있습니다.
UUID를 사용하게 됐는데요, 설계나 구현할때 보안상 고려해야 햐는 사항은 무엇이 있는지 알려주십시오

A>

1. 보안 고려사항

- UUID는 안전한 방식으로 생성하되, 예측공격과 변조공격을 방지하기 위해 Client측이 아니라 Server측에서 생성해야 한다.
- 안전한 난수생성 알고리즘을 사용하여 생성되어야 한다.(Python의 uuid모듈의 uuid4() 함수 또는 secret 모듈이 이런 기능을 제공함)
- UUID 보안을 위해서는 authentication, encription, access control과 같은 다른 보안수단을 함께 조합하여 사용되어야 햔다.
- UUID를 database 또는 기타 저장장치에 저장하기 전에 hashing과 salting을 이용하여 안전하게 저장되어야 한다.
- 악의적 목적의 입력값을 방지하고 올바른 형식인지 확인하기 위하여 수신된 UUID값을 Server측에서 그 유효성 검사를 해야 한다.
- UUID가 Session Hijacking 또는 중요 정보유출에 악용되지 않도록 UUID를 URL에서 또는 URL의 파라메터로 사용하지 말아야 한다.

2. UUID생성 Python 예제

# 예제 코드 -1: uuid4()함수를 이용한 랜덤 UUID 생성 예제 코드

import uuid

new_uuid = uuid.uuid4()
print(f"The generated UUID is : {new_uuid}")

# 예제 코드 -2: secrets모듈을 이용한 랜덤 UUID생성 예제 코드

import secrets

def generated_uuid():
   return secrets.token_hex(16)

# 예제 코드 -3: OWASP의 ESAPI 프레임워크를 이용한 예제 코드
- ESAPI randomizer는 랜덤 UUID를 생성하기 위해 사용되고, ESAPI encoder는 안전한 저장을 위해 UUID를 인코딩하기 위해 사용

from esapi.encoder import Encoder
from esapi.randomizer import Randomizer

def generate_secure_uuid():
  # ESAPI encoder instance
  encoder = Encoder.get_instance()

  # ESAPI randomizer instance
  randomizer = Randomizer.get_instance()

  # ESAPI randomizer로 랜덤 UUID생성
  uuid = encoder.encode_for_string(randomizer.get_random_uuid().hex)

  return uuid

print(generate_secure_uuid())