IMG-LOGO
Home 암호화폐 강의 비트코인뽀개기 6편

비트코인뽀개기[6편]


기존의 중앙에서 관리되는 금융 거래 시스템에서 새로운 계좌를 발급받기 위해서는 반드시 개인정보가 필요했습니다. 또한, 돈을 찾거나 이체하기 위해서는 계좌의 주인임을 입증하기 위한 수단으로 공인 인증서 및 OTP와 같은 별도의 보안 장치를 활용하였습니다.

하지만 탈 중앙화된 비트코인 네트워크에서는 어떠한 개인 정보도 없으며, 지갑 주소의 소유권을 입증해줄 수 있는 별도의 중앙 기구 또한 존재하지 않습니다. 그렇다면 개인 정보도 없고 소유권을 입증해줄 수 있는 중앙 기구도 없는 상황에서 어떻게 모두가 신뢰할 수 있는 방법으로 계좌(지갑 주소)를 생성하고, 거래를 진행할 수 있었을까요? 이 질문에 대한 해답은 공개 키 암호화 방식 및 UTXO라는 개념에서 찾을 수 있습니다.

이번 비트코인뽀개기 6편에서는 비트코인 거래 원리와 밀접한 관계가 있는 공개키 암호화 방식에 대해서 자세히 알아보도록 하겠습니다.

공개 키 암호 방식(public-key cryptography)


공개 키 암호 방식에 대한 개념정리를 하기 앞서 먼저 위키에 정의된 공개 키 암호화 방식에 대해서 살펴보도록 하겠습니다.


공개 키 암호 방식(公開 - 暗號 方式, public-key cryptography)은 암호 방식의 한 종류로 사전에 비밀 키를 나눠가지지 않은 사용자들이 안전하게 통신할 수 있도록 한다. 공개 키 암호 방식에서는 공개 키와 비밀 키가 존재하며, 공개 키는 누구나 알 수 있지만 그에 대응하는 비밀 키는 키의 소유자만이 알 수 있어야 한다. 공개 키 암호를 구성하는 알고리즘은 대칭 키 암호 방식과 비교하여 비대칭 암호(非對稱暗號)라고 부르기도 한다. [출처:위키백과]


공개 키 암호 방식은 공개 키개인 키 정보로 구성되며, 공개 키 정보는 누구나 알고 있어도 무방한 공개된 정보이고, 개인(비밀) 키 정보는 오직 소유자만이 알고 있어야 하는 비밀 정보를 의미합니다.


IMG

