Matrix (protokoll)

**Matrix** (mõnikord stiliseeritud kujul "[matrix]") on avatud standard ja sideprotokoll reaalajas suhtlemiseks.

Protokolli eesmärk on muuta reaalajas suhtlus erinevate teenusepakkujate vahel sujuvaks, toimides sarnaselt tavapärasele e-posti edastusprotokollile, võimaldades kasutajatel, kellel on ühe sideteenuse pakkuja kontod, suhelda kasutajatega teiselt teenusepakkujalt.

Matrix defineerib komplekti avatud API-sid detsentraliseeritud suhtluse jaoks, mis sobivad andmete turvaliseks avaldamiseks, säilitamiseks ja tellimiseks üle globaalsete avatud serverite föderatsiooni, millel puudub keskne juhtimispunkt. Kasutusalad hõlmavad kiirsõnumite (IM), internetitelefoni (VoIP), asjade interneti (IoT) suhtlust ja olemasolevate suhtlussüsteemide ühendamist – luues aluse uuele avatud reaalajas suhtluse ökosüsteemile.

## Ajalugu
Algne projekt loodi Amdocsi sees, kui Matthew Hodgson ja Amandine Le Pape töötasid vestlustööriista "Amdocs Unified Communications" kallal.

## Arendus
Matrix on avatud lähtekoodiga projekt, mille arendamist veab Matrix.org sihtasutus. Eesmärk on luua avatud standard detsentraliseeritud suhtluseks. Selle arendust juhib peamiselt Element, Ühendkuningriigis asuv ettevõte, mis oli varem tuntud kui New Vector Limited.

## Protokoll
Matrix on föderaalne süsteem, mis koosneb peamiselt koduserveritest, tubadest (ingl *rooms*) ja kasutajatest. Kogu suhtlus Matrixi kasutajate vahel toimub toas. Kui kasutaja (Alice) soovib toas teistega suhelda, peab ta esmalt saatma sõnumid oma koduserverisse (matrix.alice.com) kasutades Kliendi-Server API-t. Koduserver kasutab seejärel Server-Server API-t, et sünkroonida sõnumeid teiste tubas osalevate koduserveritega. Lõpuks saavad sihtkasutajate kliendid (Bob ja Charlie) oma koduserverilt sünkroonitud sõnumid.

### Krüpteerimine
**Olm** teek pakub *end-to-end* krüpteerimist ruumipõhiselt, kasutades Double Ratchet algoritmi implementatsiooni . See tagab, et ruumis talletatud vestlusandmed on loetavad ainult ruumi osalejatele. Kui krüpteerimine on aktiveeritud, edastatakse Matrixis andmed vaid šifreeritult, nii et Matrixi serverid näevad neid ainult šifritekstina, ning neid saavad dešifreerida vaid ruumi volitatud osalejad.

Olm-i Double Ratchet algoritmi rakendus, on väga sarnane Signal-protokolli kasutatavale algoritmile. See võimaldab luua üks-ühele privaatse sidekanali, millel on täiuslik edasisalajasus ja isetervenevad omadused.

**Megolm** on AES-põhine ühekordne ratšett grupivestlusteks suure hulga osalejatega, kus Olmi kasutamine oleks kulukas, sest see tähendaks iga osaleja jaoks iga sõnumi eraldi krüpteerimist. Megolm jätab selle kõrvale, krüpteerides sõnumid sümmeetrilise ratšetiga, jagades ühe korra iga osalejaga ja seejärel taaskasutades sõnumite jada jaoks enne pöörlemist.

On kaks peamisi rakendusi:

* **vodozemac** on libolm Rust-reimplementatsioon. Põhimõtteliselt on see Olmi ja Megolmi krüptograafiliste põrkmehhanismide rakendamine koos kõrgetasemelise API-ga, et hõlpsasti luua krüptograafilisi sidekanaleid, mis kasutavad neid põrkmehhanisme teiste osapooltega. Seda on auditeerinud Least Authority, kelle tulemused on avalikult kättesaadavad ja Matrixi meeskond on nendega tegelenud.
* **libolm** oli Matrixi esimene Double Ratchet algoritmi teostus, nüüd aegunud. On läbinud krüptograafilise ülevaate NCC Group poolt, mille tulemused on avalikult kättesaadavad ja Matrixi meeskond on nendega tegelenud.

