본문 바로가기
금융/비트코인

비트코인 백서 번역본

TIPMONEY 2021. 6. 9.


 

비트 코인 : P2P 전자 현금 시스템

나카 모토 사토시

2008 년 10 월 31 일

 

요약

순수하게 P2P 버전의 전자 현금을 사용하면 금융 기관을 통하지 않고도 온라인 지불을 한 당사자에서 다른 당사자로 직접 보낼 수 있습니다. 디지털 서명은 솔루션의 일부를 제공하지만 이중 지출을 방지하기 위해 신뢰할 수있는 제 3자가 여전히 필요하면 주요 이점을 잃게됩니다. P2P 네트워크를 사용하여 이중 지출 문제에 대한 솔루션을 제안합니다. 네트워크는 트랜잭션을 진행중인 해시 기반 작업 증명 체인으로 해시하여 작업 증명을 다시 실행하지 않고는 변경할 수없는 레코드를 형성함으로써 트랜잭션을 타임 스탬프합니다. 가장 긴 체인은 목격 된 일련의 이벤트에 대한 증거 일뿐만 아니라 가장 큰 CPU 성능 풀에서 나왔다는 증거입니다. 대부분의 CPU 전력이 네트워크 공격에 협력하지 않는 노드에 의해 제어되는 한 가장 긴 체인을 생성하고 공격자를 능가합니다. 네트워크 자체에는 최소한의 구조가 필요합니다. 메시지는 최선의 노력으로 브로드 캐스트되며 노드는 원하는대로 네트워크를 떠났다가 다시 참여하여 가장 긴 작업 증명 체인을 그들이 사라진 동안 발생한 증거로 받아들입니다.

 

1. 소개 인터넷 상거래는 전자 지불을 처리하기 위해 신뢰할 수있는 제 3 자 역할을하는 금융 기관에 거의 전적으로 의존하게되었습니다. 이 시스템은 대부분의 트랜잭션에 대해 충분히 잘 작동하지만 여전히 신뢰 기반 모델의 고유 한 약점으로 인해 어려움을 겪고 있습니다. 금융 기관은 분쟁 중재를 피할 수 없기 때문에 완전히 되돌릴 수없는 거래는 실제로 불가능합니다. 중재 비용은 거래 비용을 증가시켜 최소 실제 거래 규모를 제한하고 소규모 캐주얼 거래의 가능성을 차단하며, 비가역 서비스에 대해 비가역 지불을 할 수있는 능력의 상실로 인해 더 많은 비용이 발생합니다. 반전 가능성과 함께 신뢰의 필요성이 확산됩니다. 상인은 고객을 경계해야하며, 그렇지 않으면 필요한 것보다 더 많은 정보를 요구해야합니다. 특정 비율의 사기는 피할 수없는 것으로 받아 들여집니다. 이러한 비용과 지불 불확실성은 물리적 통화를 사용하여 직접 피할 수 있지만 신뢰할 수있는 당사자없이 통신 채널을 통해 지불 할 수있는 메커니즘은 없습니다. 필요한 것은 신뢰가 아닌 암호화 증명을 기반으로하는 전자 결제 시스템으로, 신뢰할 수있는 제 3자가 필요없이 기꺼이 두 당사자가 서로 직접 거래 할 수 있도록합니다. 계산 상으로 되돌릴 수없는 거래는 판매자를 사기로부터 보호하고 일상적인 에스크로 메커니즘을 쉽게 구현하여 구매자를 보호 할 수 있습니다. 본 논문에서는 거래의 연대순에 대한 계산 증명을 생성하기 위해 P2P 분산 타임 스탬프 서버를 사용하여 이중 지출 문제에 대한 해결책을 제안합니다. 시스템은 정직한 노드가 협력하는 공격자 노드 그룹보다 더 많은 CPU 성능을 집합 적으로 제어하는 ​​한 안전합니다.

 

