2016년 12월 12일 월요일

Satoshi Nakamoto의 비트코인 논문 번역 및 주석(Bitcoin: A Peer-to-Peer Electronic Cash System) - 9. 금액의 결합과 분리

지금부터 사토시 나카모토의 논문을 번역하고 나름대로 어려운 부분에 대해서는 해설을 붙여보도록 하겠다. 나의 이 노력이 Bitcoin 에 대해 알고싶어 하는 사람들에게 도움이 되었으면 좋겠다.

(*밑줄 표시가 되어있는 부분에 마우스를 대면 해당 용어의 설명 혹은 이해를 위한 주석이 나타납니다.)
(**아래 번역된 논문은, 번역을 자연스럽게 하기 위해 의역한 부분이 많으며, 주석은 이해를 쉽게 하기 위해 덧붙인 100% 제 의견입니다.)




<목차>
10. 개인정보 (작성중)
11. 계산 (작성중)
12. 결론 및 참고문헌(작성중)

-----------------------------------------------------------------

비트코인: P2P 전자화폐 시스템

Satoshi Nakamoto
satoshin@gmx.com
www.bitcoin.org

9. 금액의 결합과 분리

  비록 화폐들을 개별적으로 다루는 것이 가능할지라도, 각각의 화폐를 전달할 때마다 다른 트랜잭션으로 처리하는 것은 거추장스러울 수 있다. 금액을 합치거나 분리하기 위해, 트랜잭션은 다수의 입력과 다수의 출력을 가질 수 있다. 하나의 트랜잭션에는 보통 이전 트랜잭션의 더 큰 금액으로 부터의 입력이나, 여러 작은 금액이 합쳐진 다수의 입력이 있을 수 있고, 출력은 최대 2가지로 하나는 지불 금액, 하나는 전송자에게 돌아가는 잔액(거스름돈)이 될 수 있다.

  트랜잭션의 정보가 몇몇개의 트랜잭션에 의존하고, 또 그 트랜잭션이 더 많은 트랜잭션에 의존하여, 트랜잭션의 정보가 넓게 퍼지는 것은 문제가 되지 않는다. 모든 트랜잭션의 정보가 담긴 완전한 사본을 추출할 필요가 없기 때문이다.



-----------------------------------------------------------------

<목차>
10. 개인정보 (작성중)
11. 계산 (작성중)
12. 결론 및 참고문헌(작성중)

2016년 12월 6일 화요일

Satoshi Nakamoto의 비트코인 논문 번역 및 주석(Bitcoin: A Peer-to-Peer Electronic Cash System) - 8. 간소화 된 지불 증명

지금부터 사토시 나카모토의 논문을 번역하고 나름대로 어려운 부분에 대해서는 해설을 붙여보도록 하겠다. 나의 이 노력이 Bitcoin 에 대해 알고싶어 하는 사람들에게 도움이 되었으면 좋겠다.

(*밑줄 표시가 되어있는 부분에 마우스를 대면 해당 용어의 설명 혹은 이해를 위한 주석이 나타납니다.)
(**아래 번역된 논문은, 번역을 자연스럽게 하기 위해 의역한 부분이 많으며, 주석은 이해를 쉽게 하기 위해 덧붙인 100% 제 의견입니다.)




<목차>
9. 값의 결합과 분리 (작성중)
10. 개인정보 (작성중)
11. 계산 (작성중)
12. 결론 및 참고문헌(작성중)

-----------------------------------------------------------------

비트코인: P2P 전자화폐 시스템

Satoshi Nakamoto
satoshin@gmx.com
www.bitcoin.org

