컴퓨터는 이미 감염됐다고 가정하세요
암호화폐 도난은 대부분 암호 기술을 깨서 일어나지 않아요. 평범한 컴퓨터에서 시작돼요. AirNox Wallet은 바로 그 컴퓨터를 위해 설계됐고, 그 컴퓨터는 이미 잃은 것이라고 가정하고 동작해요.

목차
노리는 건 수학이 아니라 컴퓨터
자금이 실제로 어떻게 지갑을 빠져나가는지 생각해 보세요. 개발자 툴체인 속 패키지 하나에 뭔가가 더 들어 있어요. 브라우저 확장 프로그램(browser extension)이 아무도 읽어 보지 않은 업데이트를 배포해요. 문서인 줄 알았던 파일이 문서가 아니에요. 웹 페이지가 트랜잭션 하나를 보여 주고는 다른 트랜잭션에 서명하라고 해요. 클립보드(clipboard) 도구가 붙여 넣기 직전에 주소를 바꿔치기해요.
이 공격들은 어느 것도 암호 기술을 건드리지 않아요. 필요한 건 모두 같아요. 인터넷에 연결된 컴퓨터에 있는 개인 키(private key), 또는 사용자의 승인이에요. 컴퓨터가 표적이 되는 이유는 키가 바로 거기 있기 때문이에요.
그래서 AirNox Wallet의 첫 번째 설계 결정은 단순해요. 키를 거기에 두지 않는 거예요.
키는 컴퓨터 밖에
AirNox Wallet은 데스크톱에서 동작해요. 그 자체로 시드(seed)를 금고에 봉인해 두는 완전한 네이티브 지갑이고, 일상적인 거래에는 이것만으로도 탄탄한 구성이에요. AirGap 모드에서는 한 걸음 더 나아가요. 자금을 움직일 수 있는 키를 아예 갖지 않아요. 보여 주기로 고른 주소만 갖고 있어요. 그 주소들로 지갑이 온라인에서 하는 일은 전부 해요. 네트워크와 통신하고, 잔액과 내역을 읽고, 서명되지 않은 트랜잭션을 만들어 검사하고, 서명을 받아 돌아온 트랜잭션을 브로드캐스트해요.
서명은 AirNox Vault에서 이뤄져요. 절대 온라인에 연결되지 않는 안드로이드 휴대폰에서 돌아가는 앱이에요. 시드는 여기에 있어요. 모든 요청을 실제로 서명할 바이트에서 직접 디코딩하고, 작업 종류, 금액, 거래 당사자, 네트워크를 보여 준 뒤, Accept(수락)를 눌러야만 서명해요.
둘 사이에는 에어갭(air gap)이 있어요. 휴대폰에는 인터넷으로 가는 경로가 없고, 오가는 건 한쪽으로 가는 요청과 되돌아오는 서명뿐이에요.

각 구간이 하는 일
요청은 웹 페이지에서, 지갑 자체에서, 또는 지갑에 연결된 AI 에이전트에서 시작될 수 있어요. 어디서 시작하든 같은 경로를 따라가요.
브라우저 확장 프로그램은 웹사이트가 기대하는 표준 지갑 인터페이스를 제공해요. 키를 갖고 있지 않고, 아무것도 서명하지 않아요. 요청을 로컬 채널로 데스크톱에 전달해요.
데스크톱은 요청을 디코딩하고 검사해요. 표준 작업을 알아보고, 표준 작업과 비슷하기만 한 것은 경고로 표시하고, 허용량(allowance)과 승인 대상(spender)을 확인한 뒤, 서명되지 않은 트랜잭션을 만들어요. 그리고 그 트랜잭션을 QR 코드, Bluetooth LE 또는 NFC로 휴대폰에 넘겨요.
휴대폰은 실제로 서명할 바로 그 바이트에서 요청을 다시 디코딩하고, 쉬운 말로 보여 줘요. 데스크톱이 설명하는 요청 내용은 주장이에요. 휴대폰이 보여 주는 것이 진실이에요. 읽어 보고 Accept를 누르거나, 누르지 않으면 돼요. 돌아가는 건 서명뿐이에요.
키가 있는 곳이 악성코드(malware)가 할 수 있는 일을 정해요
AirNox는 두 단계의 보호를 제공해요. 흔히 쓰이는 구성 중 가장 약한 것, 즉 브라우저 확장 프로그램으로 존재하는 기존 방식의 지갑과 나란히 놓고 보면 이해하기 쉬워요.

