왜 Secure Element만으로는 완벽한 신뢰를 보장할 수 없을까요?

대부분의 지갑 해킹은 Secure Element 내부가 아니라 그 주변에서 발생해요.

Author logo
Patrick Dike-Ndulue
Post image

Secure Element 시리즈의 첫 번째 글에서는 Secure Element가 무엇인지 설명했어요. 두 번째 글에서는 어떤 공격자를 막을 수 있고, 어떤 공격자는 막지 못하는지 다뤘죠. 이번 글에서는 한 걸음 물러나서 이렇게 질문해 볼게요: 칩 자체가 아무리 완벽하게 안전하더라도, 그것만으로 충분할까요?
 

정답은 '아니요'예요. 그 이유는 칩의 설계와는 무관해요. 실제로 하드웨어 지갑 사용자를 노린 대부분의 성공적인 공격은 Secure Element 자체를 뚫지 않아요. 굳이 그럴 필요가 없기 때문이죠. 공격자들은 그 주변, 즉 종이에 적어둔 시드 구문, 칩에 명령을 내리는 펌웨어, 그리고 기기 접근을 제어하는 PIN 등 여러 층을 노려요. Secure Element가 기술적으로 아무리 뚫기 힘들어도, 그 지갑 전체가 이미 취약해져 있다면 소용이 없어요.
 

즉, 지갑의 보안은 하나의 시스템이지, 단순히 칩 하나에 의존하지 않는다는 뜻이에요. Secure Element는 그 시스템에서 가장 강력한 핵심 방어선이지만, 전체를 대표하진 않아요. 이 부분만 강조하면 공격자들이 그 오해를 노릴 수 있어요.

 

중세의 성은 단순히 'keep'(중앙 탑)만으로 이루어진 게 아니었어요. 해자, 외벽, 내벽, 성문, 그리고 마지막으로 중앙의 keep까지 여러 방어층이 있었죠. 각 층은 서로 다른 목적과 공격자를 막기 위해 존재했어요. 한 층이 뚫렸다고 끝이 아니라, 다음 방어선으로 공격자가 더 가까워질 뿐이었죠. keep이 아무리 튼튼해도, 외벽이 방치된 성은 결코 제대로 방어된 성이 아니에요.

 

첫 번째 층: 펌웨어 무결성과 Secure Boot

Secure Element는 개인 키를 저장하고 보호해요. 하지만 이 칩이 스스로 무엇을 할지 결정하지 않아요. 칩은 명령을 받아요. 이 명령은 기기의 펌웨어, 즉 하드웨어 지갑의 메인 프로세서에서 실행되는 코드에서 오죠.

여기서 중요한 질문이 생겨요. Secure Element에 명령을 내리는 펌웨어가 제조사의 진짜 펌웨어인지, 아니면 변조된 것인지 어떻게 알 수 있을까요?
 

펌웨어 무결성이란?

펌웨어 무결성이란, 내 기기에서 실행되는 코드가 제조사가 출고한 그대로 변조나 손상 없이 진짜임을 보장하는 거예요. 하드웨어 지갑에서 펌웨어는 기기의 모든 동작, 거래 생성과 서명 요청 등 눈에 보이는 모든 것을 담당해요.

공격자가 펌웨어를 바꾸거나 조작할 수 있다면, 큰 위협이 돼요. 악성 펌웨어는 실제로 서명되는 주소와 화면에 표시되는 주소를 다르게 보여줄 수 있고, 거래 금액을 몰래 바꿀 수도 있어요. 사용자 인터페이스를 조작해 PIN을 빼낼 수도 있고, 특정 구조에서는 Secure Element의 보호를 우회할 수 있는 조건을 만들 수도 있어요. 이런 공격은 Secure Element 자체를 뚫지 않아도 돼요. 칩에 전달되는 명령과 결과만 조작하면 되니까요.

Secure Boot

펌웨어 변조를 막는 핵심 기술이 바로 Secure Boot예요. Secure Boot는 펌웨어가 실행되기 전에 암호화 서명을 검증하는 과정이에요. 제조사는 비밀 서명키를 보관하고, 모든 공식 펌웨어는 이 키로 서명돼요. 기기가 부팅될 때, 제조사의 공개키로 펌웨어 서명을 검사해요. 만약 펌웨어가 변조, 교체, 손상됐다면 서명이 일치하지 않아 부팅이 거부돼요.

