Keystone에는 여러분을 위한 멋진 소식이 있습니다. 회사는 아무도 여러분의 시드 문구(seed phrase)에 손대지 않았다고 맹세합니다. 나쁜 소식은 회사가 자사 지갑이 진품임을 증명하던 마스터 키를 잃어버렸고, 수만 명의 고객 집 주소를 공격자에게 넘겨주었으며, 이제 진지한 얼굴로 나머지는 모두 안전하게 잠겨 있으니 자신들의 말을 믿어 달라고 요청한다는 것입니다.

10월 26일 Keystone은 사고에 관한 공지를 발표했습니다. 회사에 따르면 10월 20일 공식 웹사이트에서 침입자를 발견했습니다. 공격자는 서드파티 데이터 모니터링 도구의 취약점을 통해 침투해 권한을 상승시킨 뒤 두 가지 전리품을 챙겨 떠났습니다. 배송 주소가 담긴 고객 데이터베이스, 그리고 Keystone이 모든 지갑의 진위를 인증하는 데 쓰는 WebAuth 암호 키입니다.

정확히 누가 다녀갔는지, 어떤 서드파티 도구가 뚫렸는지, 10월 20일 이전에 침입자가 몇 주 혹은 몇 달 동안 시스템에 편히 머물렀는지는 보고서에 나와 있지 않습니다. 그 대신 회사는 자사 기기 몇 대가 산업용 압착기로 들어갈지를 약간의 자부심과 함께 알립니다. 18,835대입니다. 창고 출고는 중단됐지만 “새 키”를 탑재한 다음 배치의 사전 주문은 즉시 열렸습니다. 4~6주만 기다리면 된다고 합니다. 물론 집 주소도 다시 한번 입력해야 합니다.

공학적 아이러니는 특별한 찬사를 받을 만합니다. Keystone은 수년간 “100% 에어갭” 보안의 표준을 자처해 왔습니다. 블루투스도, Wi-Fi도, USB 데이터 전송도 없이 카메라와 QR 코드만으로, 지갑이 어떤 상황에서도 인터넷에 닿지 않도록 말입니다. 기기에서는 용감하게 케이블을 잘라 냈지만 웹사이트에는 서드파티 트래커를 붙여 두었고, 길 가던 공격자가 바로 그 트래커를 통해 공장 인증의 가장 귀중한 비밀에 도달했습니다. 거기서 모니터링하던 지표는 분명 대단히 중요했을 것입니다.

1. 이 “마스터 키”는 무엇이며, 왜 창고 전체가 파쇄기로 가는가

Keystone의 진품 확인은 간단합니다. 기기를 처음 켜면 공식 인증 페이지를 열고, 사이트가 QR 코드를 보여 주면 지갑 카메라로 스캔합니다. 지갑이 숫자열을 보여 주면 그것을 사이트에 다시 입력합니다. 일치하면 화면이 “정품” 기기의 소유자가 되신 것을 축하합니다.

Keystone 3 펌웨어 소스 코드를 열어 보면 무대 뒤에서 무슨 일이 일어나는지 알 수 있습니다. QR 코드에는 RSA로 암호화되고 Keystone의 키로 서명된 검증 값이 들어 있습니다. 지갑은 서명을 확인하고 RSA 개인 키로 그 값을 복호화합니다. 이 키는 공장에서 한 번만 기록 가능한 메모리(OTP)에 기록되며, 정식 펌웨어는 이를 덮어쓰지 못하게 합니다.

다시 말해 “진품 확인” 전체가 증명하는 사실은 단 하나입니다. 손에 든 장치가 어떤 비밀을 알고 있다는 것. “보드가 Keystone 공장에서 조립되었다”도, “내부에 불필요한 칩이 없다”도, “난수 생성기가 정직하다”도 아닙니다. 그저 “비밀을 안다”는 것뿐입니다. 그리고 그 비밀은 회사 스스로 인정했듯 이제 공격자의 손에 있습니다. 인증 페이지 자체는 여전히 시계처럼 정확하게 작동합니다. 다만 이제는 어떤 가짜든 그 탐나는 초록색 체크 표시를 켤 수 있을 뿐입니다.