8. 간소화 된 지불 증명(Simplified Payment Verification)

  전체 네트워크 노드를 사용하지 않고도 지불을 증명하는 것이 가능하다. 사용자는 가장 긴 체인의 헤더블록 복사본을 가지고 있기만 하면 된다. 그 헤더블록의 복사본은 자신이 가장 긴 체인을 가지고 있고, 원하는 트랜잭션이 포함되어 있는 블록과 연결된 Merkle트리의 가지를 얻었다고 확신할 때까지 다른 노드들에게 질의하면서 얻을 수 있다. 사용자는 트랜잭션을 스스로 직접 확인 할 수는 없지만, 해당 트랜잭션이 들어있는 블록을 가장 긴 체인에 놓아보면서, 그 블록이 가장 긴 체인에 받아들여졌고 그 뒤에 다른 블록들이 이어지고 있다는 사실을 지불 증명이라 생각할 수 있다.


  이러한 증명방식은 정직한 노드들에의해 네트워크가 통제되고 있는 한은 신뢰할만 하지만, 만약 공격자들이 네트워크에서 정직한 노드들 보다 우세한 자원을 가지고 있다면 더 취약한 방식이라고 볼 수 있다. 이러한 간소화된 방식은 네트워크의 노드들이 스스로 트랜잭션을 증명할 수 있는 한편, 공격자들이 만들어낸 트랜잭션에 의해 농락당할 수 있는 가능성이 충분하다. 공격자가 네트워크에서 다른 모든 정직한 노드들에 비해 우세한 자원을 가지고 있다면 말이다. 이러한 문제로부터 시스템을 보호하기 위한 한가지 전략은 노드들이 비정상적인 블록을 감지 했을 때, 그들로부터의 경고를 받고 사용자들의 소프트웨어는 전체 블록과 경고받은 트랜잭션을 받아 비정상적인 부분을 확인하도록 하는 것이다. 빈번한 지불을 받는 사업은 아마도 여전히 더 독립되고 보안과 더 빠른 증명을 위한 그들만의 노드를 운영하기를 원할지도 모른다.

-----------------------------------------------------------------

<목차>
9. 값의 결합과 분리 (작성중)
10. 개인정보 (작성중)
11. 계산 (작성중)
12. 결론 및 참고문헌(작성중)

2016년 12월 5일 월요일

Satoshi Nakamoto의 비트코인 논문 번역 및 주석(Bitcoin: A Peer-to-Peer Electronic Cash System) - 7. 디스크 공간 처리

지금부터 사토시 나카모토의 논문을 번역하고 나름대로 어려운 부분에 대해서는 해설을 붙여보도록 하겠다. 나의 이 노력이 Bitcoin 에 대해 알고싶어 하는 사람들에게 도움이 되었으면 좋겠다.

(*밑줄 표시가 되어있는 단어에 마우스를 대면 해당 용어의 설명 혹은 이해를 위한 주석이 나타납니다.)
(**아래 번역된 논문은, 번역을 자연스럽게 하기 위해 의역한 부분이 많으며, 주석은 이해를 쉽게 하기 위해 덧붙인 100% 제 의견입니다.)

<목차>
9. 값의 결합과 분리 (작성중)
10. 개인정보 (작성중)
11. 계산 (작성중)
12. 결론 및 참고문헌(작성중)

-----------------------------------------------------------------

비트코인: P2P 전자화폐 시스템

Satoshi Nakamoto
satoshin@gmx.com
www.bitcoin.org

7. 디스크 공간 처리(Reclaiming Disk Space)

  일단 전자화폐에 담겨있는 최근의 트랜잭션 정보가 충분한 블록들 사이에 묻히면, 이전에 활용된 트랜잭션은 디스크 공간을 절약하기 위해 버려질 수 있다. 블록해시 정보를 손상입히지 않고 이 것을 가능하게 하기위해, 트랜잭션들은 블록해시의 root만을 가진채로 Merkle Tree[7][2][5]에 해시된다. 오래된 블록들은 루트노드를 제외한 하위 노드들을 잘라냄으로써 공간을 더 절약할 수 있다. 자식노드의 해시들은 저장될 필요가 없다.



   트랜잭션을 포함하지 않는 블록 헤더는 약 80바이트정도 된다. 만약 블록이 매 10분마다 생성된다고 가정하면, 1년마다 사용하는 저장공간은 80byte * 6 * 24 * 365 = 4.2MB 씩 늘어나게 된다. 2008년까지 일반적으로 파는 컴퓨터는 2GB의 램을 가지고 있고, Moore's Law 에서는 현재 메모리의 성장을 1년에 1.2GB로 보고 있다. 만약 블록 헤더들을 모두 메모리에 저장한다고 해도 저장공간 자체는 크게 문제가 되지 않을 것이다.

-----------------------------------------------------------------

<목차>
9. 값의 결합과 분리 (작성중)
10. 개인정보 (작성중)
11. 계산 (작성중)
12. 결론 및 참고문헌(작성중)

2016년 12월 2일 금요일

