Keybase

Keybase logo official.svg Keybase
Keybase logo official.svg
URL https://keybase.io
사이트 종류 공용 디렉토리/암호
회원 가입 필수
사용 언어 영어
현재 상태 운영중
운영 정보
소유자 Zoom Video Communications, Inc.
운영자 Keybase, Inc.
Keybase
프로그래밍 언어 Go
언어 영어
종류 암호화
웹 사이트 https://keybase.io

Keybase(키베이스)는 오픈 소스 커맨드라인 프로그램이자, PGP 공개키 공용 디렉토리와 암호화 서비스를 제공(개인키를 저장한 경우)하는 웹사이트다. 현실에서의 확인(e.g. 전화통화, 직접 만나기, ... 등등)없이도 신뢰할 수 있는 공개키 제공을 목표로 하고 있다.[1]

1 소개[편집]

Keybase 홈페이지는 PGP 공개키 공용 디렉토리를 제공한다. Keybase에 개인키를 저장한 경우(필수는 아니다) PGP 암호화 서비스(전자서명, 암호화, 복호화, 검증 등등)을 웹에서 사용하고 개인키를 웹에서 내려받을 수 있다.

2 쉽게 신뢰할 수 있는 keybase[편집]

위에서 말했다시피, Keybase는 현실에서의 확인 없이 신뢰할 수 있는 공개키 제공을 목표로 한다. 그러면 어떻게 그것이 가능할까? PGP를 예시로 들어 설명해보자. 보통 흔히들 말하는 PGP는 타인의 키가 진짜 자신의 키인지 확인하려면 다음과 같은 방법 중 하나를 거쳐야 한다.

  • 현실에서 확인한다.
  • 그 인증서의 서명들을 확인한다.

1번째 방법은 말 그대로 현실에서 직접 "이 공개키 주인 님 맞음?"이라고 묻는 방법이고, 2번째 방법은 "저는 이 인증서의 주인과 이 인증서가 가리키는 주인이 일치함을 확인하며, 이에 신뢰합니다."라고 서명한 사람들을 찾아서 내가 그 사람들을 신뢰할 수 있는 지 확인하는 방법이다.

하지만 1번째 방법은, 생전 안면도 모르는 사람이라면 어렵다. 다짜고짜 신상을 털어서 "저기요 님 1234 1234 1234 1234 키 주인 맞아요?"라고 전화할 것인가? 2번째 방법은 PGP를 많이 써본 사람이라면 쉽겠지만 처음 사용해보는 초보자에게는 어려울 수 있다.

Keybase는 어느 트위터 계정, 레딧 계정, Github 계정, 웹사이트 또는 도메인의 주인임을 인증하도록 하는 방법을 통해, 이 공개키가 현실에서의 확인 없이 신뢰될 수 있도록 한다.

2.1 Keybase측에서의 1차 검증[편집]

한 줄만 어렵게 느껴질 수 있으니 쉽게 설명을 해보자, 먼저 Keybase는 유저에게 자신의 개인키로 서명된 특별한 메세지를 트위터(또는 레딧, Github, 웹사이트, 해커뉴스... 등등)에 올려도록 한다. 그 다음 Keybase는 자동으로 트위터(또는 레딧, Github, 웹사이트, 해커뉴스... 등등)에 게시된 그 서명된 메세지를 확인한 후에, 이 공개키의 주인은 이 트위터 계정임의 주인임이 증명되었음을 그 메세지의 주소와 함께 알린다.

이 공개키의 주인은 litehell.info의 주인이며, 트위터 @LiteHell의 주인이자, GitHub LiteHell 계정임의 주인임을 알리는 Keybase

하지만, "에이, Keybase가 구라 치는거 아니야?"라고 생각할 수도 있다. 물론 장사 말아먹을 생각이 아니라면 구라를 치진 않겠지만, 해킹을 당할 가능성이 얼마든지 있다. 이러한 사람들을 위해 클라이언트 측에서도 자동으로 따로 검증을 한다.

2.2 클라이언트 측에서의 2차 검증[편집]

keybase id chris 명령어를 실행한 모습

클라이언트측에서 무언가를 처리할때, 클라이언트는 기본적으로 keybase 서버를 신뢰하지 않는다. keybase 서버는 keybase에서의 Maria가 트위터 @Maria의 주인과, GitHub Maria 계정의 주인이랑 동일인임을 알려줬지만, 진짜로 그런걸까? 클라이언트는 의심을 한다. 이런 의심많은 클라이언트를 진정시키기 위해, keybase서버는 keybase에서의 Maria=트위터에서의 @Maria임을 인증하는 특별한 트윗 주소와 keybase에서의 Maria=GitHub에서의 Maria임을 인증하는 Gist 주소등을 알려준다.

