당신의 암호화 지갑이 해킹당할 수 있나요?

화리화외
2024-07-24 19:01:20
수집

암호화 지갑을 사용해본 적이 있다면, 당신은 분명히 니모닉(복구 문구)에 익숙할 것입니다. 니모닉은 평문 개인 키의 또 다른 표현 형태로, 최초로 BIP39(2013년에 탄생한 비트코인 39번 개선 제안)에서 제안되었습니다. BIP-39 표준에서는 각 키 쌍이 고유한 니모닉 세트에 대응하며, 이는 사용자가 복잡한 개인 키를 기억하고 기록하는 데 도움을 주기 위한 것입니다.

BIP39(니모닉을 정의하여 시드의 백업을 더 친숙하게 만드는 개념) 외에도, 사실 BIP32(많은 개인 키를 관리하는 번거로움을 피하기 위해 제안된 계층적 유도 계획), BIP44(BIP32의 계층 경로 정의 규격) 등의 개념이 있습니다. 예를 들어, 우리가 잘 아는 MetaMask(여우 지갑)는 BIP44 표준을 사용하여 키를 파생시켜 사용자가 여러 계정 지갑을 사용할 수 있도록 하며, 각 계정은 독립적인 공개 키(즉, 수신/송금에 사용하는 공개 지갑 주소)와 개인 키를 가지고 있지만, 이러한 계정(하위 계정)은 모두 동일한 니모닉 세트에서 파생됩니다. MetaMask의 다중 주소는 HD(계층적 결정성) 기능과 관련이 있으며, 이는 후속에서 소개할 것입니다. BIP 관련 개념에 대해서는 여기서 더 이상 설명하지 않겠습니다. 관심 있는 분들은 구글에서 관련 자료를 찾아보시면 됩니다.

이제 BIP39에 기반하여 간단히 소개하겠습니다. 지갑을 생성할 때 생성되는 12개의 니모닉(또는 24개)은 해당 지갑의 모든 자산에 해당합니다. 12개의 니모닉을 잃어버리면, 이는 암호화 지갑의 모든 자산이 더 이상 당신의 것이 아님을 의미합니다. 다시 말해, 누가 니모닉을 소유하느냐에 따라 그 암호화 지갑의 모든 자산을 소유하게 됩니다.

또한 현재 대부분의 주류 지갑이 BIP 표준과 호환되기 때문에, 하나의 니모닉 세트는 거의 모든 암호화 지갑에 가져와 사용할 수 있습니다. 예를 들어, 동일한 니모닉 세트를 MetaMask에 가져오거나, Rabby Wallet에 가져오거나, OKX Web3 지갑에 가져오는 등… 요약하자면, 지갑은 단순한 도구일 뿐이며, 그 자체로는 당신의 암호화 자산을 저장하지 않습니다. 당신의 지갑(엄밀히 말하면 당신의 니모닉)의 암호화 자산은 체인에 저장됩니다.

하지만 여기서 주의해야 할 점은, 현재 온라인에는 많은 가짜 지갑이 있으니 주의해야 하며, 알려지지 않았거나 평판이 좋지 않은 암호화 지갑을 사용하지 않도록 해야 합니다. 지갑 개발자가 내부에서 자산을 훔치는 것을 방지하기 위해서입니다.

다시 니모닉 문제로 돌아가겠습니다. 암호화 지갑의 니모닉은 2048개의 영어 단어로 구성된 특정 목록(BIP39 단어 목록)에서 추출됩니다. 즉, 어떤 도구나 지갑 DApp이 생성한 니모닉은 모두 이 2048개의 단어에 포함됩니다. 아래 그림과 같습니다.

