전화로 "가위바위보"플레이 방법

이번 포스트에서는 전화로 RPS(Rock-Paper-Scissors)를 플레이하는 방법을 알아봅니다! 그것이 무엇을 의미합니까?

글쎄, 원래 게임은 얼굴을 맞대고 진행되며 "일부 신체 언어 프로토콜"이 사용되어 두 플레이어가 동시에 이동을 수행합니다. 그렇지 않으면 단순히 반격하는 동작을 할 것이기 때문에 이러한 방식으로 동작을 수행하는 것이 중요합니다.

반면에 전화로 플레이하면 동작을 동시에 플레이하기가 정말 어렵습니다. 이 게시물에서 우리는 동시에 플레이할 필요가 없는 방식으로 암호화가 게임을 가능하게 만드는 방법을 볼 것입니다.

해시 함수



한동안 컴퓨터 과학에 대해 읽었다면 해시 함수에 대해 들어봤을 것입니다. 그들은 다양한 일에 절대적으로 유용합니다! 매우 요약된 방식으로 여기에 대해 알아야 할 사항이 있습니다.
  • 임의의 긴 입력을 받아 고정 길이 출력을 생성합니다. 출력을 다이제스트라고 합니다.
  • 동일한 입력은 항상 동일한 출력을 생성합니다.
  • 출력만 보고 입력을 학습하는 것은 거의 불가능합니다.

  • 다양한 효율성, 계산 영역 및 출력 길이를 가진 다양한 해시 함수 구현이 있습니다. 우리의 경우 SHA256을 사용하겠습니다. this one 과 같이 해시를 계산할 수 있는 많은 도구를 온라인에서 찾을 수 있습니다.

    "i like turtles"의 해시를 계산해 봅시다. 가서 SHA-256 함수에 대한 입력으로 입력하면 다음을 얻을 수 있습니다.

    47f0c23ae1cc6ce8ccfe96b73a70fb45192750523a15e2c9dc14fa98d7e8264e
    


    이 출력이 주어지면 입력이 "나는 거북이를 좋아합니다"라는 것을 모를 것입니다! 즉, 누군가가 입력을 다이제스트에 매핑하는 테이블을 가지고 있고 해당 입력을 찾기 위해 해당 테이블에서 이 출력을 검색하지만 그것은 또 다른 이야기입니다.

    게임하기



    해시 값을 사용하면 암호학적으로 증명 가능한 방식으로 어떤 값을 커밋할 수 있습니다.
  • 나만 아는 입력에 대해 출력을 생성할 수 있습니다.
  • 다른 사용자는 입력에 대해 학습하지 않고 이 출력에 대해 학습할 수 있습니다.
  • 요청을 받으면 입력 내용을 알려주면 해싱하여 출력 내용을 확인할 수 있습니다.

  • 이제 게임 방법은 다음과 같습니다.
  • 두 플레이어 모두 rock , paper 또는 scissors 중 하나를 선택합니다. 그들이 스스로 rockpaper를 연주했다고 가정 해 봅시다.
  • 두 플레이어 모두 267119와 같이 임의의 숫자를 선택합니다.

  • 두 플레이어 모두 다음 입력을 해시합니다: move || number . 여기서 ||는 연결하다라는 뜻입니다. 따라서 첫 번째 플레이어는 해시rock267하고 다른 플레이어는 해시paper119합니다. 해당 출력은 다음과 같습니다.

  • rock267: 0f9eb01fbb667692cb15001ec9649dea8f26b8b3bacc28d25fc06100e8578892

  • paper119: a9b85af4472c66c928465c6db5ebc8252dcf340876b5c941af298b068b6c00da

  • 이 시점까지 두 플레이어는 입력 내에서 사용된 임의의 숫자를 알지 못하기 때문에 이동이 무엇인지 알지 못합니다. rock 또는 paper만 해시하는 경우 사전 계산을 통해 다이제스트를 알 수 있습니다. 이제 그들은 자신의 움직임과 숫자를 말할 수 있습니다.
  • 플레이어는 해당 동작과 숫자를 다시 해싱하여 받은 해시를 확인합니다. et viola, 그들은 방금 가위 바위 보를 비동기식으로 연주했습니다.



  • 이 게시물은 Manuel Blum의 논문Coin flipping by telephone에서 영감을 받았습니다.

    좋은 웹페이지 즐겨찾기