이 방식은 매우 효과적이지만 한계도 있어요. Secure Boot는 제조사 서명된 펌웨어만 실행된다는 걸 보장하지만, 제조사의 서명 시스템이 한 번도 해킹되지 않았다는 보장은 아니에요. 또, 펌웨어 자체에 취약점이 없거나, 앞으로의 업데이트에서 취약점이 생기지 않는다는 것도 보장하지 않아요. 이런 위험은 신뢰할 수 있는 제조사라면 매우 낮지만, 완전히 없다고 할 수는 없어요.

이 층이 커버하지 못하는 부분

Secure Boot는 정상적으로 서명된 펌웨어 내 취약점까지 막아주진 못해요. 진짜 펌웨어에 우연히라도 버그가 있으면, 그 자체가 공격 지점이 될 수 있죠. 그래서 펌웨어를 항상 최신으로 유지하는 것이 중요해요. 업데이트를 통해 알려진 취약점은 막을 수 있지만, 새로 배포되는 업데이트 역시 신뢰해야 한다는 점을 기억해야 해요.

신뢰할 수 있는 하드웨어 지갑 제조사는 펌웨어 변경 이력을 공개하고, 펌웨어를 불변(immutable)하게 만들거나, 독립적인 리뷰를 거치고, 경우에 따라 사용자가 직접 펌웨어 해시를 확인할 수 있도록 해요.
 

두 번째 층: PIN과 접근 제어

펌웨어가 정상이고 Secure Element도 안전하다고 가정하면, 다음 방어선은 접근 제어예요. 즉, 누가 이 기기를 사용할 수 있느냐죠.

하드웨어 지갑은 보통 PIN(숫자 비밀번호) 입력을 요구해요. PIN을 알아야만 기기가 명령에 응답해요. PIN은 기기를 물리적으로 손에 넣은 사람이 무단으로 사용하는 것을 막는 장치예요. 올바른 PIN이 없으면 거래 서명, 주소 표시, 기타 기능 접근이 모두 차단돼요.

PIN 보호가 Secure Element와 어떻게 작동하나요?

PIN 검증은 기기의 메인 프로세서가 아니라 Secure Element 내부에서 이뤄져요. 이게 중요한 구조적 차이예요. 만약 메인 프로세서에서 PIN을 확인한다면, 공격자가 임의의 코드를 실행해 우회할 수 있어요. 하지만 Secure Element 내부에서 PIN을 확인하면, 키 저장과 동일한 수준의 내구성과 보호를 받게 돼요.

대부분의 인증받은 하드웨어 지갑은 Secure Element 내부에 PIN 시도 횟수 제한도 구현해요. 보통 3~10회 잘못 입력하면 기기가 스스로 데이터를 삭제하거나 영구적으로 잠기거나, Tangem처럼 보안 지연 시간이 늘어나요. 이로써 무작위로 PIN을 맞추는 공격(브루트포스)을 사실상 불가능하게 만들어요. 네 자리 PIN을 10번 안에 맞출 확률은 거의 없으니까요.

PIN 보호가 강력할 때

기기를 주운 사람이 PIN을 모를 때, 기기 내 PIN 검증과 시도 제한의 조합은 매우 효과적이에요. 공격자는 코드를 맞추기도 전에 기기가 스스로 데이터를 삭제해버려요. 성문의 역할을 제대로 하는 셈이죠.

PIN 보호가 약할 때

PIN은 기기의 무단 사용만 막아요. 시드 구문은 보호하지 못해요. 이 둘은 성의 서로 다른 방어선이에요.

만약 도둑이 기기와 시드 구문을 동시에 훔쳐갔다면, PIN은 아무 소용이 없어요. 기기가 없어도 시드 구문만 있으면 호환되는 소프트웨어 지갑에서 복구가 가능하니까요. 성문을 아예 우회해버리는 셈이죠.