보도 자료에서 Keystone은 서둘러 대중을 안심시킵니다. 도난당한 키는 시드 문구 생성에도, 개인 키 도출에도, 거래 서명에도 관여하지 않는다는 것입니다. 기술적으로는 전부 사실입니다. 다만 바로 이 키가 구매자에게 그 상자에 시드 문구를 맡겨도 된다는 확신을 주던 키였을 뿐입니다. 사소한 문제죠.

더 흥미로운 것은 교환 안내에서 드러난 세부 사항입니다. 창고의 지갑 18,835대는 모두 “구” 키를 쓰고, 다음 배치는 “새” 키를 받는다고 합니다. 여기서 멋진 아키텍처적 결론이 나옵니다. Keystone은 기기마다 개별 인증서를 두는 대신 배치 전체에 하나의 공유 비밀을 도장처럼 찍어 넣은 것으로 보입니다. 절약 정신이 모범적입니다. 키 하나가 유출되면 폐기할 특정 일련번호조차 남지 않고, 창고 전체가 칼날 아래로 갑니다.

게다가 인증 QR 코드를 만드는 데 사이트에 필요한 것은 키의 공개 절반뿐이었습니다. 그러나 그것 없이는 누구도 기기를 대신해 검증에 응답할 수 없는 개인 절반이, 보아하니 웹 서버를 통해 닿을 수 있는 어딘가에 편안히 놓여 있었습니다. 공장 봉인의 마스터 키를 온라인 상점의 현관 매트 밑에 보관하는 것, 이는 암호학의 완전히 새로운 장입니다.

2. 이제 이 키로 무엇을 할 수 있는가

주요 공격 시나리오는 Keystone이 직접 설명합니다. 범죄자들은 훔친 비밀을 이용해 사이트의 공식 진품 확인을 무난히 통과하는 위조 지갑을 대량 생산하고, 리셀러나 중고 시장을 통해 판매한 뒤 구매자의 잔액을 털어 갈 수 있습니다. 아직 시장에서 위조품이 발견되었다는 보고는 없습니다.

소유자를 털기 위해 위조품에 정식 Keystone 펌웨어나 공장 코드 서명 키(회사는 영향을 받지 않았다고 맹세합니다)가 필요한 것도 아닙니다. 비슷하게 생긴 플라스틱 케이스 안에는 설정 과정에서 도둑들이 미리 준비한 24단어 시드 문구를 건네주는 아무 저가 보드나 들어 있으면 됩니다. 도난당한 OTP 비밀이 이 미끼에 필요한 이유는 단 하나입니다. 첫 QR 코드에 올바르게 응답하고, 신중한 구매자를 “Verification Successful”이라는 문구로 안심시키는 것입니다.

그래서 완성품 지갑 18,835대가 고철이 됩니다. 메모리는 한 번만 기록할 수 있어 키를 원격으로 업데이트할 수 없습니다. “구” 키를 쓰는 정품 지갑과 같은 키를 쓰는 수제 복제품을 사이트로 구별하는 것도 이제는 불가능합니다. 결국 설계에 마련된 유일한 “키 교체” 도구는 산업용 파쇄기로 판명되었습니다. Keystone은 배치 폐기를 거창하게 “비용이 크지만 올바른 결정”이라고 부르지만, 실제로는 자사 아키텍처가 다른 선택지를 남겨 두지 않았을 뿐입니다.

브랜드 표시가 없는 똑같은 전자 기기들이 컨베이어를 타고 산업용 파쇄기의 롤러를 향해 이동하는 모습.
이미지 · Blackwood

3. 칼을 든 채 침대 곁에 선 사람: 해킹당한 쪽을 누가 보증인으로 세웠나

이미 지갑을 구매한 분들을 위한 Keystone의 공식 권고를 살펴보겠습니다.

  • 10월 20일 이전에 기기를 받았고 확인을 통과한 경우 — 계속 사용하셔도 되며, 암호화폐를 다른 지갑으로 옮길 필요는 없다고 합니다.
  • 10월 20일 이후에 구 키 기기를 받은 경우 — 고객 지원(support@keyst.one)이 수동으로 진위를 확인할 때까지 사용하지 마십시오. 회사 스스로 무력함을 인정합니다. 이런 지갑이 사이트 확인을 통과하더라도 위조일 가능성을 더는 배제할 수 없다는 것입니다. 구매자가 자기 지갑이 “구” 키인지 “새” 키인지 정확히 어떻게 알 수 있는지는, The Hacker News에 따르면 10월 27일 기준 Keystone이 설명하는 것을 잊었습니다. 고객 지원이 뚫린 암호 기술 대신 무엇을 쓸지도 수수께끼입니다. 상자 사진으로 점이라도 치려는 걸까요.
  • 리콜은 없습니다. 아무도 무언가를 반납하라는 요청을 받지 않으며, “지갑 교체”나 “자금 보호”에 관한 모든 이메일이나 전화는 사기로 간주됩니다.

