37
\$\begingroup\$

In a play-by-post game that requires a player to commit to a secret decision and later reveal that decision publicly, how can a player certify that they did so honestly without relying on good faith?

Consider the following game scenario.

  1. Alice commits to a decision, like pre-programming an action she will take. An onlooker might notice she's doing something but they wouldn't know the particulars.
  2. Though Bob doesn't know exactly what Alice is up to, he commits to a decision in response to that, like reacting to stop her. Resolving his decision will depend on resolving her decision.
  3. Alice has to reveal what her committed decision was after the fact in order to resolve it at this point along with Bob's reaction to it. If she's being honest or has a way to certify what her decision was, this is fine. If she is able to lie, she could change her decision retroactively.

Are there common tools, techniques, or conventions to support this? At a table, Alice could simply write her decision in a folded note card and reveal it later; or in a board game, she could play her action card face down and reveal it later. These common table conventions don't translate well to online play. So, how can Alice certify her secret decision to be revealed on a delay?

Assume the following about the game, its rules, and the players:

  • The system is not freeform. It has rules that match the scenario given above.

  • Even if the players know and trust each other, they still need (or want) a way to certify their decisions without relying on good faith.

  • The gamemaster might also be a player (possibly even an adversarial one) and is not exempt from the need (or want) of a way to certify their decisions without relying on good faith.

\$\endgroup\$
  • 3
    \$\begingroup\$ As a useful practical example where the described scenario would crop up, combat in Mouse Guard (and presumably other Burning Wheel system games) is resolved with the GM and players each secretly deciding on three actions before revealing them all at once and resolving the round of combat \$\endgroup\$ – Pingcode Nov 23 '18 at 8:48
  • 3
    \$\begingroup\$ @Pingcode That’s a great example too of a mechanic where even a trusted GM still should not be seeing the message ahead of time. (For the unfamiliar: Mouse Guard combat is centrally about attempting to predict the opposition’s secretly-recorded maneuvers, which makes it impossible to disregard knowing that information ahead of your own choices.) I wouldn’t want the additional burden of trying to ignore full knowledge while trying to play my side of MG’s fog-of-war combat fairly. \$\endgroup\$ – SevenSidedDie Nov 25 '18 at 18:06
  • 1
    \$\begingroup\$ I asked the question in a game-agnostic fashion because I wanted RPG.SE's expertise, but in full disclosure the game I'm playing is Tragedy Looper, which is a 1 (gamemaster) vs 3 (other players) deduction board game. Many answers and comments on those answers seem to be telling me that I'm guilty of playing a badwrongfun game, but the scenario I have described in my question is simply how some games work, and the need for decision certification doesn't go away because that scenario is unconventional. \$\endgroup\$ – Bloodcinder Nov 26 '18 at 13:10
  • \$\begingroup\$ In fact, I'm playing with a group of close friends, and there's plenty of trust to go around. One can still desire a way to certify their own honesty even when one's honesty isn't suspect. \$\endgroup\$ – Bloodcinder Nov 26 '18 at 13:15
  • \$\begingroup\$ Not that people should insinuate that you shouldn't play such a game regardless... But this really is why it helps to specify the game system you're playing in your post. Answers don't necessarily have to be specific to that one system, but at the least you'll ideally weed out the people providing answers that don't work in that system. \$\endgroup\$ – V2Blast Nov 27 '18 at 0:55
129
\$\begingroup\$

Have Alice generate and publish an SHA-256 hash of her action.

SHA-256 is a computationally-secure (to reasonable approximation) algorithm that converts a given string into an unintelligible hexadecimal hash. There are online implementations that will compute SHA256 for you, for instance, here.

The idea is this:

  1. Alice decides her action - say, "I cast Fireball at Bob"
  2. Alice privately records that exact text
  3. Alice enters that text into an SHA256 generator, producing a meaningless jumble of characters - A0FC4543FDBA266006F1F9FA818183710A8C5CA80613DA109B8A9DBA194DEC4E
  4. Alice publicly announces "I've planned an action; its SHA-256 is A0FC4543FDBA266006F1F9FA818183710A8C5CA80613DA109B8A9DBA194DEC4E"

Now, Bob cannot tell what Alice has planned because the SHA-256 is not reversible; there's no way to get from the hash back to the action.

Later, when Alice reveals her plan, she gives the exact text she prepared earlier. If Bob doesn't trust her, he can simply repeat the SHA-256 encryption, and verify that the signatures match.

If Alice suspects that Bob may guess her action, then she can make things harder by adding an extra, irrelevant component to the action before computing the SHA-256. For instance, if Alice records, signs, and later reveals "I cast Fireball at Bob (pistachio)", then Bob would not be able to guess and verify the action without also guessing the extra "(pistachio)". This is known as using a "nonce".