또한, 니모닉의 고유성을 보장하기 위해 BIP39 단어 목록에는 처음 4개의 글자가 같은 경우가 존재하지 않습니다. 예를 들어, apple과 appl은 처음 4글자가 같기 때문에 이 두 단어는 2048개 단어 목록에 포함되지 않습니다. 즉, 단어의 처음 4글자를 알면 BIP39 단어 목록을 통해 해당 단어의 나머지 부분을 찾을 수 있습니다. 그래서 때때로 특정 지갑 애플리케이션에서 니모닉을 가져올 때 처음 4글자를 입력하면 소프트웨어가 자동으로 나머지를 입력해주는 것입니다. 아래 그림과 같습니다.

이때, 일부 새로운 사용자들은 의문을 가질 수 있습니다. 니모닉이 고정된 2048개의 단어에서 무작위로 12개 단어를 선택하여 구성되므로, 암호화 지갑이 쉽게 해킹될 수 있는 것 아닌가요? 혹은 무작위로 12개 단어를 선택하여 가져오면 암호화 자산이 저장된 지갑에 접근할 수 있는 것 아닌가요?

1. 무작위로 12개 단어를 입력하여 지갑에 접근할 수 있는 문제

니모닉의 생성 순서는 특정 알고리즘에 따라 이루어지므로, 다른 사람이 무작위로 12개 단어를 입력하여 당신의 지갑에 접근할 수 있을까 걱정할 필요는 없습니다. 니모닉 생성 알고리즘의 대략적인 과정은 다음과 같습니다.

2. 암호화 지갑이 해킹될 가능성에 대한 문제

확률적인 관점에서 이 문제를 고려하면, 실제로 가능성이 있습니다.

하지만 실제 작동 관점에서 보면, 이러한 확률이 발생할 가능성은 극히 낮습니다. 여기서 우리는 계산 목록을 통해 살펴볼 수 있습니다(아래 그림 참조):

1개 단어가 부족할 경우, 해킹할 수 있는 가능성은 2048가지입니다 (2048¹)

2개 단어가 부족할 경우, 4,194,304가지의 가능성이 있습니다 (2048²)

3개 단어가 부족할 경우, 8,589,934,592가지의 가능성이 있습니다 (2048³)

4개 단어가 부족할 경우, 17,592,186,044,416가지의 가능성이 있습니다 (2048⁴)

만약 당신이 암호화 지갑을 해킹하고 싶고, 현재 가장 강력한 CPU인 Intel Core i9-14900K를 구매했다면, 이 CPU는 초당 최대 5760억 번의 계산을 처리할 수 있습니다. 아래 그림과 같습니다(저는 직접 ChatGPT에 물어봤습니다).

이론적으로, 해당 CPU를 사용하여 12개의 니모닉 조합을 완전히 해킹하려면 9.45 x 10²⁷ 번의 계산이 필요합니다. 아래 그림과 같습니다.

그렇다면 이 계산을 수행하는 데 몇 년이 걸릴까요? 우리는 계속해서 ChatGPT를 통해 계산해볼 수 있습니다. 아래 그림과 같습니다.

위의 계산 결과를 보면, 위의 CPU 성능을 이용해 2048개의 니모닉을 완전히 해킹하려면 299,700,000,000,000,000,000년이 필요합니다. 이는 거의 불가능해 보입니다.

하지만 12개 니모닉 중 몇 개가 누락된 경우에는 해킹이 가능할 수 있으며, 구체적인 해킹 계산에 필요한 시간과 비용은 관심 있는 분들이 위의 방법으로 ChatGPT에 물어보시면 됩니다. 현재는 니모닉을 해킹하거나 복구하는 데 사용할 수 있는 도구도 몇 가지 있습니다. 예를 들어, 이전 글에서 소개한 Seed Saviour(1개 단어를 잃어버린 경우 복구/해킹에 적합)와 Btcrecover(2개 이상의 단어를 잃어버린 경우 복구/해킹에 적합) 등이 있습니다. 아래 그림과 같습니다.