2. 거래 우리는 전자 코인을 디지털 서명의 사슬로 정의합니다. 각 소유자는 이전 거래의 해시와 다음 소유자의 공개 키에 디지털 서명하고이를 코인 끝에 추가하여 코인을 다음 코인으로 이전합니다. 수취인은 소유권 체인을 확인하기 위해 서명을 확인할 수 있습니다. 물론 문제는 수취인이 소유자 중 한 명이 코인을 이중으로 지출하지 않았 음을 확인할 수 없다는 것입니다. 일반적인 해결책은 모든 거래에서 이중 지출을 확인하는 신뢰할 수있는 중앙 기관 또는 민트를 도입하는 것입니다. 매 거래 후, 코인은 새 코인을 발행하기 위해 조폐국으로 반환되어야하며, 조폐국에서 직접 발행 된 코인 만 이중 사용이 아닌 것으로 신뢰됩니다. 이 솔루션의 문제는 전체 화폐 시스템의 운명이 은행처럼 모든 거래를 거쳐야하는 민트를 운영하는 회사에 달려 있다는 것입니다. 수취인이 이전 소유자가 이전 거래에 서명하지 않았 음을 알 수있는 방법이 필요합니다. 우리의 목적을 위해 가장 빠른 거래가 중요한 거래이므로 나중에 이중 지출 시도에 대해 신경 쓰지 않습니다. 거래가 없음을 확인하는 유일한 방법은 모든 거래를 인식하는 것입니다. 민트 기반 모델에서 민트는 모든 거래를 인식하고 먼저 도착한 거래를 결정했습니다. 신뢰할 수있는 당사자없이이를 수행하려면 거래를 공개적으로 발표해야하며 [1] , 참가자가 수신 된 순서의 단일 내역에 동의 할 수있는 시스템이 필요합니다. 수취인은 각 거래 시점에 대부분의 노드가 처음 수신 한 것이라고 동의했다는 증거가 필요합니다.

 

3. 타임 스탬프 서버 우리가 제안하는 솔루션은 타임 스탬프 서버에서 시작됩니다. 타임 스탬프 서버는 타임 스탬프를 지정할 항목 블록의 해시를 가져와 신문이나 유즈넷 게시물 [2-5] 과 같이 해시를 널리 게시하는 방식으로 작동합니다 . 타임 스탬프는 데이터가 해시에 들어가기 위해 해당 시점에 존재 했어야 함을 증명합니다. 각 타임 스탬프에는 해시의 이전 타임 스탬프가 포함되어 체인을 형성하며 각 추가 타임 스탬프는 이전 타임 스탬프를 강화합니다.

4. 작업 증명 P2P 기반으로 분산 된 타임 스탬프 서버를 구현하려면 신문이나 유즈넷 게시물보다는 Adam Back의 Hashcash [6] 와 유사한 작업 증명 시스템을 사용해야합니다 . 작업 증명에는 SHA-256과 같이 해시 될 때 해시가 0 비트 수로 시작하는 값을 검색하는 작업이 포함됩니다. 필요한 평균 작업은 필요한 0 비트 수에서 기하 급수적이며 단일 해시를 실행하여 확인할 수 있습니다. 타임 스탬프 네트워크의 경우, 블록의 해시에 필요한 0 비트를 제공하는 값이 발견 될 때까지 블록에서 임시 값을 증가시켜 작업 증명을 구현합니다. 작업 증명을 충족시키기 위해 CPU 노력이 소비되면 작업을 다시 실행하지 않고는 블록을 변경할 수 없습니다. 이후 블록이 그 뒤에 연결되므로 블록을 변경하는 작업에는 이후의 모든 블록을 다시 실행하는 작업이 포함됩니다. 작업 증명은 또한 다수의 의사 결정에서 대표성을 결정하는 문제를 해결합니다. 대다수가 단일 IP 주소 1 표를 기반으로했다면 많은 IP를 할당 할 수있는 사람이이를 전복시킬 수 있습니다. 작업 증명은 기본적으로 CPU 1 개 투표입니다. 대부분의 결정은 가장 긴 체인으로 대표되며 작업 증명 노력이 가장 많이 듭니다. CPU 성능의 대부분이 정직한 노드에 의해 제어되는 경우 정직한 체인은 가장 빠르게 성장하고 경쟁 체인을 능가합니다. 과거 블록을 수정하기 위해 공격자는 블록과 그 이후의 모든 블록의 작업 증명을 다시 실행 한 다음 정직한 노드의 작업을 따라 잡고 능가해야합니다. 느린 공격자가 따라 잡을 확률은 후속 블록이 추가됨에 따라 기하 급수적으로 감소한다는 것을 나중에 보여줄 것입니다. 시간이 지남에 따라 증가하는 하드웨어 속도와 노드 실행에 대한 다양한 관심을 보상하기 위해 작업 증명 난이도는 시간당 평균 블록 수를 목표로하는 이동 평균으로 결정됩니다. 너무 빨리 생성되면 난이도가 높아집니다.

 

