IOTA allows feeless and secure messaging by attaching zero-value transactions to the tangle. While data on the tangle is immutable and therefore tamper-proof, additional techniques are needed to fulfil other security requirements such as confidentiality and authentication.
Another problem is the linking of multiple messages carrying related data. A convenient way to point to multiple messages is needed instead of referencing each zero-value transaction explicitly.
Random Access Authenticated Messaging is an attempt to solve these issues by organizing messages in so called channels and using well-known IOTA-based cryptography.
Why another messaging protocol?
This is a legit question because there already is a capable messaging protocol for IOTA. Masked Authenticated Messaging also provides secure messaging and linked data channels and enables many use cases.
However, it has its limitations. For example, this can be demonstrated with the use of MAM for an audit trail use case. A simple solution would be to attach a QR code to a product at the start of production containing the seed of a MAM channel. At every step of production, the manufacturer adds a message to the channel pointing to a message in its own MAM channel. This way the authorship of the message is secured because only the manufacturer can add messages to its channel.
Everybody who scans the QR code of the finished product can audit whether it has passed all the expected steps of production with the correct manufactures.
But there is a problem. To verify that two MAM messages are belonging to the same author, a reader needs to fetch all messages from the start, because one message points to the next one. And given that a manufacturer produces for example 10000 or more products a day, all these messages need to be fetched when verifying product number 10000. Fetching so many messages takes incredibly long, since a customer normally only wants to audit one specific product and therefore doesn’t have the previous messages cached already.
Thus, a messaging protocol with indexed messages is needed. These must be accessible directly and out of order in O(1), while it’s possible to verify that they belong to the wanted channel, only by fetching this specific message.
How RAAM works
The following section gives a detailed explanation of the building blocks and cryptography RAAM uses to realize the described requirement of accessing indexed messages fast and in arbitrary order.