블록체인과 개인정보보호

김병하
None
Published in
9 min readAug 14, 2018

이 글은 비탈릭 부테린이 2016년에 작성한 글 Privacy on the Blockchain에 기반한 내용입니다.

블록체인은 중앙화된 관리 주체 없이, 기업, 개인, 기관 등의 참여자들이 상호작용할 수 있는 기능을 제공합니다. 많은 비효율과 비용을 발생시키는 감사나 법률 같은 중앙화된 신뢰 확보 방식 없이도 각 참여자들이 효율적으로 상호작용할 수 있게 도와줍니다.

그러나 블록체인 기술을 활용할 때, 두 가지의 큰 장애물이 있습니다. 하나는 확장성, 또 다른 하나는 개인정보보호입니다. 확장성은 많은 블록체인 플랫폼들이 고민하는 중요한 문제로, POS, DPOS, POA 등의 많은 방식으로 그 해결책을 고민하고 있습니다.

개인정보보호는 또 하나의 굵직한 이슈입니다. 확장성에 비해서는 상대적으로 해결 가능성이 있는 문제이지만, 모든 케이스에 적용할 수 있는 “성배”는 없기 때문에 각 케이스에 맞춘 부분적인 해결법을 적용해야 합니다.

성배

모든 정보보호 문제를 해결할 수 있는 해법을 상상해보자면, 어떤 프로그램이든 정보를 완전히 보호할 수 있는 형태로 변환할 수 있는 기능입니다. 블록체인이 할 수 있는 모든 걸 하면서도, 내부 데이터나 처리방식은 모두 암호화 되어서 절대 확인할 수 없는 형태를 생각할 수 있습니다.

이를 혼란화(obfuscation)이라고 하는데요. 우리가 구현하고자 하는 기능과 동일한 기능을 수행하면서 내부 로직이 어떻게 돌아가는지 절대 알 수 없도록 블랙박스와 같이 변환하는 것입니다.

동일 입력(A & B)에 대해서, 기존 기능과 동일한 출력( C )을 반환하지만 내부 로직은 전혀 확인할 수 없다.

안타깝게도, 이는 수학적으로 불가능함이 증명됐습니다.

그러나 대안으로 “구분불가 혼란화(indistinguishability obfuscation)”하는 것은 가능합니다. 두 어플리케이션이 동일한 출력값을 반환할 때, 어느 어플리케이션에서 해당 출력값이 나왔는지 알 수 없도록 하는 방법입니다. (eg. x = (a + b) * c and x = (a * c) + (b * c))

이 방법이 어떤 효과가 있는지 살펴보겠습니다.

  1. y = 0
  2. y = sign(privkey, 0) - sign(privkey, 0)

1번과 2번 식 모두 0을 반환하지만, 2번 식은 private key를 사용하고 있습니다. 어플리케이션이 “구분불가 혼란화" 되어있다면, private key를 추출할 방법이 없습니다.

이 방식을 어떻게 블록체인에 적용할 수 있을까요? 토큰을 예로 들겠습니다. 구분불가하도록 혼란화된 스마트 컨트랙트가 있고, 모든 입력은 공개키(public key)로 암호화 되어서 스마트 컨트랙트에 입력됩니다. 스마트 컨트랙트는 내부에서 개인키(private key)를 이용해서 입력을 복호화하고 트랙잭션을 발생시킵니다. 저장소에 데이터를 저장할 때는 컨트랙트 내부에서 데이터를 개인키로 암호화해서 저장소로 저장하고, 데이터를 컨트랙트로 가져올 때는 암호화된 데이터를 가져와서 컨트랙트 내부에서 복호화해서 사용합니다. 이런 식으로 정보보호를 구현할 수 있습니다.

“구분불가 혼란화"는 강력하지만 너무나 비효율적이라는 치명적인 단점이 있습니다. 실제 어플리케이션을 구현할 때는 사용할 수 없을만큼 비효율적입니다.

다른 방법

절충안으로 혼란화에 근접한 효과를 줄 수 있는 두 가지 방법이 있습니다. SMPC(Secure Multi-Party Computation)과 영지식 증명(zero-knowledge proof)입니다.

SMPC는 N 명의 참여자 중 M 명이 협력(동의)해야 연산 혹은 조회를 할 수 있도록 하는 방식입니다. 참여자 중 일정 비율 이상을 신뢰할 수 있다면, 혼란화 만큼의 효과를 볼 수 있는 방식입니다. 혼란화보다는 효율적이지만 모든 노드에 메시지를 공유해야 하는 “degree reduction”이라는 비효율적인 연산 과정을 수반합니다. 또한 참여자들의 신뢰를 요구한다는 점에서 위험성을 안고 있습니다. 때문에 private chain에 적합한 방식입니다.

또 다른 하나의 방식인 영지식 증명은 다른 정보를 노출시키지 않으면서 일정 정보만을 증명해주는 방식입니다. 비교적 구현이 쉽다는 장점이 있습니다.

최소한의 기술 사용

간단한 해싱과 private key를 이용한 암호화 외의 다른 기술을 사용하지 않는 것도 방법입니다. 비트코인이 사용하고 있는 방법이고, 정보보호 관점에서는 한계가 있지만, 일정 부분 효과가 있습니다.

비트코인이 채택한 가장 간단한 정보보호 방식은 일회용 계정을 사용하는 방식입니다. Zcash와 유사한 방식인데요. 하나의 private key로 여러 일회성 계정을 만들어서 각 자금의 실제 소유자가 누구인지 알 수 없도록 하는 방법입니다.

