"저장증명"의 두 판 사이의 차이
잔글 (→등장배경) |
|||
(사용자 2명의 중간 판 5개는 보이지 않습니다) | |||
4번째 줄: | 4번째 줄: | ||
==개요== | ==개요== | ||
− | |||
저장증명은 두 가지 단계로 구성된 [[프로토콜]]이다. 초기화 단계에서 증명자 A는 데이터의 크기가 N인 데이터 D를 자신의 하드디스크에 저장하고, 검증자 B는 아주 작은 조각의 정보만 가지고 있게 된다. 이후 증명실행 단계에서 검증자 B는 해당 데이터에 대해 승인 또는 거절할 수 있다.<ref>Keda Che, 〈[https://ulabs.tech/images/Universal-Labs-WhitePaper.pdf Universal Labs White Paper V.1.3 (Draft)]〉, 2018-05-25</ref> 검증자 B가 해당 데이터에 대해 승인하는 경우, 그 대가로 [[암호화폐]]가 보상으로 지급된다. 데이터의 소유권을 등록하려면 먼저 해당 디지털 자산이 유효하다는 것을 입증해야 한다. 다음으로 소유권이 소유자의 신원과 함께 확인되어야 한다. 그리고 자산은 의심의 여지가 없어야 한다. | 저장증명은 두 가지 단계로 구성된 [[프로토콜]]이다. 초기화 단계에서 증명자 A는 데이터의 크기가 N인 데이터 D를 자신의 하드디스크에 저장하고, 검증자 B는 아주 작은 조각의 정보만 가지고 있게 된다. 이후 증명실행 단계에서 검증자 B는 해당 데이터에 대해 승인 또는 거절할 수 있다.<ref>Keda Che, 〈[https://ulabs.tech/images/Universal-Labs-WhitePaper.pdf Universal Labs White Paper V.1.3 (Draft)]〉, 2018-05-25</ref> 검증자 B가 해당 데이터에 대해 승인하는 경우, 그 대가로 [[암호화폐]]가 보상으로 지급된다. 데이터의 소유권을 등록하려면 먼저 해당 디지털 자산이 유효하다는 것을 입증해야 한다. 다음으로 소유권이 소유자의 신원과 함께 확인되어야 한다. 그리고 자산은 의심의 여지가 없어야 한다. | ||
18번째 줄: | 17번째 줄: | ||
논문의 핵심은, 서버가 M을 모르는 상태에서 Hash(M∥C)를 추측할 수는 없으므로, 서버가 M을 온전하게 저장하지도 않고 마치 저장한 척 클라이언트를 속일 수 없다는 것이다. 그러나 여기에는 함정이 있다. 현실적으로 해시는 입력을 [[블록]] 단위로 처리하면서 각 블록 사이의 중간 연쇄 값을 계산하는 반복 해시 함수일 것이다. 예를 들어 해시가 SHA-256이고, M이 512비트라고 하면 서버는 클라이언트를 속일 수 있다. 어떻게 그럴까? 서버는 M의 첫 512비트 블록 M₁과 SHA-256의 초기치 H₀을 이용해서 연쇄값 H₁=Compress(H₀, M₁)을 계산한다. 그런 다음에는 그 H₁을 메모리에 저장하고, M 자체는 폐기해 버린다. 그러면 서버는 더 이상 M을 저장한 상태가 아니다.<ref name="장필리프 오마송">장필리프 오마송, 〈[https://play.google.com/store/books/details?id=nNRmDwAAQBAJ&rdid=book-nNRmDwAAQBAJ&rdot=1&source=gbs_vpt_read&pcampaignid=books_booksearch_viewport 처음 배우는 암호화: 기초 수학부터 양자 컴퓨터 이후까지, 암호하그이 현재와 미래]〉, 《구글도서》, 2018-07-31</ref> | 논문의 핵심은, 서버가 M을 모르는 상태에서 Hash(M∥C)를 추측할 수는 없으므로, 서버가 M을 온전하게 저장하지도 않고 마치 저장한 척 클라이언트를 속일 수 없다는 것이다. 그러나 여기에는 함정이 있다. 현실적으로 해시는 입력을 [[블록]] 단위로 처리하면서 각 블록 사이의 중간 연쇄 값을 계산하는 반복 해시 함수일 것이다. 예를 들어 해시가 SHA-256이고, M이 512비트라고 하면 서버는 클라이언트를 속일 수 있다. 어떻게 그럴까? 서버는 M의 첫 512비트 블록 M₁과 SHA-256의 초기치 H₀을 이용해서 연쇄값 H₁=Compress(H₀, M₁)을 계산한다. 그런 다음에는 그 H₁을 메모리에 저장하고, M 자체는 폐기해 버린다. 그러면 서버는 더 이상 M을 저장한 상태가 아니다.<ref name="장필리프 오마송">장필리프 오마송, 〈[https://play.google.com/store/books/details?id=nNRmDwAAQBAJ&rdid=book-nNRmDwAAQBAJ&rdot=1&source=gbs_vpt_read&pcampaignid=books_booksearch_viewport 처음 배우는 암호화: 기초 수학부터 양자 컴퓨터 이후까지, 암호하그이 현재와 미래]〉, 《구글도서》, 2018-07-31</ref> | ||
− | 클라이언트가 무작위 시도값 C를 보내면 서버는 C를 적절히 채워서 완전한 블록을 만든 후 Compress(H₁, C)를 계산하고, 그것을 Hash(M∥C)의 결과로서 클라이언트에게 보낸다. 클라이언트는 이를 믿을 수밖에 없다. 서버가 보낸 것이 실제로 Hash(M∥C)의 정확한 값이기 때문이다. 따라서 클라이언트는 서버가 자신의 파일을 잘 저장하고 | + | 클라이언트가 무작위 시도값 C를 보내면 서버는 C를 적절히 채워서 완전한 블록을 만든 후 Compress(H₁, C)를 계산하고, 그것을 Hash(M∥C)의 결과로서 클라이언트에게 보낸다. 클라이언트는 이를 믿을 수밖에 없다. 서버가 보낸 것이 실제로 Hash(M∥C)의 정확한 값이기 때문이다. 따라서 클라이언트는 서버가 자신의 파일을 잘 저장하고 있다고 믿게 된다. 그러나 앞에서 언급했듯이 서버는 파일을 이미 폐기해 버렸을 수 있다. 이 요령은 SHA-1과 SHA-2뿐만 아니라 SHA-3과 BLAKF2에도 통한다. 해결책은 간단하다. Hash(M∥C)가 아니라 Hash(C∥M)을 맞추어 보도록 프로토콜을 수정하면 된다.<ref name="장필리프 오마송"></ref> |
== 특징 == | == 특징 == | ||
− | *하드디스크 저장장치를 이용해 증명자와 검증자의 역할을 나뉘어 검증하는 방식을 말하며 | + | * 하드디스크 저장장치를 이용해 증명자와 검증자의 역할을 나뉘어 검증하는 방식을 말하며 [[공간증명]]이라고도 불린다. |
− | + | * 증명자는 하드디스크에 데이터를 저장 하면 검증자에게 소량의 데이터가 주어진다. | |
− | *증명자는 하드디스크에 데이터를 저장 하면 검증자에게 소량의 데이터가 주어진다. | + | * 이 때 검증자는 하드디스크의 데이터를 승인유무를 결정할 수 있고 이를 통해 토큰을 획득할 수 있다. |
− | + | * 주로 클라우드 시스템에 적용되며 서버와 클라인언트간의 데이터 검증시 사용하게 된다. | |
− | *이 때 검증자는 하드디스크의 데이터를 승인유무를 결정할 수 있고 이를 통해 토큰을 획득할 수 있다. | + | * 저장증명을 사용하는 암호화폐로는 [[유토큰]](YOU Token)이 있다.<ref>장석만, 〈[https://www.a-ha.io/questions/47f01d675d6178cfbfaae92692449a72 Q. 저장증명 (Proof of Storage)합의 알고리즘에 대해 궁금합니다.]〉, 《아하 지식인》, 2019-08-03</ref> |
− | |||
− | *주로 클라우드 시스템에 적용되며 서버와 클라인언트간의 데이터 검증시 사용하게 된다. | ||
− | |||
− | *저장증명을 사용하는 | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
{{각주}} | {{각주}} | ||
45번째 줄: | 32번째 줄: | ||
* 히주, 〈[https://blog.naver.com/rlagmlwn1013/221473677194 (암호 스터디 #6)해시 함수]〉, 《네이버 블로그》, 2019-02-24 | * 히주, 〈[https://blog.naver.com/rlagmlwn1013/221473677194 (암호 스터디 #6)해시 함수]〉, 《네이버 블로그》, 2019-02-24 | ||
* 장필리프 오마송, 〈[https://play.google.com/store/books/details?id=nNRmDwAAQBAJ&rdid=book-nNRmDwAAQBAJ&rdot=1&source=gbs_vpt_read&pcampaignid=books_booksearch_viewport 처음 배우는 암호화: 기초 수학부터 양자 컴퓨터 이후까지, 암호학의 현재와 미래]〉, 《구글도서》, 2018-07-31 | * 장필리프 오마송, 〈[https://play.google.com/store/books/details?id=nNRmDwAAQBAJ&rdid=book-nNRmDwAAQBAJ&rdot=1&source=gbs_vpt_read&pcampaignid=books_booksearch_viewport 처음 배우는 암호화: 기초 수학부터 양자 컴퓨터 이후까지, 암호학의 현재와 미래]〉, 《구글도서》, 2018-07-31 | ||
+ | * 장석만, 〈[https://www.a-ha.io/questions/47f01d675d6178cfbfaae92692449a72 Q. 저장증명 (Proof of Storage)합의 알고리즘에 대해 궁금합니다.]〉, 《아하 지식인》, 2019-08-03 | ||
== 같이 보기 == | == 같이 보기 == | ||
51번째 줄: | 39번째 줄: | ||
* [[유토큰]] | * [[유토큰]] | ||
− | {{합의 알고리즘| | + | {{합의 알고리즘|검토 필요}} |
2020년 4월 24일 (금) 09:14 기준 최신판
저장증명(PoS; Proof of Storage)이란 증명자(prover)가 자신의 하드디스크 여유 공간에 데이터를 저장하고, 검증자(verifier)가 그것을 승인 또는 거절하는 방식으로 작동하는 합의 알고리즘이다. 이런 점에서 저장증명은 공간증명(Proof of Space)이라고도 한다. 저장증명은 용량증명 합의 알고리즘과 유사하다. 저장증명 합의 알고리즘을 채택한 암호화폐에는 유토큰(YOU token)이 있다.
개요[편집]
저장증명은 두 가지 단계로 구성된 프로토콜이다. 초기화 단계에서 증명자 A는 데이터의 크기가 N인 데이터 D를 자신의 하드디스크에 저장하고, 검증자 B는 아주 작은 조각의 정보만 가지고 있게 된다. 이후 증명실행 단계에서 검증자 B는 해당 데이터에 대해 승인 또는 거절할 수 있다.[1] 검증자 B가 해당 데이터에 대해 승인하는 경우, 그 대가로 암호화폐가 보상으로 지급된다. 데이터의 소유권을 등록하려면 먼저 해당 디지털 자산이 유효하다는 것을 입증해야 한다. 다음으로 소유권이 소유자의 신원과 함께 확인되어야 한다. 그리고 자산은 의심의 여지가 없어야 한다.
등장배경[편집]
클라우드 컴퓨팅 응용 프로그램들은 저장증명 프로토콜, 즉 클라이언트가 저장해달라고 요청한 파일을 서버가 실제로 저장했음을 증명하는 데 쓰이는 프로토콜 안에서 해시 함수를 사용해왔다.[2]
2007년 라마크리슈나 콜타(Ramakrishna Kotla)와 로렌초 알비시(Lorenzo Alvisi), 마이크 달린(Mike Dahlin)이 “SafeStore : A Durable and Practical Storage”라는 논문을 통해 어떤 파일 M의 저장 사실을 증명하는 다음과 같은 저장증명 프로토콜을 제안했다.
- 클라이언트는 어떤 난수 값 C를 선택한다. 이 값을 시도(challenge)라고 부른다.
- 서버는 그에 대한 응답(response)으로 Hash(M∥C)를 계산해서 클라이언트에게 보낸다.
- 클라이언트도 Hash(M∥C)를 계산해서 그것이 서버가 보낸 응답값과 일치하는지 확인한다.[2]
논문의 핵심은, 서버가 M을 모르는 상태에서 Hash(M∥C)를 추측할 수는 없으므로, 서버가 M을 온전하게 저장하지도 않고 마치 저장한 척 클라이언트를 속일 수 없다는 것이다. 그러나 여기에는 함정이 있다. 현실적으로 해시는 입력을 블록 단위로 처리하면서 각 블록 사이의 중간 연쇄 값을 계산하는 반복 해시 함수일 것이다. 예를 들어 해시가 SHA-256이고, M이 512비트라고 하면 서버는 클라이언트를 속일 수 있다. 어떻게 그럴까? 서버는 M의 첫 512비트 블록 M₁과 SHA-256의 초기치 H₀을 이용해서 연쇄값 H₁=Compress(H₀, M₁)을 계산한다. 그런 다음에는 그 H₁을 메모리에 저장하고, M 자체는 폐기해 버린다. 그러면 서버는 더 이상 M을 저장한 상태가 아니다.[3]
클라이언트가 무작위 시도값 C를 보내면 서버는 C를 적절히 채워서 완전한 블록을 만든 후 Compress(H₁, C)를 계산하고, 그것을 Hash(M∥C)의 결과로서 클라이언트에게 보낸다. 클라이언트는 이를 믿을 수밖에 없다. 서버가 보낸 것이 실제로 Hash(M∥C)의 정확한 값이기 때문이다. 따라서 클라이언트는 서버가 자신의 파일을 잘 저장하고 있다고 믿게 된다. 그러나 앞에서 언급했듯이 서버는 파일을 이미 폐기해 버렸을 수 있다. 이 요령은 SHA-1과 SHA-2뿐만 아니라 SHA-3과 BLAKF2에도 통한다. 해결책은 간단하다. Hash(M∥C)가 아니라 Hash(C∥M)을 맞추어 보도록 프로토콜을 수정하면 된다.[3]
특징[편집]
- 하드디스크 저장장치를 이용해 증명자와 검증자의 역할을 나뉘어 검증하는 방식을 말하며 공간증명이라고도 불린다.
- 증명자는 하드디스크에 데이터를 저장 하면 검증자에게 소량의 데이터가 주어진다.
- 이 때 검증자는 하드디스크의 데이터를 승인유무를 결정할 수 있고 이를 통해 토큰을 획득할 수 있다.
- 주로 클라우드 시스템에 적용되며 서버와 클라인언트간의 데이터 검증시 사용하게 된다.
- 저장증명을 사용하는 암호화폐로는 유토큰(YOU Token)이 있다.[4]
각주[편집]
- ↑ Keda Che, 〈Universal Labs White Paper V.1.3 (Draft)〉, 2018-05-25
- ↑ 2.0 2.1 히주, 〈(암호 스터디 #6)해시 함수〉, 《네이버 블로그》, 2019-02-24
- ↑ 3.0 3.1 장필리프 오마송, 〈처음 배우는 암호화: 기초 수학부터 양자 컴퓨터 이후까지, 암호하그이 현재와 미래〉, 《구글도서》, 2018-07-31
- ↑ 장석만, 〈Q. 저장증명 (Proof of Storage)합의 알고리즘에 대해 궁금합니다.〉, 《아하 지식인》, 2019-08-03
참고자료[편집]
- Keda Che, "Universal Labs White Paper V.1.3 (Draft)", 2018-05-25
- 히주, 〈(암호 스터디 #6)해시 함수〉, 《네이버 블로그》, 2019-02-24
- 장필리프 오마송, 〈처음 배우는 암호화: 기초 수학부터 양자 컴퓨터 이후까지, 암호학의 현재와 미래〉, 《구글도서》, 2018-07-31
- 장석만, 〈Q. 저장증명 (Proof of Storage)합의 알고리즘에 대해 궁금합니다.〉, 《아하 지식인》, 2019-08-03
같이 보기[편집]