Satoshi Nakamoto의 비트코인 논문 번역 및 주석(Bitcoin: A Peer-to-Peer Electronic Cash System) - 6. 보상(Incentive)

지금부터 사토시 나카모토의 논문을 번역하고 나름대로 어려운 부분에 대해서는 해설을 붙여보도록 하겠다. 나의 이 노력이 Bitcoin 에 대해 알고싶어 하는 사람들에게 도움이 되었으면 좋겠다.

(*밑줄 표시가 되어있는 단어에 마우스를 대면 해당 용어의 설명 혹은 이해를 위한 주석이 나타납니다.)
(**아래 번역된 논문은, 번역을 자연스럽게 하기 위해 의역한 부분이 많으며, 주석은 이해를 쉽게 하기 위해 덧붙인 100% 제 의견입니다.)


<목차>
9. 값의 결합과 분리 (작성중)
10. 개인정보 (작성중)
11. 계산 (작성중)
12. 결론 및 참고문헌(작성중)

-----------------------------------------------------------------

비트코인: P2P 전자화폐 시스템

Satoshi Nakamoto
satoshin@gmx.com
www.bitcoin.org

6. 보상(Incentive)

  관습적으로, 한 블록에서의 첫번째 트랜잭션은 블록 생성자에게 주어지는 새 전자화폐가 시작되는 특별한 트랜잭션으로 한다. 이것은 네트워크를 유지하기 위해 노드에게 주어지는 보상으로써, 우리의 시스템에는 화폐를 발행하기위한 중앙 기관이 없기 때문에 전자화폐를 시장에 풀기위한 한가지 방법이 된다. 새로운 전자화폐의 일정량을 꾸준히 발행하는 것은 금을 채굴하는 사람이 돈을 투자하여, 채굴한 금을 시장에 푸는 것과 비슷하다. 우리의 경우에는 CPU 자원과 전력을 투자한다고 볼 수 있다.
  보상은 또한 트랜잭션을 발생하는 요금으로도 생성 될 수 있다. 만약 트랜잭션 수행하여 전달된 화폐의 금액이 투입한 금액보다 적다면, 이 금액의 차이는 트랙잭션 사용료로 볼 수 있고, 그 트랜잭션 사용료는 보상으로써 블록에 기록된다. 일단 미리 정해진 양의 화폐가 시장에 풀리면, 블록생성에 대한 보상은 전부 트랜잭션 사용료로 전환되고, 시장에 풀린 전체 화폐량은 완전히 고정된다.
  보상은 노드들이 정직하게 네트워크를 사용하도록 돕는 역할을 하게 될 것이다. 만약 악의적인 목적을 가진 공격자가 다른 모든 정직한 노드들의 CPU 자원의 합보다 큰 CPU 자원을 모을 수 있다면, 그 공격자는 사람들을 속여 그의 지불을 다시 빼앗는 방법과 그 CPU 자원을 이용해 새로운 코인을 만드는 데 사용하는 방법 중에 하나를 선택해야하는 상황에 닥칠 것이다. 공격자는 시스템의 룰을 지키며 CPU 자원을 사용하는 것이 본인에게 더 이익이 됨을 깨달아야 한다. 시스템의 룰은 다른 모든 사람들을 합친 것보다 더 많은 새 코인을 생성하는 것이, 시스템의 신뢰성을 떨어트리고 자신의 재산의 가치를 하락 시키는 것보다 더 유리하다고 생각하게 할 것이다.


-----------------------------------------------------------------

<목차>
9. 값의 결합과 분리 (작성중)
10. 개인정보 (작성중)
11. 계산 (작성중)
12. 결론 및 참고문헌(작성중)

Satoshi Nakamoto의 비트코인 논문 번역 및 주석(Bitcoin: A Peer-to-Peer Electronic Cash System) - 5. 네트워크

지금부터 사토시 나카모토의 논문을 번역하고 나름대로 어려운 부분에 대해서는 해설을 붙여보도록 하겠다. 나의 이 노력이 Bitcoin 에 대해 알고싶어 하는 사람들에게 도움이 되었으면 좋겠다.

(*밑줄 표시가 되어있는 단어에 마우스를 대면 해당 용어의 설명 혹은 이해를 위한 주석이 나타납니다.)
(**아래 번역된 논문은, 번역을 자연스럽게 하기 위해 의역한 부분이 많으며, 주석은 이해를 쉽게 하기 위해 덧붙인 100% 제 의견입니다.)