하지만 여기엔 큰 단점이 있는데요. 한 번이라도 일부 자금이 함께 사용 되면 일회성 계정 사이에 연결성이 생겨서 전체 계정의 소유주가 추적될 수 있다는 점입니다.

이런 연결이 생기는 문제에 대한 해법으로 비트코인 개발자 Mike Hearn이 merge avoidance라는 최대한 연결을 방지하는 방법을 제시했지만 문제를 완전히 해결하진 못했습니다.

더 발전된 방법으로 Coin Join 이라는 기법이 있습니다. 익명성을 원하는 N명의 참여자들이 N개의 계정으로 이루어진 계정 그룹에 각각 1 코인씩 보낸 후에, 모든 참여자들이 승인하면, 계정 그룹에 모인 코인들을 N명의 참여자들에게 각각 임의로 1코인씩 분배하는 방법입니다. 이런 방식을 거치면 각 코인들이 원래 누구의 소유였는지 추적하기 힘들어집니다.

스마트 컨트랙트에 해당 기능을 적용할 때에는 “auditable computation”이라는 방식을 사용합니다. 기본 개념은 유사한데요. 한 사용자가 원하는 기능을 수행할 수 있는 컨트랙트를 만들어두고 다른 사용자 혹은 사용자들이 트랜잭션을 통해 승인을 해야만 해당 기능이 실행될 수 있도록 하는 것입니다.

이 기술을 일반화한 방식이 state channels 이며, 정보보안의 이점과 더불어 확장성에도 도움을 줍니다.

Ring Signatures

고리서명(Ring Signatures)은 약간은 복잡하지만 익명화를 위한 강력한 기술입니다. 고리서명은 승인자가 public key 그룹 내의 한 public key에 해당하는 private key를 소유하고 있다는 걸 증명하면서도, 그 중 어느 public key에 해당하는 private key인지 추적할 수 없게 만듭니다. 고리서명에서는 public key로 연산을 실행하지만 private key로 seed 값을 입력해서 원하는 값이 반환되도록 할 수 있는 알고리즘을 사용합니다. 고리서명은 기본적으로 특정 값들의 고리로 이루어져있는데, 각 값은 다음 값을 구하는데 seed 입력으로 사용됩니다. 이렇게 각 값들이 연결되며, 마지막 값으로 연산할 때 private key를 이용해 seed를 추가함으로써 고리의 첫 번째 값과 연결되도록해서 고리를 완성시킵니다. 이렇게함으로써 누구나 각 값들이 고리로 연결되어 있다는 점을 확인할 수 있지만, 어느 값을 계산할 때 private key가 사용되었는지는 알 수 없습니다.

고리서명에서 발전된 방식으로 ‘linkable ring signature’라는 방식이 있습니다. 어떤 방식이냐면, 하나의 고리서명에서 한 private key로 두 번 이상 서명을 시도하면 그 사실이 추적될 수 있습니다. 그래서 public key의 그룹을 만들어 두고 그 그룹 안에 있는 public key에 해당하는 private key는 한 번만 서명을 시도할 수 있도록 제한함으로써 추적 가능성을 완화하는 방법입니다.

고리 서명은 투표나 인증 등에 사용될 수 있습니다.

개인 정보 공유와 암호화

흔히 쓰이는 블록체인 활용 아이디어가 “사용자가 자신의 데이터를 컨트롤한다”입니다. 그러나 블록체인은 privacy 이슈를 해결하지 않습니다. 블록체인은 인증 이슈를 해결하는 기술입니다. 그러므로 의료기록을 블록에 올리는 건 결코 좋은 생각이 아닙니다.

그러므로 민감한 데이터는 체인이 아닌 다른 암호화 저장 방식으로 관리하는 것이 좋습니다. 예를 들어서 IPFS에 암호화된 데이터를 올리고 특정 사람에게 특정 복호화된 데이터만 볼 수 있도록 하고 싶다면 deterministic wallet과 같은 방법을 사용해서 각 데이터에 다른 key가 적용되도록 할 수 있습니다.

또 다른 방식으로 secret sharing을 사용해서 N 명의 참여자 중 M 명 이상이 서명해야 데이터를 복호화하여 열람할 수 있게 할 수 있습니다.

정보보호의 미래

블록체인에서 개인정보 보호를 위해서는 모든 트랜잭션이 민감한 정보를 건드는 일은 거의 없어야 합니다. 그런데 그렇게 하더라도 어쩔 수 없이 metadata 중 일부는 노출될 수 밖에 없습니다. 그러므로 통계적 분석으로 추적이 가능해지고, 결과적으로 개인정보가 노출될 수 밖에 없습니다.

따라서 앞에서 살펴본 것처럼, 개인정보 보호를 위한 완전한 방법은 없으며, 각 케이스에 맞는 부분적인 솔루션을 유연하게 적용할 수 밖에 없습니다.

감사합니다.

Get to know us better!
Join our official channels below.

Telegram(EN) : t.me/Humanscape
KakaoTalk(KR) : open.kakao.com/o/gqbUQEM
Website : humanscape.io
Medium : medium.com/humanscape-ico
Facebook : www.facebook.com/humanscape
Twitter : twitter.com/Humanscape_ICO
Reddit : https://www.reddit.com/r/Humanscape_official
Bitcointalk announcement : https://bit.ly/2rVsP4T
Email : support@humanscape.io

--

--