5. 네트워크 네트워크를 실행하는 단계는 다음과 같습니다. 새로운 트랜잭션은 모든 노드에 브로드 캐스트됩니다. 각 노드는 새로운 트랜잭션을 블록으로 수집합니다. 각 노드는 블록에 대한 어려운 작업 증명을 찾기 위해 노력합니다. 노드가 작업 증명을 찾으면 블록을 모든 노드에 브로드 캐스트합니다. 노드는 모든 트랜잭션이 유효하고 이미 사용되지 않은 경우에만 블록을 수락합니다. 노드는 수락 된 블록의 해시를 이전 해시로 사용하여 체인에서 다음 블록을 생성하는 작업을 통해 블록 수락을 표현합니다. 노드는 항상 가장 긴 체인을 올바른 체인으로 간주하고 계속해서 확장 할 것입니다. 두 노드가 다음 블록의 다른 버전을 동시에 브로드 캐스트하는 경우 일부 노드는 먼저 하나 또는 다른 버전을 수신 할 수 있습니다. 이 경우 처음받은 지점에서 작업하지만 더 길어질 경우 다른 지점을 저장합니다. 다음 작업 증명이 발견되고 하나의 분기가 길어지면 동점이 끊어집니다. 다른 브랜치에서 작업하던 노드는 더 긴 브랜치로 전환됩니다. 새로운 트랜잭션 브로드 캐스트가 반드시 모든 노드에 도달 할 필요는 없습니다. 많은 노드에 도달하는 한 머지 않아 블록에 들어갑니다. 블록 브로드 캐스트는 삭제 된 메시지도 허용합니다. 노드가 블록을 수신하지 않으면 다음 블록을 수신하고 놓친 블록을 인식 할 때 요청합니다.

 

6. 인센티브 관례 적으로 블록의 첫 번째 트랜잭션은 블록 생성자가 소유 한 새 코인을 시작하는 특수 트랜잭션입니다. 이는 노드가 네트워크를 지원하도록 인센티브를 추가하고 토큰을 발행 할 중앙 권한이 없기 때문에 초기에 코인을 유통에 분배하는 방법을 제공합니다. 일정량의 새로운 코인을 꾸준히 추가하는 것은 금 채굴자가 금을 유통에 추가하기 위해 자원을 소비하는 것과 유사합니다. 우리의 경우 소비되는 것은 CPU 시간과 전기입니다. 인센티브는 거래 수수료로도 충당 될 수 있습니다. 거래의 출력 값이 입력 값보다 작 으면 차액은 거래를 포함하는 블록의 인센티브 값에 추가되는 거래 수수료입니다. 미리 정해진 수의 코인이 유통되면 인센티브는 전적으로 거래 수수료로 전환 될 수 있으며 완전히 인플레이션이 없습니다. 인센티브는 노드가 정직하게 유지되도록 장려하는 데 도움이 될 수 있습니다. 탐욕스러운 공격자가 모든 정직한 노드보다 더 많은 CPU 성능을 모을 수 있다면, 그는 지불을 훔쳐서 사람들을 속이는 데 사용하거나 새 코인을 생성하는 데 사용하는 것 중에서 선택해야합니다. 그는 시스템과 자신의 부의 타당성을 훼손하는 것보다 다른 모든 사람들을 합친 것보다 더 많은 새로운 동전으로 그를 선호하는 규칙과 같은 규칙에 따라 플레이하는 것이 더 수익성이 있음을 찾아야합니다.

7. 디스크 공간 재 확보 코인의 최신 거래가 충분한 블록 아래에 묻히면 사용 된 거래는 디스크 공간을 절약하기 위해 폐기 될 수 있습니다. 블록의 해시를 깨지 않고이를 용이하게하기 위해 트랜잭션은 Merkle Tree [7] [2] [5] 에서 해시되고 블록의 해시에는 루트 만 포함됩니다. 그런 다음 나무의 가지를 떼어내어 오래된 블록을 압축 할 수 있습니다. 내부 해시는 저장할 필요가 없습니다. 트랜잭션이없는 블록 헤더는 약 80 바이트입니다. 10 분마다 블록이 생성된다고 가정하면 연간 80 바이트 * 6 * 24 * 365 = 4.2MB입니다. 컴퓨터 시스템은 일반적으로 2008 년 현재 2GB RAM으로 판매되고 무어의 법칙은 현재 연간 1.2GB의 성장을 예측하므로 블록 헤더를 메모리에 보관해야하더라도 스토리지는 문제가되지 않습니다.

 