또한, PIN 보안은 PIN이 노출되지 않아야만 의미가 있어요. 공공장소에서 입력하거나, 카메라에 찍히거나, 옆 사람이 보는 상황이라면, 아무리 Secure Element가 강해도 PIN이 유출된 것이나 다름없어요.

추가로, PIN은 무단 사용만 막아요. 강제로 PIN을 요구받는 상황(협박 등)에서는 칩이 사용자를 지켜줄 수 없어요. 이건 설계상의 결함이 아니라, 기술적 보안의 한계를 벗어난 부분이에요.
 

세 번째 층: 시드 구문 보관

시드 구문(12개 또는 24개 단어)은 하드웨어 지갑을 처음 설정할 때 생성되는, 개인 키를 사람이 읽을 수 있게 바꾼 형태예요. 기기를 잃어버리거나 고장났을 때, 이 단어들만 있으면 새 기기에서 지갑을 복구할 수 있어요. 각 단어가 체크포인트 역할을 하며, 모두 모이면 Secure Element가 보호하던 키를 재구성하게 돼요.

이 구조는 필수적이면서도, 동시에 대부분의 하드웨어 지갑에서 가장 큰 취약점이에요.

시드 구문이 성의 비유를 깨는 이유

지금까지 설명한 Secure Boot, PIN 보호, Secure Element의 내구성 등은 모두 '개인 키가 칩 안에만 있고, 칩을 통해서만 접근할 수 있다'는 전제를 깔고 있어요.
 

하지만 시드 구문은 이 전제를 무너뜨려요. 시드 구문은 키의 복사본을 평문 단어로 인코딩해 칩 밖, 즉 종이, 금속, 집 안, 심지어 여러 장소에 남겨두는 거예요. 이걸 손에 넣은 누구라도 하드웨어 지갑 없이도 개인 키를 복구할 수 있죠. 시드 구문이 남의 손에 들어가는 순간, 칩의 모든 방어는 무의미해져요.
 

이건 하드웨어 지갑 설계의 결함이 아니라, 의도적인 트레이드오프예요. 기기를 잃었다고 자산까지 영영 잃으면 안 되니까 복구 수단이 필요한 거죠. 하지만 복구 수단은 곧 복구 취약점을 동반해요. 이 취약점을 어떻게 관리하느냐가 관건이에요.

시드 구문을 둘러싼 위협 환경

시드 구문은 하드웨어 칩이 막지 못하는 여러 위협에 노출돼요:

  • 물리적 도난: 종이에 적어 집에 보관한 시드 구문은, 집에 침입한 사람이 발견하면 누구든 사용할 수 있어요. 특별한 기술 지식 없이도, 호환되는 지갑 앱만 있으면 바로 접근이 가능하죠.
     

  • 화재 및 수해 등 물리적 손상: 하드웨어 지갑은 잃어버려도 시드 구문만 안전하다면 복구가 가능해요. 하지만 시드 구문이 손상되거나 소실되면 영구적으로 자산을 잃게 돼요. 복구 방법이 없어요.
     

  • 의도치 않은 노출: 시드 구문을 사진으로 찍거나, 클라우드 메모 앱에 저장하거나, 어떤 디지털 환경에 입력하면 원격 해킹에 취약해져요.
     

  • 상속 및 유산 관리: 시드 구문에 대한 신뢰할 수 있는 복구 계획이 없다면, 소유자가 사망하거나 판단 능력을 잃었을 때 자산이 영구적으로 접근 불가가 돼요.

시드 구문 보관을 강화하는 방법

기본은 내구성 있는 재질(최소 종이, 더 안전하게는 금속 백업 플레이트)에 시드 구문을 적어, 금고나 안전한 장소 등 신원과 쉽게 연결되지 않는 곳에 보관하는 거예요.

