More actions
Storage Service is a component that stores encrypted information. It is a database that uses Bigtable;[1] it does not use Secure Value Recovery or SGX by itself.
Signal uses Storage Service in such a way that all information stored is encrypted. It stores some settings, contacts, groups, etc., but is also used to store information necessary for Groups v2 to function.[2]
What is stored?[edit | edit source]
Some settings, contacts, groups, etc.[edit | edit source]
Each storage record uses a different derived key for encryption.[3]
This protobuf
file[4] lists which information is stored, and how it is structured. Specifically, this part shows the actual data that's stored; it should be fairly self-explanatory.[5]
Notably, message history is currently not backed up using Storage Service.
There is an encrypted storage manifest with a version that increases monotonically after each change. Each change can:
- Insert new Key-Value pair(s)
- Delete KV pair(s)
- Delete all KV pairs
A KV pair has a random key and an encrypted value, which contains a contact, group, story distribution list, or account information record. Updates to existing records are performed by removing the old KV pair and inserting a new one. This way, linked devices always know which new information they need to retrieve.
What is it used for?[edit | edit source]
- Restoring some information upon re-installation/registration of the Signal app (on same or new device) by entering your Signal PIN. This is only possible if you are re-registering with the same phone number you used previously. Not available if you've disabled the Signal PIN (in this case only possible with manual backup/restore (Android) or transfer (iOS);[6] these methods additionally preserve your message history).
- Syncing contacts and groups to linked devices (this is made possible by syncing the "base" storage service key to linked devices). This is still partially being done using Signal Protocol sync messages, but that is unreliable:[7]
Right now, in order to let a linked device (like a desktop or iPad) know about your contacts, we have to send a series of signal “sync” messages. Anyone who’s used desktop long enough has probably experienced leaving it off for a week and coming back to realize that it was sent so many messages that it’s queue on the server overflowed, resulting in missed messages. That means it could have an incomplete view on contact state. Storage Service will allow linked devices to always stay in sync by keeping this data in a more persistent location.
- It will be an important part of other upcoming key features.[7]
How long is the encrypted data retained after unregistering?[edit | edit source]
Response from a Signal iOS developer:[8]
Delete account unregisters you from the service and deletes all data locally. Service data is persisted for a fixed amount of time for unregistered accounts. If you want to delete your data from the service sooner you can contact our data protection officer by emailing [email protected]
Groups v2 data[edit | edit source]
Storage Service is also used to store information necessary for Groups v2 to function.
- ↑ https://www.reddit.com/r/signal/comments/z6sltt/comment/iy4xiy7/?context=3
- ↑ Source code
- ↑ forum:t/14057/146
- ↑ w:Protocol Buffers
- ↑ The information stored may change over time; these links were last updated on 2023-01-27.
- ↑ support:360007059752
- ↑ 7.0 7.1 forum:t/13409/108
- ↑ forum:t/14628/106