지난번 칼럼 “암호화폐와 보안(1)”에서는 거래소 해킹과 관련된 주제를 다루었고 "암호화폐와 보안(2)"에서는 개인 지갑과 보안에 대해 다루었습니다.

암호화폐는 일반인들에게는 아직 새롭고 생소한 영역입니다. 그러다 보니 낯설고 새로운 용어와 익숙치 않은 사용 방법으로 고생을 하기도 합니다.
하지만 무엇보다 난감한 순간은 바로 피싱을 당해서 지갑을 송두리째 도둑맞는 것입니다. 실수는 단 몇 초만에 일어나지만 그 결과는 엄청납니다.
보안 수칙을 미리 익혀두어야 할 이유는 바로 여기에 있습니다. 습관적으로 버튼을 눌렀다가 아차하는 순간, 이미 되돌릴 수 없게 됩니다. 미리 미리 준비하고 바른 습관을 키우는 것이 중요합니다.

최근 사례를 중심으로

최근 저희 회원 중 한 분이 저에게 링크를 보내왔습니다. EOS 관련 에어드랍을 받으려고 하는데 이 링크를 사용하면 되느냐고 말입니다. (우선 이와 같은 액션은 매우 바람직합니다. 잘 모를 때는 먼저 행동하기 전에 전문가에게 물어보고 조언을 듣고 움직인다면 상당 부분 실수를 피할 수 있습니다)

혹시나 해서 주소는 숨김 처리를 했지다만 해당 링크는 정말 EOS와 관련이 있는 사이트처럼 보이도록 그럴듯한 주소를 가지고 있었습니다. 심지어 보안연결을 의미하는 자물쇠 표시까지 가지고 있었습니다.

사이트에 들어가면 그럴듯한 안내 글이 올라와있습니다. EOS의 로고와 함께 1 EOS 당 0.3 EOS를 준다고 합니다. (재미있는 것은 글을 올린 날짜가 항상 오늘 날짜로 표시된다는 점입니다.) 여기까지는 별다른 문제가 없어보입니다. Claim EOS Airdrop 버튼을 눌러보았습니다.

Ethereum Wallet 주소와 함께 잔액을 입력하라고 나옵니다. 이더리움 지갑 주소는 암호 시스템 중 Public Key(공개 키)에 해당하므로 노출되어도 무관합니다. 여기까지는 피싱 사이트라고 하더라도 아직은 안전합니다.

Ethereum 지갑 주소를 넣고 보유 토큰 갯수를 100개라고 입력하니 30개를 받을 수 있다고 나옵니다. 이쯤 되면 공짜돈이 생길 생각에 점점 이성을 잃게 됩니다. Continue 버튼을 입력합니다.

뭔가 전문적인 용어를 늘어놓으며 마지막 단계를 요구합니다. 바로 Private Key를 넣으라는 메시지입니다.

“PRIVATE KEY는 어떠한 경우에도 타인에게 알려주지 말아야 한다!”

이러한 중요한 원칙에도 불구하고 이 사이트는 교묘한 말로 입력을 유도합니다. 예를 들면 이런 말들입니다. 

“This is Safe”

“We do not use, store or collect your personal data (such as private key).”

“Fully encrypted”

“Secured by SSL standard”

“MD5 hashing protocol”

“No one will be able to access your wallet”

모두 다 거짓말입니다.

왜냐하면 Private Key는 암호화폐에 있어서 내 지갑과 관련된 모든 것을 할 수 있는 만능키이기 때문입니다.

심지어는 어떤 사이트는 이런 말로 사용자를 현혹시킵니다.

“Read-only Private Key”

세상에 Read-only private key는 없습니다. Private key는 그저 private key일 뿐입니다. 한번 Private Key가 노출되면 그 순간 그 지갑은 더 이상 내 지갑이 아닙니다.

일단 Private Key를 확보한 해커는 지금 당장 내 지갑을 털어갈 수도 있고 일주일 후나 나중에 지갑에 돈이 더 많아질 때를 기다렸다가 털어갈 수도 있습니다. 

암호화폐에서 Private Key란?

암호화폐에서는 안전한 거래를 위해 비대칭 암호화기법이라는 것을 사용합니다. 이 방식에서는 암호화폐 지갑을 생성하면 한 쌍의 키 값이 만들어지는데 그것이 바로 Public Key와 Private Key입니다. 복잡한 이론은 생략하고 간단하게 주입식으로 설명하면 Public Key는 지갑 주소, Private Key는 열쇠라고 생각하시면 됩니다.

Public Key는 지갑 주소

암호화폐의 지갑은 유리 지갑입니다. 따라서 지갑 주소만 있으면 지갑에 돈이 얼마나 들어있는지, 돈이 언제 입금되었는지, 출금되었는지를 누구나 볼 수 있습니다. 다른 사람에게 돈을 입금해달라고 요청할 경우에는 단지 Public Key 즉 지갑 주소를 알려주면 됩니다. (이를테면 비트코인을 받는 매장에서 결재할 때 스캔하는 QR 코드는 매장 주인 지갑의 Public Key 정보를 담고 있습니다)

Private Key는 지갑 열쇠

Private Key는 이 지갑을 열어보거나 그 안에 있는 코인을 외부로 송금하는데 사용합니다. Private key가 있으면 Public key가 없이도 지갑에 접속할 수 있습니다. 따라서 내 지갑을 훔치기 위해 필요한 정보는 오직 Private Key 하나면 충분합니다. 

만일 Private Key가 노출되었다면

해당 지갑은 더 이상 사용하지 말아야 합니다. 지갑은 언제든지 새로운 주소로 다시 만들 수 있습니다. (지갑 생성 및 사용에 대한 설명은 뒤에서 드리도록 하겠습니다.) 따라서 만일 조금이라도 Private Key가 노출된 것이 의심된다면 새로운 지갑 주소를 만들어 기존 지갑에 있는 모든 코인을 새 지갑으로 옮겨야 합니다.