\$\endgroup\$
  • \$\begingroup\$ Comments are not for extended discussion; this conversation has been moved to chat. \$\endgroup\$ – SevenSidedDie Nov 23 '18 at 15:48
  • 1
    \$\begingroup\$ If play by post refers to literal post, then this isn't a great answer. Typing a SHA into a computer from a piece of paper would be painful. If by e-mail, a password protected zip would be significantly faster and simpler. \$\endgroup\$ – NibblyPig Nov 26 '18 at 11:10
  • \$\begingroup\$ If playing by actual post, you wouldn't need to type the SHA in. Alice creates the SHA, adds it to her document, prints it out, mails it to Bob, who keeps it. Later, Alice declares what her action was, prints it out, mails it to Bob, who types the English text of the action into a SHA tool and verifies by sights that the hashes match. \$\endgroup\$ – Chowlett Nov 26 '18 at 11:46
  • \$\begingroup\$ However, @SLC, a password-protected zip is an excellent idea. Why don't you add that as an answer yourself? \$\endgroup\$ – Chowlett Nov 26 '18 at 11:47
  • \$\begingroup\$ Fair point. Someone already mentioned a zip further down in an answer so I didn't want to duplicate it, my comment was just to point out the difficulties of using a SHA. You've mitigated it somewhat but you'd have to type the message exactly for the SHA to match which could be tricky if it's a long amount of text and contains punctuation. \$\endgroup\$ – NibblyPig Nov 26 '18 at 14:01
12
\$\begingroup\$

Send the decisions to a trusted third party.

When the time comes to reveal the action, the third party will then do so.

This has the advantage of being simple and doesn't require any technological know-how.

\$\endgroup\$
  • 5
    \$\begingroup\$ It's not simple at all, as it adds an extra communication channel for every player in the game, and replaces technological know-how with social know-how instead, something that is far less reliable. These are disadvantages! \$\endgroup\$ – Nij Nov 22 '18 at 19:27
  • 2
    \$\begingroup\$ This seems to count as "just relying on good faith." \$\endgroup\$ – Bloodcinder Nov 22 '18 at 19:47
  • 7
    \$\begingroup\$ @Nij it is simple in the fact that a high percentage of people can actually accomplish this. The problem with bring encryption schemes, etc into the picture is that few non-technical people will understand how to deal with these things. \$\endgroup\$ – Destruktor Nov 23 '18 at 5:43
  • 1
    \$\begingroup\$ @Bloodcinder: If you don't trust the GM, there are much bigger issues in your game. \$\endgroup\$ – Matthieu M. Nov 24 '18 at 19:07
  • 2
    \$\begingroup\$ @MatthieuM. As addressed in comments on other answers, there are games in which the GM is also an adversarial player. In fact, in my situation, I am the GM and also an adversarial player and everyone does trust me, yet I still want a means of certifying my decisions. \$\endgroup\$ – Bloodcinder Nov 24 '18 at 19:33
9
\$\begingroup\$

Use a communication system like facebook that allows you to set up visibility on each post.

Post a publicly visible post saying

Alice glances at her spell book then gestures, ready to begin casting a spell.

Post a private post saying

If X happens Alice will cast fireball at Y

If the trigger happens change the privacy of the post to public.

The timestamp and edit history should be able to show that the post has not been modified other than to change the visibility.

As V2Blast pointed out and Zac offered a solution to the public post should link to the private post to prove that it's the same post and you didn't post multiple hidden posts.

If you have a DM or similar in the game then you could also give them access to the private posts for their information.

\$\endgroup\$
  • 12
    \$\begingroup\$ The potential issue with this is that you could just make multiple private posts with different courses of action, and just make public the one that you decide on after the fact. \$\endgroup\$ – V2Blast Nov 22 '18 at 22:15
  • 12
    \$\begingroup\$ @V2Blast not if you provide a link to the (currently) private post in advance - if Facebook works correctly, it shouldn't reveal the post to others until it's made public, but the url won't change \$\endgroup\$ – Zac Faragher Nov 23 '18 at 0:13
  • \$\begingroup\$ @ZacFaragher: Ah, interesting idea. \$\endgroup\$ – V2Blast Nov 23 '18 at 2:49
8
\$\begingroup\$

A simple resource for exactly this kind of thing is http://onetimesecret.com. It allows you to create a "secret" and publish the link to it, but once the secret has been viewed once, it is deleted, and cannot be viewed again.

Alice enters her secret, and sends the hyperlink to Bob, but tells him not to look at it yet. Bob publicly declares his course of action, then looks at Alice's onetimesecret post. Alice can check the time at which her secret was viewed, to verify that it was after Bob's public declaration.

This way, Alice can't lie about her decision, but Bob won't know what it was until after he declares his course of action.

(Note: I am not affiliated in any way with onetimesecret.com. I just find it a useful resource.)

\$\endgroup\$
5
\$\begingroup\$

An alternative to hash commitment that requires less technical knowhow: do what scientists used to do to establish priority for an idea until they were ready to publish. Instead of a SHA, publish a signature that is easily derived from the message by a human but can't be easily reversed.