<목차>
9. 값의 결합과 분리 (작성중)
10. 개인정보 (작성중)
11. 계산 (작성중)
12. 결론 및 참고문헌(작성중)

-----------------------------------------------------------------

비트코인: P2P 전자화폐 시스템

Satoshi Nakamoto
satoshin@gmx.com
www.bitcoin.org

5. 네트워크

  네트워크를 작동시키기 위한 단계는 아래와 같다.
  1. 새로운 트랜잭션들은 모든 노드들에게 전달된다.
  2. 각 노드는 새로운 트랜잭션들을 블록에 모은다.
  3. 각 노드들은 블록을 생성하기 위해 작업증명 작업을 수행한다.
  4. 한 노드가 작업증명에 대한 해답을 찾으면, 그 블록은 모든 노드들에게 전달된다.
  5. 노드들은 작업증명이 끝난 블록의 트랜잭션 정보가 모두 유효하고, 중복사용되지 않았다면, 블록을 받아들인다.
  6. 노드들은 이렇게 받아들인 블록을 체인에 연결하고 그 다음 블록을 생성하는 작업으로 이행함으로써, 정상적으로 블록을 받아들였음을 암묵적으로 표현한다.
  노드들은 항상 가장 긴 체인을 올바른 체인으로 생각하고, 그 가장 긴 체인을 확장하기 위해 작업한다. 만약 두 노드가 동시에 작업증명의 해답을 찾아서, 그 두 블록을 다른 모든 노드들에게 전달했다면, 노드들은 둘 중에 한 블록을 먼저 받게되고, 각 노드의 먼저 받게 되는 블록이 서로 다르게 될 것이다. 이러한 경우 노드는 먼저 받은 노드를 가장 긴 체인으로 받아들여 작업하고, 다른 블록은 그 쪽이 더 길어질 경우를 대비하여 보관해 놓는다. 이렇게 두 갈래로 갈라진 체인은, 다음 작업증명 해답이 발견되면서 한 쪽 가지의 길이가 더 길어지게 된다. 그렇게 되면 다른 쪽 노드에서 작업하고 있던 노드들은 자신의 작업하려는 체인을 더 긴 체인쪽으로 변경한다.
  새로운 트랜잭션은 반드시 모든 노드에 전달 될 필요는 없다. 새로운 트랜잭션은 보다 많은 노드에 전달되는 한, 길어지기 전에 블록에 들어가게 될 것이다. 즉, 이러한 블록 전달 방식은 메세지 손실에도 강하다는 것을 알 수 있다. 만약 노드가 블록을 전달 받지 못하면, 다음 블록을 받았을 때, 해당 노드는 이전의 블록이 손실 됬음을 알 수 있고, 받지 못한 블록을 요청할 것이다.


-----------------------------------------------------------------

<목차>
9. 값의 결합과 분리 (작성중)
10. 개인정보 (작성중)
11. 계산 (작성중)
12. 결론 및 참고문헌(작성중)

2016년 12월 1일 목요일

Satoshi Nakamoto의 비트코인 논문 번역 및 주석(Bitcoin: A Peer-to-Peer Electronic Cash System) - 4. 작업증명(Proof-of-Work)

지금부터 사토시 나카모토의 논문을 번역하고 나름대로 어려운 부분에 대해서는 해설을 붙여보도록 하겠다. 나의 이 노력이 Bitcoin 에 대해 알고싶어 하는 사람들에게 도움이 되었으면 좋겠다.

(*밑줄 표시가 되어있는 단어에 마우스를 대면 해당 용어의 설명 혹은 이해를 위한 주석이 나타납니다.)
(**아래 번역된 논문은, 번역을 자연스럽게 하기 위해 의역한 부분이 많으며, 주석은 이해를 쉽게 하기 위해 덧붙인 100% 제 의견입니다.)


<목차>
9. 값의 결합과 분리 (작성중)
10. 개인정보 (작성중)
11. 계산 (작성중)
12. 결론 및 참고문헌(작성중)

-----------------------------------------------------------------

비트코인: P2P 전자화폐 시스템

Satoshi Nakamoto
satoshin@gmx.com
www.bitcoin.org