기존 방식의 확장 프로그램 지갑은 컴퓨터에서 가장 노출된 프로그램 안에서 돌아가요. 비밀 정보는 최신 그래픽카드로 대규모 무차별 대입(brute force)이 가능한 암호화로 봉인돼 있어요. 페이지에 주입된 코드가 지갑에 닿을 수 있고, 화면을 캡처하는 프로그램이라면 무엇이든 지갑 화면을 볼 수 있어요. 트래커와 광고가 들어 있고, 주소 바꿔치기는 막아 주지 않으며, 그러면서 하루 종일 자원을 잡아먹어요.
데스크톱의 AirNox Wallet은 전혀 다른 종류의 프로그램이고, 스스로를 지켜요. 네이티브 C++로 만들어서 코드를 주입할 스크립트 엔진도, 오염시킬 페이지도 없어요. 시드는 필요한 동안에만 메모리에 두고, 쓰고 나면 바로 지워요. 주변에서 돌아가는 프로세스와 지갑에 로드되는 라이브러리를 감시해서, 외부 코드가 지갑 안에서 몰래 실행되지 못하게 해요. 모든 요청을 디코딩하고 검사하기 때문에, 승인(approve)하는 내용이 눈에 보이는 내용과 같아요. 클립보드에서 주소 바꿔치기가 일어나는지 지켜보고, 자기 창은 화면 캡처에 찍히지 않게 해요. 저장된 비밀 정보는 메모리 하드(memory-hard) 방식의 Argon2id로 봉인되고 컴퓨터의 TPM 2.0 칩에 고정돼 있어서, 그래픽카드로도 빨리 풀 수 없어요. 그리고 트래커는 없어요. 일상적인 거래에는 그 자체로 탄탄한 선택이고, 이 시리즈에서 소개하는 모든 보안 기능은 휴대폰을 쓰든 안 쓰든 똑같이 적용돼요.
AirGap은 그 위에 얹는 가장 강력한 보호 계층이에요. 위의 내용은 모두 그대로 적용되고, 시드는 오프라인 휴대폰으로 옮겨가요. 운영체제 전체를 장악한 공격자라도 컴퓨터에서 복사해 갈 것을 찾지 못하고, 최종 결정이 내려지는 화면을 바꿀 방법도 없어요. 수신 주소 바꿔치기만은 어디서나 일부 열려 있는 수법이에요. 주소 포이즈닝(address poisoning)은 소프트웨어가 아니라 사람의 눈을 노리기 때문이에요. 두 기기에 표시되는 주소 이미지가 바로 그걸 잡아내려고 있어요.
이 방식으로도 해결되지 않는 것
오프라인 서명 기기(signer)는 무엇에 서명하는지 사실대로 보여 줘요. 하지만 거기에 동의하는 것까지 막을 수는 없어요. 시드 백업은 여전히 본인 책임이에요. 비밀번호 관리자가 아니라 종이나 금속판에 보관하세요. 그리고 강제로 잠금을 풀게 만드는 사람으로부터 지켜 주는 지갑은 없어요. 이런 한계는 직접 겪어서 알게 되기보다 저희에게서 먼저 듣는 편이 낫다고 생각해요.
이 시리즈의 나머지 글에서는 각 부분을 하나씩 살펴봐요. 서명 기기가 왜 이미 가진 휴대폰인지, 에어갭을 건너는 세 가지 방법, 휴대폰이 전파에 드러나지 않는 방법, 전송 수단을 절대 신뢰하지 않는 이유, 휴대폰이 보여 주는 것, 그리고 휴대폰이 남기는 기록까지요.
시리즈 목차
- 컴퓨터는 이미 감염됐다고 가정하세요
- Mass Adoption Security: 서명 기기는 이미 가진 휴대폰이에요
- 에어갭을 건너는 세 가지 방법: QR 코드, Bluetooth LE, NFC
- 전파에 드러나지 않기: 아무도 스캔으로 찾을 수 없는 서명 기기
- 전송 수단은 절대 신뢰하지 않아요
- 휴대폰이 보여 주는 것: 서명 기기에서 하는 트랜잭션 분석
- 휴대폰은 자기만의 기록을 남겨요
- 데스크톱의 금고: Argon2id와 추측에 강한 프로필
- 브라우저 지갑 없이 dApp 쓰기
- 규칙이 있는 MCP 서버: 한도 안에서 움직이는 AI 에이전트
- 모든 걸 담은, 보호받는 지갑 하나
- 작고 네이티브하게: C++, JavaScript 런타임 없이, 워크스테이션부터 Raspberry Pi까지