An00nymushun / End-to-end-Discord-Encryption

End-to-end Discord Encryption Plugin for messages and files for your privacy and security

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

SimpleDiscordCrypt

Discord message encryption plugin, it gives end-to-end client side encryption for your messages and files with automatic key exchange, works without BetterDiscord

For Chrome (and similar) use the extension
For mobile you should try Yandex Browser, it's Chromium based and supports extensions
Firefox is kind of supported but there is incompatibility because of https://bugzilla.mozilla.org/show_bug.cgi?id=1048931
If nothing works, install it as a userscript (with Tampermonkey) or include the js file somehow else

Please do not download this plugin from untrusted sources, for example there is one in chrome store with the same name


Right click on the lock icon to open the menu

If you would like to download an encrypted image, middle click on the image

You can toggle the encryption with the lock icon. You can also use the :ENC:, ENC or NOENC prefix at the start of your message, but prefixes are deprecated since Discord starts uploads before you even send your message.

If you want to change from one installation to another, export and import your database
If you would like to use the plugin on multiple devices; choose a main one, export the database from that and click on secondary when importing to others, after new key exchanges you'll have to repeat these steps

ECDH P-521 is used for the key exchange and AES256-CBC for the messages offering the equivalent security of 256-bits

I hope this is actually simple as the name suggests


Here is a link to the original DiscordCrypt
It has been discontinued




If you have any questions come to my Discord server
If you want a server blacklisted or you would like users to not use embeds, do tell
We have experimental BetterDiscord loaders for the plugin too.

List of servers that use the plugin:

Feel free to tell me if you have one




Database

The database password is optional but the database isn't! The database stores stuff like your keys and channel settings.
You should only have one database as having multiple will mess things up. In order to manage this, you should keep backups by exporting your database.
If you are using multiple devices with the same account, select one as the main and import its database as secondary to the other(s).
If you import the database as secondary you can still export it and import it normally again. The difference is that a client with the secondary setting will ignore key exchanges, which means you have to update your secondary devices with the new database.

Cleaning the database You can paste these into the Ctrl+Shift+I console
SdcClearChannels(filterFunc)
deleteBefore = (now = new Date()).setMonth(now.getMonth() - 6);
SdcClearChannels((channel) => (
    //Number(channel.lastseen) ms precision unix timestamp
    //String(channel.descriptor) descriptor from the channel manager
    //Boolean(channel.encrypted) is the encryption toggled on

    channel.lastseen < deleteBefore && //not seen in 6 months
    /^DM with \d{17,20}$/.test(channel.descriptor) //name resolution failed

    //'true' return value deletes the record
));
SdcClearKeys(filterFunc)
deleteBefore = (now = new Date()).setMonth(now.getMonth() - 6);
SdcClearKeys((key) => (
    //Number(key.lastseen) ms precision unix timestamp
    //String(key.descriptor) descriptor from the key manager
    //Boolean(key.hidden) is the key hidden
    //String(key.type) one of ['GROUP', 'CONVERSATION'/*DM*/, 'PERSONAL']
    //Number(key.registered) when the key was added to the database

    key.lastseen < deleteBefore && //not seen in 6 months
    /^(?:DM key with \d{17,20}|\d{17,20}'s personal key)$/.test(key.descriptor)
    //name resolution failed if the id is used as name

    //'true' return value deletes the record
));

Keys

The things you use to encrypt messages (plus there is the database key for encrypting the plugin's local database)
You can select which key to use for the channel at the top, besides the lock icon.

Key Types

Personal key: Everyone has this (and it's different for everyone), you can use it to encrypt messages in channels where there are no other options.
It is shared with everyone you key-exchange with, so the security of it varies.
Group key: You can make these from the plugin's menu if you are in a guild channel.
It is advised that you change the name of the key right away to spot if someone accidentally generated a different key for your channel. You can do this in the Key Manager.
After generating the group key, you can use it in other channels too.
If you set a group key as hidden in the Key Manager it will no longer show up in your key selector and it won't be automatically shared with your friends.
If you really want to know if the other is using the same key as you, compare the first few characters (up to 16) of the encrypted message.
DM key: These keys are generated by a Diffie-Hellman key exchange between two users, it provides a secure connection over unsafe medium.

Key Exchanges

If the plugin comes across a message with a key that you don't have it will attempt to get that key by a key exchange with the message's sender.
You need to be able to DM the other user for the key exchange.
If a group key isn't set as hidden it will automatically be shared with a friend if they ask for it.
In order to share a key you need to establish a secure connection with an initial key exchange, it is usually automatic but you can start it manually from the menu by clicking on Start Key Exchange from the DM channel.
You can manually share keys by using the Share Keys menu option.
During a key share, the sharing party will suggest you channels to use so it's advised to not set anything for the channel (or toggle encryption) before you have the key for it.

Key Rotation and Trusted Keys

Use the SdcSetKeyRotation(7) console command to start a key rotation on the key of the current channel. This will periodically generate a new key and switch to it in all the channels that use the rotated key.
In the example above, it's every 7 days (by default this is aligned to arbitrary points so if you use the same command on your other primary devices within a day, it will do the same).
If the key is set to hidden, the new key will be hidden too.
Trusted Keys can be enabled in the Key Visualizer (in DM), this feature can be used to do automatic key exchange for hidden keys and/or rotated keys.
Keys shared with trusted keys can swap keys for channels automatically, which is useful for rotated keys.

Extras

You can click on an already enlarged image to further enlarge it, you can also drag the enlarged image if it doesn't fit the screen.
Use the arrow keys to navigate like a gallery when zoomed in.
You can use any emote (animated too) in encrypted messages.
Messages above 1600 characters will be compressed, but this feature might have incompatibilities with future versions. This also means that the messages can be 2000 character long if they are mostly made of normal characters.
For large audio and video files, you can use Mega, it automatically embeds.
The encryption is completely secure unless someone at Discord replaces your messages right when you secure your DMs, to make sure you have the right keys, you can use the Key Visualizer and compare your result with the other party.

Getting notifications on custom phrases This feature should be a good compensation for no searches and role mentions
Use the SdcSetPingOn(regexStr) console command to set the match string or regex for the extra pings
For example SdcSetPingOn('An0') will only ping if the message contains that exact word, SdcSetPingOn(/\bAn[0o]\b/i) will match every form of it
Regex explanation: /An0/ is the same as the first example, /An[0o]/ will match An0 and Ano, /An[0o]/i will be case insensitive, so it matches ano and ANO and everything inbetween, \b means word border, which means start or end of word, so /\bano\b/ won't mach 'another' (only works if you use letters, numbers or '_')
/(?:An0|SimpleDiscordCrypt|SDC)/ will match any of the three smaller regexes between the (?:)
Please note that characters like .\\+?*()[]$^ etc, should be escaped like \.
Sample regex for role mentions: /<@&(?:473998238156849152|474006463749160992)>/ you can get the role ids with \@Role in the chat



To uninstall, just delete it from %localappdata% and make new shortcuts.


๐˜š๐˜ช๐˜ฎ๐˜ฑ๐˜ญ๐˜ฆ๐˜‹๐˜ช๐˜ด๐˜ค๐˜ฐ๐˜ณ๐˜ฅ๐˜Š๐˜ณ๐˜บ๐˜ฑ๐˜ต
Or according to google: simple discord crypt

About

End-to-end Discord Encryption Plugin for messages and files for your privacy and security

License:GNU Lesser General Public License v3.0


Languages

Language:JavaScript 91.8%Language:PowerShell 4.4%Language:HTML 3.8%