8. 간편 결제 확인 전체 네트워크 노드를 실행하지 않고도 결제를 확인할 수 있습니다. 사용자는 가장 긴 작업 증명 체인의 블록 헤더 사본 만 보관하면되며, 가장 긴 체인을 가지고 있다고 확신 할 때까지 네트워크 노드를 쿼리하여 얻을 수 있고 트랜잭션을 블록에 연결하는 Merkle 브랜치를 얻습니다. 타임 스탬프가 찍혔습니다. 그는 트랜잭션을 직접 확인할 수 없지만 체인의 한 위치에 연결하면 네트워크 노드가이를 수락했음을 알 수 있으며 네트워크가 수락 한 것을 추가로 확인한 후 블록이 추가됩니다. 따라서 정직한 노드가 네트워크를 제어하는 ​​한 검증은 신뢰할 수 있지만 공격자가 네트워크를 압도 할 경우 더 취약합니다. 네트워크 노드는 스스로 트랜잭션을 확인할 수 있지만 공격자가 계속해서 네트워크를 압도 할 수있는 한 단순화 된 방법은 공격자의 조작 된 트랜잭션에 속을 수 있습니다. 이를 방지하기위한 한 가지 전략은 네트워크 노드가 유효하지 않은 블록을 감지 할 때 경고를 수락하여 사용자의 소프트웨어가 전체 블록을 다운로드하도록하고 불일치를 확인하기 위해 트랜잭션을 경고하는 것입니다. 빈번한 지불을받는 기업은 더 독립적 인 보안과 더 빠른 검증을 위해 자체 노드를 실행하기를 원할 것입니다.

 

9. 값 결합 및 분할 코인을 개별적으로 처리하는 것이 가능할지라도 이체의 모든 센트에 대해 별도의 거래를하는 것은 다루기 어려울 것입니다. 가치를 분할하고 결합 할 수 있도록 트랜잭션에는 여러 입력 및 출력이 포함됩니다. 일반적으로 더 큰 이전 거래의 단일 입력 또는 더 작은 금액을 결합한 여러 입력, 그리고 최대 두 개의 출력이 있습니다. 하나는 지불 용이고 다른 하나는 변경 사항이있는 경우 송금인에게 반환합니다. 트랜잭션이 여러 트랜잭션에 의존하고 이러한 트랜잭션이 더 많은 트랜잭션에 의존하는 팬 아웃은 여기서 문제가되지 않는다는 점에 유의해야합니다. 트랜잭션 내역의 완전한 독립 실행 형 사본을 추출 할 필요가 없습니다.

 

10. 프라이버시 전통적인 뱅킹 모델은 정보에 대한 액세스를 관련 당사자 및 신뢰할 수있는 제 3 자에게 제한함으로써 개인 정보 보호 수준을 달성합니다. 모든 거래를 공개적으로 발표해야하는 필요성은이 방법을 배제하지만, 다른 곳에서 정보의 흐름을 차단하여 공개 키를 익명으로 유지함으로써 프라이버시를 유지할 수 있습니다. 대중은 누군가가 다른 사람에게 금액을 보내고 있지만 거래를 다른 사람과 연결하는 정보가 없음을 알 수 있습니다. 이것은 증권 거래소가 공개하는 정보의 수준과 유사합니다. 개별 거래의 시간과 규모 인 "테이프"가 공개되지만 당사자가 누구인지는 밝히지 않습니다. 추가 방화벽으로서 각 트랜잭션에 대해 새 키 쌍을 사용하여 공통 소유자에게 연결되지 않도록해야합니다. 일부 연결은 다중 입력 트랜잭션에서 여전히 피할 수 없으며, 이는 반드시 해당 입력이 동일한 소유자가 소유했음을 나타냅니다. 위험은 키 소유자가 공개되면 링크가 동일한 소유자에게 속한 다른 트랜잭션을 공개 할 수 있다는 것입니다.

