Tekstberichten gaan niet via de blob store (neem ik aan), in theorie zouden afbeeldingen hetzelfde behandeld kunnen worden als (langs) tekstberichten (ala usenet base64 enzo).
Sure, dat zou je kunnen doen; maar ik denk dat dat inefficient is en je eigenlijk dezelfde "problemen" krijgt; enkel via een ander kanaal dat er eigenlijk nooit op ontworpen is vanwege efficiënte doelen. En je schiet er dan niets mee op tenzij ik je verkeerd begrijp. Immers: bij tekstberichten is het normaal zo dat als jij/je ontvanger multi-device werkt EN/OF als je naar meerdere mensen een bericht wil (door)sturen (eg: broadcast list), dat dan het bericht meermaals versleuteld wordt met de daarvoor bestemde unieke keys (ratchet functie) per gebruiker/device. Die individuele berichten worden allen geupload naar de messenger servers. Voor tekstberichten boeit dat heel weinig omdat die verwaarloosbaar groot zijn, die paar bytes aan data nog een keer versleutelen en opslaan is geen enkel probleem. Daarom gaan de decryptiesleutel en de blobpointer wél over het tekstkanaal (met unieke keys om de sleutel te beveiligen), zodat end-to-end encryptie tussen alle clients (multi-user en multi-device) gewaarborgd blijft; óok voor de bijlagen. (De bijlage heeft weliswaar één key for all, maar de uitwisseling van de pointer en die decryptiesleutel gaan wel over het uniek per-user/device versleutelde E2EE kanaal, waardoor je de sleutel sterk beveiligt én authenticatie hebt.)
Maar: als je bijlagen - of het nou een afbeelding, video, PDFje of wat dan ook is - ook via dat kanaal versleuteld wil gaan versturen, dan krijg je dus dat de verzender fors meer batterij gaat verbruiken om de boel meermaals te versleutelen en fors meer data gaat verstoken omdat elk bericht uniek moet zijn dankzij die unieke sleutels; en die unieke sleutels per bericht zijn verplicht vanwege de manier waarop het protocol en de encryptie werkt om o.a.
PFS en
Future Secrecy te garanderen. (En dan ook nog even bedenken: soms sturen mensen rustig 30 afbeeldingen tegelijk. Dan gaat het opeens heel snel qua data, resources, vereiste opslag, etc. Met een broadcast list aan 30 mensen moet je dan 30 x 30 afbeeldingen gaan versleutelen; als je multi-device werkt is het al tenminste 31 x 30 en zo voorts.) Dan moet je daarnaast dus in de metadata van het bericht meegeven dat er een bijlage bij zit ipv dat het een tekstbericht is. En daarvan moet de client dan ook eerst nog kunnen zeggen "Die bijlage wil ik nu niet hebben, want ik zit op 4G" (of als ze de instelling hebben dat ze altijd eerst erop moeten tikken om te downloaden, gebeurt dat altijd) - terwijl tekstberichten normaal gesproken juist direct afgeleverd worden zodra de user online komt. Dan moet (dat deel van) het bericht dus op de reguliere server blijven staan terwijl die normaliter eigenlijk afgeleverd zou moeten worden omdat het een tekstbericht is. Dat is dus niet perse anders dan de blobstore en dan ben je dus geen meter opgeschoten, maar ben je er eigenlijk juist op achteruit gegaan vanwege het verhoogde data- en resource-verbruik plus moet je tekstbericht A anders gaan behandelen dan tekstbericht B.
Goed, je zou kunnen zeggen: maar dan doen we hetzelfde trucje om data, CPU cycles en batterij te besparen: de bijlage versleutelen we AES en rammen we in base64 over het reguliere tekstkanaal tezamen met de key en geven in de metadata aan dat het een bijlage is. Zo besparen we 30x30 cycles zoals in het voorbeeld hierboven. Maarrrrr wat je dan doet is eigenlijk het breken van de unieke keys die normaal gesproken worden gebruikt voor elk individueel tekstbericht. Wat je nu hebt ontwikkeld is eigenlijk een Frankenstein: je tekstberichten horen een unieke key te gebruiken en uiterst volatiel te zijn per user/device, maar dat wordt nu opeens een single key speciaal voor afbeeldingen die in de client en op de server apart afgehandeld moet worden. Wat heb je gedaan? Je hebt de messenger servers nu de facto een veredelde blobstore gemaakt en je bent wederom dus niets opgeschoten, maar er enkel op achteruit gegaan naar mijn mening.
Daar komt nog bij dat de messenger servers extreem light-weight ontworpen zijn. Ik weet niet hoe het nu zit, maar een paar jaar geleden kon één server (bare-metal en niet eens met wereldschokkende specs ofzo) een paar miljoen *unieke gebruikers* tegelijk online aan. Zo efficiënt was dat ingericht. Als die servers opeens tig meer I/O moeten gaan doen en de bewaartijd vaak langer dan normaal zou zijn, dan ondermijn je de efficiëntie van de hele setup omdat diezelfde server nu opeens ook veel I/O-intensievere taken moet gaan verrichten een hybride tussen messenger en bijlagen wordt; daar ga je nooit dezelfde efficiëntie mee behalen. Plus: bij de scheiding zoals die nu is heb je 2 sets aan failure points ipv een SPoF. Zo is het weleens voorgekomen dat iedereen probleemloos kon chatten met elkaar, maar bijlagen niet werden verstuurd/ontvangen vanwege issues met/onderhoud aan de storage.
Ergo: zowel om uniformiteit in de encryptiemethode op het tekstkanaal te bewaken, een makkelijker manier te hebben voor multi-client synchronisatie, broadcast lists én groepen op een uiterst efficiënte manier, denk ik dat de huidige methode om bijlagen volledig te scheiden van het tekstkanaal superieur is aan het uitwisselen van bijlagen over datzelfde tekstkanaal zoals jij voorstelt - ook voor relatief kleine zaken zoals een afbeelding/meerdere afbeeldingen. Het is gewoon vele malen efficiënter en slimmer ingericht nu.
Dat kan in een grote groepschat dus wel even duren?
Als het een groep is met veel leden die maar eens in de zoveel tijd online komen of nooit kiezen om de bijlagen te downloaden, dan kan het inderdaad langer duren voor het expunged wordt dan wat je ziet qua volatiliteit bij één op één chats, broadcast lists en actieve groepen. (Overigens gaat het bij een één op één chat ook niet direct van de blobstore af, er zit een kleine marge in voor het geval de verzender dezelfde bijlage nog gaat versturen naar andere mensen óf de ontvanger dat bericht doorstuurt naar anderen. Als de pointer vervallen is en je wil het doorsturen, dan versleutelt jouw client het opnieuw en upload deze met een nieuwe AES-key naar de blobstore.)
[Reactie gewijzigd door WhatsappHack op 3 mei 2023 10:46]