One simple "signature" is just to show how many times each letter appears in the message, but not their order. Then when it's time to reveal, it's easy to verify. So Alice can sign the message

I betray Bob

as

ABBBEIORTY

One obvious problem is that for such a short, straightforward message, Bob can probably guess what is meant: there are a lot of Bs and one O, so it's probably about him. He can also rule out some possibilities he's worried about: the message clearly can't include fireball, because there's no F; but it could include betray.

Alice can prevent this by speaking somewhat more cryptically or using a few more words than necessary. If Alice publishes

AAABDDDDEEEEEFGGGHHHHHHIIIIIILLLLMMNOOOOOORRRRRSSTTTTTTTUUUWW

it's hard to guess that she means

Though allied with Robert, I grow tired of him and sell him out to the guards.

Just for fun, note that this message does leave open the possibility of a fireball (because it contains all of the letters in "FIREBALL"), in case Alice thinks that's something Bob would want to rule out.

\$\endgroup\$
  • 9
    \$\begingroup\$ This is essentially re-implementing cryptography, except without tooling or the security. If Alice is good with words, she can with relative ease craft 2, or more, sentences using exactly the same set of letters, and decide on the fly which to "reveal". \$\endgroup\$ – Matthieu M. Nov 24 '18 at 19:09
  • 2
    \$\begingroup\$ The answer could be improved by noting something about its practical application: How big can the phrase get before you’ve found this to be unwieldy during games? \$\endgroup\$ – SevenSidedDie Nov 25 '18 at 18:00
  • \$\begingroup\$ This simplistic 'hash' also comes with the downside of not having any tool support... while googling "SHA generator" will yield hundreds of results all readily available in your browser. \$\endgroup\$ – fgysin reinstate Monica Nov 27 '18 at 9:46
4
\$\begingroup\$

Trust

This one isn't always appropriate - but if you play with a constant group of friends, then simply trusting that they are being honest is the way I usually play games. This works for me, because I don't generally play with randoms or at events outside of home.

Obviously this won't always work - not everyone has the required integrity to resist the urge to cheat. But if you're playing a longer campaign with a consistent group, you'll learn pretty quickly using this method whether it's actually viable.

If not, then the other methods mentioned above are steller. However, as far as simplicity and ease to implement is concerned, this is by far the easiest.

\$\endgroup\$
4
\$\begingroup\$

I agree that some sort of cryptography is the best, but I also understand that this could be daunting for people who are not much into tech.

Here is a (hopefully) simpler way to accomplish the same.

I write a short note describing my decision. Zip it WITH A PASSWORD (see https://community.sophos.com/kb/en-us/11489) and send the zipped file as an attachment to my email to each and every other participant.

When it is time to reveal my decision, I send out the pwd. Everyone can unzip and read what I wrote.

Note: if this is a common practice (i.e. everyone has to send out lots of "secret" messages) you better do some bookkeeping. I.e. prepare a spreadsheet or a note where you write the pwd and a short description (or maybe just date) of the encrypted message. So whe it is time to reveal "what did you do while alone in the purple cavern" or "what was in the note you sent out on May 15th" you can go check your list and provide the appropriate pwd.

\$\endgroup\$
2
\$\begingroup\$

This problem was already solved in the past. As exibit A, I would introduce the game "Diplomacy" which had a prolific history of play by post. In this game, 7 players needs to coordinate (and betray) each other constantly to progress the game. There are of course direct communications between players, but any move must be committed and sent to a third party "referee". The referee would receive the moves, execute and resolve them appropriately, and then publish the outcome in a public channel (usually, a magazine, plus direct paper mail to each player.)

The only requirement here is trust with the game organizer. But why would you play if you can't trust at least the organizer?

\$\endgroup\$
  • 1
    \$\begingroup\$ "... why would you play if you can't trust at least the organizer?" - probably because they don't have an external organizer, and players run it collectively. \$\endgroup\$ – Nij Nov 23 '18 at 21:28
  • 2
    \$\begingroup\$ In my particular game, the gamemaster is also an adversarial player. This solution expects that the GM can be trusted on good faith, but that violates the premise of the question. \$\endgroup\$ – Bloodcinder Nov 23 '18 at 23:35
  • 1
    \$\begingroup\$ @bloodcinder no it does not, he doesn’t say the player/GM has to be the organizer/referee. \$\endgroup\$ – mxyzplk - Justice for Monica Nov 24 '18 at 5:46
  • 1
    \$\begingroup\$ The question completely forbids good faith as a helpful solution, regardless of how pedantic you get about the name for who is trusted. \$\endgroup\$ – Bloodcinder Nov 24 '18 at 15:09
  • \$\begingroup\$ @Bloodcinder I wouldn't play under these circumstances. But I'm quite peculiar, I very rarely (if ever) play with only complete strangers. \$\endgroup\$ – STT LCU Nov 26 '18 at 8:22

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.