## Ökosüsteem

### Kliendid
Matrixi abil vestlemiseks on vaja klienti. Kõige kasutatavad on järgmised klientid:

* **Element** – täisfunktsionaalne platvormideülene klient, mida arendab ja hooldab Element.
* **Element X** – uue põlvkonna klient mobiilplatvormidele, mis kasutab Matrix-protokolli järgmise (2.0) versiooni.
* **FluffyChat** – avatud lähtekoodiga Matrixi klient, mis on kirjutatud Flutteris. Rakenduse eesmärk on luua hõlpsasti kasutatav kiirsuhtlus, mis on avatud lähtekoodiga ja kõigile juurdepääsetav.

### Koduserverid
Koduserver vastutab andmete salvestamise, sõnumite saatmise ja vastuvõtmise jms funktsioonide eest. Koduserverit saab ise juhitavale infrastruktuurile rakendada igaüks. Kõige sagedamini kasutatakse järgmist serveritarkvara:

* **Synapse** on avatud lähtekoodiga Matrixi koduserveri rakendus, mis on kirjutatud Python/Twisted kasutades. Seda arendab ja hooldab Element.
* **Dendrite** on Go kasutades kirjutatud teise põlvkonna Matrixi koduserver. Selle eesmärk on pakkuda Synapse'ile tõhusat, usaldusväärset ja skaleeritavat alternatiivi. Seda arendab ja hooldab Element.
* **Conduit** Matrixi koduserveri Rust implementatsioon.
* **conduwuit** on Conduiti kõvakahvel.

Suurim Matrixi koduserver on matrix.org, mida juhivad Matrix protokolli arendajad.

## Kasutus
### Tchap
Prantsuse valitsuse ministeeriumidevaheline digiteenus lõi **Tchapi**, Matrixi-põhiste krüpteeritud sõnumsideteenuse avalike teenistujate jaoks ainult konfidentsiaalse teabe vahetamiseks. Projekti peamisteks eesmärkideks on sidevõrgu turvalisuse tagamine ja teenuse koostalitlusvõime parandamine erinevate haldusasutuste vahel.

### TI-Messenger
Telematics Infrastructure Messenger (lühendatult TI-Messenger, TI-M) on turvaline sõnumivahetussüsteem, mis on välja töötatud Saksamaa tervishoiusektori jaoks. TI-Messenger on osa telemaatika infrastruktuurist ja täidab kõik Saksamaa andmekaitse ja andmeturbe juriidilised nõuded. TI-Messenger põhineb Matrixi protokollil.

### BundesMessenger
Saksa relvajõudude IT-teenuse pakkuja BWI on välja töötanud avatud lähtekoodiga tehnoloogial põhineva turvalise sõnumiplatvormi BundesMessenger. Seda platvormi, mida Bundeswehr on 2021. aastast BwMessengeri nime all kasutanud, laiendatakse nüüd avalikus halduses kasutamiseks.

BundesMessenger on Element klienti muudetud versioon ja toimib Saksamaa avaliku halduse vajadustele kohandatud kaasaegse suhtlusplatvormi esiotsa. Põhineb Matrixi protokollil.

## Haavatavused
2021. aasta septembris avaldas Royal Holloway Ülikooli uurijate meeskond uuringu, mis teatab mitmest haavatavusest, mis õõnestavad Matrixi autentimise ja konfidentsiaalsuse garantiisid. Kõik uurijate kirjeldatud rünnakud vajavad pahatahtliku või kompromiteeritud koduserveri abi, mis sihib sellega ühenduvaid kasutajaid. Mõnel juhul on kogenud kasutajatel võimalusi tuvastada, et rünnak on käimas. Haavatavused oli parandatud.

## Viited