윗 주소들을 받으면, 클라이언트는 이 주소들에 들어가 여기에 무슨 문제가 있는지, 정상적으로 서명이 됐는지, 이 트윗의 주인이 @Maria인지, 이 Gist의 주인이 Maria인지 등을 확인한다. 그리고 아무 문제가 없어야, 클라이언트는 비로소 의심이 풀린다. 이 증명은 매우 빠르고 자동으로 이루어지기에 사용자는 신경 쓸 필요가 없다.

2.3 사람이 직접 하는 3차 검증[편집]

2차 검증에서, keybase서버는 keybase 계정이랑 동일인임이 증명된 계정들(트위터, 레딧, 해커뉴스 등등)을 알려준다. 여기서 트위터의 유저명, 레딧의 유저명 등을 확인하고 자신이 아는 그 유저명이랑 일치하는 지 확인하여, 이 사람이 진짜 내가 아는 그사람인지 직접 확인할 수 있다.

3 Tracking이란?[편집]

명령어를 이용하여 트래킹하는 모습

keybase에서의 Tracking(편의상 이 문서에서는 트래킹이라 표기함.)은 어떤 사람의 신분(아이디 등등)과 증명(트위터 트윗 주소, 레딧 글 주소 등등)들이 담긴 정보를 서명해서 저장해 두는 것으로, Keybase에서의 핵심 기능이다. 컴퓨터를 갈아탈 때마다 위와 같은 검증을 하라고 하면 번거롭다.(갈아탈때의 Maria가 조작된 Maria일 수도 있으므로) 그렇다면 지금 내가 확인한 신분을 미리 저장해둘 수 있지 않을까? 그러고 싶을 때 트래킹을 하는 것이다. 트래킹을 하면 증명들과 신분이 담긴 정보를 서명해서 서버에 저장해둘 수 있다.

그러면 컴퓨터를 갈아탈 때, 갈아탔을 때의 Maria(조작될 수도 있고 내가 아는 Maria가 아닐 수도 있는 Maria)가 아닌, 내가 확인한 Maria을 서버에서 제공해 줄 수 있다. 이 내가 확인한 LiteHell은 내가 서명했고, 만약에 조작됐다면 무언가 문제가 있다는 것이 바로 확인되므로 조작될 수 없다.

4 웹에서도 쉽게 쓰는 PGP[편집]

Keybase encrypt.PNGKeybase encrypt 모바일.png

꼭 올릴 필요는 없지만, Keybase 서버에 개인키를 업로드하면 이렇게 웹에서도 쉽게 PGP 암호화/복호화/서명/서명검증을 할 수 있다. 암호화를 할 때(그리고 공개키를 찾을 때) 트위터 닉네임 또는 레딧 아이디 등을 이용하여 받는 사람의 공개키를 찾을 수 있다.

5 Keybase의 키 모델[편집]

Keybase의 PGP키를 이용한 기존 키 모델

PGP가 보안에 매우 휼룡함은 누구나 인정하는 사실이나, 사용이 번거롭다. 또한 keybase에서 PGP키만을 이용하실 시 모든 기기에 PGP 개인키를 저장하고 그 기기들 중 하나가 도난이라도 당할 시 개인키 유출의 두려움에 떨어야한다는 단점이 있다.

Keybase의 기기별 NaCl키를 이용한 새로운 키 모델, 분홍색이 디바이스 키이다.

따라서 Keybase는 2015년 9월 25일에 각 기기별로 NaCl 키를 생성하는 새로운 키 모델을 제시한다. 이 기기별로 생성되는 NaCl키(이하 디바이스 키)는 PGP 키나 기존 서명된 디바이스 키 혹은 페이퍼 키로 서명되므로 조작될 염려가 있으며 또한 분실시 일종의 분실신고를 할 수도 있다.

6 Keybase만의 특색 있는 기능들[편집]

PGP 암호화/서명/복호화만 있는 건 시시하다. 따라서 Keybase는 자신들만의 특색있는 기능들을 제공한다.

6.1 KBFS (Keybase filesystem)[편집]

KBFS는 자동으로 서명되고 암호화되는 파일 시스템이다. 기존 방식으로 파일들을 서명하려면 tar나 gzip으로 압축하고 gpg로 서명하는 번거로운 절차를 걸쳐야했다. 하지만 Keybase의 KBFS는 이를 자동화한다. 그저 드롭박스나 MEGA등의 클라우드 동기화 프로그램을 쓰듯이 그냥 자신의 public 디렉토리에 파일을 넣고 쓰면 Keybase에서 자동으로 서명하고 업로드한다. 또한 private 디렉토리에 파일을 넣으면 자동으로 서명, 암호화하고 업로드한다. public 디렉토리는 /keybase/public/id(Windows의 경우 K:\public\id)의 형식을 띠며 private 디렉토리는 /keybase/private/id(Windows의 경우 K:\private\id)의 형식을 띈다. 자신의 public 디렉토리나 다른 사람의 public 디렉토리에 접근할시 keybase에서 먼저 트위터 증명(proof), GitHub 증명(proof)등을 확인하여 검증한다. (위의 문단을 확인해보라) 그리고 검증을 통과해야만 블럭을 다운로드하고 public 디렉토리로 재구성하여 보여준다.

