핫 월렛 (Hot Wallet) - 온라인
- 네트워크에 연결되어 있어 실시간으로 거래 정보를 주고 받을 수 있음
- 개인 키가 온라인에 노출되기에 해킹 등의 보안 문제에 취약함
- 암호화폐 거래를 자주 사용하는 경우 사용하는 것이 바람직
핫 월렛의 종류
1. 웹 월렛
- 웹 기반으로 호스팅되는 지갑
- 인터넷 브라우저를 통해 접속하는 지갑으
** 브라우저 확장 프로그램이나 웹 사이트 형태로 제공됨
- 항상 인터넷에 노출되어 있어 보안에 가장 취약 / 즉시 거래가 가능하기에 가장 실용적
- 종류 : 메타마스크(MetaMask), 카이카스(Kaikas) 등
2. 데스크톱(PC) 월렛
- OS에 다운로드하여 작동할 수 있는 앱
- 인터넷 접속 여부에 따라 핫 월렛이나 콜드 월렛으로 작동함
- 웹 월렛보단 불편 / 필요시 인터넷에 연결하여 거래 가능 (콜드 월렛에 비해선 실용적)
3. 모바일 월렛
- 데스크톱 & 웹 지갑의 모바일 형태
- 인터넷 접속 여부에 따라 핫 월렛이나 콜드 월렛으로 작동함
- 스마트폰 앱으로 다운로드해 사용 가능 / 어디서나 거래 가능하다는 점에서 편리
- 종류 : 클립(Klip)
콜드 월렛 (Cold Wallet) - 오프라인
- 지갑의 개인키를 오프라인으로 보관하는 지갑
- 오프라인 상태에 있기때문에 보안 측면에서 안전
- 오프라인이므로 실시간 거래 불가능
- 암호 화폐를 안전하게 보관하는 것이 목적인 경우 사용하는 것이 바람직
콜드 월렛의 종류
1. 페이퍼 월렛 (Paper Wallet)
- 지갑 주소를 만들고 주소를 종이에 써서 보관하는 형식
** 암호화폐의 개인 키를 종이에 인쇄한 것
- 온라인 해킹등의 위협에선 안전하지만 종이를 잃어버릴 위험이 있음
2. 하드웨어 월렛 (Hardware Wallet)
- 개인 키를 USB나 카드에 보관하는 방식
- 하드웨어 지갑을 다른 장치에 연결 → SW를 통해 자신의 잔고를 확인하거나 트랜잭션 생성 가능
Smart Contract Wallet
- 스마트 컨트랙트를 이용하는 지갑
- CA(Contract Account)를 이용하여 컨트랙트 코드로 자산을 관리하는 월렛
** CA에 있는 컨트랙트 코드를 이용해 누가 어떤 조건에서 자산에 접근할 수 있는지 프로그래밍화 가능
- 개인 키가 아닌 스마트 컨트랙트로 관리하기 때문에, 기존의 단일키를 사용하는 EOA 기반 월렛보다 더 높은 수준의 보안, 유연성, 편의성을 제공함
* 이더리움 EOA (Externally Owned Account)
- 이더리움 블록체인 상에서 사용되는 개인 지갑 계정
- 이더리움 네트워크 상에서 트랜잭션을 생성하고 서명하여 블록체인 상의 계정으로 이동시키는 역할
- 이더리움에서 사용자는 EOA로 자신의 자산을 관리함
- 코드(스마트 컨트랙트)를 계정에 담을 수 없기 때문에 자산 관리 측면에서 기능이 제한적임
* 사용자는 스마트 컨트랙트 코드를 통해 다른 dApp과 상호작용 가능
멀티 시그 월렛 (Multi-Signature Wallet)
- 여러개의 개인 키를 사용해 작동하는 지갑
- 이더리움과 같은 블록체인에서 자산을 보관하고 관리할 수 있음
- 멀티 시그(Multi-Sig)를 통해서만 송금 가능
- 하나의 지갑에 N명의 사용자가 지갑에 대한 소유 권한을 가지고, 해당 지갑에서 트랜잭션을 만들기 위해서는 N명 중 k명이 트랜잭션에 서명해야 함
- 일반 지갑에 비해 보안이 우수하고 송금 실수 방지 가능
- 스마트 컨트랙트 상에서 구현되기 때문에 사용성이 떨어짐, 오류로 인한 문제 발생 가능
- 종류 : ConsenSys, Gnosis, Argent, BitGo 등
기존의 핫 월렛과 콜드 월렛은 하나의 개인 키를 사용함 → 키가 노출될 경우 탈취자가 자산에 접근하기 쉽다는 단점이 있음 이러한 단점을 보안한 것 ⇒ 멀티 시그 월렛
* 이더리움상 구현 방법
- 멀티 시그 월렛을 위한 스마트 컨트랙트 생성
- N명 중 k명이 서명해야 컨트랙트를 이행한다는 서명 제한 룰 추가
- 실제로 k명이 멀티 시그 월렛 컨트랙트에 트랜잭션을 보내야 함
비결정적 월렛
- 매번 개인키를 무작위로 생성하는 방식의 지갑
- 데이터를 자주 백업해야 하므로 관리가 불편함
** 실수로 지갑 데이터를 분실할 겨우 해당 비밀키를 통해 생성된 주소에 들어있던 코인과 해당 주소로 생성한 스마트 컨트랙트에 접근 못함
결정적(시드) 월렛
- 비결정적 월렛의 불편함을 해결하는 방식의 지갑
- 하나의 시드와 시드에서 파생된 시드키를 가지고 있음
** 시드키는 비밀키를 만들기 위한 난수로 사용됨
** 비밀키는 시드키를 인덱스(또는 다른 데이터)와 결합하여 만듦
- 생성될 비밀키의 인덱스와 시드키만 알고 있다면 새로운 비밀키가 어떤 값을 가질지 알 수 있음
** 시드키를 통해 만들어지는 비밀키는 그 값이 미리 정해져 있다고 볼 수 있음
** 하나의 시드키만 알고 있어도 시드키에서 파생된 모든 비밀키를 알 수 있음
→ 모든 비밀키를 일일이 관리할 필요 없이 시드키 하나만 관리하면 됨
- 지갑 데이터가 훼손되어 비밀키를 비롯한 주소를 잃어버려도 시드키를 이용해 복구 가능
HD Wallet (Hierarchical Deterministic Wallet, 계층적 결정 지갑)
- 결정적 지갑의 한 종류
- BIP - 32 에서 제안되고 BIP - 44에서 개선된 비트코인 표준
- 단일 시드(seed)로부터 파생되는 계층적인 개인 키를 생성하며, 이를 통해 사용자는 단일 시드(seed)만으로 다수의 계정과 개인 키를 관리 가능
** BIP - 32 : HD 지갑을 처음 제안한 비트코인 표준
** BIP - 44 : 여러 계정이 여러 목적에 맞게 지갑을 사용할 수 있는 HD 지갑 구조 제안
계층적 지갑
- 시드에서 시드키를 거쳐 비밀키 생성, 비밀키로부터 주소를 생성
⇒ 트리구조로 이루어져 있음
- HD 월렛이 주소를 만들고 관리할 떼 트리 구조를 사용함
* 계층적 + 결정적
→ 트리구조에서 부모키는 인덱스에 따라 연속된 자식키를 유도할 수 있음
→ 각각의 자식키는 손자키를 유도할 수 있음
** 인덱스 - 트리구조의 루트부터 현재 노드까지의 경로
* 트리구조
- 대표적인 계층적 자료 구조
- 상위 노드에서 하위 노드로 마치 나무의 모양처럼 뻗어져 나감
HD Wallet 계정 생성 주요 개념
1. Seed
- 암호학적으로 안전한 무작위 숫자에서 니모닉 연상 단어를 생성
- 니모닉 연상 단어에서 HD 지갑의 시드 생성
⇒ 모든 키는 루트 시드에서 결정적으로 파생되었음
- 니모닉 연상 단어만 알고 있다면 언제 어디서든 HD 지갑들을 백업하거나 복원 가능
2. Path
- HD Wallet 키의 경로(path)에는 규칙을 사용하여 식별함
- 각 트리 레벨은 슬래시(/) 문자로 구분
- 마스터 비밀키로부터 파생된 키 = m 으로 시작
- 마스터 공개키로부터 파생된 키 = M 으로 시작
** m/0 : 마스터 비밀키의 첫 번째 자식 비밀키
** M/0 : 첫 번째 자식 공개키
** m/0/1 : 마스터 비밀키의 첫번째 자식의 두번째 자식 비밀키 (마스터키의 손자키)
* DRBG (Deterministic Random Bits Generate)
- 컴퓨터로 만든 난수를 해시 함수를 통해 진짜 난수로 만드는 알고리즘
** 컴퓨터가 만들어낸 난수는 예측이 가능한 가짜 난수라 안전하지 않기 때문에컴퓨터가 만들어낸 난수를 해싱한 값을 사용함
- HD 지갑에서는 시드키를 생성할 때 DRBG를 사용함
* HMAC-SHA512
- 부모의 키 값을 패딩하여 XOR연산을 하고, 그 결과를 해싱함
- 마스터 키는 시드키에 HMAC-SHA512를 연산한 결과값
- HD 지갑에서는 부모키를 통해 자식키를 확인할 수 있어야 하므로 HMAC 방식을 사용하여 자식키를 만듦
니모닉 (Mnemonic)
- 결정적 지갑에서 난수를 12개의 영단어로 인코딩한 그룹
- 난수를 시드키로 변환할 때, 중간 과정에 12개 혹은 24개의 랜덤한 영단어로 변환하여 사용자가 지갑을 관리하기 쉽게 도와주는 것
- 지갑을 사용하는 사람 관점에서 지갑을 관리하기 편하게 해주는 기능
시드키를 생성하기 위해서
1. 난수를 해싱하여 니모닉 코드 단어 생성
2. 니모닉 코드 단어를 다시 암호화하여 시드 키 생성
⇒ 니모닉 단어만 알고 있으면 시드 키를 도출해 낼 수 있음
⇒ 니모닉 단어로 키를 관리함
니모닉 월렛
- 니모닉 연상 단어를 사용한 지갑
- 시드 키를 생성하는 데 사용하는 니모닉 연상 단어를 사용해 지갑 관리
- 비밀 키를 더 쉽게 관리할 수 있게 해줌
* 암호화폐 지갑
- 코인/토큰을 사용할 수 있는 비밀키를 관리하는 일종의 키 관리 시스템
- 암호화폐 지갑 자체에 코인/토큰이 들어 있는게 아님
니모닉 코드는 해시 함수를 재귀적으로 반복하는 키 스트레칭 과정을 거쳐 마스터 시드를 생성함
⇒ 마스터 시드는 HD 지갑 주소 생성의 바탕이 됨
Salting
- 원본 데이터에 임의의 문자열인 솔트(Salt)를 추가하여 해싱하는 방식
- 솔팅 방식으로 비밀번호를 암호화하여 DB에 보관하면, 해커가 솔트가 뭔지 알지 못하는 이상 레인보우 테이블의 해시값과 DB의 해시값을 비교해도 원본 비밀번호를 알 수 없음
** 해시함수는 동일한 입력에 대해서 항상 같은 값을 출력 → 다른 사용자와 비밀번호가 같을 경우 해시값도 같음
** 해커들은 자주 쓰이는 비밀번호와 비밀번호의 해시값을 가지고 있다가, 가진 값과 DB에 저장된 해싱된 비밀번호를 비교하는 레인보우 테이블 공격을 할 수 있음
⇒ 해시값을 비교해도 원본 비밀번호를 알 수 없도록 솔트를 사용
Key Stretching
- Salting 방식을 여러번 반복 하는 것
- 솔팅의 결과값을 다시 솔트 함수의 입력값으로 하여 다시 솔팅 하는 과정을 반복
- 사용자가 입력한 비밀번호는 예측하기 쉬운 경우가 많은데, 키 스트레칭은 이러한 예측을 어렵게 함
영지식증명 (Zero-knowledge Proof)
- 거래 상대방에게 어떠한 정보도 제공하지 않은 채, 자신이 해당 정보를 가지고 있다는 사실을 증명하는 방법
- 고객의 신원정보를 확인해야 하는 의무와 동시에 개인정보보호법에 위반되지 않도록 처리 및 관리를 해야하는 기업 사이에서 새롭게 대두되고 있는 기술
** Wifi 무선랜 보안 방식인 WPA-3에 활용
** 블록체인에서 레이어2 솔루션인 zk 롤업에서 유효성 증명에 활용
* 암호화폐의 익명성을 악용해 범죄에 악용하는 사례가 다양함
- 비트코인은 기본적으로 거래 내역이 지갑에 남음
- 익명성 코인은 영지식 증명을 통해 거래내역 자체를 숨길 수 있음
* 익명성 코인(프라이버시 코인, 다크 코인)
- 개인 정보를 보호해 주며, 거래내역이 남는 것이 아니라 잔고가 증가하고 줄어든 흔적만 찾을 수 있음
영지식 증명의 3가지 조건
1. 완전성 (Completeness)
- 어떤 조건이 참이라면 신뢰할 수 있는 검증자는 신뢰할 수 있는 증명자에 의해 이 사실을 납득할 수 있어야 함
2. 건전성 (Soundness)
- 어떤 조건이 거짓이라면 신뢰할 수 없는 증명자는 거짓말을 통해 검증자에게 조건이 참임을 절대 납득시킬 수 없음
3. 영지식성 (Zero-knowledge)
- 어떤 조건이 참일 때, 검증자는 이 조건이 참이라는 사실 이외의 아무 정보를 알 수 없음
출처 : 코드스테이츠 BEB
'블록체인' 카테고리의 다른 글
[블록체인 기술 1] 블록체인 트릴레마 (1) | 2023.05.10 |
---|---|
[블록체인 기술 1] 암호화 (0) | 2023.05.08 |
[블록체인 기술 1] 암호화폐 내용 정리 (0) | 2023.05.04 |
[블록체인 기술 1] 머클트리와 머클 패트리샤 트리 (1) | 2023.05.03 |
[블록체인 기술 1] 분산원장 내용 정리 1 (2) | 2023.05.02 |