본문으로 건너뛰기

"애플리케이션 보안" 태그로 연결된 1개 게시물개의 게시물이 있습니다.

인증, 권한, 비밀값과 공격 저항성을 포함한 애플리케이션 보안 설계

모든 태그 보기

6자리 리딤코드는 어디까지 안전하게 만들 수 있을까

· 약 17분
Bankware Global Engineering

6자리 영문 대문자와 숫자로 리딤코드를 만들어야 한다고 해보자.

36^6 = 2,176,782,336
log2(36^6) = 약 31.02비트

가능한 문자열은 21억 개가 넘는다. 처음 보면 중복과 추측을 모두 걱정하지 않아도 될 만큼 커 보인다. 하지만 실제 발급기를 설계하면 이 숫자 하나가 서로 다른 네 문제를 가리고 있다는 사실을 만나게 된다.

  • 형식: 코드는 정확히 6자리 ASCII 0-9, A-Z여야 한다.
  • 고유성: 서로 다른 발급 건이 같은 코드를 가져서는 안 된다.
  • 예측 저항: 관측한 코드로 다음 코드를 계산하기 어려워야 한다.
  • 유효성: 문자열이 형식에 맞는다는 것과 실제 발급되어 사용할 수 있다는 것은 다르다.

이 글은 여러 사람이 함께 쓰는 공개 프로모션 코드가 아니라, 발급 건마다 하나씩 만들어져 그 문자열을 가진 사람이 혜택을 청구하는 bearer형 리딤코드를 다룬다. 한 문제를 해결하는 수학이 다른 문제의 답이 되지는 않는다.

중복 없는 생성, 발급 순서 은닉과 유효한 리딤 판정은 서로 다른 요구사항이다.