10
submitted 3 weeks ago by rbrunner7@monero.town to c/monero@monero.town

Before I go deeper into technical details regarding important aspects of Carrot with further posts, I present you, as something like an "interlude", a history of Monero privacy technologies. One aim is to show you how we arrived at the point where we are now with FCMP++ and Carrot. It's also an already quite long and IMHO interesting history that is worth to be told as part of this post series. (You find part 1 here.)

CryptoNote pure (2014)

Monero started a new blockchain in 2014 with code forked from Bytecoin, initially running unmodified CryptoNote technology as far as "privacy tech" was concerned.

Stealth addresses were already hiding receivers, in the same way they still are today. Ring signatures were already hiding, or better obfuscating, senders. The ring size was not fixed until a hardfork in 2018 however; transactions with 3, 10 or even zero decoys and thus no sender hiding were possible, and also actually occurred.

It may surprise that transaction amounts were still fully visible in the blockchain back then. Have a look at what is claimed to be the Monero transaction with the largest known amount, from July 17, 2017, for more than XMR 500,000, corresponding to a fiat value of over USD 100 million today. If you scroll down the linked block explorer page to the 117 inputs(s) for total of 506510.898899999971 xmr heading, you can see that the ring size is 0: All the enotes that contribute to the total amount are in the clear, without any need to guess.

Bytecoin is still running by the way, using the unmodified CryptoNote technology described here to this day, as you can see at their block explorer.

RingCT (2015)

Although nothing was ever actually deployed to the Bitcoin blockchain, various people discussed enhancing privacy quite early on. As this article from Binance details, already 2013 somebody came up with the basic idea for a scheme called Confidential Transactions, abbreviated as CT, to hide transaction amounts. Bitcoin Core dev Greg Maxwell refined this in 2015 and published a description, still available via Archive.org here.

Also still in 2015 somebody with the pseudonym Shen Noether, a member of the Monero Research Lab (MRL), adapted CT for Monero and named it Ring Confidential Transactions, or RingCT for short; see the published paper as a PDF file here.

When Monero hardforked to use RingCT in 2017, all its 3 basic privacy mechanisms were in place, hiding receivers, hiding senders and hiding amounts. Monero introduced ring signatures that were smaller and allowed faster verification than the original CryptoNote ones in 2020 called CLSAG, but this changed nothing fundamental: As of now, in Spring 2025, the technology established with the 2017 introduction of RingCT is still what powers the Monero blockchain.

Triptych (2020)

While stealth addresses and RingCT are basically unassailable and may stand firm indefinitely into the future, or at least until working quantum computers arrive, ring signatures are less solid in comparison, and were known to have some weaknesses early own. It's therefore not surprising that further attempts to improve Monero's privacy technologies centered on them.

It's quite obvious that the larger the rings, the better the privacy and protection against statistical attacks that they offer. That's the main reason why the mandatory ring size for Monero transactions stands now at 16, quite some step up from 11 established in 2018. Obvious idea: Switch to still larger rings. How about, for example, rings of size 128? Or why not 1024 while we are at it?

The problem: While these would be possible in theory, with the current cryptography that Monero uses they are not really feasible. Transactions would swell to an enormous size.

A few numbers to illustrate: This transaction from 2021 has ring size 11 and a size of about 1.9 kB. This recent transaction from 2025 has ring size 16 and is 2.2 kB. This transaction from a Monero fork called Wownero but quite comparable has ring size 22 and is already 2.5 kB.

Around 2020, the MRL members Sarang Noether and Brandon Goodell worked out an alternative scheme that they called Triptych. See the announcement on Reddit here and the published academic paper here.

Advanced cryptography often looks a bit like magic, like in this case. With Triptych, the byte size of a transaction scales logarithmically with the ring size. A ring size 512 transaction with 2 inputs and 2 outputs would be only 3.4 kB, and a mere 0.2 kB more would allow you to double the ring size to 1024!

This blockchain explorer screenshot shows a 2/2 Triptych transaction with ring size 128 in all its glory. Yes, Triptych was implemented and reached an early beta stage.

Unfortunately it turned out that multisig transactions would be awfully complicated to implement with Triptych and laborious to handle for users. See e.g. this report with an analysis.

When an alternative scheme was presented with basically the same benefits as Triptych but much simpler multisig the latter was finally abandoned.

Seraphis and Jamtis (2021)

This alternative is called Seraphis and was worked out by a cryptographer with the pseudonym koe. See e.g. this blog post on the getmonero.org website. Seraphis allows for large ring sizes like 128 with reasonable transaction sizes and also reasonable verification times, plus it makes a simple multisig implementation possible.

Seraphis was intended to come together with Jamtis. That's a so-called addressing protocol: Like Carrot that I described in my first post, it defines which keys secret and public there are, how they allow wallets to work and how Monero addresses look with them. It was developed by a cryptographer with the pseudonym Tevador who already came up with RandomX, Monero's current "ASIC busting" proof-of-work algorithm. They originally published the specification here.

