왜 안전한가

기록은 두 곳에 따로 두고, 둘은 서로 맞아야 합니다.

바우처는 상품권처럼, 가지고 있는 사람이 쓸 수 있습니다. 그래서 중요한 것은 지금 눈앞의 바우처가 진짜인지, 아직 쓰지 않은 것인지입니다. 저희는 기록을 두 곳에 나눠 둡니다. 한 사람이 두 곳을 모두 고칠 수는 없습니다.

bullmark

바우처 자체를 보관합니다. 누가 갖고 있는지, 얼마짜리인지, 이미 썼는지가 여기 있습니다.

지문(해시)만 보냅니다 내용은 보내지 않습니다

axowl

그 기록의 지문을 보관합니다. 지문은 기록에서 계산한 짧은 값입니다. 도착한 시각은 Axowl 의 시계로 적습니다.

Axowl 은 바우처의 내용을 보지 않습니다. 지문만 받아서 자기 시각과 함께 보관합니다. 그래서 두 곳은 서로 독립적입니다. 바우처를 고치면 지문도 달라지는데, Axowl 에 보관된 지문은 저희가 고칠 수 없습니다.

지문에 들어가는 것

지문은 다음 항목으로 계산합니다

데이터베이스의 행 전체가 아니라 아래 목록만 지문에 들어갑니다. 그래서 무엇이 보호되는지 정확히 알 수 있습니다. 이 중 하나라도 바꾸면 지문이 맞지 않게 됩니다.

제품 브랜드 누가 가졌는지 리딤 코드 일련번호 소비자가 이 바우처가 주는 가격 언제 만료되는지 쓰였는지 언제 쓰였는지 보유자의 이메일

마지막 세 항목은 2026년 8월에 추가했고, 가장 중요한 항목입니다. 그전에는 이미 쓴 바우처를 데이터베이스에서 '안 씀'으로 되돌려도 모든 검사를 통과했습니다. 사용 기록이 다른 곳에 있어서 지문이 그대로였기 때문입니다. 이제는 통과하지 못합니다.

두 가지는 일부러 뺐습니다. 넣으면 잘못된 경보가 생기기 때문입니다. 예약 은 잠깐 잡아 두는 것일 뿐, 바우처의 값이 달라지는 것이 아닙니다. 계산대에서 30초 동안 잡혀 있던 바우처는 바뀐 바우처가 아닙니다. 만료 상태 는 만료일이 이미 지문에 들어 있어서 누구나 계산할 수 있으므로 뺐습니다. 상태까지 넣으면 월요일에 문제없이 확인된 바우처가, 아무도 손대지 않았는데 화요일에는 실패로 나옵니다. 잘못된 경보가 잦으면 사람들은 검사 결과를 보지 않게 됩니다.

공격마다 막히는 지점

내부에서 속이는 방법 네 가지와, 각각을 막는 장치

데이터베이스에서 바우처를 고치는 경우

누군가 가격을 낮추거나, 만료일을 늦추거나, 자기 이름을 넣는다고 합시다. 그러면 지문이 달라져 Axowl 에 보관된 지문과 맞지 않게 됩니다. 저희 쪽 지문을 다시 계산해도 소용없습니다. 판정 기준이 되는 지문은 저희 데이터베이스에 없기 때문입니다.

같은 바우처를 두 번 쓰는 경우

사용 여부가 이제 지문에 들어가므로, '안 씀'으로 되돌리면 지문이 달라집니다. 또 사용할 때마다 고칠 수 없는 기록이 따로 하나 남고, 바로 앞 기록과 이어집니다. 속이려면 두 기록이 똑같이 거짓이어야 하는데, 그중 하나는 저희 것이 아닙니다.

발행한 적 없는 바우처를 만들어 내는 경우

바우처를 발행하면 그 회차 전체가 하나의 기록으로 남아 고칠 수 없게 됩니다. 몇 장을, 얼마에, 언제까지인지가 들어갑니다. 100장을 발행했다면 101번째 바우처는 이미 있는 기록과 맞지 않습니다. 또 새 지문에는 저희 시계가 아닌 Axowl 의 시계로 시각이 찍힙니다. 오늘 만들 수는 있어도 작년 날짜로 만들 수는 없습니다.

몰래 다른 사람에게 옮기는 경우

보유자도 지문에 들어가므로, 칸 하나를 고쳐서 바우처 주인을 바꿀 수는 없습니다. 바우처를 넘기면 준 사람의 바우처는 닫히고, 받는 사람에게 같은 일련번호로 새로 발행됩니다. 두 단계가 모두 기록에 남으므로, 한쪽만 남는 양도는 없습니다.