4. 작업증명(Proof-of-work)

  P2P를 기초로 하여 분산 타임스탬프 서버를 구현하기 위해서, 우리는 신문이나 유즈넷 포스트 같은 방식보다는 Adam Back's Hashcash [6]와 비슷한 작업증명 시스템이 필요하다. 작업증명은 SHA-256과 같은 방법으로 해시되었을 때, 그 해시의 bit값이 0으로 시작하는지 탐색하는 행위를 한다. 평균적으로 작업은 0 bit의 개수에 따라 기하급수적(exponential)으로 증가하고, 검증은 단 한번의 해시를 수행함으로써 쉽게 행할 수 있다.
  타임스탬프 네트워크를 구성하기 위하여, 우리는 0bit를 포함한 해시를 생성 할 수 있는 값을 찾을 때까지 블록 내의 임시토큰(nonce)을 증가시키는 작업증명을 구현한다. 일단 CPU의 자원을 사용하여 작업증명을 수행해버리면, 그 블록은 다시 작업증명을 수행하는 것 외에는 변경할 방법이 없다. 추후에 생기는 블록은 체인 형태로 이전 블록에 연결되고, 그렇게 되면 한 블록을 바꾸기 위해 그 후에 생성되어 연결된 모든 블록을 다시 작업해야 한다.

  작업증명은 또한 어떠한 체인이 다수의 노드들의 바르다고 판단한 체인인지 어떻게 알 것인가라는 문제를 해결할 수 있다. 만약 그 다수의 판단이라는 것이 한 IP당 한 표 행사에 기반한다면, 그것은 많은 아이피를 할당받은 누군가에 의해 뒤집힐 수 있다. 그리하여 작업증명은 필연적으로 한 CPU당 한 표로 갈 수밖에 없다. 다수의 판단은 가장 큰 작업증명 노력이 들어간 가장 긴 체인으로 대표된다. 만약 다수의 CPU 자원이 정직한 노드들에 의해 통제된다면, 그 정직한 노드들이 통제하는 체인은 어떤 다른 경쟁자보다 빠르게 길어질 것이다. 과거의 블록을 수정하기 위해서는 해당 블록과 그 블록 뒤로 이어진 모든 블록에 대한 작업증명을 다시 수행해야 하고, 그것이 가장 긴 노드의 길이를 넘어서야 한다. 우리는 추후의 장에서 더 긴 체인을 따라 잡으려는 느린 공격자가 블록이 추가 됨에 따라 기하급수적으로 약화되는 확률을 보여줄 것이다.
  시간이 지날수록 하드웨어의 속도가 빨라지고, 네트워크에 참여하는 노드가 많아지는 것에 대응하기 위해 작업증명의 난이도는 시간당 생성되는 평균 블록수에 따른 이동 평균(moving average)에 의해 결정된다. 블록 생성 속도가 빠르면 빠를 수록 난이도는 증가한다.

-----------------------------------------------------------------

<목차>
9. 값의 결합과 분리 (작성중)
10. 개인정보 (작성중)
11. 계산 (작성중)
12. 결론 및 참고문헌(작성중)

Satoshi Nakamoto의 비트코인 논문 번역 및 주석(Bitcoin: A Peer-to-Peer Electronic Cash System) - 3. 타임스탬프 서버

지금부터 사토시 나카모토의 논문을 번역하고 나름대로 어려운 부분에 대해서는 해설을 붙여보도록 하겠다. 나의 이 노력이 Bitcoin 에 대해 알고싶어 하는 사람들에게 도움이 되었으면 좋겠다.

(*밑줄 표시가 되어있는 단어에 마우스를 대면 해당 용어의 설명 혹은 이해를 위한 주석이 나타납니다.)
(**아래 번역된 논문은, 번역을 자연스럽게 하기 위해 의역한 부분이 많으며, 주석은 이해를 쉽게 하기 위해 덧붙인 100% 제 의견입니다.)


<목차>
9. 값의 결합과 분리 (작성중)
10. 개인정보 (작성중)
11. 계산 (작성중)
12. 결론 및 참고문헌(작성중)

-----------------------------------------------------------------

비트코인: P2P 전자화폐 시스템

Satoshi Nakamoto
satoshin@gmx.com
www.bitcoin.org