There is one significant drawback of this duo of technologies compared to Triptych: The current 95-character CryptoNote style addresses would become invalid, and much longer brand new addresses would take their place. See my 2022 Redit post Why Seraphis / Jamtis addresses will be so awfully long, and what we will get from those for a detailed story.

Never mind addresses with a length of 200 characters or even more: Moving a whole community of cryptocurrency users the size of Monero's over to completely new addresses for each and every wallet is a large and complicated endeavor in any case.

Nevertheless for quite some time the majority of Monero devs assumed that Seraphis and Jamtis would indeed be the future Monero technologies, and people went to work. Over the course of about a year and paid by the Monero community through the CCS koe himself implemented Seraphis in the form of a beautifully architected and solid library, and a group of devs called the Seraphis wallet workgroup started to implement, as you can guess from the workgroup name, a new wallet component as part of the Monero core software.

FCMP++ (2023) and Carrot (2024)

What cryptographer and dev kayabanerve first presented at MoneroKon 2023 is in a way a much more radical approach to improve sender privacy for Monero than both Triptych and Seraphis are. Instead of merely making larger rings, it gets rid of them altogether. As I wrote in my first post: "Until now, if you spend XMR, you hide among 15 other people doing so. With FCMP++ you hide among all the people who ever did an XMR transaction since Monero's genesis in 2014."

This blogpost on the GetMonero.org website explains that the original plan was to deploy full-chain membership proofs with a second hardfork after the one to "original" Seraphis, or in the best of all cases together with Seraphis in a single hardfork, after delaying that hardfork a bit to make that possible. But then something happened that would change the course of Monero history, so to say:

In March 2024 the Monero network was flooded with hundreds of thousands of additional transactions. Daily Monero transaction volume suddenly more than tripled, which is hard to explain as just a sudden surge of Monero use for some reasonable and legit reason. It was speculated that a single adversary was basically spamming the Monero blockchain with their transactions, with the purpose of this attack unknown. One possible purpose: Getting to know as many enotes as possible to weaken Monero's sender anonymity. The basic approach: If I can recognize on average, say, 10 of the enotes making up the rings of your transaction as mere decoys, because I all made them myself, your protection is down to a ring size of about 6.

You find an interesting explanation of this, together with plenty of fascinating charts, in the report of Monero's resident statistics researcher Rucknium here. The average effective ring size was indeed down to about 5.5 during the attack.

In the light of all this the Monero dev community came around to agree that rings had to go, and had to go quickly. kayabanerve managed to modify this full-chain membership proof technology to run independently of Seraphis instead of "on top of it" and named it FCMP++.

A bit later jeffro256 developed Carrot as a clever way to get almost all benefits of Jamtis but without the need to push everybody through a painful address format change, which made it more acceptable still to put Seraphis and Jamtis aside and go "all in" on FCMP++.

Possible futures

If we look a few years into the future, what kind of base technologies for Monero could come after FCMP++ and Carrot?

One possibility is to stop all attempts to improve using "conventional" cryptography and try to figure out how to build a completely quantum-computer-proof cryptocurrency that is both fully private and feasible regarding key sizes, transaction sizes and transaction processing times. That would probably not be easy, and might depend on advances in post QC cryptography in general that don't exist yet right now but are yet to come. Still, it may be worth it.

Conclusion

With FCMP++ and Carrot, for the second time in a row already after Triptych and Seraphis plus Jamtis, something still better came along, interesting technology and a considerable amount of work done were put aside, and the Monero roadmap rewritten. You may very well doubt the wisdom of doing such abrupt and wasteful changes of direction, but I guess this is to be expected in a field that is developing as quickly as cryptocurrency related cryptography, at least if you decide to go with the times and improve instead of working with something that was more or less frozen in 2009 like Bitcoin does.

17
submitted 1 month ago by rbrunner7@monero.town to c/monero@monero.town

Why this post

A lot of interesting things go on right now in Monero development, but if you don't happen to attend the two regular dev meetings on Mondays and Wednesdays or hang around in some of our Matrix rooms, you probably wouldn't know much about it. We have a blog on our website here, but you won't find regular reports there like other cryptocurrency projects publish in their "dev blogs". So far nobody posts regular updates on Reddit either.

I only recently became fully aware of this, and noticed that people building software "on top" of the Monero core software, especially wallet apps, often don't seem to be fully informed either what is coming. This may have unfortunate consequences, e.g. apps not being ready when the next hardfork arrives because their authors were not aware about necessary changes, or became aware too late.

That's why I decided to write this post about Carrot, which is mostly "flying under the radar" so far, but will bring solid improvements to Monero users.

I plan to make this the first post of a little series, containing an overview, with later posts giving more details about individual important aspects.

The next Monero hardfork

If all goes according to plan, and it currently looks as if it will, the next Monero hardfork will bring the largest changes in underlying technology since RingCT was introduced way back in 2017 and implemented hidden transaction amounts: A technology with the acronym FCMP++ will bring a decisive step up in sender privacy. You can read an introduction about it from the author, cryptographer and dev kayabanerve here. The gist of it, radically simplified: Until now, if you spend XMR, you hide among 15 other people doing so. With FCMP++ you hide among all the people who ever did an XMR transaction since Monero's genesis in 2014.

