Igår, 20:35
  #1
Medlem
Hej!

Jag bygger en end-to-end-krypterad meddelandeapp riktad mot aktivister och journalister. Jag använder Signal-protokollet som grund, men Dart-biblioteket saknar en funktion som kallas "sealed sender" — som döljer avsändarens identitet även för servern.
Eftersom det saknades byggde jag en egen implementation från grunden med:

X25519 för nyckelutbyte
HKDF-SHA256 för nyckelderivering
ChaCha20-Poly1305 för kryptering
Ed25519 för certifikatsignering

Servern agerar certifikatutfärdare och signerar avsändarcertifikat. Det betyder att en illvillig serveroperatör tekniskt sett skulle kunna förfalska avsändarens identitet. Försvaret mot detta är säkerhetsnummerverifiering utanför appen — samma modell som Signal använder.

Efter att ha jämfört med Signals egen källkod märkte jag en viktig skillnad: Signal hårdkodar sin CA-nyckel direkt i klientappen, medan min app hämtar och pinnar nyckeln från servern vid första anslutningen (TOFU). Det gör den första anslutningen till en potentiellt sårbar punkt.
Den viktigaste frågan: bör man hårdkoda en trust root i klientappen som Signal gör? Och hur fungerar det när olika operatörer kör sina egna servrar i ett federerat system?

Full teknisk dokumentation av konstruktionen finns här för den som vill gå djupare: https://pastebin.com/TChBVM2X

Tack på förhand! <3
Citera
Idag, 04:47
  #2
Medlem
Kip.Kinkels avatar
Citat:
Ursprungligen postat av artifacten
Hej!

Jag bygger en end-to-end-krypterad meddelandeapp riktad mot aktivister och journalister. Jag använder Signal-protokollet som grund, men Dart-biblioteket saknar en funktion som kallas "sealed sender" — som döljer avsändarens identitet även för servern.
Eftersom det saknades byggde jag en egen implementation från grunden med:

X25519 för nyckelutbyte
HKDF-SHA256 för nyckelderivering
ChaCha20-Poly1305 för kryptering
Ed25519 för certifikatsignering

Servern agerar certifikatutfärdare och signerar avsändarcertifikat. Det betyder att en illvillig serveroperatör tekniskt sett skulle kunna förfalska avsändarens identitet. Försvaret mot detta är säkerhetsnummerverifiering utanför appen — samma modell som Signal använder.

Efter att ha jämfört med Signals egen källkod märkte jag en viktig skillnad: Signal hårdkodar sin CA-nyckel direkt i klientappen, medan min app hämtar och pinnar nyckeln från servern vid första anslutningen (TOFU). Det gör den första anslutningen till en potentiellt sårbar punkt.
Den viktigaste frågan: bör man hårdkoda en trust root i klientappen som Signal gör? Och hur fungerar det när olika operatörer kör sina egna servrar i ett federerat system?

Full teknisk dokumentation av konstruktionen finns här för den som vill gå djupare: https://pastebin.com/TChBVM2X

Tack på förhand! <3

Vad tycker Claude om det här eländet? Finns nog inte nerdar nog på detta forum.

Signal hårdkodar sin CA-nyckel direkt i klientappen

Japp!
__________________
Senast redigerad av Kip.Kinkel Idag kl. 04:50.
Citera

Skapa ett konto eller logga in för att kommentera

Du måste vara medlem för att kunna kommentera

Skapa ett konto

Det är enkelt att registrera ett nytt konto

Bli medlem

Logga in

Har du redan ett konto? Logga in här

Logga in