복사된 코드

누가 제 QR 을 복사하면요?

QR 코드(스캔하는 네모난 코드)는 바우처 자체가 아닙니다. 저희 기록에 있는 번호 붙은 바우처 한 장을 가리킬 뿐입니다. 그래서 QR 사진의 값은, 누군가 그것을 내미는 순간 그 바우처가 가진 값과 정확히 같습니다. 아래의 모든 경우가 여기서 나옵니다.

지어낸 코드

바우처를 사용할 때 시스템은 코드를 기록에서 찾아봅니다. 이미지에서 값을 읽지 않습니다. 발행한 적 없는 코드는 QR 이 아무리 그럴듯해 보여도 아무 바우처와도 이어지지 않습니다. 그림을 그려서 바우처를 만들어 낼 수는 없습니다.

진짜의 복사본

복사본은 코드가 같으므로 같은 바우처입니다. 바우처가 한 장 더 생기지 않습니다. 처음 사용한 사실이 그 바우처에 기록되어 고칠 수 없게 되고, 그 뒤에는 복사본이든 원본이든 이미 사용했다는 답이 나옵니다. 스크린샷이 열 장이어도 바우처는 한 장입니다.

팔기 전에 찍어 둔 스크린샷

바우처를 선물하거나 되팔아 넘기면, 준 사람의 바우처는 닫히고 받는 사람에게 같은 일련번호로 새 코드 가 붙은 바우처가 발행됩니다. 예전 스크린샷의 코드는 이제 닫힌 바우처로 이어집니다. 바우처를 팔고 나서 산 사람보다 먼저 써 버리는 방법은 통하지 않습니다.

다른 사람이 먼저 본 코드

이 위험은 실제로 있고, 저희는 있는 그대로 말씀드립니다. 코드를 가진 사람은 누구나 바우처를 쓸 수 있고, 코드를 받아 처리하는 브랜드는 그 휴대폰을 누가 들고 있는지 알 수 없습니다. QR 을 스캔한다고 코드가 드러나지는 않습니다. 스캔하면 바우처가 진짜이고 아직 쓰지 않았다는 것만 보이고, 코드는 로그인한 보유자와 발행한 브랜드에게만 보입니다. 하지만 어딘가에 올리거나 소리 내어 읽어 준 코드는 다른 사람이 쓸 수 있습니다. 상품권 번호처럼 다루세요. 이 틈까지 막으려는 브랜드는 코드를 입력받는 대신, 로그인한 그 고객 이 실제로 가진 바우처를 저희에게 조회해 그 목록에서 고르게 할 수 있습니다. 그러면 복사한 코드를 넣을 곳이 없습니다.

어떤 경우든 기록에 남습니다. 발행, 양도, 예약, 사용은 각각 고칠 수 없는 기록으로 남고 바로 앞 기록과 이어집니다. 브랜드는 자기 바우처라면 어느 것이든 전체 이력을 내용까지 받아서 지문을 직접 다시 계산해 볼 수 있습니다. 그래서 누가 언제 썼는지는 저희 말을 믿지 않아도 확인할 수 있습니다.

Brand Credit

저희가 몰래 더 만들어 낼 수 있나요?

Brand Credit 은 돈과 비슷하게 쓰입니다. 브랜드가 충전하고, 그것으로 바우처를 발행하고, 번 것을 현금으로 찾습니다. 그러니 외부인이 침입할 수 있는지보다, 저희 가 저희 기록에 한 줄을 몰래 더할 수 있는지를 물어야 합니다.

기록은 추가만 됩니다

기록은 추가만 되고, 고치거나 지울 수 없습니다. 정정할 때는 무엇을 정정하는지 적은 새 기록을 추가합니다. 그래서 실수와 정정이 둘 다 보입니다. 불편한 줄을 뺀 잔액은 존재하지 않습니다.

모든 기록은 고칠 수 없고 서로 이어집니다

기록마다 바로 앞 기록의 지문이 들어 있습니다. 옛 기록 하나를 바꾸면 그 뒤의 모든 기록이 맞지 않게 됩니다. 몰래 한 군데만 고치려 해도 이어진 기록 전체를 두 곳에서 다시 써야 하는데, 그중 한 곳은 저희 것이 아닙니다.

내부자도 예외가 아닙니다