종합적으로 볼 때, 현재 암호화 지갑 자산 손실의 주요 원인은 해킹 문제에 있지 않고, 주로 지갑 소유자가 잘못 사용하거나 백업하는 데서 발생합니다. 예를 들어, 니모닉을 인터넷에 연결된 휴대폰/컴퓨터나 온라인 클라우드에 무작위로 저장하거나, 니모닉을 다른 사람에게 무작위로 보내거나, 가짜 지갑 소프트웨어를 다운로드하거나, 문제가 있는 피싱 사이트에 권한을 부여하는 등의 경우입니다.

3. 12개 니모닉을 선택할지 24개 니모닉을 선택할지?

12개의 니모닉은 가장 일반적이며, 사실 24개의 니모닉도 있습니다. 기술적인 관점에서 보면, 12개 단어는 128비트에 해당하고, 24개 단어는 256비트에 해당합니다. 현재 우리가 흔히 사용하는 MetaMask(소프트웨어 지갑), OneKey(하드웨어 지갑)와 같은 지갑은 기본적으로 12개의 니모닉을 생성하며, Ledger(하드웨어 지갑), Trezor(하드웨어 지갑)와 같은 지갑은 기본적으로 24개의 니모닉을 생성합니다.

12개 니모닉과 24개 니모닉으로 생성된 지갑은 큰 차이가 없으며, 주요 차이는 보안 수준입니다. 즉, 12개 니모닉은 128비트의 보안 수준을 제공하고, 24개 니모닉은 256비트의 보안 수준을 제공합니다.

하지만 실제로 128비트의 보안 수준은 이미 충분히 높습니다. 위의 계산을 통해 이미 알 수 있습니다. 따라서 12개 니모닉을 선택할지 24개 니모닉을 선택할지는 개인의 고려와 선호에 따라 다릅니다. 일반 개인에게는 이 이유로 24비트 니모닉을 생성할 필요가 없습니다. 너무 많은 단어를 기억하고 관리하는 것은 오히려 더 어렵고 번거로울 수 있습니다.

4. 지갑은 주로 어떤 종류로 나뉘나요?

일상적으로 우리는 다양한 핫 지갑, 콜드 지갑, 하드웨어 지갑, 종이 지갑 등의 용어를 많이 듣습니다. 하지만 지갑 자체의 특성에 따라 분류하면, 현재 일반적인 지갑 유형은 EOA 지갑, MPC 지갑, AA 지갑 등이 있습니다. 사실 이 주제는 이전 글에서도 관련 내용을 정리한 적이 있으니, 여기서 간단히 다시 살펴보겠습니다:

1)EOA 지갑

EOA 지갑은 니모닉 지갑을 의미합니다. 니모닉을 언급할 때, 일부 사람들은 개인 키 문제를 언급할 수도 있습니다. 간단히 말해, 개인 키는 니모닉과 같습니다. 개인 키는 일반적으로 긴 숫자와 문자로 구성되어 있어 인간이 기억하기에는 불편합니다. 그래서 나중에 니모닉을 사용하여 개인 키를 "대체"하게 되었습니다. 우리는 단순히 12개 또는 24개의 영어 단어(니모닉)를 기억하거나 백업하면 됩니다.

또한, 니모닉과 개인 키 간에는 온라인 변환 도구를 사용하여 서로 변환할 수 있습니다. 아래 그림과 같습니다. 하지만 여기서 주의할 점은, 안전을 위해 알려지지 않은 도구나 웹사이트를 사용하여 니모닉을 생성하거나 변환 작업을 하지 않도록 해야 합니다. 니모닉 유출 문제를 방지하기 위해서입니다.

2)MPC 지갑

MPC 지갑은 무개인 키 지갑을 의미합니다. 즉, 개인 키는 분할 처리되어 플랫폼이 1개를 저장하고, 사용자 장치가 1개를 저장하며, 사용자 클라우드(예: iCloud)에 백업 1개를 저장합니다.

