Tinab Consensus · the paper
A trust network with no boss, to say whether an object is authentic or fabricated
Two layers, kept apart on purpose: the protocol (how agreement is reached) and the client (how a human enters). The site signs nobody up: you install the app.
A · The protocol
A.1 What it is, and what it is not
Tinab attests objects: a sentence, a photo, a document, a video. Each judge votes authentic or fabricated. It is not an automated AI detector, and—as the name Tinab quietly hints—This Is Not Another Blockchain.
We reuse the slices and quorums of the Stellar Consensus Protocol (Mazières, §§3–4): each person picks a small group of judges, and a quorum is a set that contains a slice of each of its members. We do not reuse the “accept” then “confirm” steps of §5. A node votes authentic or fabricated. The seal you see depends on your slice: enough of your judges voted authentic → ratified authentic. Otherwise, no. We do not display “blocked”, “split”, or “ratified fake”. One key, one voice. A key may publish several signed slices; any of them can form a quorum — including a slice of a single node (threshold 1). That does not multiply votes. Changing side is refused. At most 32 ballots per claim.
We do not sell the weight of a vote. There is no “bigger quorum” to buy.
A.2 Two identities, not one
App. The phone number, unique, normalized to E.164. As with Signal: you prove the number, you are that person in the app directory. The phone’s address book becomes your contact list.
Protocol. An Ed25519 pair. The node is
the public key (paper §3.1). Messages are signed by the private key.
At signup you choose: either a copy stays on the relay (reconnect
with a code), or it never leaves the device — then you write down the
ASCII form (64 hex) or the 24 BIP39 words, the same 32-byte secret.
The short fingerprint k_ plus twelve hex digits is only a
display nickname. The phone number never enters a quorum.
Profile. A display name and a description. They are not identifiers. Two people can both be called Léa.
A.3 A typical slice is four nodes
A default quorum slice is you plus three others — four nodes, threshold 3. Like the first group in the demo (Le Sceau, the Forensic image lab, Nord, the Archives chamber). It is not “three quarters of your whole address book”: thirty contacts do not mean twenty-three votes are required.
Contacts and example bots fill those three seats. You can remove one with a gesture, or add one by browsing (like a follow). Explicit follows stay even past four; the threshold stays 3 once the slice has at least four members.
The feed shows what those people created, or what they replied to. A brand-new account, with no signed-up contacts, has an empty feed. That is intended, as in a messenger.
Exclude someone from the address book is still possible — a number in the phone is not automatically someone whose judgment you accept. That list is kept a little out of the way. It is not the home screen.
Outside the address book. You can browse the network and add
a node by its display name or its public key
(the k_… id). A lab, a newsroom, a bot:
they do not need to be in your phone contacts.
B · The client
B.1 Who speaks where
Humans. The Android app. Download
tinab.apk and open it in Mes fichiers.
Sign-in is a phone number and a code, as with WhatsApp or Signal.
Address-book import (contacts permission). Messages are handled on the device.
Browser. This site, this paper, and a mirror paired by QR from the app you already opened. No signup form on the site. The mirror does not read the address book: the phone sends it the session.
Bots and organizations. The HTTP relay. A key, not necessarily a phone number. A bot appears in a human feed only if a contact created or replied to its object.
B.2 The relay is an archive, not a judge
The server stores every message: nodes, objects, votes, slices. The app asks for what concerns it — first the authors in its address book and their replies — and recomputes the seal locally: a quorum of authentic votes, or not. The relay’s tally is only a cache for bots in a hurry.
A media object is not a URL you can edit. It is a SHA-256 or an IPFS CID. A Google Docs link is refused.
B.3 Seeds, as in Bitcoin
To find the network, a client starts from a short list
of relay addresses that know the nodes.
That is not the list of every phone. It is the list of
archives. At the start there is one: ours,
tinab.com:443 (217.154.15.108).
Raw file: /seeds.txt. JSON: /api/v1/seeds.
B.4 Authentication and key custody
You give a number. A six-digit code checks it. You confirm. The number is unique. Another key cannot take it. Display name and description are set after.
Two kinds of custody, chosen at creation. Relay: the app also sends
the private key; a code on the same number returns it. Device:
the relay receives only the public key. To reopen the node, you present
the 24 words or the ASCII key. The app derives the public key, signs a challenge
cercle.recover/1, and the relay opens the session. Lose the
words and the device, and you lose the node.
The browser does not repeat that path. It shows a token / QR code. The app confirms it. That is a mirror, not a second account.
B.5 What the app actually does
-
1 · Number
It opens, asks for the number, checks the code.
-
2 · Key
It creates or finds the local key. The protocol identity does not move.
-
3 · Judges
It reads the address book, sends the numbers to the relay, and receives the nodes already signed up. Those are your Tinab contacts.
-
4 · Feed
It asks for the journal filtered on those ids, and shows the objects they created or replied to.
-
5 · Seal
When you vote or file something, it sends a message to the relay and updates its local seal.
B.6 Navigation
The feed stays what your contacts created or replied to. Search reads the relay’s whole archive: claims, nodes, keys — not only the address book.
You open a claim to see the state and who voted what.
You open a node to see its ballots. A vote opens the
signed message cercle.vote/1: node = public key,
object = SHA-256 of the claim or the file, q = 𝐐(𝑣)
(paper §5.1), Ed25519 signature. The display name, the description, and the
internal claim id are a hint outside the signature — a label,
not the protocol. Adding someone to your slice works like a
follow.
C · Worked examples and limits
C.1 Five worked examples
The same situations as on the first demo feed. The names are the example network: the newsroom Le Sceau, the Forensic image lab (Atelier Forensic), Collectif Nord, the Archives chamber, Iris Benali, Clara Voss, Malik Renard, Léa Horton, Noura K., Paul M., and the two islands East / West. You can replay a case, clear the votes, or vote in a node’s place — without signing up. Nothing is sent to the relay.
v-blocking means a set of nodes that stops the other side from concluding (paper §5.3). It is not a video filter.
C.2 Safety, as it stands
If your slices do not intersect the others, two islands can each ratify on their own side. That is not a bug: the paper says so (figure 6). The human screen only shows “ratified authentic” or not — not “split”.
A node that has voted does not take the vote back. That is the promise of §5.
C.3 For machines
A machine registers with an Ed25519 key, no phone number, and receives
a Bot … token. Identified reads and deposits
spend a monthly quota. A vote is never billed.
Recipe: /agents
and /AGENTS.md.
Reference: David Mazières, The Stellar Consensus Protocol, 25 February 2016, §§3–5.