위의 그림과 같이 공개 키는 모든 사용자가 알고 있어도 무방하지만, 개인 키 정보는 오직 소유자만이 알고 있어야 합니다. 각 키 정보를 활용하여 암호화를 진행하였을 경우 아래와 같은 규칙으로 암호화된 데이터를 복호화할 수 있습니다.

  • 개인 키로 암호화된 메시지는 오직 공개 키로만 복호화 할 수 있다.
  • 공개 키로 암호화된 메시지는 오직 개인 키로만 복호화 할 수 있다.


  • 복호화 또는 디코딩(decoding)은 부호화(encoding)된 데이터를 부호(code)화 되기 전 형태로 바꾸어, 사람이 읽을 수 있는 형태로 되돌려 놓은것이다. [출처 : 나무위키]

    개인 키로 암호화


    만약 사용자 A 군, B 군, C 군이 있다고 가정하고 A 군이 자신의 개인 키를 이용하여 메시지를 암호화한 후 B 군과 C 군에게 메시지를 전달했다고 가정해보겠습니다.


    IMG

    위의 그림과 같이 메시지가 암호화되었기 때문에 B 군과 C 군은 메시지를 복호화 하기 전까지는 암호화된 데이터가 무슨 의미인지 알 수 없으며, 암호화된 데이터를 복호화하기 위해서는 아래의 그림과 같이 A 군의 공개 키를 통해 암호화된 데이터를 복호화하여 원본 메시지 정보를 획득할 수 있습니다.


    IMG

    어떤 데이터를 개인 키로 암호화했을 경우 그에 대응되는 공개 키 정보만으로 복호화를 진행할 수 있습니다. 하지만 공개 키 정보는 누구에게나 공개된 정보이기 때문에 누구나 복호화를 진행할 수 있으므로 보안의 3대 요소 중 하나인 기밀성이 보장될 수 없으므로 개인 키 정보로 암호화를 진행하는 방식은 매우 비효율적으로 보일 수 있습니다.


    정보 보안의 3대 요소는 기밀성, 무결성, 가용성으로 나누어볼 수 있으며, 기밀성이란 오직 인가된 사용자만이 정보 자산에 접근할 수 있어야 한다는 것을 의미합니다. 쉽게 생각해서 자물쇠를 이용하여 문을 잠갔을 경우 열쇠를 가지고 있는 사용자만이 문을 열 수 있어야 합니다. 만약 열쇠를 가지고 있지 않은 사용자가 문을 열 수 있다면 문을 잠근 이유가 없지 않을까요?

    그렇다면 개인 키 정보를 이용하여 암호화하는 이유는 무엇일까요? 바로 전자 서명의 기능을 수행할 수 있기 때문입니다. 예를 들어 A 군이 어떤 문서를 작성하고 이 문서의 작성자가 A 군 자신이라는것을 증명하기 위해 자신의 개인 키를 이용하여 원본 데이터를 암호화하고, 암호화된 데이터를 문서의 끝 부분에 추가했다고 가정해보겠습니다.


    IMG

    문서를 전달 받은 사용자는 이 문서가 A 군이 작성한 문서인지를 검증하기 위하여 문서의 끝 부분에 저장된 암호화된 데이터를 A군의 공개 키를 통해 복호화를 진행합니다.


    IMG

    복호화된 데이터가 원본 데이터와 같으면 이 문서는 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 군의 공개 키로 어떤 메시지를 암호화하고 데이터를 전달했다고 가정해보겠습니다.


    IMG

    B 군의 공개 키로 데이터를 암호화했기 때문에 데이터를 복호화 하기 위해서는 오직 B 군의 개인 키로 데이터를 복호화 해야만 올바른 원본 데이터를 획득할 수 있습니다.


    IMG

    만약 다른 사용자인 C 군이 자신의 개인 키를 이용하여 암호화된 데이터를 복호화했을 경우 원본 데이터와 전혀 다른 결과값을 얻게 됩니다. 암호화된 데이터를 올바르게 복호화하는 방법은 B 군의 개인 키를 통해 복호화하는 것이고 B 군의 개인 키는 B 군만이 알고 있기 때문에 정보의 기밀성이 보장될 수 있는 암호화 방식이 되는 것입니다.

    요약 정리


  • 공개 키 암호 방식에는 공개 키와 개인 키 정보로 구성된다.
  • 공개 키 정보로 데이터를 암호화했을 경우 그에 대응되는 개인 키 정보만으로 복호화를 진행할 수 있으며, 개인 키 정보는 오직 소유자만이 알 수 있으므로 정보의 기밀성이 보장될 수 있다.
  • 개인 키 정보로 데이터를 암호화했을 경우 그에 대응되는 공개 키 정보만으로 복호화를 진행할 수 있으며, 공개 키 정보는 누구나 알 수 있는 정보이므로 기밀성이 보장될 수 없다. 하지만 개인 키 정보는 오직 소유자만이 알 수 있으므로 해당하는 암호화 데이터는 오직 소유자만이 생성할 수 있다. 이러한 방식을 이용하여 전자 서명의 개념으로 활용될 수 있다.
  • 이상으로 비트코인뽀개기 6편을 마치며, 다음 7편에서는 비트코인에서 공개 키 암호화 방식을 어떻게 활용하고 있는지에 대해서 자세히 다뤄보도록 하겠습니다.

    참고자료


  • https://ko.wikipedia.org/wiki/%EA%B3%B5%EA%B0%9C_%ED%82%A4_%EC%95%94%ED%98%B8_%EB%B0%A9%EC%8B%9D
  • https://ko.wikipedia.org/wiki/%EC%A0%84%EC%9E%90%EC%84%9C%EB%AA%85
  • https://namu.wiki/w/%EB%B3%B5%ED%98%B8%ED%99%94

  • IMG
    출처 : Keep!T / 작성자 : yahweh87