3. 타임스탬프 서버

  우리의 제시하는 솔루션은 타임스탬프 서버로 부터 시작된다. 타임스탬프 서버는 타임스탬프가 찍혀야 하는 각 아이템의 블록에 대한 해시를 가지고, 그 해시를 다른 노드들에 전달(publish)하는 방식으로 작동한다. 이것은 마치 신문이나 유즈넷 포스트(Usenet Post)[2][3][4][5]와도 같다. 타임스탬프는 해시 내에 들어간 그 데이터가 그 당시에 분명히 존재했다는 것을 증명한다. 각각의 타임스탬프는 이전의 타임스탬프를 포함한 해시를 가지고 있고, 체인을 형성하여, 이전의 타임스탬프들의 안전성을 강화한다.



-----------------------------------------------------------------

<목차>
9. 값의 결합과 분리 (작성중)
10. 개인정보 (작성중)
11. 계산 (작성중)
12. 결론 및 참고문헌(작성중)

2016년 11월 30일 수요일

Satoshi Nakamoto의 비트코인 논문 번역 및 주석(Bitcoin: A Peer-to-Peer Electronic Cash System) - 2. 트랜잭션

지금부터 사토시 나카모토의 논문을 번역하고 나름대로 어려운 부분에 대해서는 해설을 붙여보도록 하겠다. 나의 이 노력이 Bitcoin 에 대해 알고싶어 하는 사람들에게 도움이 되었으면 좋겠다.

(*밑줄 표시가 되어있는 단어에 마우스를 대면 해당 용어의 설명 혹은 이해를 위한 주석이 나타납니다.)
(**아래 번역된 논문은, 번역을 자연스럽게 하기 위해 의역한 부분이 많으며, 주석은 이해를 쉽게 하기 위해 덧붙인 100% 제 의견입니다.)




<목차>
9. 값의 결합과 분리 (작성중)
10. 개인정보 (작성중)
11. 계산 (작성중)

12. 결론 및 참고문헌(작성중)----------------------------------------------

비트코인: P2P 전자화폐 시스템

Satoshi Nakamoto
satoshin@gmx.com
www.bitcoin.org

2. 트랜잭션

  우리는 전자화폐를 전자서명의 체인(chain)으로 정의한다. 각 전자화폐의 소유자는 자신의 화폐를 다른 사람에게 넘길 때, 이전의 트랜잭션 정보와 받을 사람의 공개키를 하나의 해시값으로 만들어 주는 사람의 비밀키로 전자서명하고, 이 정보를 전자화폐의 끝부분에 추가한다. 받는 사람은 전자화폐의 소유권을 확인하기 위해 이 서명을 검증할 수 있다.




  이 방법의 문제는 전자화폐를 받는 사람이 자기가 받은 화폐가 이전에도 사용된 적이 있었는지 알 수 없다는 것이다. 일반적인 해결책은 화폐를 관리하는 신용 기관이나 조폐국과 같이 화폐를 만드는 곳에서 매 트랜잭션마다 이전에 사용한 적이 있는 화폐인지 검사하는 것이다. 각 트랜잭션이 일어날 때마다 사용된 화폐는 화폐 발행처로 돌려주고, 오직 발행처가 새로 발행한 화폐만 받는 사람에게 주는 것이다. 이 해결책의 문제점은 전체 화폐시스템이 화폐를 발행하는 회사에 의존하게 된다는 것이고, 모든 트랜젝션은 마치 은행을 거치는 것 처럼 그 회사를 거치게 될 것이라는 점이다.
  우리는 받는 사람이 받은 화폐가 자신에게 오기 전에 사용된 적이 있는지 알 수 있는 방법이 필요하다. 우리의 목적을 위해서, 우리는 가장 먼저 일어난 트랜잭션만 고려하고, 그 후에 일어나는 중복 사용 시도는 무시하기로 한다. 화폐 발행처를 기반으로 하는 모델은 화폐 발행처가 모든 트랜잭션에 대하여 알고 어떤 트랜잭션이 먼저 일어났는지 판단한다. 이러한 목적을 신용기관 없이 달성하려면, 모든 트랜잭션들은 반드시 모두에게 알려져야 하고[1], 받은 트랜잭션들을 트랜잭션이 일어난 순서대로 기록을 만들어, 이것에 대해 모두가 동의할 수 있는 시스템이 필요하다. 전자화폐를 받는 사람은 매 트랜잭션마다 자신이 받은 화폐가 처음 받은 것이라는 대다수의 동의가 필요하다.

