Lock Challenge에서는 플레이어가 여는 페이지에 정답이 들어 있지 않고, 자물쇠가 숨긴 내용도 들어 있지 않아요. 플레이어의 답은 저희 서버로 전송되고, 판단은 서버가 하며, 정답일 때만 공개 내용이 돌아와요. 어떻게 작동하는지, 무엇을 막아 주는지, 어디까지인지 알려 드릴게요.
정답은 이렇게 확인돼요
만든 사람이 정답을 정해요
편집기에서 만든 사람이 자물쇠를 여는 코드, 단어, 패턴 또는 장소와, 자물쇠가 숨길 내용을 정해요.
서버가 정답을 해시로 저장해요
입력하거나 탭하는 정답은 저장되기 전에 bcrypt 해시로 바뀌어요. 해시는 읽을 수 없으면서도 답이 맞는지 증명해 줘요. GPS 위치, 오차 범위 안에서 인정되는 숫자, 워들 단어는 해시로 대조할 수 없어서 서버에 매개변수로 남고, 페이지로는 절대 전송되지 않아요.
플레이어가 답을 보내요
플레이어의 페이지에는 자물쇠, 질문, 힌트가 들어 있을 뿐 정답은 없어요. 플레이어가 입력하거나 탭한 내용은 서버로 전송돼요.
서버가 비교한 뒤 보상을 보내요
서버는 답을 해시나 자체 매개변수와 비교해요. 틀린 답에는 만든 사람이 쓴 오답 메시지가 표시돼요. 정답일 때만 숨겨진 내용, 즉 텍스트, 링크, 사진 또는 페이지가 돌아와요.
이것이 막아 주는 것
- 페이지 소스에서 정답 읽기. 정답은 브라우저가 받는 HTML에도 스크립트에도 없어서, 개발자 도구로 봐도 아무것도 알 수 없어요.
- 풀지 않고 공개 내용 열기. 숨겨진 내용은 정답을 맞힌 뒤 서버에서 만들어져요. 그 전에는 페이지에 없어요.
- 모든 코드 대입해 보기. 자물쇠마다 한 IP 주소에서 분당 최대 30개, 모든 주소를 합쳐 분당 120개의 답만 받아요. 만든 사람은 최대 시도 횟수를 정하거나, 플레이어 수를 제한하거나, 처음 풀리면 자물쇠를 닫을 수도 있어요.
어떤 정답을 어떻게 확인하나요
- 서술형 정답, 숫자 코드, 패턴, 화살표, 색상, 스위치, 로그인은 bcrypt 해시로 저장되고 서버에서 비교돼요. 서술형 정답은 만든 사람이 따로 정하지 않으면 대소문자와 악센트를 무시해요.
- GPS 위치, 오차 범위 안에서 인정되는 숫자, 워들 단어는 서버에 보관된 매개변수로 확인해요. 페이지는 플레이에 필요한 것만 받아요. 예를 들어 충분히 가깝다고 인정되는 거리나 게임판의 줄 수 같은 것이에요.
- 게임을 시작하기 전에 묻는 접근 비밀번호도 bcrypt 해시로 저장돼요.
- 편집기에서 만든 사람에게 자신의 정답을 다시 보여 줄 수 있도록, 두 번째 사본을 서버가 보관하는 키로 암호화(AES-256-GCM)해 둬요. 어떤 플레이어 페이지도 이 사본을 읽지 않아요.
페이지에 들어 있는 것, 그리고 단 하나의 예외
플레이어 페이지에는 플레이어가 읽어야 하는 것이 들어 있어요. 질문, 힌트, 단계 제목, 그리고 만든 사람이 오답과 정답에 맞춰 쓴 메시지예요. 비밀을 넣을 곳이 아니에요.
단 하나의 예외는 멜로디를 따라 치게 하는 음악 자물쇠예요. 플레이어가 들어야 하므로 음이 브라우저로 전송되고, 그래서 이 자물쇠에서는 어디를 봐야 하는지 아는 사람이 페이지에서 정답을 읽을 수 있어요. 곡 제목을 맞히는 음악 자물쇠는 다른 서술형 정답처럼 제목을 bcrypt 해시로 보관해요.
솔직하게 말하는 한계
- 공유된 정답은 공유된 채로 남아요. 서버는 사람이 아니라 답을 확인해요. 코드를 전달한 플레이어가 있으면 다른 사람도 자물쇠를 열 수 있어요. 플레이어 수 제한, 처음 풀린 뒤 닫기, 접근 비밀번호, 공개 및 마감 날짜로 정답이 퍼지는 범위를 줄일 수 있어요.
- 플레이어에게는 인터넷 연결이 필요해요. 정답을 서버에서 확인하기 때문에 네트워크가 없는 플레이어는 자물쇠를 열 수 없어요. 게스트 와이파이면 충분해요.
- 앞에서 말한 따라 치는 멜로디.
플레이어에 대해 기록하는 것
- 플레이어는 계정을 만들지 않아요.
- 한 플레이어의 시도가 하나의 세션으로 집계되도록 무작위 식별자를 쿠키에 보관해요.
- 답마다: 정답 여부, IP 주소, 브라우저의 사용자 에이전트. 세션마다: 시도 횟수와 힌트 사용 횟수, 걸린 시간, 기기, 유입 페이지, 언어. 만든 사람은 이것을 통계로 확인해요.
- 이메일 주소나 이름은 만든 사람이 공개 단계에서 요청할 때만 받아요. 이 정보는 그 만든 사람에게만 전달되고, Lock Challenge는 그 주소로 마케팅 메일을 절대 보내지 않아요.
- 플레이어 페이지는 noindex라서 자물쇠와 그 제목이 검색 결과에 나타나지 않아요.
자세한 내용은 개인정보 처리방침에서 확인하세요.
자주 묻는 질문
- 플레이어가 페이지 소스에서 정답을 찾을 수 있나요?
- 아니요. 멜로디를 따라 치게 하는 음악 자물쇠만 예외로, 음이 페이지에 들어 있어요. 입력하거나 탭하는 정답은 bcrypt 해시로 저장되고 서버에서 비교되며, GPS, 숫자, 워들 정답은 페이지가 절대 받지 않는 매개변수로 확인해요.
- 자물쇠를 풀기 전에 숨겨진 내용이 페이지에 들어 있나요?
- 아니요. 서버는 정답을 맞힌 뒤에만 공개 내용을 돌려보내요. 만든 사람이 이메일 주소나 이름을 요구하면, 공개 내용은 그 정보를 입력할 때까지도 기다려요.
- 맞을 때까지 모든 코드를 대입해 볼 수 있나요?
- 자물쇠마다 한 IP 주소에서 분당 최대 30개, 모든 주소를 합쳐 분당 120개의 답만 받아요. 만든 사람은 자물쇠의 최대 시도 횟수도 정할 수 있어요.
- 플레이어에게 계정이 필요한가요?
- 아니요. 플레이어는 링크를 열거나 QR 코드를 스캔하면 돼요. 다만 정답을 서버에서 확인하기 때문에 인터넷 연결은 필요해요.