Signal isn't anonymous. The server has access to your IP addresses and the server can at will build social graphs about the users.

Where Signal's safety in numbers happens is in normalization of end-to-end encryption. Users who want to protect their message content are not standing out from the rest, unlike in e.g. Telegram where the vendor sees with whom you enable secret chats.

> The server has access to your IP addresses and the server can at will build social graphs about the users.

How could it build a social graph? I think most messages are P2P unless the user activates relaying?

Discovery is important and a hard problem, worth making some trade-offs for. Signal published a good blog post about this, including this passage:

> In order to turn the address book on a device into a social graph for Signal, the Signal client needs to be able to determine which of the device’s contacts are Signal users. [...] The obvious problem with this method is that the hash of a user identifier can almost always be inverted. [...] This method of contact discovery isn’t ideal because of these shortcomings, but at the very least the Signal service’s design does not depend on knowledge of a user’s social graph in order to function.

Src.: https://signal.org/blog/private-contact-discovery/

edit: Also, Signal is not peer-to-peer. It is a centralized, client-server architecture.

When they say "social graph for Signal", afaik they don't mean 'on Signal servers' but 'social graph on your phone'. It's a personal social graph that exists on the end-user device.

I don't remember how the hash issue is dealt with, however.

> Signal is not peer-to-peer. It is a centralized, client-server architecture.

It's not a P2P mesh, but Signal's servers are involved only for certain functions. I think communication tx is P2P - to send a message via server (used to hide sender IP address from onlookers and the recipient), you need to enable relaying. Possibly finding the recipient still relies on the server - if I want to send a P2P message to Abel, to what IP address do I send it?

The official signal.org blog post I linked does actually explain how it works. They write that the client sends parts of hashed phone numbers to Signal:

> The client transmits those truncated hashes to the service. The service does a lookup from a set of hashed registered users. The service returns the intersection of registered users. The obvious problem with this method is that the hash of a user identifier can almost always be inverted. Regardless of whether the identifier is a phone number, a user name, or an email address, the “keyspace” of all possible identifiers is too small.

Also: Signal messages are currently never P2P. They always pass through Signal servers, which see (but apparently not retain) your IP and timing metadata. The Signal WebRTC calls are partially peer-to-peer, that is what the relaying in the Signal settings panel is about.

>I think most messages are P2P unless the user activates relaying?

No they're all routed through the servers. It's only the calls that can be sent P2P and you have to opt in for that. The issue is that leaks your IP address to the contact who may not be trustworthy, so it's not used by default.