Je veux comprendre le processus du protocole de signal. Je l'ai sur Google, mais je ne trouve aucun bon article ou tutoriel.
Je veux comprendre la définition de base et la fonctionnalité du protocole de signal, et ce serait formidable si un diagramme décrivant le processus était disponible.
Jetez un oeil à ce livre blanc technique de WhatsApp, ils ont récemment migré vers le protocole de signal pour le cryptage e2e.
Identity Key Pair
- Une paire de clés Curve25519 à long terme, générée au moment de l'installation.Signed Pre Key
- Une paire de clés Curve25519 à moyen terme, générée au moment de l'installation, signée par la clé d'identité et pivotée périodiquement.One-Time Pre Keys
- Une file d'attente de paires de clés Curve25519 à usage unique, générée au moment de l'installation et réapprovisionnée au besoin. Types de clés de sessionRoot Key
- Une valeur de 32 octets qui est utilisée pour créer des clés de chaîne.Chain Key
- Une valeur de 32 octets qui est utilisée pour créer des clés de message.Message Key
- Une valeur de 80 octets utilisée pour crypter le contenu du message. 32 octets sont utilisés pour une clé AES-256, 32 octets pour une clé HMAC-SHA256 et 16 octets pour un IV.Identity Key
, Public Signed Pre Key
Et un seul public One-Time Pre Key
Pour le destinataire.One-Time Pre Key
N'est utilisé qu'une seule fois, il est donc supprimé du stockage du serveur après avoir été demandé. Si le dernier lot de One-Time Pre Keys
Du destinataire a été consommé et que le destinataire ne les a pas réapprovisionnés, aucun One-Time Pre Key
Ne sera retourné.Identity Key
Du destinataire sous Irecipient
, le Signed Pre Key
Sous Srecipient
et le One-Time Pre Key
Sous Orecipient
.Einitiator
.Identity Key
En tant que Iinitiator
.master_secret = ECDH(Iinitiator, Srecipient) || ECDH(Einitiator, Irecipient) || ECDH(Einitiator, Srecipient) || ECDH(Einitiator, Orecipient)
. S'il n'y a pas de One Time Pre Key
, L'ECDH final est omis.Root Key
Et Chain Keys
À partir du master_secret
.Après avoir créé une session de chiffrement de longue durée, l'initiateur peut immédiatement commencer à envoyer des messages au destinataire, même si le destinataire est hors ligne. Jusqu'à ce que le destinataire réponde, l'initiateur inclut les informations (dans l'en-tête de tous les messages envoyés) dont le destinataire a besoin pour créer une session correspondante. Cela inclut les Einitiator
et Iinitiator
de l'initiateur.
Lorsque le destinataire reçoit un message contenant des informations de configuration de session:
master_secret
Correspondant en utilisant ses propres clés privées et les clés publiques annoncées dans l'en-tête du message entrant.One-Time Pre Key
Utilisé par l'initiateur.Root Key
Et Chain Keys
Correspondant du master_secret
.