MODULE 2 (B) - CRYPTOCURRENCY TRANSACTIONS INTUITION
07. PUBLIC KEY VS BITCOIN ADDRESS
공개 키와 비트코인 주소의 차이점을 알아볼 것이다.
많은 사람들이 이 2개를 혼용해서 사용하지만 약간의 차이점이 존재한다.
위 그림에 나와있듯, 트랜젝션(transaction)을 처리하기 위해 공개 키(public key)를 처리하는 개인 키(private key)가 존재한다.
이 개인 키를 사용해 메시지를 생성하고 서명 생성 메시지를 보내면 공개 키, 메시지, 서명을 검증 함수에 넣어서 예, 아니오의 응답을 얻었다.
그렇다면 비트코인 주소는 무엇일까?
비트코인 주소는 공개 키에서 얻을 수 있고 간단히 SHA256 해시 함수를 적용해 얻을 수 있다.
해시 함수는 결정성을 가지기 때문에 충돌이 발생할 가능성이 낮다. 그래서 공개 키를 가지고 있으면 해당 공개 키에서는 늘 동일한 주소를 얻게 된다.
그럼 주소는 무엇일까?
주소는 돈을 보내 달라고 요청할 수 있는 곳이며, 공개 키와 마찬가지로 공개해도 되는 것이다.
하지만 개인 키는 절대로 공유해서는 안된다.
누군가 개인 키를 알게되면 해당 지갑이 가지고 있는 돈과 비트코인을 전부 가져갈 수 있다. 그래서 안전하게 지켜야 하지만 공개 키는 그렇지 않다.
이는 주소도 또한 마찬가지다.
여기서 특이한 점은 비트코인을 공개 키로도 보낼 수 있다는 것이다.
그래서 비트코인을 받고 싶다면 공개 키나 주소를 알려주면 된다.
비트코인을 공개 키를 통해 보내든 주소를 통해 보내든 지갑에서 알아서 처리한다.
그러면 주소는 왜 필요할까?
바로 개인 키와는 다른 방법으로 공개 키를 안전하게 지키기 위해 필요하다. 이는 공개 키가 너무 노출되지 않도록 지키는 것이다.
누군가에게 돈이나 비트코인을 보낼 때는 반드시 공개 키를 노출해야 하는데 공개 키 없이는 트랜잭션이 유효한지 확인할 수 없어 검증 함수를 실행할 수 없기 없기 때문이다.
그래서 돈을 보낼 때는 공개 키를 노출해야 한다.
하지만 돈을 받을 때는 노출을 방지해야 하며, 이때 주소를 사용한다.
그렇다면 공개 키 노출을 방지해야 하는 이유는 무엇일까?
그 이유는 개인 키와 공개 키의 연결 관계 때문이다.
개인 키를 확인하거나 생성하는 방법은 없고 공개 키를 아는 개인 키를 찾을 수 없다.
왜냐하면 공개 키는 타원 함수를 통해 생성되기 때문이다.
타원 함수만으로도 공개 키에서 개인 키로의 역설계가 매우매우 힘들다.
하지만 만약 공개 키에서 개인 키로 역설계되어 얻을 수 있게 되던가 타원 함수의 결함이 밝혀지면 공개 키를 통해 개인 키로 이동하는 방법을 찾을 수 있기 때문에 모든 트랜잭션에서 모두에게 공개 키를 제공하면 누군가는 개인 키를 얻을 수 있을 것이다.
하지만 해싱 알고리즘의 SHA256으로 추가 보안 층을 생성하면 누군가 이 연결을 역설계 하더라도 이 추가 보안 층이 있기 때문에 주소만 얻게 된다.
즉, 돈을 보내지 않는 한 그렇게 빨리 공개 키에 접근할 수 없는 것이다.
만약 타원 함수에서 버그가 발생했다고 가정할 때, 비트코인 커뮤니티에서 이 버그를 해결하고 타원 함수를 교체하거나 계산 방식을 수정하는 데에는 시간이 걸릴 것이다.
하지만 SHA256으로 생성된 비트코인 주소로 인해 이 취약점이 해결되기 전까지는 최대한 보호할 수 있을 것이다.
그래서 공개 키보다 주소를 사용하는 것이고 주소를 얻기 위해 추가 해시나 추가 SHA256을 적용하는 것이다.
만약 누군가 돈을 보내면 어떻게 될까?
돈을 받는 사람은 돈을 보내는 사람에게 자신의 비트코인 주소를 알려준다.
그러면 돈을 보내는 사람은 트랜잭션에 돈을 받는 사람의 주소를 포함시키고, 돈을 보내는 사람의 공캐 키 또한 포함 시켜 트랜잭션을 검증한다.
"공개 키와 공개 주소의 차이점은 무엇인가?" - hksupport
hksupport, (2016), What's the difference between public key and public address?