11. 계산 우리는 공격자가 정직한 체인보다 더 빠르게 대체 체인을 생성하려는 시나리오를 고려합니다. 이것이 달성 되더라도 허공에서 가치를 창출하거나 공격자에게 결코 속하지 않은 돈을 가져 오는 것과 같은 임의의 변화에 ​​시스템을 개방하지 않습니다. 노드는 유효하지 않은 거래를 지불로 받아들이지 않을 것이며 정직한 노드는 그들을 포함하는 블록을 절대로 받아들이지 않을 것입니다. 공격자는 자신이 최근에 지출 한 돈을 되찾기 위해 자신의 거래 중 하나만 변경할 수 있습니다. 정직한 체인과 공격자 체인 사이의 경쟁은 이항 랜덤 워크로 특성화 될 수 있습니다. 성공 이벤트는 정직한 체인이 한 블록 씩 확장되어 리드가 +1 증가하는 것이고 실패 이벤트는 공격자의 체인이 한 블록 씩 확장되어 간격이 -1 감소하는 것입니다. 공격자가 주어진 적자를 따라 잡을 확률은 Gambler 's Ruin 문제와 유사합니다. 무제한 신용을 가진 도박꾼이 적자에서 시작하여 손익분기 점에 도달하기 위해 잠재적으로 무한한 횟수의 시도를한다고 가정합니다. 우리는 그가 손익분기 점에 도달하거나 공격자가 정직한 사슬을 따라 잡을 확률을 다음과 같이 계산할 수 있습니다 [8] :

 

피큐큐지=== 정직한 노드가 다음 블록을 찾을 확률 공격자가 다음 블록을 찾을 확률 공격자가 z 에서 따라 잡을 확률 뒤에 블록p= probability an honest node finds the next blockq= probability the attacker finds the next blockqz= probability the attacker will ever catch up from z blocks behind 큐지= {1( q/ p)지나는 fp ≤ q나는 fp > q}qz={1ifp≤q(q/p)zifp>q} 우리의 가정을 감안할 때 p > qp>q , 공격자가 따라 잡아야하는 블록 수가 증가함에 따라 확률은 기하 급수적으로 감소합니다. 그에게 불리한 상황에서 그가 운 좋은 돌진을 일찍하지 않으면 그가 더 뒤처 질수록 그의 기회는 사라집니다. 이제 새로운 거래의 수신자가 발신자가 거래를 변경할 수 없다는 것을 충분히 확신 할 때까지 기다려야하는 시간을 고려합니다. 우리는 보낸 사람이받는 사람이 자신이 얼마 동안 자신에게 돈을 지불했다고 믿게 만들려는 공격 자라고 가정하고, 일정 시간이 지나면 자신에게 반환하도록 전환합니다. 그런 일이 발생하면 수신자에게 경고를 보내지 만 발신자는 너무 늦기를 바랍니다. 수신자는 새 키 쌍을 생성하고 서명 직전에 발신자에게 공개 키를 제공합니다. 이것은 발신자가 충분히 앞서 갈 수있을만큼 운이 좋을 때까지 지속적으로 작업하고 그 순간에 트랜잭션을 실행함으로써 미리 블록 체인을 준비하는 것을 방지합니다. 거래가 전송되면 부정직 한 발신자는 거래의 대체 버전이 포함 된 병렬 체인에서 비밀리에 작업을 시작합니다. 수신자는 거래가 블록에 추가 될 때까지 기다립니다. 지z 그 뒤에 블록이 연결되었습니다. 그는 공격자가 수행 한 정확한 진행 정도를 알지 못하지만 정직한 블록이 블록 당 평균 예상 시간을 소요했다고 가정하면 공격자의 잠재적 인 진행은 예상 값이있는 포아송 분포가됩니다. λ = z큐피λ=zqp 공격자가 지금도 따라 잡을 수있는 확률을 얻기 위해, 우리는 그가 이룰 수있는 각 진행 정도에 대한 Poisson 밀도를 그 지점에서 따라 잡을 수있는 확률로 곱합니다.

 

