Skip to content

Mécanismes cryptographiques

Vous trouverez ici une brève définition des mécanismes cryptographiques utilisés par Seald.

Leur implémentation utilisée dans Seald est SSCrypto.

Génération d'aléa

Selon l'environnement cible, différents générateurs d'aléa sont utilisés :

Générateur de paires de clés asymétriques

Les clés utilisées sont de type RSA (voir RFC 8017).

Selon l'environnement cible, différents générateurs de paires de clés asymétriques sont utilisés&bsp;:

Chiffrement symétrique

Pour chiffrer symétriquement, deux algorithmes sont utilisés pour assurer à la fois la confidentialité et l'intégrité : un algorithme de chiffrement symétrique ne garantissant que la confidentialité, et un MAC pour assurer l'intégrité.

Dimensionnement

Deux clés symétriques sont utilisées :

  • une clé de chiffrement de 256 bits notée encryptionKey ;
  • une clé pour le MAC de 256 bits notée authenticationKey.

Leur concaténation dans cet ordre est notée messageKey.

Durée de vie

Les clés sont utilisées pour une durée indéterminée pour les données qu'elles protègent.

Chiffrement

Le chiffrement symétrique de clearText avec une messageKey (concaténation de encryptionKey et de authenticationKey) pour obtenir cipheredMessage se fait comme suit :

  • génération d'un vecteur d'initialisation aléatoire noté iv de 128 bits ;
  • chiffrement :
  • MAC :
    • algorithme : HMAC-SHA-256 (voir RFC 6234 §8.3) ;
    • argument (message_array dans la RFC 6234) : la concaténation de iv et de cipherText ;
    • clé (key dans la RFC 6234) : authenticationKey ;
    • résultat : hmac ;
  • retourner : cipheredMessage qui est la concaténation de iv, cipherText, et hmac.

Déchiffrement

Le déchiffrement symétrique de cipheredMessage (concaténation de iv, cipherText, et hmac) avec une messageKey (concaténation de encryptionKey et de authenticationKey) pour obtenir clearText se fait comme suit :

  • MAC :
    • algorithme : HMAC-SHA-256 (voir RFC 6234 §8.3) ;
    • argument (message_array dans la RFC 6234) : la concaténation de iv et de cipherText ;
    • clé (key dans la RFC 6234) : authenticationKey ;
    • résultat : hmac ;
  • comparaison de hmac avec hmac2, si égal poursuivre ;
  • déchiffrement :
  • retourner clearText.

Enveloppe

Lors de l'utilisation du SDK, cipheredMessage est mis dans un format d'enveloppe :

Implémentation

L'implémentation utilisée dépend de l'environnement cible ;

Cryptographie asymétrique

Les clés utilisées sont de type RSA (voir RFC 8017).

Une paire de clés est réservée aux opérations de chiffrement, une autre aux opérations de signature.

Dimensionnement

Les clés sont générées avec un module n de 4096 bits et un exposant public e de 65537.

Durée de vie

Ces clés sont générées pour une durée ne pouvant excéder 157680000 secondes (5 ans), avec une durée de vie par défaut à 94608000 secondes (3 ans).

Chiffrement asymétrique

Le chiffrement asymétrique d'un clearText avec une clé publique notée (n,e) donnée pour obtenir cipheredMessage est effectué comme suit :

  • calculer une somme de contrôle de type CRC32 (voir POSIX.1-2017 §chksum) sur clearText pour donner crc32 de longueur 32 bits ;
  • chiffrement :
    • algorithme : RSAES-OAEP (voir RFC 8017 §7.1.1) avec les paramètres suivants :
      • SHA1 comme fonction de hachage
      • MGF1-SHA1 (voir RFC 8017 §B.2.1) comme fonction de génération de masque
      • le label L laissé vide
    • argument (noté M dans RFC 8017 §7.1.1) : concaténation de crc32 et de cleartext
    • clé utilisée (notée (n,e) dans RFC 8017 §7.1.1) : clé publique du destinataire
    • résultat cipheredMessage
  • retourner : cipheredMessage