-----------------------------------------------------------------

<목차>
9. 값의 결합과 분리 (작성중)
10. 개인정보 (작성중)
11. 계산 (작성중)
12. 결론 및 참고문헌(작성중)

Satoshi Nakamoto의 비트코인 논문 번역 및 주석(Bitcoin: A Peer-to-Peer Electronic Cash System) - 1. 논문의 요약과 소개

지금부터 사토시 나카모토의 논문을 번역하고 나름대로 어려운 부분에 대해서는 해설을 붙여보도록 하겠다. 나의 이 노력이 Bitcoin 에 대해 알고싶어 하는 사람들에게 도움이 되었으면 좋겠다.

(*밑줄 표시가 되어있는 단어에 마우스를 대면 해당 용어의 설명 혹은 이해를 위한 주석이 나타납니다.)
(**아래 번역된 논문은, 번역을 자연스럽게 하기 위해 의역한 부분이 많으며, 주석은 이해를 쉽게 하기 위해 덧붙인 100% 제 의견입니다.)

<목차>
9. 값의 결합과 분리 (작성중)
10. 개인정보 (작성중)
11. 계산 (작성중)
12. 결론 및 참고문헌(작성중)

-----------------------------------------------------------------


비트코인: P2P 전자화폐 시스템

Satoshi Nakamoto
satoshin@gmx.com
www.bitcoin.org

요약. 전자화폐의 순수 P2P 버전은 금융기관을 거치지 않고도 온라인 화폐 거래를 가능하게 할 것이다. 전자서명은 그 해법의 한 부분이지만, 전자화폐를 중복하여 사용할 수 있는 문제를 방지하기 위해 별도의 신용기관이 필요하다면 전자화폐의 의미가 퇴색되는 셈이다. 그래서 우리는 P2P 네트워크를 이용함으로 발생할 수 있는 중복사용 문제의 해답을 제시한다. 해시 기반의 작업증명(proof-of-work) 체인에 거래내용을 해시화 하여 넣은 네트워크 타임스탬프 트랜잭션들은 거래장부를 형성하여 작업증명을 다시 수행하지 않는 이상 그 내용을 변조할 수 없다. 가장 긴 체인은 거래가 이루어졌다는 증거의 역할을 할 뿐만 아니라, 이러한 체인이 가장 큰 CPU 자원 풀(the largest pool of CPU power)로 부터 나왔다는 증명도 된다. 네트워크를 공격할 생각이 없는 노드들에 의해 CPU 자원의 대다수가 사용되는 한, 그들은 가장 긴 체인을 생성할 것이고, 공격자를 앞지르게 될 것이다. 이러한 네트워크 자체는 최소한의 구조를 필요로 한다. 각 노드들이 네트워크 상에 없는 동안에도, 메세지들은 끊임없이 다른 모든 노드들에게 전달(broadcast)되고, 네트워크에 다시 합류한 노드들은 가장 긴 작업증명 체인을 올바른 거래정보로 받아들인다.