현재 많은 사람들이 사용하는 Binance Web3 지갑, OKX Web3 지갑이 이러한 유형입니다. 물론, 이들은 기존의 니모닉을 가져와 EOA 지갑을 생성하는 것도 지원합니다.

3)AA 지갑

AA 지갑은 스마트 계약 지갑을 의미하며, 계정 추상화(Account Abstract) 지갑이라고도 불립니다. 이러한 지갑은 개인 키가 없으며, 독립적으로 생성할 수 없고, 코드 논리에 의해 제어되며, 기존 지갑 기반에서 생성해야 합니다. 즉, 각 무개인 키 지갑이나 개인 키 지갑은 하나의 AA 스마트 계약 계정만 생성할 수 있으며, 니모닉 지갑 아래의 각 계정(예: 동일한 니모닉 세트 아래의 MetaMask는 N개의 서로 다른 지갑 주소를 생성할 수 있음)은 해당하는 AA 스마트 계약 계정을 생성할 수 있습니다. 예를 들어, 지갑 A --- 계정 01은 지갑 A --- Smart 01에 해당합니다.

스마트 계약 지갑은 일반적으로 배치 거래, 가스 대납, 키 복구 등 더 많은 사용자 정의 및 확장 기능을 갖추고 있습니다. 우리가 위에서 언급한 Binance Web3 지갑, OKX Web3 지갑도 AA 지갑 생성을 지원합니다.

하지만 현재 이 지갑 모델은 시장에서의 채택률이 상대적으로 낮으며, 많은 체인(해당 DApp 포함)이 아직 지원하지 않습니다. 따라서 AA 지갑을 사용하여 스왑 작업을 수행할 때 "현재 연결된 무개인 키 지갑은 XXX 체인을 지원하지 않습니다"라는 메시지를 볼 수 있습니다.

5. 다중 서명 지갑 관련 문제

위에서 언급한 것 외에도, 암호화 지갑과 관련하여 다중 서명(Multi-Signature)이라는 개념을 자주 들을 수 있습니다. 다중 서명은 여러 개의 서로 다른 개인 키를 통해 거래를 승인하는 것을 의미하며, 단일 개인 키만으로는 부족합니다. 이는 거래의 안전성을 높이기 위한 것입니다.

일반적으로 다중 서명은 몇 가지 문제를 포함합니다:

1)여러 개인 키 문제

즉, 다중 서명 지갑은 일반적으로 여러 개의 개인 키를 포함하며, 각 개인 키는 특정 승인자와 관련이 있습니다.

2)서명 임계값 문제

즉, 다중 서명 지갑에서는 서명 임계값을 정의할 수 있으며, 거래를 실행하기 위해 필요한 승인자의 서명 수를 나타냅니다. 이 작업 메커니즘은 여러 키와 M-of-N 서명의 개념을 포함합니다. M-of-N 설정에서는 N개의 키 중 M개가 거래에 서명해야 거래가 승인됩니다. 예를 들어, 2-of-3 다중 서명 지갑에서는 세 개의 개인 키가 존재하며, 최소 두 개의 개인 키(승인자)가 있어야 거래를 실행할 수 있습니다.

3)다중 서명 거래 문제

즉, 거래를 실행하기 위해서는 서명 임계값을 충족해야 하며, 충분한 수의 승인자 서명을 받아야 거래가 방송되고 확인됩니다.

하지만 구체적인 응용 측면에서 다중 서명 방식은 주로 기업/기관에서 많이 사용되며, 개인도 사용할 수 있습니다. 예를 들어, 하나의 개인 키를 자신의 휴대폰에 저장하고, 다른 개인 키를 자신의 컴퓨터에 저장하여 거래 시 두 개의 개인 키를 함께 사용해야 자금을 이동할 수 있습니다.

