# Chiffrement anonyme

En plus du SDK complet, Seald propose également un SDK de chiffrement anonyme. Celui-ci permet à votre application de fournir un moyen à des utilisateurs sans identité Seald (non-inscrits, ou non-connectés) de chiffrer des données pour un utilisateur avec une identité Seald. Vous pouvez également l'utiliser pour que votre serveur chiffre des données pour vos utilisateurs.

Par mesure de sécurité, votre serveur doit autoriser ces chiffrements anonymes à l'aide de JSON Web tokens.

# Import et instanciation

Le SDK de chiffrement anonyme de Seald s'importe de façon séparée du SDK complet.

Il y a trois manières d'utiliser le SDK Anonyme dans votre navigateur, selon vos besoins et l'architecture de votre application web.

# Bibliothèque polyfillée

Cette version est déjà empaquetée, transpilée et minifiée pour l'utilisation dans un navigateur web. Elle inclut toutes les bibliothèques, dépendances et polyfills nécessaires à son fonctionnement.

Utilisez cette méthode si vous utilisez un bundler comme webpack, mais que vous ne voulez pas configurer ce bundler pour inclure les polyfills nécessaires.

# Bibliothèque

Ceci importe @seald-io/sdk/browser/anonymous-sdk.js, qui est la version pour le navigateur.

Utilisez cette méthode si vous utilisez un bundler comme Webpack. Pour cela, referez-vous à la section Empaquetage personnalisé et transpilation du guide sur les imports.

Cette méthode est recommandée, puisqu'elle permet de diminuer la duplication des dépendances et polyfills, et donc minimiser la taille finale de votre application.

# Bundle

Copiez le fichier @seald-io/sdk/browser/anonymous-sdk.browser.js, puis importez-le via une balise <script> :

Cette version est déjà empaquetée, transpilée et minifiée pour l'utilisation dans un navigateur web. Elle inclut toutes les bibliothèques, dépendances et polyfills nécessaires à son fonctionnement.

Elle expose le constructeur du SDK Anonyme dans la variable globale window.AnonymousSDK.

# Node.js / Electron

import { AnonymousSDKBuilder } from '@seald-io/sdk'

const anonymousSDK = AnonymousSDKBuilder({ apiURL })

Cela importe la version empaquetée pour les projets Node.js.

Elle peut être utilisée pour un serveur NodeJS, une application de bureau en Electron, des tests unitaires, etc.

# React-Native

# Installation

Le SDK Anonyme pour react-native a des "peer dependencies" qui doivent être installées séparément :

  • react-native-modpow
  • react-native-get-random-values

Vous pouvez les installer avec la commande:

npm i -S react-native-modpow react-native-get-random-values

# Bundle

Si vous ne configurez pas vous-même la transpilation de votre application, vous pouvez utiliser la version empaquetée, transpilée et minifiée du SDK Anonyme. Elle est utilisable telle quelle.

# Bibliothèque

Si votre application est elle-même transpilée, vous pouvez importer la librairie source. Cela vous permettra alors d'optimiser la taille de votre application.

Cette bibliothèque devra être transpilée pour être utilisée. Pour cela, referez-vous à la section Empaquetage personnalisé et transpilation du guide sur les imports.

# JSON Web Tokens

Par mesure de sécurité, votre serveur doit autoriser ces chiffrements anonymes à l'aide de JSON Web tokens.

Pour la génération des JSON Web Tokens, référez-vous à cette documentation

# Informations sur les JSON Web Token

Le chiffrement anonyme s'effectue en deux étapes

  • récupération des clés de chiffrement des destinataires
  • création du message pour ces destinataires

Chacune de ces deux étapes doit être autorisée par un JSON Web Token.

TIP

La récupération de clés de destinataires peut nécessiter plusieurs requêtes. Il est donc fortement déconseillé de définir un jti sur le JWT en question, sinon les requêtes après la première pourraient échouer. Il est par contre recommandé de définir un iat pour limiter dans le temps l'utilisation du JWT en question.

Au contraire, la création de message se fait en une seule requête. Il est donc recommandé de définir à la fois un iat, pour limiter dans le temps l'utilisation du JWT, et un jti, pour éviter que le même JWT soit utilisé plusieurs fois pendant l'intervalle de temps autorisé.

TIP

Même si techniquement rien n'empêche d'utiliser un seul JWT pour les deux opérations, il est recommandé de créer deux JWT différents pour la récupération de clés et pour la création de message, afin de pouvoir définir un jti sur le JWT de création de message, pour que celui-ci ne puisse être utilisé qu'une seule fois.

# Utilisation

Vous avez maintenant tout le nécessaire pour faire un chiffrement anonyme. Cela se fait avec la fonction anonymousSDK.encrypt.

Les arguments à noter de cette fonction sont:

  • clearFile : Obligatoire. Le fichier à chiffrer. Peut être un string, un Buffer, un Blob, un WebStream ReadableStream, ou un stream Node Readable. Si vous utiliser un ReadableStream ou un Readable, vous devrez également donner l'argument fileSize.
  • getKeysToken : Facultatif. Le JWT utilisé pour la récupération de clé. S'il n'est pas fourni, la récupération de clé utilisera encryptionToken.
  • encryptionToken : Obligatoire. Le JWT utilisé pour la création de message.
  • sealdIds : Obligatoire. Tableau des Seald IDs des destinataires du message à créer.

Le retour de cette fonction est une Promise, contenant :

  • id : un string, ID du message nouvellement créé.
  • encryptedFile : fichier nouvellement chiffré, au même format que le format du clearFile donné.

Exemple d'utilisation :