Skip to content

To Encrypt or Not to Encrypt

Aizistral edited this page Oct 6, 2022 · 4 revisions

As of release 1.19.2-v1.13.0 No Chat Report offers new client-sided feature - chat encryption. You can encrypt messages you exchange with other people using a secret key, preventing eavesdropping and effectively alleviating the danger of chat reporting.

How to use

Encryption can be configured by right-clicking on the button No Chat Reports adds in the right corner of the chat screen: image

When you do so for the first time, you will be greeted by a screen like this:

Clicking "Proceed" will bring you to the configuration screen itself:

Let's break down what each element of it does:

  1. This is the field where you would enter encryption key. It has to fit particular format dependent on chosen algorithm. If no key is provided, default one supplied by the mod itself will be used and displayed here;
  2. Validation status of the key. Green checkmark lets you know that key you have entered is valid, red crossmark will indicate that it is not;
  3. This button can be used to generate random key, which will fit the format of selected algorithm;
  4. If you're not happy with generating and passing around random keys, you can opt to use a passphrase instead. Unlike the key - there are no particular restrictions on passphrase format. Same passphrase will always produce the same key for a given algorithm;
  5. Checkmark that controls whether your public chat messages should be encrypted. If this is unchecked - only messages sent via commands will be affected (which commands is decided by the config, more on that further);
  6. This button allows you cycle through different supported encryption algorithms. You can hover the button anytime to read short description of currently selected algorithm:
  7. Saves the changes and exits the screen. To exit without saving changes you can press Esc.

For starters it is recommended that you leave encryption algorithm at default and generate a random key to encrypt your messages. Once you're happy with your configuration, you can press "Done" and be put back into chat screen. Now you can left-click on encryption button to actually enable encryption. When encryption is enabled it will look like this:

image

You can left-click it again at any time to turn encryption on and off. Configuration you have set up will persist until you change it, even across game restarts; you won't need to reconfigure things every time you enable the feature.

Now that encryption is active - let's try to actually send the message into the chat:

image

Upon being sent it will display like this:

image

That might not look particularly encrypted, but rest assured - it is. You can hover the lock icon to see what people without the No Chat Reports installed and encryption enabled with appropriate secret key will see:

image

This is also exactly how the message will appear in server console:

[12:59:54] [Server thread/INFO] (Minecraft) <Player588> gwZnkzO5aBmUcY0BpIz/ApCNNkzp7g==

Encryption with commands

Obviously, it would be no fun if only public messages could be encrypted. What if instead you want to secure your private correspondence with someone on the server? Be unafraid, for that is easily achievable.

Let's try to use vanilla's /msg command with encryption enabled:

image

In this case we message ourselves, but it will not work much differently with messaging someone else. As soon as command is sent we observe this:

image

It worked! But what if you wanted to use some custom command from a plugin? How did the mod decide to encrypt this command, and only "Super secret message" part of it, not touching "Player10"?

As was briefly mentioned above, command encryption is controlled by config. Let's navigate to .minecraft/config/NoChatReports/ and open NCR-Encryption.json with normal average text editor:

image

Most of this is a reflection of what we have already touched with GUIs in game (and yes, you can do configuration here if you prefer). We are interested in encryptableCommands list, which declares all commands contents of which No Chat Reports is supposed to encrypt when encryption is enabled.

Each entry in the list should contain command name, such as msg, and an integer value that tells the mod how many command arguments should be excluded from encryption, such as 1; those two are separated by a colon. That argument number is exactly why msg command doesn't end up having player name encrypted along with the message itself.

You can add whatever commands you like here, vanilla or otherwise. For example, if you wanted to add /say command, you would add say:0 to the list. Commands you add don't necessarily have to exist on all servers you log into.

Other config options

Beyond commands, there currently exists only one other config option that cannot be adjusted from GUIs - showEncryptionButton. Setting this to false will simply prevent encryption button from being displayed in the chat screen. Be aware that encryption itself will not be automatically disabled along with the button, it can still be adjusted and toggled using other options in the config file.

Communicating the keys

Besides compelling your friends to actually install No Chat Reports and enable encryption, final step in getting them on board of privacy boat is to tell them your newly generated encryption key, such that they can insert it themselves into approapriate field of encryption settings and be able to exchange encrypted messages with you.

To not screw this step up - it is highly advised that you only communicate encryption keys via secure channels, of which Minecraft chat where you actually plan to encrypt things is not one. Basically use anything that you trust will not lead to someone eavesdropping on the chat finding out what the encryption key is and thus being able to easily decrypt the messages themselves, be it Discord, Telegram, Signal, or whatever people use these days. Your channel of choice need not to be super private, only sufficiently isolated from adversaries.

All of this equally applies to passphrases.

Why not use default encryption key?

Because it really isn't a secret to anyone. Of course, it all depends on your threat model. Do you expect that attacker will simply lack the knowledge, skill or motivation to decrypt your messages, or will they be all out to break through your defenses with wide variety of means available to them? In the former case it indeed doesn't really matter how secret your key is.

When to encrypt

Encryption can be desirable in wide variety of cases. Let's list some of them:

Chat reporting

One great consequence of using encryption is that it effectively makes your messages unreportable, even if server you play on forces you to sign your chat messages. The trick is that messages are encrypted before signature is generated, so you are not signing plain text. Server will let your message through as any other properly signed message. However, when someone tries to report it - what will end up in the report will be unreadable encrypted message, not the plain text that went into producing it.

Even if someone who has secret key and can decrypt the message tries to report it - same thing will happen. They could try to modify their client to decrypt the messages before they are submitted into the report, but since message signatures were generated against encrypted messages - decrypting them will render signatures invalid in the context of report, meaning the report will not even be accepted by Mojang.

Realms

Probably the biggest use-case for encryption as of yet. It was directly confirmed by Mojang that all Realms chats are automatically monitored to identify "online harms", which can be escalated for human review (see Our Commitment to Player Safety - Proactive Moderation). In that regard the system is fully identical to chat reporting, except it does not require anyone to manually submit a report and there is no way to disable it, even with mods. If you are found to violate Minecraft's community guidelines - you will be banned, temporarily or permanently, from all multiplayer services and not just Realms. Whether the realm is private and all participants are fine with language used is not considered relevant, as evidenced by one of ban cases.

In that light Realms chat is inherently non-private and insecure. Encryption can be an effective tool in alleviating the risk of using it, as efficiency of automated monitoring will be heavily reduced, and no human reviewer will be able to decode the contents of your chat messages if they ever see them.

Private messages

Even if chat reports are disabled where you play, you might still not want server admins to see the contents of your private messages. As discussed above, you can set up encryption such that it only affects private messages sent via particular commands, without touching public chat.


It might seem like a good idea to enable encryption wherever possible, but it really isn't. People in charge of moderating chat on third-party servers can simply mute or ban you if you send encrypted messages in public chat, be it for spam or specifically for trying to use encryption in case server owner wants to enforce chat reports. To assess the risk of such occurence is upon you, as it will differ from case to case.