1. 소개

  온라인 상업은 온라인 결제를 위해 별도의 공증 신용기관으로써 금융기관에 절대적으로 의지하게 되었다. 그러한 금융기관의 시스템이 대다수의 트랜젝션을 충분히 처리하고 있는 한편, 신용 기반 모델은 태생적으로 어쩔 수 없는 약점을 여전히 지니고 있다. 이러한 약점은 되돌릴 수 없는 트랜잭션이 사실상 불가능하기 때문에 발생하는 문제로, 금융 기관들은 온라인 거래 중개 시 발생할 수 있는 분쟁을 피할 수 없다. 그리하여 중개의 비용은 트랜잭션의 비용을 증가시키고, 그것은 최소한의 실용적인 트랜잭션 크기를 제한하여, 일상적으로 일어날 수 있는 작은 규모의 트랜잭션을 차단하고, 결국엔 번복할 일이 없는 서비스에 대한 변경 불가능한 결재를 만들기위해 더 많은 비용이 필요하게된다. 이러한 결제를 되돌릴 수 있다는 가능성은, 믿을 만한 중개를 해 줄 기관의 필요 욕구를 크게 만들었다. 상인들은 분명 소비자들이 그들이 필요로 하는 것보다 더 많은 정보로 자신들을 귀찮게 할 것을 걱정했을 것이다. 어느정도 확률의 사기는 피할 수 없다는 것은 알고 있다. 이러한 비용과 지불의 불명확함은 실제 화폐로 직접 만나거래 함으로써 피할 수 잇다. 하지만 신용할 수 있는 기관의 중재 없이 온라인을 통해 지불을 할 수 있는 방법은 현재 존재하지 않는다.
  신용 대신에 필요한 것은 암호화 증명을 기반으로한 전자 결제 시스템이고, 또한 제 삼자의 신용기관 없이 개개인이 직접적으로 결제를 처리하는 것을 허용하는 것이다. 컴퓨터를 통한 트랜잭션을 되돌릴 수 없게 하는 것은 판매자를 사기로부터 보호할 것이고, 구매자를 보호하기위해 일반적인 조건부 승인과 같은 메카니즘이 쉽게 구현 될 수 있다. 이 논문에서 우리는 하나의 화폐를 중복으로 사용하는 문제에 대한 해결책을 P2P 분산 타임스탬프 서버를 활용하여 제시할 것이다. 이러한 타임스탬프 서버는 트랜젝션이 일어난 순서를 증명하기 위해 사용될 것이고, 이러한 시스템은 정직한 사용자의 노드들이 시스템을 악용하려는 사용자의 그룹보다 많은 CPU 자원을 가지고 있는 한 안전하다.

-----------------------------------------------------------------

<목차>
9. 값의 결합과 분리 (작성중)
10. 개인정보 (작성중)
11. 계산 (작성중)
12. 결론 및 참고문헌(작성중)

2016년 7월 4일 월요일

spring + spring-data-jpa + hybernate + postgresql 설정

1. pom.xml 에 dependency 추가

- spring-data-jpa, hybernate, postgresql 관련 dependency 만 표기하겠음.

      org.springframework.data
      spring-data-jpa
      1.10.2.RELEASE
  
  
      org.hibernate.javax.persistence
      hibernate-jpa-2.0-api
   1.0.1.Final
  
  
      org.hibernate
      hibernate-core
      5.1.0.Final
  
  
      org.hibernate
      hibernate-entitymanager
      5.1.0.Final
  
  
      org.hibernate
      hibernate-ehcache
      5.1.0.Final
  
  
      postgresql
      postgresql
      8.4-702.jdbc4
  


2. context-datasource.xml 파일에 설정 추가

 - 종료태그 부분이 구글 블로그에서 이상하게 번역되는데... <property name=
"dasdf" value="adfs" /> 이렇게 끝나야 하고... 뒤에 덧붙여진거 지워야함;;;;

      
 
   
    
        
        
        
        
    
    
    
    
    
        
        
            
        
    
    
    
        
        
        
            
                
                
                
                
            
        
        
            
                hibernate.cache.use_second_level_cache = true
                hibernate.cache.region.factory_class = org.hibernate.cache.ehcache.EhCacheRegionFactory
                hibernate.cache.use_query_cache = true
                hibernate.generate_statistics = true
            
        
    



3. DAO Interface 설정

 * TestDAO (Interface 만 있어도 CrudRepository 를 이용하면 기본적인 CRUD 가능)

import org.springframework.data.repository.CrudRepository;

import moo.vo.Test;

public interface TestDAO extends CrudRepository{

}

* TestService

package moo.service;

import javax.inject.Inject;

import org.springframework.stereotype.Service;

import moo.dao.TestDAO;
import moo.vo.Test;

@Service
public class TestService {
 
 @Inject
 TestDAO testDAO;
 
 public void saveTest(Test test){
  testDAO.save(test);
 }
 
 public Test getTest(int id){
  
  return testDAO.findOne(id);
 }
 
 public Iterable getTests(){
  return testDAO.findAll();
 }
}

* Test (VO 파일)

package moo.vo;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;

@Entity
public class Test {
 @Id
 @GeneratedValue
 private int id;
 
 private String contents;

 public int getId() {
  return id;
 }

 public void setId(int id) {
  this.id = id;
 }

 public String getContents() {
  return contents;
 }

 public void setContents(String contents) {
  this.contents = contents;
 }
}




끝!