/keybase/public/chris에 접근한 모습.

위 사진은 keybase 클라이언트가 설치된 우분투에서 처음으로 /keybase/public/chris에 접근한 모습이다. Keybase에서 자동으로 검증을 시작하고 모든 검증을 끝마친 후에 chris의 public 디렉토리와 함께 검증 결과를 보여주는 것을 볼 수 있다.

private 디렉토리의 경우 다른 사람과 함께 쓰는 private 디렉토리를 생성할 수 있다. 예를 들어 자신이 libra이고 libra와 ledibug만이 보고 사용할 수 있는 private 디렉토리를 얻거나 접근하고 싶은 경우 /keybase/private/libra,ledibug 디렉토리에 접근하면 된다. (3인이상도 된다.) 별도의 동작이 필요없다. 그냥 폴더를 생성할 필요도 없이 cd /keybase/private/libra,ledibug와 같은 명령어를 입력하여 들어가면 된다. 이는 위에서 설명한 public 디렉토리도 마찬가지다.

혹시 상대방이 keybase id가 없는가? 없어도 된다. 자신의 keybase 아이디가 libra이고 아직 keybase에 가입하지 않은 GitHub 사용자 sijosae와 함께 파일을 비밀리에 공유하고 싶다면 /keybase/private/libra,sijosae@github에 파일을 복사한 뒤 sijosae에게 keybase 가입을 권유하면 된다. 이 경우 keybase에서 잠깐 libra만을 위해 암호화해두었다가 sijosae가 keybase에 가입하면 sijosae를 위해 자동으로 암호화된다.

눈채챘는가? 다른 사람의 public 디렉토리를 볼 때도 그 사람의 keybase 아이디를 알 필요가 없다. /keybase/public/malgorithms@twitter와 같은 형식으로도 그 사람의 public 디렉토리를 볼 수 있다. (존재한다면)

6.2 채팅[편집]

Keybase Chat은 자동으로 암호화되고 서명되는 채팅으로 기기를 업그레이드하면 기록이 날라가는 다른 보안 메신저와 다르게 exploding message를 제외한 모든 메세지는 기록이 날아가지 않는다. 또한 keybase chat --public yourname[2] "Let's drink Pepsi!"와 같은 명령으로 방송을 할 수도 있다.[3] Keybase 채팅은 CUI 명령으로도 모두 할 수 있으며 JSON API도 제공된다.

6.3 Team (팀)[편집]

Team은 여러명이 이루어서 결성하는 것으로, 채팅과 채널, 그리고 암호화된 git 저장소(뒷 문단에서 후술)가 주어진다. 자유로운 권한 조정이 가능하며 하위팀도 만들 수 있다.

6.4 암호화된 git 저장소[편집]

암호화된 git 저장소는 Keybase를 통해 자동으로 암호화되고 서명되는 git 저장소이다. 물론 git 자체적으로도 gpg 서명 기능이 있지만 누가 그 기능을 쓰는가? gpg 서명 기능이 사용되는 경우는 장담컨대 GitHub 웹 에디터를 이용해 커밋하는 경우밖에 없을 것이다. Keybase의 암호화된 git 저장소는 이런 귀찮은 사람들을 위해 자동으로 git 저장소를 서명하고[4] 암호화된다.

그러면 git clone은 어떻게 할까? 그냥 git clone keybase://private/chris/docs.git하면 된다. 팀의 경우는? 그냥 keybase://team/keybasefriends/demo하면 된다. 어? public은 GUI에 없던데 그럼 안 되는 건가요? 당연히 아니다. 그냥 git clone keybase://public/chris/someproject.git하면 된다. 그러면 git pull은 어떻게 하나요? 그냥 git pull하면 된다. 어 그럼 git push는요? 당연히 그냥 git push하면 된다.

근데 이거 혼자만 쓸 수 있나요? 아니다. git clone keybase://private/chris,macropolo/diary.git와 같이 하면 된다.

KBFS에 git을 만들면 안되나요? KBFS안에 git을 만들 경우 충돌이 일어나면 답이 없게 된다. 하지만 Keybase의 암호화된 git 저장소를 이용하면 충돌에 일어난 경우에도 대비할 수 있다.

이 git저장소는 또한 앞서 말했듯이 팀에서도 이용가능하다.

7 각주

  1. Keybase Tracking. “Keybase aims to provide public keys that can be trusted without any backchannel communication.”
  2. yourname을 자신의 아이디로 치환하자.
  3. 읽는 것은 keybase read --public somebody와 같은 명령으로 할 수 있다.
  4. 커밋을 서명하다고 하진 않았다.