∑k = 0∞λ케이이자형− λk !⋅ {( q/ p)( z− k )1나는 fk ≤ z나는 fk > z}∑k=0∞λke−λk!⋅{(q/p)(z−k)ifk≤z1ifk>z} 분포의 무한 꼬리를 합하지 않도록 재정렬 ... 1 −∑k = 0지λ케이이자형− λk !( 1 − ( q/ p)( z− k ))1−∑k=0zλke−λk!(1−(q/p)(z−k)) C 코드로 변환 중 ... #포함 double AttackerSuccessProbability (double q, int z) { 이중 p = 1.0-q; 이중 람다 = z * (q / p); 이중 합 = 1.0; int i, k; for (k = 0; k <= z; k ++) { 이중 포아송 = exp (-lambda); for (i = 1; i <= k; i ++) 포아송 * = 람다 / i; 합계-= 포아송 * (1-pow (q / p, z-k)); } 반환 합계; } 몇 가지 결과를 실행하면 확률이 기하 급수적으로 감소하는 것을 볼 수 있습니다. 지z . q = 0.1 z = 0 P = 1.0000000 z = 1 P = 0.2045873 z = 2 P = 0.0509779 z = 3 P = 0.0131722 z = 4 P = 0.0034552 z = 5 P = 0.0009137 z = 6 P = 0.0002428 z = 7 P = 0.0000647 z = 8 P = 0.0000173 z = 9 P = 0.0000046 z = 10 P = 0.0000012 q = 0.3 z = 0 P = 1.0000000 z = 5 P = 0.1773523 z = 10 P = 0.0416605 z = 15 P = 0.0101008 z = 20 P = 0.0024804 z = 25 P = 0.0006132 z = 30 P = 0.0001522 z = 35 P = 0.0000379 z = 40 P = 0.0000095 z = 45 P = 0.0000024 z = 50 P = 0.0000006 P가 0.1 % 미만인 경우 ... P <0.001 q = 0.10 z = 5 q = 0.15 z = 8 q = 0.20 z = 11 q = 0.25 z = 15 q = 0.30 z = 24 q = 0.35 z = 41 q = 0.40 z = 89 q = 0.45 z = 340

 

12. 결론 우리는 신뢰에 의존하지 않는 전자 거래 시스템을 제안했습니다. 우리는 소유권에 대한 강력한 제어를 제공하지만 이중 지출을 방지 할 수있는 방법 없이는 불완전한 디지털 서명으로 만든 일반적인 프레임 워크로 시작했습니다. 이를 해결하기 위해 우리는 작업 증명을 사용하는 P2P 네트워크를 제안하여 정직한 노드가 CPU 성능의 대부분을 제어하는 ​​경우 공격자가 빠르게 변경하기 위해 계산적으로 비현실적인 트랜잭션의 공개 기록을 기록했습니다. 네트워크는 구조화되지 않은 단순성으로 견고합니다. 노드는 거의 조정없이 한 번에 모두 작동합니다. 메시지는 특정 위치로 라우팅되지 않고 최선의 노력으로 만 전달되어야하므로 식별 할 필요가 없습니다. 노드는 마음대로 네트워크를 떠났다가 다시 참여할 수 있습니다. 그들이 사라진 동안 일어난 일의 증거로 작업 증명 체인을 받아들이는 것. 그들은 CPU 파워로 투표하고, 확장 작업을함으로써 유효한 블록에 대한 수락을 표현하고, 작업을 거부함으로써 유효하지 않은 블록을 거부합니다. 이 합의 메커니즘을 통해 필요한 규칙과 인센티브를 시행 할 수 있습니다.

 

https://nakamotoinstitute.org/bitcoin/

 

Bitcoin: A Peer-to-Peer Electronic Cash System | Satoshi Nakamoto Institute

Bitcoin: A Peer-to-Peer Electronic Cash System Satoshi Nakamoto October 31, 2008 A purely peer-to-peer version of electronic cash would allow online payments to be sent directly from one party to another without going through a financial institution. Digit

nakamotoinstitute.org

 

Bitcoin: A Peer-to-Peer Electronic Cash System | Satoshi Nakamoto Institute Bitcoin: A Peer-to-Peer Electronic Cash System Satoshi Nakamoto October 31, 2008 Abstract A purely peer-to-peer version of electronic cash would allow online payments to be sent directly from one party to another without going through a financial institution. Digital signatures provide part of the ... nakamotoinstitute.org 원서를 함께 보세요

댓글