[시블] 비트코인의 익명전송 기능, 컨피덴셜 트랜잭션 (1)
Confidential Transactions
![](https://steemitimages.com/DQmXXvh9DgbPdAUv5KHQFPt4qHzo3ZBWSRvF9a2uPSkjUEC/sible.png)
시사와 블록체인
비트코인 코어 개발팀의 위엄
비트코인 코어 개발팀의 실력과 선수층은 코인 개발팀들 중에서 최고라는 평가를 받습니다.
- Pieter Wuille와 Greg Maxwell은 비트코인 코드를 테스트 하던 중 OpenSSL에서 버그를 찾아내어 고치는 것을 돕기까지 했습니다. 모든 인터넷 웹사이트의 35% 정도가 OpenSSL을 쓰고 있었으니 전 세계 인터넷의 보안을 직접적으로 크게 개선시킨 셈입니다.
https://www.weusecoins.com/adam-back-bitcoin-core-developers/ - 코어팀은 비트코인 코드를 테스트하다가 LLVM 컴파일러의 버그를 찾아내기도 했습니다.
https://github.com/bitcoin-core/secp256k1/issues/445 - Adam Back은 비트코인 화이트페이퍼와 토르 화이트페이퍼에서 인용된 적이 있습니다.
- Pieter Wuillie는 Free Lossless Image Format 설계에 참여했습니다.
- Greg Maxwell은 오픈소스 비디오,오디오 압축 알고리즘(Ogg Theora) 개발에 참여했습니다.
- Thebluematt는 고등학생 때부터 비트코인 개발에 참여했습니다.
- Peter Todd는 14살 때 더블스펜딩에 관하여 메일링리스트로 Hal Finney, Adam Back과 소통했습니다.
- Christopher Allen은 TLS/SSL 표준을 공동개발 했습니다.
https://www.reddit.com/r/Bitcoin/comments/60ndlb/til_not_only_is_adam_back_cited_in_satoshis/df7tex1/
그렉 맥스웰
코어 개발팀의 한 사람인 그렉 맥스웰은 일반인들과는 생각하는 차원이 조금 다릅니다.
일반인: 비트메인 우지한은 오늘도 깽판을 치는구나. 부들부들 발동동...
그렉: 그래! 비트메인에서 만든 채굴장비를 가지고 리버스 엔지니어링이나 해서 수상한 점을 한번 찾아볼까?
그 결과 앤트마이너에 ASICBOOST 기능이 탑재되어 있다는 것과 ASICBOOST 를 몰래 쓰는 꼼수가 있음을 밝혀내서 비트코인 커뮤니티를 크게 들썩이게 만듭니다.
세그윗이 가져올 화려한 기능들
세그윗이 발동되면 여러가지 화려한 기능들이 현실화 될 수 있게 됩니다.
- 서명을 트랜잭션에서 분리해서 블록사이즈에 포함이 안되도록 해서 블록사이즈 한계를 늘리는 것 같은 효과
- 트랜잭션 멜라빌리티 문제 해결로 받은 코인을 0컨펌에서 사용 가능
- 라이트닝 네트워크로 마이크로 트랜잭션의 현실화
- 익명전송, 컨피덴셜 트랜잭션
- 라이트닝 네트워크를 통한 아토믹 스왑으로 체인간에 탈중앙화 방식으로 리스크 없는 코인 교환 가능
그중에 컨피덴셜 트랜잭션에 대해서
그렉 맥스웰이 4월 28일 코인베이스에서 프레젠테이션한 내용을 소개합니다.
http://diyhpl.us/wiki/transcripts/gmaxwell-confidential-transactions/
왜 필요한가?
비트코인에 익명성과 fungibility(이 비트코인을 저 비트코인으로 대체해도 아무 상관 없는 것)를 강화하는 것입니다.
은행을 이용하는 경우 내가 은행과 무슨 거래를 했는지 은행은 알아도 내 이웃들은 모릅니다.
누가 월급을 얼마 받는지 당사자 외의 다른사람들은 모르는 것이 좋습니다.
이런 사생활 보호가 화폐를 사용하는 사람들에게 중요한 문제입니다.
비트코인은 기본적으로 돈의 출처가 모두 공개적으로 기록되는 방식이므로 익명성이 부족합니다.
화폐에는 익명성과 fungibility가 필요합니다.
원리
컨피덴셜 트랜잭션은 트랜잭션 속에 담긴 금액을 비밀로 만듭니다. 원래 트랜잭션 데이터에서 금액에 해당하는 부분은 8바이트를 차지합니다. 이것을 33바이트의 해쉬값으로 대체합니다. 이 해쉬값은 단순히 속해있는 트랜잭션 금액의 해시가 아니라 또다른 트랜잭션의 금액과 합한 결과를 해쉬합니다.
이렇게 해서 중요한 정보는 가린채로 인풋과 아웃풋을 검증할 수 있도록 합니다.
비용
- 이미 검증된 암호학 알고리즘을 사용. secp256k1 ECC 가 안전하다면 컨피덴셜 트랜잭션은 그 이상 안전합니다.
- UTXO 크기를 66% 까지 증가시킵니다. (Unspent Transaction Output을 기록하는 블록체인 데이터 파일)
- 트랜잭션의 bandwidth 를 15배에서 20배 까지 증가시킵니다.
- validation costs 를 30배에서 60배까지 증가시킵니다. 고성능 하드웨어에게는 아무 문제 없으나 저성능 하드웨어에서는 무리가 따릅니다.
- 주소 길이가 두배까지 늘어납니다.
- 1400 라인 정도의 코드가 추가됩니다.
이점
금액이 가려지게 되면 프라이버시를 위해 불필요한 전송을 많이 할 필요가 없어집니다.
컨피덴셜 트랜잭션 없이 비트코인으로 급여를 주는 경우를 예로 들어봅니다.
누구 월급이 얼마인지 직원들끼리 서로 알 수 없어야 합니다.
그러기 위해서 우선 여러 주소에 나눠 담아놓고
직원들을 여러 그룹으로 나누고
한 그룹에게 각각 같은 금액을 전송해주고
또다른 그룹에게 각각 같은 금액을 전송해주고
모두가 급여액을 다 받을 때 까지 이런식으로 여러번에 걸쳐 나눠서 해야만 블록체인 기록에서 다른사람의 월급이 얼마인지 알 수 없도록 하는 목적을 이룰 수 있습니다.
컨피덴셜 트랜잭션으로 금액이 가려지고 나면 보낸 사람은 자기가 얼마 보냈는지 물론 알고 받은 사람은 자기가 얼마 받았는지 알 수 있고 그와 동시에 급여 지급이 된 트랜잭션을 남에게 보여주더라도 남들은 얼마가 지급되었는지 알 수 없게 됩니다.
트랜잭션 bandwidth 가 15~20배 늘어난다고 한 것도 그중 80% 정도는 암호화 메세지 주고받는데 쓰이게 됩니다.
컨피덴셜 트랜잭션이 구현되어도 지불 능력 증명을 하려면 간단히 할 수 있습니다.
컨피덴셜 트랜잭션을 하는데 드는 비용은 상수, 고정값 입니다. 사용량이 많아지더라도 비용은 그대로 입니다.
fungibility가 생기면 모든 코인이 출신 구분이 불가능 해지면서 탈중앙화가 한걸음 더 나아가게 됩니다.
컨피덴셜 트랜잭션의 안정성
위에서 ECC(엘립틱 커브 크립토그래피)가 안전하다면 컨피덴셜 트랜잭션도 안전하다고 했는데 사실은 ECC 보안이 깨지더라도 컨피덴셜 트랜잭션 보안은 안전할 수 있습니다.
만약에 ECC가 깨지고 누군간 무한한 파워를 가진 컴퓨터로 공격을 시도하는 경우를 가정해보면
단지 컨피덴셜 트랜잭션의 검증을 false 로 만들어서 인플레이션을 유발할 수 있을 뿐입니다.
'어떤 경우에도 사생활이 보호되는 것(unconditional privacy)' 과 '어떤 경우에도 (무분별한 인플레이션 등으로 부터)안정적인 것(unconditional soundness)' 을 동시에 만족하기란 기본적으로 불가능합니다.
컨피덴셜 트랜잭션 알고리즘에서는 ECC가 깨질 경우 인플레이션 안정성이 뚫리도록 되어있으나 그것은 비트코인 시스템 레벨에서 통제가 됩니다. 애초에 엘립틱 커브 보안부터가 깨질 걱정을 하지 않아도 된다고 생각합니다.
Zcash의 문제점
Zcash는 굉장히 모던한 크립토그래피를 사용해서 잘 만들었습니다. 금액과 메타데이터를 완전히 숨깁니다.
unconditional privacy 에서는 완벽하지만 unconditional soundness 부분이 약합니다.
처음에 셋업할 때 믿음직한 사람들이 모여서 셋업을 해야만 합니다(Trusted Setup). 만약 누군가 속임수를 썼다면 발견할 수 없는 인플레이션이 유발됩니다. 암호화 알고리즘이 깨지거나 셋업에 문제가 있거나 둘중 하나만 일어나도 아주 나쁜 일이 됩니다. 암호화 알고리즘을 업그레이드 해야할 경우가 만약 생긴다면 Trusted Setup을 매번 다시 해야만 합니다. 그래서 이것은 보안 결함입니다.
Zcash는 모든 노드에서 '사용된 코인 목록' 데이터가 계속해서 늘어나게 되므로 확장성이 약한 편입니다.
Zcash의 트랜잭션 검증 속도가 컨피덴셜 트랜잭션의 절반 정도 입니다.
Zcash의 서명 속도(signing speed)는 굉장히 느립니다. 몇분이나 걸립니다. 느리기 때문에 모든 트랜잭션을 익명화 하지 않고 있습니다. 현재 전체의 4% 정도의 트랜잭션만 익명화가 되고 있습니다. 완벽한 익명화를 추구하느라 다른 부분에서 놓치는 것이 있습니다.
모네로의 문제점
몇달전 바뀐 방식의 모네로는 컨피덴셜 트랜잭션과 함께 링 시그니처를 사용해서 ringCT 라는 알고리즘으로 익명화를 합니다. 링 시그니처의 단점은 익명성이 부족하다는 것인데 익명화 되지 않은 트랜잭션에서 금액이 숨겨지지 않으므로 익명성이 뚫릴 수 있습니다. 사용된 코인 목록은 계속해서 늘어난다는 점에서 확장성이 부족하고 CT 를 쓰는 만큼 암호화 알고리즘 자체는 컨피덴셜 트랜잭션과 같은데 Ed25519 엘립틱 커브 를 사용한다는 점이 다릅니다.
대쉬의 문제점
익명성을 주된 장점으로 내세움에도 전혀 익명성이 보장되지 않습니다. Proof Of Stake 기반의 마스터노드를 여럿 돌리면서 그 안에서 익명화를 추구하려고 하는데 그동안 여러번에 걸쳐서 보안 결함이 발견되었으므로 지금이라고 해서 다 고쳐졌을지는 의심스럽습니다. Zcash와 모네로 보다 익명화 수준이 낮습니다.
-다음편에 계속-
어렵다 재미없다 틀렸다 등등 댓글 피드백 부탁드립니다.
제가 딱 쓰고싶은 글의 스타일이네요 모닝님 최고~!!
저도 그런데 글을 적으면서 느낀건데 부연설명을 안하자니 처음보는 사람들에게 이해가 안될 수 있고 부연설명을 하자니 글이 너무 길어져서 가독성이 떨어지는 경우가 종종 생기더군요. ㅎㅎ 제 지식이 부족해서 이해가 못하는 부분이 많아서 제가 밉습니다 ㅠ_ㅠ
감사합니다. 저도 항상 고민하는 부분인데, 타겟층을 정해두면 나은 것 같습니다.
ㅎㅎ 맞아요~~ 저도 본받아서 타겟을 저격한 글을 한번 적어보겠슴다~~
시블, 이거 정말 쥑이는 기사네요
잘 읽었습니다. 어렵습니다만 재밌습니다 ㅎㅎ
이건 엄청나네요. AWESOME!
시블, 어마어마한 매거진이 탄생할 것 같습니다.
좋은 글 감사합니다 :)
이것이 진정한 시블이죠. 역시 시블모닝입니다.
오~ 좋습니다^^. 저한테는 어렵지만 간단명료하게 쓰셔서 시험보듯이 숙지를 해야되겠네요. ㅎ
morning 님~~ 항상 좋은 글에 감사드립니다~~^^
열심히 배울께요
글 너무 좋아요 감사합니다 모닝님