Username: NotATether
Bech32 Address: bc1qlgjlpx2rnzvnavrf6gj55hudwlfye0n60me82t
Review of the JokerMix mixer
If you follow what I do, you will know that mixing is very important for your privacy, and I have a list of resources to that end. Generally speaking, a mixer:
- should have a reasonable fee for each mix, so that the operation is useful for both customer and provider
- should give users coins sourced from exchanges (to achieve 0 - 25% AML)
- should not take too long to perform
- and most importantly should give you a letter of guarantee.
The last one is especially important because the letter of guarantee is the only way you can recover your bitcoins if they get lost or if some other mishap happens. Mixing is a very trustless industry (you only have to make sure the mixer is not a scam), in that this widely agreed-upon system insures your deposit.
Today I am going to look at a new mixer called JokerMix. In recent months, authorities have been cracking down hard on mixers, so it's always good to see a few brave faces come out and make a new one.
The interfaceThe interface is wonderful. It is like The Dark Knight Rises. In fact, there are only three things I'd like to comment about.
The first, is the background - case must be taken to avoid the white starts overlapping the text, in order to prevent it from becoming unreadable. This can currently be simulated by running the website using a 1920x1080 resolution. For those who don't have such a montirr, the Chrome Devtools device tolbar (ctrl - shift - m) can simulate that.
The solution is to make the starts in this SVG image:
https://jokermix.to/img/background.svg slightly more grey, same brightness as the cards, so that they don't get in the way of the text.
Second issue is that the PGP fingerprint at the bottom is too small and is not easily readible.
The solution is to open the CSC and in the .pgp class, replace 'font-size: 14px;' with 'font-size; 14pt' to make the size in points instead of pixels.
The last issue is that the destination address field appers to have a beginning of a bitcoin address in it. While I'm aware that it is an example address, the font used for it implies that people might think that it it already has an address inside the destination field which is not desireable. The solution I can provide for this is to either use a more generic placeholder like <insert address here> or to change the placeholder color to grey instead of white.
The mixing processThis is the meat of the sandwich and at first glance it looks like JokerMix has a variety of tools to fight chain analysis:
- Variable mixing fees to make your amount a nice round number
- Random return time from an hour to 5 days
- sessions which you can delete yourself
The interface seems to offer 3 different mixing modes: Basic from 2-4%, Standard from 4-6%, and Premium from 6-8%. At first glance, it is unclear exactly what these are referring to, but perhaps they are referring to different kinds of methods used for mixing. Coinjoin processes can beam your transaction through many rounds, which enables you to have more privacy, since the more round outputs there are in each step, the harder it will be for chain analysis to discern which is which, as long as you *do not make change outputs when sending to the mixer* as these can be linked back to you.
The higher fees appear to incentivize the mixer to give you better protection but this is not true for all mixers, so choose carefully.
I have decied to open a sample mix, using a sample output which can be linked back to me (caveat emptor - I don't believe in 'taint', but AML analysis does), so we will see if it can make a anonymized output. I used a 6% fee for this session.
After solving the captcha (see below), I proceeded to the section where you send a transaction to start the mix. JokerMix allows you to send only one transaction to the specified address. They also give you the session ID, which you can type back into the website if you close the browser by accident, and you also get a letter of guarantee to download. I had imported the PGP key of JokerMix successfully, and then downloaded the letter of guarantee. But when I attempted to verify the letter of guarantee, I got this message from gpg:
$ gpg --verify pgp-signature.txt
gpg: invalid clearsig header
gpg: invalid armor header: ZmFzZjMyNGprSiMkSmtmajo6MDU0MTA0NTlmZmJkMWVkZWZmMzMzNGU0NWY3M2IwODFjYTIwN2ZiNWRmMGRiZGI0NmU3NDJkNWZjZmJjNTMzMg==
The signature in question was:
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA256
Payment Address:
bc1q3qju0lellrrhy87vy5ec5w5vmrav6kmcq62svs
ONLY 1 TRANSACTION ALLOWED!
-----BEGIN PGP SIGNATURE-----
ZmFzZjMyNGprSiMkSmtmajo6MDU0MTA0NTlmZmJkMWVkZWZmMzMzNGU0NWY3M2IwODFjYTIwN2ZiNWRmMGRiZGI0NmU3NDJkNWZjZmJjNTMzMg==
Something is wrong with the signature that was being provided, maybe it is cut off because I don't see an "end PGP message" at the end. This is both in the clipboard and the downloaded file.
I am not sure why it was doing that, but since I could not verify the letter of guarantee then I aborted the mix out of caution.
By the way - why is there no expiration date? I think that for the client's security, and also to free resources at your end, you should make unused sessions expire automatically after a time period like 7 days, if they have sent no transaction.
The captchaThe captcha unfortunately is very weak and it can be broken by a script that uses the developer tools console. For example, it is provided in headless browser environments like Selenium. It asks you to add two numbers, and at a first glance these numebrs are not available in the DOM. However, they can be trivially retrieved using jQuery and thus I was able to break the captcha like so:
var value1 = $('.pop-up-inputs-wrap .capcha').first().val();
var value2 = $('.pop-up-inputs-wrap .capcha').eq(1).val();
$('.pop-up-inputs-wrap .capcha').last().val(parseInt(value1) + parseInt(value2))
Screenshot of the flaw:

I suggest that an image-based captcha is served from the PHP backend instead. These are harder to mitigate and require external resources as opposed to just the local computer.
Summary:
- The letter of guarantee is not verifying successfully. It needs to be fixed.
- The captcha needs to be enhanced.
- Various enhancements can be made to the visual design of the website as well for usability purposes.
I hope especially the first issue is fixed because I also want to do an AML analysis on the result.