이 페이지의 선택한 이전 버전과 현재 버전 사이의 차이점을 보여줍니다.
비트코인 [2012-08-27 10:22] lifthrasiir 새로 만듦 |
비트코인 [2012-09-23 05:52] (현재) lifthrasiir 오타 |
||
---|---|---|---|
줄 46: | 줄 46: | ||
따라서 어떤 주소가 얼마만큼의 비트코인을 가지고 있다는 얘기는 첫번째 형태의 거래로 처리될 수 있는 출력이 그만큼 많이 있다는 소리일 뿐이다. 두번째 형태의 거래를 쓰거나, 아니면 완전히 다른 형태의((예를 들어서 받는 쪽과 보내는 쪽이 모두 신뢰하는 제 3자의 서명을 함께 쓰는 [[에스크로]]라거나, 수학 문제를 풀어야만 받을 수 있는 출력이라거나(...), 그냥 아무나 받을 수 있는 출력이라거나 어쨌든 스크립트를 잘 짜면 별의별 것을 다 만들 수 있다. 자세한 내용은 비트코인 위키의 [[https://en.bitcoin.it/wiki/Script|스크립트]] 참고.)) 스크립트를 쓴다면 거래 주체를 추적하기는 훨씬 어려워진다(사실 주소만 써도 이미 어렵긴 하다). 비트코인에서 거래는 공개되어 있지만 거래 주체는 공개되어 있지 않다는 얘기는 여기서 유래한다. | 따라서 어떤 주소가 얼마만큼의 비트코인을 가지고 있다는 얘기는 첫번째 형태의 거래로 처리될 수 있는 출력이 그만큼 많이 있다는 소리일 뿐이다. 두번째 형태의 거래를 쓰거나, 아니면 완전히 다른 형태의((예를 들어서 받는 쪽과 보내는 쪽이 모두 신뢰하는 제 3자의 서명을 함께 쓰는 [[에스크로]]라거나, 수학 문제를 풀어야만 받을 수 있는 출력이라거나(...), 그냥 아무나 받을 수 있는 출력이라거나 어쨌든 스크립트를 잘 짜면 별의별 것을 다 만들 수 있다. 자세한 내용은 비트코인 위키의 [[https://en.bitcoin.it/wiki/Script|스크립트]] 참고.)) 스크립트를 쓴다면 거래 주체를 추적하기는 훨씬 어려워진다(사실 주소만 써도 이미 어렵긴 하다). 비트코인에서 거래는 공개되어 있지만 거래 주체는 공개되어 있지 않다는 얘기는 여기서 유래한다. | ||
- | 거래의 입력에 들어 있는 비트코인의 합은 거래의 출력의 합보다 작을 수 없다(당연히). 그리고 기존 출력에 있는 비트코인의 일부만을 소비하고자 할 때도 남은 잔돈에 대응하는 출력이 있어야 한다. 대부분의 비트코인 클라이언트는 이 경우 새 공개키·비밀키를 생성해서 그 주소에 잔돈을 보내고, 나중에 그 잔돈이 필요할 때 해당 비밀키를 사용한다. (자기 자신한테 보낼 수도 있지만 이러면 잔돈을 사용한다는 것이 노출되어서 보통 그렇게 안 한다.) 그래서 겉으로 보이는 것과는 달리, 비트코인 사용하는 생각보다 많은 주소를 동시에 사용할 수도 있다. 사용하고 있는 공개키·비밀키들은 **지갑**(wallet)이라 불리는 파일에 기록되며, 이 지갑 파일이 사라지면 잔돈의 주소조차 잃어버릴 수 있으니 매우 조심해야 한다. | + | 거래의 입력에 들어 있는 비트코인의 합은 거래의 출력의 합보다 작을 수 없다(당연히). 그리고 기존 출력에 있는 비트코인의 일부만을 소비하고자 할 때도 남은 잔돈에 대응하는 출력이 있어야 한다. 대부분의 비트코인 클라이언트는 이 경우 새 공개키·비밀키를 생성해서 그 주소에 잔돈을 보내고, 나중에 그 잔돈이 필요할 때 해당 비밀키를 사용한다. (자기 자신한테 보낼 수도 있지만 이러면 잔돈을 사용한다는 것이 노출되어서 보통 그렇게 안 한다.) 그래서 겉으로 보이는 것과는 달리, 실제로는 생각보다 많은 주소를 동시에 사용할 수도 있다. 사용하고 있는 공개키·비밀키들은 **지갑**(wallet)이라 불리는 파일에 기록되며, 이 지갑 파일이 사라지면 잔돈의 주소조차 잃어버릴 수 있으니 매우 조심해야 한다. |
거래의 입출력 외에도 거래에는 거래가 생성된 시각과, 그 거래가 블록에 실제로 포함될 때까지 기다려야 하는 시간 또는 블록 번호(lock time), 거래를 생성한 뒤에 서명을 바꾸지 않고 거래를 갱신하기 위한((거래가 블록에 들어가기 전에 당사자들끼리 협상을 할 수 있게 하려는 것이다. 물론 블록에 들어갈 때는 이 필드는 최대값으로 바뀐다.)) 순열 번호(sequence number) 등이 함께 있다. 이들은 입출력 스크립트와 함께 다양한 형태의 거래를 구현하는데 쓸 수 있다. | 거래의 입출력 외에도 거래에는 거래가 생성된 시각과, 그 거래가 블록에 실제로 포함될 때까지 기다려야 하는 시간 또는 블록 번호(lock time), 거래를 생성한 뒤에 서명을 바꾸지 않고 거래를 갱신하기 위한((거래가 블록에 들어가기 전에 당사자들끼리 협상을 할 수 있게 하려는 것이다. 물론 블록에 들어갈 때는 이 필드는 최대값으로 바뀐다.)) 순열 번호(sequence number) 등이 함께 있다. 이들은 입출력 스크립트와 함께 다양한 형태의 거래를 구현하는데 쓸 수 있다. | ||
줄 87: | 줄 87: | ||
! 전자 서명에는 [[타원곡선서명알고리즘]](ECDSA)이 사용되었으며, 좀 더 구체적으로는 secp256k1 곡선이 사용되었다. [[http://www.secg.org/collateral/sec2_final.pdf|SEC 2]]에 따르면 대략 3072비트 [[RSA]]에 맞먹는다고 한다. 공개키에 사용하는 원 데이터는 물론 곡선 상의 좌표를 [[식별부호화규칙]](DER)으로 표현한 것. | ! 전자 서명에는 [[타원곡선서명알고리즘]](ECDSA)이 사용되었으며, 좀 더 구체적으로는 secp256k1 곡선이 사용되었다. [[http://www.secg.org/collateral/sec2_final.pdf|SEC 2]]에 따르면 대략 3072비트 [[RSA]]에 맞먹는다고 한다. 공개키에 사용하는 원 데이터는 물론 곡선 상의 좌표를 [[식별부호화규칙]](DER)으로 표현한 것. | ||
? 암호화 알고리즘 | ? 암호화 알고리즘 | ||
- | ! 없다! 비트코인은 어떤 [[대칭암호]]나 [[비대칭암호]]도 쓰지 않는다. 물론 개별 서비스나 지갑 암호화 같은 거라면 모르겠지만. | + | ! 없다! 비트코인은 어떤 [[대칭암호]]나 [[비대칭암호]](의 암호화·복호화 부분)도 쓰지 않는다. 물론 개별 서비스나 지갑 암호화 같은 거라면 모르겠지만. |
? 네트워크 프로토콜 | ? 네트워크 프로토콜 | ||
! 위에서는 네트워크 프로토콜에 대한 설명은 별로 안 되어 있는데, 이는 이 프로토콜이라는 것이 공통의 데이터베이스를 그다지 복잡하지 않은 전파 알고리즘으로 갱신하는 것에 불과해서 그렇다. 거래나 블록 같은 건 서명이 들어 가서 쉽게 바꾸기 어렵지만, 네트워크 프로토콜은 (심지어 암호화도 되어 있지 않기 때문에) 쉽게 바꿀 수 있다. | ! 위에서는 네트워크 프로토콜에 대한 설명은 별로 안 되어 있는데, 이는 이 프로토콜이라는 것이 공통의 데이터베이스를 그다지 복잡하지 않은 전파 알고리즘으로 갱신하는 것에 불과해서 그렇다. 거래나 블록 같은 건 서명이 들어 가서 쉽게 바꾸기 어렵지만, 네트워크 프로토콜은 (심지어 암호화도 되어 있지 않기 때문에) 쉽게 바꿀 수 있다. |