다중 서명 지갑의 생성 및 사용 예에 대해서는 이전 글에서 이미 관련 내용을 소개한 바 있으니, 여기서 더 이상 설명하지 않겠습니다. 관심 있는 분들은 이전 글을 다시 확인해 보시기 바랍니다. 아래 그림과 같습니다.

6. 비트코인 지갑 관련 문제

이와 관련된 문제는 이전에 그룹에서 공유한 적이 있으니, 여기서 간단히 다시 살펴보겠습니다:

1)코드 관점에서

비트코인 지갑 주소의 개인 키(주의: 개인 키)는 여러 가지 형식으로 나눌 수 있습니다. 예를 들어 WIF, WIFC, HEX, B64, MINI, BIP38 등으로, 하나의 개인 키는 다양한 인코딩 방식으로 생성될 수 있습니다(다양한 형식의 개인 키는 서로 인코딩 변환이 가능합니다). 여기서는 WIF와 WIFC를 예로 들어 설명하겠습니다.

WIF는 Wallet Import Format의 약자로, 개인 키의 한 가지 인코딩 방식입니다. 이 방식은 압축형과 비압축형 두 가지 형태로 나눌 수 있으며, 압축형은 WIF compressed(약칭 WIFC), 비압축형은 WIF uncompressed(약칭 WIF)입니다.

이들의 차이는 기술적인 관점에서만 존재합니다. 예를 들어:

WIF 인코딩은 개인 키 앞에 0x80라는 접두사를 추가하고, 이 새로 생성된 값에 대해 두 번 sha256 작업을 수행한 후, 이 계산 결과의 처음 4바이트를 검증 비트로 사용하고, 마지막으로 base58 인코딩 결과를 생성하여 5로 시작하는 개인 키 주소를 생성합니다.

WIFC의 계산은 WIF와 유사하지만 몇 가지 차이가 있습니다. 0x80의 접두사를 추가할 뿐만 아니라, 끝에 압축 표시 접미사인 0x01을 추가해야 하며, 나머지 결과는 이전과 동일하게 처리한 후 두 번 sha256을 수행하고, 처음 4바이트를 검증 비트로 사용하여 K 또는 L로 시작하는 개인 키 주소를 생성합니다.

따라서 위의 압축형 및 비압축형 개인 키에 따라 비트코인 주소는 Bitcoin Address Uncompressed(비트코인 비압축 주소)와 Bitcoin Address Compressed(비트코인 압축 주소)로 나뉩니다.

즉, 이렇게 되면 하나의 비트코인에 대해 두 개의 주소(즉, 압축형/비압축형 주소)가 존재하게 되지만, 이 두 주소는 모두 "유효"하며 사용상에도 차이가 없습니다. 압축 주소는 사실 우리가 가장 일반적으로 사용하는 주소(1로 시작하는 비트코인 지갑 주소)이며, 현재 대부분의 지갑 도구가 기본적으로 생성하는 주소입니다.

결론적으로, 어떤 도구를 기반으로 생성된 지갑 주소는 생성된 지갑 주소와 개인 키가 반드시 일대일 대응 관계를 가지며, 이 두 가지를 잘 기록해두면 됩니다. 일상적인 사용 과정에서는 압축형과 비압축형 문제에 대해 고민할 필요가 없으며, 기술적인 문제에 대해서도 고민할 필요가 없습니다. 단지 기억해야 할 점은, 개인 키가 유출되면 모든 자산이 손실될 수 있다는 것입니다.

2)주소 형식 관점에서

일반적으로 비트코인 지갑 주소는 주로 네 가지 형식으로 나뉩니다:

일반 주소(즉, P2PKH 주소, Pay-to-Public-Key-Hash): 가장 먼저 등장한 비트코인 주소 형식으로, 이 주소는 "1"로 시작하며 26에서 35개의 문자로 구성되어 있습니다. 숫자와 대문자가 포함됩니다.