이 구조 지침 전체가 10월 20일이라는 날짜에 매여 있습니다. 자사 게시물의 답글에서 Keystone 담당자는 키가 10월 20일에 유출되었다고 자신 있게 단언합니다. 그런데 보도 자료 자체는 10월 20일을 침해를 발견한 날로 기재하고 있으며, 공격자가 처음 시스템에 접근한 날짜는 겸손하게 생략되어 있습니다. 19일에 택배를 받은 모든 분께는 기적 같은 우연을 믿으라는 것입니다. 해커가 바로 그날 침입해 키와 함께 데이터베이스를 빼내고 현장에서 붙잡혔다는 우연 말입니다.

하지만 여기서 근본적인 질문은 더 날카롭습니다. Keystone은 무엇이 도난당했고 무엇이 아닌지 대체 어떻게 알고 있을까요?

지금 여러분 앞에서 전문가 역할을 하는 쪽이 누구인지 보십시오. “펌웨어 서명 키는 안전하다”, “이전 기기는 영향을 받지 않았다”, “한 달 뒤 안전한 새 배치를 보내겠다”는 이 모든 주문은, 자사 웹사이트의 서드파티 플러그인을 통해 방금 털린 회사에서 나온 것입니다. 바로 어제까지 이들은 자사 하드웨어 인증의 근본 비밀이 코앞에서 반출되고 있다는 사실을 전혀 몰랐습니다. 꼬박 2년 동안 고객 주소를 지우는 자사 스크립트가 작동하지 않는다는 것도 알아차리지 못했습니다. 그리고 오늘 바로 그 사람들이 진지한 얼굴로 면죄부를 내밀며, 해커가 어떤 폴더를 들여다봤고 어떤 폴더는 점잖게 지나쳤는지 보증하겠다고 나섭니다.

유출을 허용한 쪽은 더 이상 보증인이 아닙니다. 어제 이번 침해를 몰랐다면, 내일 다음 침해는 어떻게 알겠습니까? 지금 사전 주문을 받고 있는 “새 키”가 생산 라인에서 첫 천 개의 상자가 나오기도 전에 또 다른 구멍으로 새어 나가지 않으리라는 보장은 무엇입니까?

4. 2년간의 거짓 삭제 약속, 그리고 아무것도 사지 않은 1만 3천 명

뚫린 키는 적어도 새 하드웨어에서 교체할 수 있습니다. 여러분의 집 주소는 사전 주문으로 재발급할 수 없습니다.

공격자들은 Keystone 공식 Shopify 스토어에서 2024~2026년 고객 기록 25,964건을 가져갔습니다. 성명, 전화번호, 이메일, 상세한 자택 배송 주소, 그리고 각 주문의 내역과 금액까지입니다. 여기에 이름, 전화번호, 주소가 담긴 미결제 임시 주문 12,873건도 함께 유출되었습니다. 즉 약 1만 3천 명은 이 불운한 지갑을 산 적조차 없습니다. 사이트에 들어와 배송비를 확인하려고 주소를 입력했다가 마음을 바꿔 탭을 닫았을 뿐인데, 그래도 유출된 암호화폐 보유자 명단에 올라갔습니다.

그러나 이 이야기의 진짜 밑바닥은 이 기록 대부분이 애초에 데이터베이스에 있어서는 안 됐다는 점입니다. Keystone은 배송 데이터를 180일 후 삭제하겠다고 고객에게 공식적으로 약속했습니다. 사람들은 반년 뒤면 흔적이 사라진다고 믿고 하드웨어 지갑을 집 주소로 주문했습니다. 해커가 데이터베이스를 가져간 뒤에야 Shopify의 일괄 삭제 도구가 내내 오류를 냈으며, 회사의 누구도 단 한 줄이라도 지워지고 있는지 확인조차 하지 않았다는 사실이 갑자기 드러났습니다. 이제 Keystone은 멋쩍게 두 손을 들고, 보관 기간을 90일로 줄이겠다고 약속하며, 11월 3일까지 오래된 기록을 지우겠다고 엄숙히 맹세합니다. 공격자들이 이미 다 내려받은 바로 그 뒤에 말입니다.