저희 데이터베이스에 접근할 수 있다고 기록을 마음대로 할 수 있는 것은 아닙니다. 운영 데이터베이스의 모든 권한을 가진 사람은 행을 바꿀 수는 있습니다. 하지만 그 뒤에 Axowl 에 있는 지문을 거기에 맞출 수는 없습니다. 두 번째 기록을 저희 관리자에게 관리자 권한이 없는 곳에 두는 이유입니다.

우리에게 묻지 않고 감사할 수 있습니다

브랜드는 자기 기록의 id 를 회계사에게 넘길 수 있습니다. 회계사는 공개된 기록에서 지문을 다시 계산하고 합계가 맞는지 확인합니다. 이 확인은 Bullmark 를 거치지 않으므로, 저희가 끼어들 여지가 없습니다.

추천 보상

가짜 가입으로 보상을 받아 갈 수 있나요?

신규 사용자 1명마다 보상을 주면 가짜 사용자를 만들려는 사람이 생깁니다. 그래서 가입만으로는 보상을 주지 않습니다. 남아 있는 사람에 대해서만 줍니다.

가입할 때는 아무것도 지급하지 않습니다

첫 로그인은 대기 기록 한 줄만 남깁니다. 보상은 7일 뒤에, 그 사람이 다른 날 다시 로그인한 경우에만 지급합니다. 가입만 하고 돌아오지 않는 계정은 지급 없이 닫힙니다.

메일함 하나에 보상 한 번

+꼬리표나 Gmail 주소의 점처럼, 다르게 적어도 같은 받은편지함으로 가는 주소는 한 사람으로 셉니다. 일회용 메일 주소는 로그인은 할 수 있지만 보상은 받지 못합니다.

기기별 한도와 갑작스러운 몰림 제한

한 기기에서 한 브랜드에 보상받을 수 있는 가입은 최대 세 건입니다. 처음 보는 주소로 보내는 가입 메일은 네트워크별, 앱별로 보내는 빈도가 제한되고, 그 전에 기본으로 켜져 있는 봇 확인을 거칩니다. 가입이 갑자기 몰린 계약은 지급을 멈추고 브랜드에 알립니다.

브랜드가 잃을 수 있는 한도는 미리 정해집니다

보상이 있는 계약에는 반드시 예산이 있고, 대기 중인 보상도 그 예산에서 잡힙니다. 추천인 본인과 브랜드 쪽 사람은 세지 않습니다. 보상은 지급된 것도 거절된 것도 한 건씩 고칠 수 없는 기록으로 남고, 브랜드와 추천인이 모두 볼 수 있습니다.

그 외 보안상 공개할 수 없는 다양한 안전 장치를 포함하고 있습니다.

저희가 주장하지 않는 것

저희가 확인하는 것은 이메일 주소까지입니다.

저희는 여권을 확인하지 않고, 신원 확인 기관을 운영하지 않으며, 이메일 주소 뒤에 누가 있는지 안다고 말하지 않습니다. 지문은 기록이 바뀌지 않았다는 것만 증명합니다. 확인되지 않은 주장을 사실로 만들어 주지는 않습니다. 이 둘을 섞어 말하는 회사는 안심되는 기분을 파는 것입니다.

그래서 저희가 약속하는 것은 정확히 이것입니다. 이 바우처는 이 가격으로, 이 이메일 주소에, 이 시각에 발행되었고, 그 뒤로 바뀌지 않았습니다. 이 이메일은 계정이 로그인 인증에 쓴 주소이며, 누군가 입력란에 적어 넣은 주소가 아닙니다. 그 주소 너머의 일은 저희가 증명할 수 없습니다. 나중에 알게 되시는 것보다 지금 말씀드리는 편이 낫다고 생각합니다.

직접 확인하세요

저희 말을 믿을 필요가 없습니다

고칠 수 없게 된 모든 기록은 읽을 수 있고, 지문을 만드는 계산법은 공개되어 있습니다. 이어진 기록을 저희 JavaScript SDK 나, SHA-256(지문을 만드는 표준 계산법)을 쓸 수 있는 아무 도구에 넣어 지문을 직접 다시 계산해 보세요. 이 확인은 전부 여러분 쪽에서 실행되며, Bullmark 에는 아무것도 묻지 않습니다.

GET /integrity/events/VoucherInstance/{id}

이 주소는 지문과 판정 결과만 돌려주고, 바우처 내용이나 리딤 코드는 절대 주지 않습니다. 그래서 공개해 두어도 남의 바우처를 들여다보는 수단이 되지 않습니다.

시작하기

처음에 돈이 들지 않습니다.

내 스타트업 등록하기 작동 방식

Loading…
an unhandled error has occurred. reload ✕