해커가 Private Key를 훔치는 방법

해커의 입장에서 Private Key는 자신의 존재를 드러내지 않고 손쉽게 타인의 재산을 훔칠 수 있는 핵심정보입니다. 따라서 해커는 여러 가지 방법을 동원해 Private Key를 확보하려고 합니다. 

자 이제 해커의 입장에서 Private Key를 훔치는 몇가지 방법을 생각해 보겠습니다.

  1. 가짜 사이트를 만들어서 공짜 토큰을 주겠다고 해서 사용자가 스스로  Private Key를 입력하게 한다 (위 예에서 본 방법입니다)
  2. ICO에 참여하려고 하는 사람에게 기술 지원 명목으로 채팅방이나 이메일을 통해 Private Key를 보내달라고 한다.
  3. 스파이웨어 등을 통해 원격으로 피해자의 컴퓨터에 접속해 private key가 기록된 문서 파일을 찾아 알아낸다.
  4. 공공장소에서 고해상도 CCTV 등을 통해 사용자의 컴퓨터 화면에 표시된 Private Key를 촬영하여 확대 복원한다.

이 중 하나만 성공해도 해커는 피해자의 코인을 자기 지갑으로 옮길 수 있게 됩니다.

의심이 나면 MetaMask를 사용하세요

위 피싱 사이트 주소를 Metamask를 설치한 Chrome 브라우저에서 열면 다음과 같이 피싱 경고가 뜨면서 접속을 차단해줍니다. MetaMask는 Chrome의 확장프로그램으로 필자가 가장 추천하는 이더리움 개인 지갑 중 하나입니다. Metamask가 설치된 브라우저에서는 이와 같이 피싱 사이트의 목록을 가지고 사전에 차단을 해줍니다. Metamask 설치와 사용법에 대한 설명은 나중에 따로 드릴 예정입니다.

자물쇠 주소 표시와 관련된 진실

한 가지 덧붙여 강조하고 싶은 것이 바로 웹사이트의 자물쇠 주소 부분입니다.

위에서 살펴본 피싱 사이트의 경우, 여늬 피싱사이트와는 달리 웹사이트에 자물쇠 표시가 나옵니다. 이 자물쇠를 SSL 인증이라고 하는데 주소 앞에 http 대신 https 를 사용해서 데이타 전송을 안전하게 할 수 있게 한 것입니다. 이 사이트의 경우 통상 자물쇠 표시가 있는 사이트는 안전하다는 세간의 상식을 역이용한 것입니다.

그렇다면 자물쇠 표시가 있는 사이트에서 입력하는 정보는 항상 안전한 것일까요?

자물쇠 주소(SSL)는 돈만 내면 구입할 수 있다

흔히들 자물쇠 주소가 있으면 안전한 사이트라고 생각하지만 이 자물쇠 주소라는 것이 매년 일정한 돈을 내기만 하면 누구나 구입이 가능한 상품입니다. 웹 호스팅 업체를 통해 구입할 경우 싸게는 연간 100불 정도면 구입이 가능합니다. 까다롭게 소유자의 신원을 확인하는 것이 아니라 웹사이트 소유자가 맞는지만 확인하는 시스템입니다. 그렇다면 자물쇠 표시는 아무 소용이 없는 것인가요? 꼭 그렇지는 않습니다.

일단 자물쇠 표시가 있는 사이트와 그렇지 않은 사이트의 차이를 보도록 하겠습니다.

SSL은 정보 전달 과정만을 암호화

사용자 A는 웹 사이트 B에 접속하여 ID와 비밀번호를 입력합니다. 이 때 중간에 여러 경로, 이를테면 WIFI 라우터나 모뎀, 인터넷 회사 등을 거쳐 상대방에게 도달하게 됩니다. 해커 C는 이 경로 중 하나, 예를 들어 라우터를 해킹하여 A가 입력한 비밀번호를 볼 수 있습니다. SSL은 바로 이 중간 경로 해킹을 방지하기위해 정보를 전송하기 전에 암호화해서 전송하는 방식입니다. 따라서 SSL을 사용한 웹사이트에서는 A의 아이디와 비밀번호를 중간에 C가 훔쳐보더라도 이미 암호화되어 있기 때문에 원본을 알 수 없다는 점에서 안전합니다. 

SSL로 보내도 수신자는 정보를 볼 수 있음

SSL을 사용해 전송하더라도 목적지에 도달한 후에는 암호화가 해제되므로 B는 내용을 그대로 볼 수 있습니다. 따라서 만일 수신자가 해커라면 해커는 내가 SSL을 통해 보낸 정보를 고스란히 볼 수 있는 것입니다. 위에서 보듯이 해커는 SSL에 대해 안심하는 심리를 이용해 사람들을 안심시키고 마치 수신자 자신도 Private Key를 볼 수 없는 것처럼 착각을 유도합니다.

SSL은 수신자가 정보를 보는 것을 차단하지 않습니다. 따라서 비록 자물쇠가 표시되는 사이트라 하더라도 사이트 자체를 믿을 수 없는 경우에는 절대 중요한 정보를 입력하시면 안됩니다.

이상으로 개인 지갑, 특히 Prviate Key와 관련된 가장 기본적인 보안 수칙에 대해 설명해드렸습니다.

오늘의 교훈을 한 마디로 정리하면 “Private Key는 절대 남에게 알려주지 말라”입니다.

다음 회에서는 ICO 참여시 필수적인 ERC20를 지원하는 대표적인 웹 월렛, MEW(MyEtherWallet) 사용법을 소개하고자 합니다.