TIP

L'utilisation de SHA-1 comme fonction de hachage dans RSAES-OAEP est robuste et conforme au RGS v2.0 (voir §B1.2.2.2), même en considérant que des collisions sont possibles. Pour plus d'informations, voir What Hashes Make RSA-OAEP Secure?.

Déchiffrement asymétrique

Le déchiffrement asymétrique d'un cipheredMessage avec une clé privée notée K donnée pour obtenir clearText est effectué comme suit :

  • déchiffrement :
    • algorithme : RSAES-OAEP (voir RFC 8017 §7.1.2) avec les paramètres suivants :
      • SHA1 comme fonction de hachage ;
      • MGF1-SHA1 (voir RFC 8017 §B.2.1) comme fonction de génération de masque ;
      • le label L laissé vide ;
    • argument (noté C dans RFC 8017 §7.1.2) : concaténation de crc32 et de cleartext ;
    • clé utilisée (notée K dans RFC 8017 §7.1.2) : clé privée du destinataire ;
    • résultat decipheredMessage ;
  • décomposer decipheredMessage en crc32 et clearText ;
  • calculer une somme de contrôle de type CRC32 (voir POSIX.1-2017 §chksum) sur clearText pour donner crc32-2 de longueur 32 bits ;
  • comparer crc32 et crc32-2, si égaux poursuivre ;
  • retourner : clearText.

Signature

La production d'une signature signature d'un textToSign à l'aide d'une clé privée notée K est effectuée comme suit :

  • signature :
    • algorithme : RSASSA-PSS (voir RFC 8017 §8.1.1), utilisant à la première étape l’encodage EMSA-PSS (voir RFC 8017 §9.1.1) avec les paramètres suivants :
      • SHA256 comme fonction de hachage ;
      • MGF1 (voir RFC 8017 §B.2.1) avec SHA256 comme fonction de hachage ;
      • sLen : la longueur maximale valant 478 bytes vu la fonction de hachage choisie et la longueur du module de la clé choisie ;
    • argument (noté M dans RFC 8017 §8.1.1) : textToSign ;
    • clé utilisée (notée K dans RFC 8017 §8.1.1) : Clé privée du signataire ;
    • résultat : signature ;
  • retourner : signature.

Vérification de signature

La vérification d'une signature signature d'un textToSign à l'aide d'une clé publique notée (n,e) associée à la clé privée K utilisée pour signer est effectuée comme suit :

  • vérification de signature :
    • algorithme : RSASSA-PSS (voir RFC 8017 §8.1.1), utilisant à la première étape l’encodage EMSA-PSS (voir RFC 8017 §9.1.1) avec les paramètres suivants :
      • SHA256 comme fonction de hachage ;
      • MGF1 (voir RFC 8017 §B.2.1) avec SHA256 comme fonction de hachage ;
      • sLen : la longueur maximale valant 478 octets vu la fonction de hachage choisie et la longueur choisie pour le module de la clé ;
    • arguments :
    • clé utilisée (notée (n,e) dans RFC 8017 §8.1.2) : Clé publique du signataire ;
    • résultat : booléen signatureIsValid indiquant si la signature est valide pour le message ;
  • retourner : signatureIsValid.

Implémentation

L'implémentation utilisée dépend de l'environnement cible ;

Dérivation de clé

La dérivation de clé à partir d'un passphrase et d'un salt pour obtenir key est effectuée comme suit :

  • dérivation :
    • algorithme : SCrypt, avec les paramètres suivants :
      • N : 16384 ;
      • r : 8 ;
      • p : 1 ;
      • taille de sortie : 64 octets ;
    • arguments : passphrase et salt donnés ;
    • résultat : key ;
  • retourner : key.

Implémentation

L'implémentation utilisée dépend de l'environnement cible ;