추천시스템은 의도적으로 특정 결과를 유도하거나 왜곡할 수 있다는 의심을 받기 쉽습니다.
그렇다면 이러한 불신과 조작 논란을 원천적으로 차단하려면, 시스템은 어떻게 설계되어야 할까요?
로또 사례로 살펴보는 추첨 시스템의 한계
이해를 돕기 위해 로또 추첨 방식을 예로 들어보겠습니다.
로또는 매주 토요일 저녁, 생방송을 통해 추첨이 진행됩니다. 프랑스 A사에서 제작한 공인 추첨 기계를 사용하여, 공기 압력으로 공을 섞고 튀어나오는 순서대로 번호 6개와 보너스 번호 1개를 추출합니다. 이 모든 과정은 외부 입회자들의 감독 아래, KBS를 통해 생중계됩니다.
이처럼 절차적으로는 매우 공정하고 투명해 보이지만, 근본적인 한계가 있습니다
1. 완전한 무작위성에 대한 신뢰 부족
- 물리적 방식은 외관상 무작위처럼 보이지만, 공의 재질, 무게, 마찰 등 미세한 요소들에 따라 일정한 패턴이나 편향이 존재할 수 있습니다.
2. 검증 불가능성
- 생중계된다고 해도 기계 내부의 작동 원리나 실제 무작위성이 외부에서 독립적으로 검증될 수 없습니다. 결국 시스템 운영 주체를 신뢰하는 수밖에 없기 때문에, 조작 논란은 쉽게 사라지지 않습니다.
신뢰할 수 있는 추첨 시스템의 설계 원칙
이러한 문제를 해결하고 조작 논란을 근본적으로 없애기 위해서는 다음 두 가지 요소가 반드시 필요합니다
1. 예측 불가능한 난수
2. 공개된 추첨 알고리즘
1. 예측 불가능한 난수
추첨 결과의 기반이 되는 난수는 외부에서 예측하거나 조작할 수 없어야 합니다.
이를 해결하기 위해 등장한 기술이 바로 공개 난수 신호기(Public Randomness Beacon)입니다. 대표적인 예로는 drand가 있습니다.
drand는 전 세계의 독립된 노드들이 분산 방식으로 협력해 생성하는 난수 네트워크입니다. 난수는 미리 알 수 없고, 생성된 시점 이후에만 공개됩니다.
이처럼 drand와 같은 외부 공개 난수 서비스를 활용하면, 예측 불가능하면서도 신뢰 가능한 난수를 기반으로 시스템을 설계할 수 있습니다.
2. 공개된 추첨 알고리즘
신뢰를 얻기 위해서는 결과를 만드는 알고리즘도 모두에게 공개되어야 합니다.
누구나 알고리즘을 확인할 수 있고, 동일한 난수와 입력값을 넣었을 때 동일한 결과를 재현할 수 있어야 하며, 의도적인 조작이 개입될 여지가 없어야 합니다.
예를 들어, 참가자 목록을 정해진 기준(예: 고유 ID 순)으로 정렬한 후, drand에서 받은 난수를 기반으로 인덱스를 계산해 당첨자를 선택하는 방식은 매우 단순하면서도 검증 가능성이 높습니다.
조작 불가능한 추첨 시스템 예시
지금까지 조작 불가능한 추첨 시스템에 대한 설명을 들었지만, 글로만으론 이해가 더딜 수 있습니다.
그래서 직접 사이트를 만들어 보았습니다.
조작 불가능한 추첨기의 동작은 다음과 같습니다.
아직 공개되지 않은 난수로 추첨을 생성합니다.
추첨 결과와 라운드 결과값은 추첨 시간이 되기전까지 알 수 없습니다.
추첨 시간이 되면, 추첨 결과와 라운드 결과값을 확인 할 수 있습니다.
이 결과값은 변하지 않으며, url 주소를 통해 결과를 공유 가능합니다.
추첨 알고리즘이 이미 공개되어 있기 때문에, 추첨 라운드 결과값과 알고리즘으로 검증 역시 가능합니다.
마치며
누구나 동일한 난수와 동일한 코드를 통해 결과를 직접 검증할 수 있다는 점에서, 운영자에 대한 맹목적인 신뢰 대신 ‘구조에 대한 신뢰’를 가능하게 합니다.
하지만 여기서 한 걸음 더 나아가려면, 단지 재현 가능성과 투명성만으로는 충분하지 않습니다.
통계적으로도 모든 항목이 동등한 확률로 선택될 수 있는, 수학적으로 공정한 무작위성이 보장되어야 진정한 의미의 공정한 시스템이라 할 수 있습니다.
이 부분은 앞으로 더 깊이 고민해볼 다음 단계의 과제이자, 우리가 함께 풀어나가야 할 숙제로 남기며 글을 마칩니다.
읽어주셔서 감사합니다.