이 외에도 시드 구문 위험을 줄이기 위한 다양한 구조적 방법이 있어요:

  • Passphrase protection (25th word): 대부분의 시드 구문 표준은 추가 암호문(패스프레이즈)을 조합해 키를 생성할 수 있어요. 시드 구문만 있고 패스프레이즈가 없다면 자산에 접근할 수 없어요. 패스프레이즈는 반드시 외우거나 별도로 안전하게 보관해야 하며, 또 하나의 비밀로 관리해야 해요.
     

  • Shamir's Secret Sharing: 시드 구문을 여러 조각으로 나눠 각각은 단독으로 쓸모가 없게 만들고, 일부(예: 5개 중 3개)를 모아야만 복구가 가능하게 해요. 이렇게 하면 위험이 지리적으로 분산되고, 여러 신뢰인에게 나눠 맡길 수 있어요.
     

  • Multi-signature wallets: 하나의 시드 구문 대신, 여러 개의 독립된 키로 거래를 승인해야 하는 구조예요. 한 개의 키나 시드 구문만으로는 자산에 접근할 수 없기 때문에, 단일 시드 구문만 잘 보관하는 것과는 아예 위협 모델이 달라져요.

기술로도 완전히 해결할 수 없는 부분

시드 구문 보안은 결국 사람의 행동에 달려 있어요. 어디에 보관할지, 누가 알 수 있게 할지, 시간이 지나도 관리가 잘 되는지, 상황이 바뀌면 갱신하는지 등은 칩이 대신해줄 수 없어요. 종이가 어디에 있는지, 누가 접근할 수 있는지는 결국 사용자의 판단에 달렸어요. 이 층은 하드웨어보다 사람에게 더 의존적이에요.

시스템 전체를 바라보기

이렇게 세 가지 층을 성의 비유로 정리하면, 하드웨어 지갑 보안이 실제로 어떻게 동작하고, 어디서 취약해질 수 있는지 알 수 있어요.

The secure element is the keep: 가장 방어가 강한 지점, 실제로 키가 존재하는 곳이며, 대부분의 공격을 막아내는 기술적 핵심이에요. 뚫기 가장 어려운 층이죠.

Firmware integrity and secure boot are the outer walls: 어떤 코드가 keep에 접근할 수 있는지 제어해, 칩이 받는 명령이 정상이도록 보장해요. 외벽이 없는 성은 아무리 keep이 튼튼해도 방어가 약해요.

The PIN and access controls are the gatehouse: 무단 사용자를 차단하는 사람 중심의 체크포인트예요. 우연한 침입자에겐 효과적이지만, 목표형 공격에는 한계가 있어요.

The seed phrase is the secret passage: 정당하게 사용할 수도 있지만, 잘못된 손에 들어가면 모든 방어를 우회해버리는 복구 경로예요. 이 통로의 보안은 어디로 연결되는지, 누가 알고 있는지에 거의 전적으로 달려 있어요.
 

이 구조의 현실적인 결론은, 시스템의 전체 보안 수준은 가장 강한 층이 아니라, 실제로 사용자가 직면한 위협 환경에서 가장 약한 층에 의해 결정된다는 거예요. Secure Element가 EAL6+ 인증을 받았더라도, 시드 구문을 스마트폰 메모장에 평문으로 저장한다면, 결국 메모장 수준의 보안만 남게 돼요. 칩의 강도와는 무관하게요.

지갑 보안은 하나의 시스템이에요. Secure Element는 그 시스템에서 가장 중요한 구성 요소지만, 'Secure Element가 강하다'고 해서 '지갑이 안전하다'는 뜻은 아니에요. 이 둘은 전혀 다른 이야기예요.

Secure Element는 중심 역할을 맡아요. 원격 및 물리적 기술 공격으로부터 개인 키를 보호하는, 가장 어려운 문제를 해결하죠. 하지만 이 모든 것은 펌웨어, 접근 제어, 키 백업 등 더 넓은 시스템 안에서만 의미가 있어요. 이 부분들도 반드시 신경 써야 해요.

시스템 전체를 이해하는 건 하드웨어 지갑이나 Secure Element를 부정하려는 게 아니에요. 오히려 각 층이 무엇을 막을 수 있고, 무엇은 못 막는지 제대로 아는 것에서 진짜 보안이 시작된다는 의미예요.

Author logo
작가 Patrick Dike-Ndulue

Senior editor covering crypto, onchain equities, and technology.

Author logo
검토자: Rukkayah Jigam

Writer & editor covering digital assets and product updates.