원주율의 격리 증인 주소(즉, Native Segwit Address, P2WPKH 주소라고도 함): 새로운 주소 형식으로, "bc1q" 또는 "tb1"로 시작하며 41에서 62개의 문자로 구성되어 있습니다. 숫자와 소문자가 포함됩니다.

호환 가능한 격리 증인 주소(즉, Nested Segwit Address, P2SH-P2WPKH 주소라고도 함): 전통적인 일반 주소와 원주율의 격리 증인 주소를 혼합한 새로운 주소 형식입니다. "3"로 시작하며 26에서 35개의 문자로 구성되어 있습니다. 숫자와 대문자, 소문자가 포함됩니다.

탭루트 주소: 탭루트는 비트코인 프로토콜의 중요한 업그레이드로(2021년 11월 활성화됨), 비트코인의 개인 정보 보호, 보안 및 확장성을 향상시키기 위해 설계되었습니다. 탭루트 주소는 일반적으로 "bc1p"로 시작합니다.

간단히 말해, 위의 네 가지 주소는 동일한 니모닉 세트에서 유도하여 생성할 수 있습니다. 현재 SegWit/Taproot 주소는 상대적으로 많이 사용되며, 많은 주류 지갑의 기본 주소 형식입니다(일부 지갑은 4가지 주소 중 1~2가지 형식만 지원할 수 있습니다). bc1 주소는 더 높은 용량과 더 낮은 거래 수수료와 같은 많은 장점을 포함하고 있습니다. 비트코인에는 다양한 주소가 있지만, 각 주소 간에는 서로 송금이 가능하며, 동일한 기본 암호화 기술과 하위 프로토콜을 사용하여 거래를 수행합니다. 서로 다른 주소의 유일한 차이는 가스 요금 측면에서 차이가 있으며, SegWit 주소가 상대적으로 저렴합니다. SegWit과 Taproot의 차이점은 전자는 거래 데이터를 단순화하고, 후자는 개인 정보 보호와 효율성을 향상시키는 것입니다.

8. HD 지갑 관련 문제

HD 지갑은 계층적 결정성(Hierarchical Deterministic) 지갑을 의미합니다. 이 개념은 일부 지갑 애플리케이션에서 볼 수 있으며, 간단히 말해 HD는 키 쌍을 관리하고 생성하기 위해 계층 구조를 사용하는 지갑 구조로 볼 수 있습니다. 이러한 프레임워크를 기반으로 사용자는 동일한 니모닉 세트를 통해 거의 무한한 수의 주소(하위 주소)를 생성할 수 있으며, 각 주소의 개인 키를 백업할 필요가 없습니다.

이러한 지갑 모델의 장점은 단 하나의 니모닉 세트로 무수히 많은 새로운 지갑 주소를 생성할 수 있다는 것입니다. 서로 다른 주소는 다양한 용도로 사용할 수 있습니다. 예를 들어, 일부 주소는 에어드랍을 받기 위해 사용하고, 일부는 송금에 사용하며, 일부는 테스트에 사용되는 등, 이렇게 하면 더 나은 익명성과 개인 정보 보호를 달성할 수 있습니다. 하지만 단점도 분명합니다. 만약 니모닉이 유실되거나 유출되면, 해당 주소 아래의 모든 자산도 손실됩니다.

따라서 편리함과 안전성 중에서 스스로 결정해야 합니다.

체인캐처(ChainCatcher)는 독자들에게 블록체인을 이성적으로 바라보고, 리스크 인식을 실제로 향상시키며, 다양한 가상 토큰 발행 및 조작에 경계해야 함을 상기시킵니다. 사이트 내 모든 콘텐츠는 시장 정보나 관련 당사자의 의견일 뿐이며 어떠한 형태의 투자 조언도 제공하지 않습니다. 만약 사이트 내에서 민감한 정보를 발견하면 “신고하기”를 클릭하여 신속하게 처리할 것입니다.
체인캐처 혁신가들과 함께하는 Web3 세상 구축