I estimate that the hardfork will take place in roughly 1 year from now, give or take a few months.

Beside FCMP++ it will introduce a second important new technology called Carrot. That's a new so-called addressing protocol that will supersede the current addressing protocol that is part of CryptoNote, the technology that Monero inherited when it forked a cryptocurrency called Bytecoin in 2014.

Lead designer of Carrot is the seasoned Monero dev jeffro256. He also implements it in the Monero core software and is quite far along already with this endeavor.

The name Carrot is a clever acronym of Cryptonote Address on Rerandomizable-RingCT-Output Transactions, but a considerable amount of cryptographical knowledge is needed to fully understand what this means, especially the "rerandomizable" in there.

It's not easy to explain what exactly an addressing protocol is either, and not being a cryptographer, I don't fully understand it yet myself, but I can describe the interesting new features that Carrot allows to implement together with FCMP++. In this overview, I will feature the two most important ones, full view-only wallets and forward secrecy.

Full view-only wallets

A view-only wallet is a wallet that lacks the capability to spend, in a fundamental way: The information needed to send valid transactions out, in Monero's case the spend secret key, is simply not there, and spending is therefore mathematically impossible, which is of course a great security feature.

Monero supports view-only wallets since its beginning in 2014, thanks to the CryptoNote dual-key system with view keys in addition to spend keys. They just have a rather large problem: They can't see spends. If a wallet app has only the view secret key available instead of both keys when scanning the blockchain, it will only be able to pick up incoming transactions, but not outgoing ones.

This is unfortunate. As soon as spends are present for a given address, the balance of a view-only wallet for that address won't be correct anymore. You also can't use such wallets to check without danger whether your XMR "are still there" if you have a paper wallet.

Carrot finally implements full view-only wallets that don't have this disadvantage. They see everything, incoming and outgoing transactions, but it's still impossible to use them to spend.

I think when Carrot becomes available people will start to use view-only wallets much more often and may soon forget that back in the pre-Carrot dark ages they were more or less defective.

I will come back to this in a later post with more details and background info.

Forward secrecy

Monero, many other cryptocurrencies and a large number of other things all over the world rely on elliptic curve cryptography (ECC) and the practical impossibility to find private keys from public keys that were derived using ECC. Unfortunately it could be that soon quantum computers will be able to do exactly that, finding private keys, and start to "crack" systems that way.

Cryptographic research is busy developing methods that are fully immune against quantum computers, but as far as encryption and signing is concerned, mostly has only algorithms on offer today that are much slower than ECC, and lead to much bigger key sizes. Using them would mean (even) slower sync and (even) bigger transactions for Monero. It looks as if it's not feasible to achieve full immunity that is practical and "just works" already with the next hardfork, thus we don't try.

That does not mean that we just ignore the whole issue however. Carrot does what is achievable in a short time frame and without degrading the user experience too much, by implementing forward secrecy.

I will try to explain in more detail in a later post what that means, thus here only a quick and simplified explanation: Thanks to forward secrecy, for transactions done using Carrot, even a fully working quantum computer won't be able to "break" their privacy in many important scenarios.

Carrot picks some pretty sweet "low-hanging fruit", so to say.

Full backwards compatibility

Before Carrot, at least two other more powerful addressing protocols had been designed for Monero, called Jamtis and Jamtis-RCT. Those two have in common to require new wallets and new addresses for everyone, with the current 95-character addresses all invalid and gone for good. The introduction of either one would have been a quite drastic event for users, needing a broad effort over the whole Monero "ecosystem", and with a danger to create confusion and loss of funds. This post of mine from 2 years ago gives some details how this would have looked.

Carrot completely avoids such difficulties, which personally I consider its most astonishing feat - it almost looks like magic to me!

Let's call today's wallet 2-key CryptoNote wallets, or 2-key wallets for short, because they have the 2 well known CryptoNote style secret keys. Carrot introduces what we can call 6-key Carrot wallets or 6-key wallets for short, because the number of secret keys rises from 2 to 6. In the proverbial "ELI5" style: More and better features need more keys.

Full backwards compatibility means that after the hardfork 2-key CryptoNote wallets will continue to work, without any changes, just like that. You can stay on the wallets you have now as long as you like. You will be able to restore as a hot wallet the paper wallet you created a few years back under Carrot. All your 95-character main addresses and subaddresses will stay.

The only small catch: To enjoy all of Carrot's features, you will have to create new 6-key Carrot wallets and move your funds over. 2-key wallets offer less thorough forward secrecy than 6-key wallets, and a full view-only wallet is only possible for a 6-key wallet. But, again, you can make that move whenever you like, right after the hardfork or much later.

Resources

Here a list of resources in case you want to read more about the mentioned topics. Be aware that they mostly assume quite a bit more knowledge about cryptography and the current workings of Monero than this post here:

rbrunner7

joined 1 month ago