2년 동안 여러분의 데이터를 지우고 있다고 맹세하면서 실제로는 해커를 위한 저금통에 모아 온 회사라면, 그 말이 받을 자격이 있는 신뢰는 정확히 0입니다. 한밤중에 눈을 떴더니 가까운 사람이 칼을 들고 침대 곁에 서 있다고 상상해 보십시오. 그리고 그가 차분하게 말합니다. “걱정 마, 그냥 칼 들고 여기 서 있고 싶었을 뿐이야. 어쩌면 한 번 찌르고 싶었을지도 모르지만, 돌아누워서 다시 자. 이번 일은 접수했고, 검토했고, 바로 이 일은 다시는 일어나지 않을 거야.” 주소를 180일이 아닌 90일 후에 지우고, 다음 마스터 키는 더 조심스럽게 보관하겠다는 오늘 Keystone의 약속은 대략 이렇게 들립니다.

유출된 데이터베이스가 실제로 무엇을 의미하는지는 설명할 필요도 거의 없습니다. 집에 확실히 값나가는 무언가가 있는 사람들의 주소록이 성명, 전화번호, 호수까지 완성된 채로 넘어간 것입니다. 전화 사기범에게는 실제 주문 내역으로 무장한 통화가 됩니다. 한 구매자는 이미 사기범이 전화해 실명으로 자신을 불렀다고 Keystone 스레드에 적었습니다. 빈집털이를 위해 집을 답사하는 자들과 “5달러짜리 렌치 공격” 애호가들에게는 완성된 경로 지도입니다. 도난당한 WebAuth 키로 돈을 벌려면 가짜 보드를 납땜하고 유통망을 꾸려야 합니다. 유출된 Shopify 데이터베이스로 돈을 버는 데는 쇠지렛대 하나와 기차표 한 장이면 충분합니다.

5. 결론: “공장 봉인”의 대가

전체 구조를 조립해 보겠습니다. 구매자에게는 시드 문구를 스스로 생성하고 봉인된 상자 안에서 송금에 서명하는 “완전한 에어갭” 하드웨어 지갑이 판매됩니다. 그 상자에 저축을 맡기는 것을 두려워하지 않도록, 제조사는 웹사이트에서 진품 여부를 확인하라고 권합니다. 실제로 그 확인은 창고 배치 전체에 공유되는 단 하나의 비밀에 기대고 있고, 그 비밀 자체는 웹 서버에 달린 구멍 난 서드파티 트래커를 통해 닿을 수 있는 곳에 놓여 있습니다.

그것으로 끝이 아닙니다. 그 귀중한 상자를 받기 위해 여러분은 반년 뒤 기록을 지우겠다는 약속을 믿고 상점에 성, 전화번호, 집 주소를 맡깁니다. 삭제 스크립트는 2년 동안 작동하지 않았고, 아무도 알아차리지 못했으며, 기록 전체가 인증 마스터 키와 함께 공격자에게 흘러갔습니다. 그리고 재앙이 드러나자, 침해가 일어나는 동안 잠들어 있었고 2년간 여러분의 주소를 쌓아 온 바로 그 회사가 무대에 올라 자신들의 말을 믿어 달라고 합니다. 나머지 키는 무사하고, 10월 20일 이전 지갑은 안전하며, 한 달 뒤에는 확실히 믿을 수 있는 새 배치가 나온다고 말입니다.

Keystone은 자사 제품과 위조품을 더 이상 구별할 수 없다는 이유 하나로 거의 1만 9천 대의 자사 기기를 산업용 압착기로 보냅니다. 그 와중에 38,837명이 정확한 자택 주소와 함께 범죄 데이터베이스에 영구 거주지를 얻었습니다. 제조사 사이트의 예쁜 초록색 체크 표시와 상자에 적힌 “Air-Gapped”라는 문구가 진짜 보안을 대신할 수 있다고 여전히 믿는 모든 분께 훌륭한 교훈입니다.