기존의 중앙에서 관리되는 금융 거래 시스템에서 새로운 계좌를 발급받기 위해서는 반드시 개인정보가 필요했습니다. 또한, 돈을 찾거나 이체하기 위해서는 계좌의 주인임을 입증하기 위한 수단으로 공인 인증서 및 OTP와 같은 별도의 보안 장치를 활용하였습니다.
하지만 탈 중앙화된 비트코인 네트워크에서는 어떠한 개인 정보도 없으며, 지갑 주소의 소유권을 입증해줄 수 있는 별도의 중앙 기구 또한 존재하지 않습니다. 그렇다면 개인 정보도 없고 소유권을 입증해줄 수 있는 중앙 기구도 없는 상황에서 어떻게 모두가 신뢰할 수 있는 방법으로 계좌(지갑 주소)를 생성하고, 거래를 진행할 수 있었을까요? 이 질문에 대한 해답은 공개 키 암호화 방식 및 UTXO라는 개념에서 찾을 수 있습니다.
이번 비트코인뽀개기 6편에서는 비트코인 거래 원리와 밀접한 관계가 있는 공개키 암호화 방식에 대해서 자세히 알아보도록 하겠습니다.
공개 키 암호 방식에 대한 개념정리를 하기 앞서 먼저 위키에 정의된 공개 키 암호화 방식에 대해서 살펴보도록 하겠습니다.
공개 키 암호 방식(公開 - 暗號 方式, public-key cryptography)은 암호 방식의 한 종류로 사전에 비밀 키를 나눠가지지 않은 사용자들이 안전하게 통신할 수 있도록 한다. 공개 키 암호 방식에서는 공개 키와 비밀 키가 존재하며, 공개 키는 누구나 알 수 있지만 그에 대응하는 비밀 키는 키의 소유자만이 알 수 있어야 한다. 공개 키 암호를 구성하는 알고리즘은 대칭 키 암호 방식과 비교하여 비대칭 암호(非對稱暗號)라고 부르기도 한다. [출처:위키백과]
공개 키 암호 방식은 공개 키
와 개인 키
정보로 구성되며, 공개 키
정보는 누구나 알고 있어도
무방한 공개된 정보이고, 개인(비밀) 키
정보는 오직 소유자만이 알고 있어야 하는 비밀 정보를 의미합니다.
위의 그림과 같이 공개 키는 모든 사용자가 알고 있어도 무방하지만, 개인 키 정보는 오직 소유자만이 알고 있어야 합니다. 각 키 정보를 활용하여 암호화를 진행하였을 경우 아래와 같은 규칙으로 암호화된 데이터를 복호화할 수 있습니다.
개인 키
로 암호화된 메시지는 오직 공개 키
로만 복호화 할 수 있다.공개 키
로 암호화된 메시지는 오직 개인 키
로만 복호화 할 수 있다.복호화 또는 디코딩(decoding)은 부호화(encoding)된 데이터를 부호(code)화 되기 전 형태로 바꾸어, 사람이 읽을 수 있는 형태로 되돌려 놓은것이다. [출처 : 나무위키]
만약 사용자 A 군, B 군, C 군이 있다고 가정하고 A 군이 자신의 개인 키를 이용하여 메시지를 암호화한 후 B 군과 C 군에게 메시지를 전달했다고 가정해보겠습니다.
위의 그림과 같이 메시지가 암호화되었기 때문에 B 군과 C 군은 메시지를 복호화 하기 전까지는 암호화된 데이터가 무슨 의미인지 알 수 없으며, 암호화된 데이터를 복호화하기 위해서는 아래의 그림과 같이 A 군의 공개 키를 통해 암호화된 데이터를 복호화하여 원본 메시지 정보를 획득할 수 있습니다.
어떤 데이터를 개인 키로 암호화했을 경우 그에 대응되는 공개 키 정보만으로 복호화를 진행할 수 있습니다. 하지만 공개 키 정보는 누구에게나 공개된 정보이기 때문에 누구나 복호화를 진행할 수 있으므로 보안의 3대 요소 중 하나인 기밀성이 보장될 수 없으므로 개인 키 정보로 암호화를 진행하는 방식은 매우 비효율적으로 보일 수 있습니다.
정보 보안의 3대 요소는 기밀성
, 무결성
, 가용성
으로 나누어볼 수 있으며,
기밀성이란 오직 인가된 사용자만이 정보 자산에 접근할 수 있어야 한다는 것을 의미합니다. 쉽게 생각해서 자물쇠를 이용하여 문을 잠갔을 경우 열쇠를 가지고 있는
사용자만이 문을 열 수 있어야 합니다. 만약 열쇠를 가지고 있지 않은 사용자가 문을 열 수 있다면 문을 잠근 이유가 없지 않을까요?
그렇다면 개인 키 정보를 이용하여 암호화하는 이유는 무엇일까요? 바로 전자 서명
의 기능을 수행할 수 있기 때문입니다. 예를 들어 A 군이 어떤
문서를 작성하고 이 문서의 작성자가 A 군 자신이라는것을 증명하기 위해 자신의 개인 키를 이용하여 원본 데이터를 암호화하고, 암호화된 데이터를 문서의 끝 부분에
추가했다고 가정해보겠습니다.
문서를 전달 받은 사용자는 이 문서가 A 군이 작성한 문서인지를 검증하기 위하여 문서의 끝 부분에 저장된 암호화된 데이터를 A군의 공개 키를 통해 복호화를 진행합니다.
복호화된 데이터가 원본 데이터와 같으면 이 문서는 A 군이 작성한 문서라는것이 증명될 수 있습니다. 그 이유는 A 군의 개인 키 정보는 오직 A 군만이 알 수 있으며, A 군의 개인 키 정보를 통해 암호화하지 않고 다른 개인 키 정보를 통해 암호화 했을 경우 A 군의 공개 키 정보로 복호환 데이터와 원본 데이터가 같을 수 없기 때문입니다.
즉, 공개 키 암호 방식에서 개인 키로 암호화하는 방식을 통해 전자 서명
의 기능을 수행할 수 있으며, 암호화된 데이터를 서명이라고 표현합니다.
추가로 위키에 정의된 전자 서명의 개념은 아래와 같습니다.
* 전자 서명 : 기술측면에서 전자서명이란 전자문서의 해시(HASH)값을 서명자의 개인키(전자서명생성정보)로 변환(암호화)한 것으로서 RSA사에서 만든 PKCS#7 의 표준이 널리 사용되고 있다.
즉, 원래의 문서 내용을 A라고 하면 A의 해쉬 값을 잘 알려진 Hash 함수인 SHA1 같은 함수 하나를 정해 이런 Hash함수로 문서 A의 Hash 값을 구하고 이 Hash 값을, 보내는 사람(철수)의 Private Key 로 암호화 한다. 이런 다음 이렇게 암호화된 Hash값을 원래 문서 A 끝에 첨부하여 이 문서 전체를 받는 사람(영희)에게 보낸다.
영희는 먼저 메시지가 오면 해쉬값을 뺀 앞부분의 문서에 대해 철수가 사용했던 Hash함수를 이용해 받은 문서의 Hash값을 구한다. 그 다음 문서 뒤에 달린 암호화된 Hash값을 철수의 복호키로 복호화한 다음 이 복호화된 Hash값을, 받은 문서의 Hash값과 비교하게된다. 이 두개의 Hash값이 동일한 값이면 서명이 올바른 것이고 값이 서로 다르거나 변환에 오류가 있으면 서명이 틀린 것이다.
만약 A 군이 B 군의 공개 키로 어떤 메시지를 암호화하고 데이터를 전달했다고 가정해보겠습니다.
B 군의 공개 키로 데이터를 암호화했기 때문에 데이터를 복호화 하기 위해서는 오직 B 군의 개인 키로 데이터를 복호화 해야만 올바른 원본 데이터를 획득할 수 있습니다.
만약 다른 사용자인 C 군이 자신의 개인 키를 이용하여 암호화된 데이터를 복호화했을 경우 원본 데이터와 전혀 다른 결과값을 얻게 됩니다. 암호화된 데이터를 올바르게 복호화하는 방법은 B 군의 개인 키를 통해 복호화하는 것이고 B 군의 개인 키는 B 군만이 알고 있기 때문에 정보의 기밀성이 보장될 수 있는 암호화 방식이 되는 것입니다.
이상으로 비트코인뽀개기 6편을 마치며, 다음 7편에서는 비트코인에서 공개 키 암호화 방식을 어떻게 활용하고 있는지에 대해서 자세히 다뤄보도록 하겠습니다.