Skip to content

Premiers pas

Avant de commencer, il vous faut un compte Seald. Vous pouvez créer un compte d'essai sur notre environnement de test ici : https://www.seald.io/fr/create-sdk.

Une fois votre compte d'essai créé, vous pouvez accéder au tableau d'administration et récupérer les informations nécessaires.

WARNING

Ceci vous permet de créer un compte sur notre environment de test seulement. Cet environnement ne peut pas être migré vers un environnement de production. Il n'y a pas de garantie de service et les données peuvent être amenées à être supprimées.

Pour créer un compte de production, contactez-nous.

Pré-requis

Depuis votre compte développeur, récupérez les éléments suivants :

  • appId : UUID unique pour votre application ;
  • apiURL : URL du serveur d'API à utiliser. Nécessaire uniquement pour les environnements de test ; pour l'environnement de production, vous pouvez ne pas passer la variable ;
  • keyStorageURL : URL du serveur de stockage des identités à utiliser. Nécessaire uniquement pour les environnements de test, pour l'environnement de production, vous pouvez ne pas passer la variable.
  • JWTSecretId : L'identifiant de secret de JWT
  • JWTSecret : Secret de JWT, permettant de générer des JSON Web Token nécessaire à l'utilisation du SDK.
Dashboard mode SDK
Tableau d'administration

L'utilisation du SDK nécessite des JSON Web Token (JWT). Pour générer des JWT, vous aurez besoin d'un secret de JWT (JWT Secret).

Lors de la création de votre compte d'administration, un secret de JWT incluant toutes les permissions est automatiquement généré. Celui-ci s'affiche sur la page d'accueil.

WARNING

Le JWTSecret est un secret, il convient de la gérer de façon sécurisée. L'appId et le JWTSecretId eux peuvent être publics.

Vous pouvez générer d'autres secrets de JWT sur le tableau de bord. Pour ce faire, allez dans les paramètres, onglet JWT secrets. Cliquez sur create secret. Sélectionnez les permissions que vous souhaitez, puis confirmez la création du secret. Une fois le secret créé, récupérez son ID, noté JWTSecretId ci-après, ainsi que sa valeur, JWTSecret.

Installation

Pour utiliser le SDK Seald dans votre application, vous devez installer le paquet NPM @seald-io/sdk :

bash
npm i -S @seald-io/sdk
npm i -S @seald-io/sdk

Application en React-Native

Pour le SDK react-native, en plus du Seald-SDK lui-même, il faudra installer react-native-modpow, react-native-async-storage, @seald-io/react-native-scrypt, react-native-rsa-native, et react-native-get-random-values:

bash
npm i -S react-native-modpow @react-native-community/async-storage @seald-io/react-native-scrypt react-native-rsa-native react-native-get-random-values
npm i -S react-native-modpow @react-native-community/async-storage @seald-io/react-native-scrypt react-native-rsa-native react-native-get-random-values

Pour iOS, vous aurez peut-être besoin de lancer cd ios && pod install.

Par ailleurs, si react-native <0.59 est utilisé il faudra effectuer un npm link pour chacune de ces bibliothèques.

Génération du signupJWT

La création d'une identité sur le SDK nécessite un JWT, appelé signupJWT. Ce JWT doit être généré par votre backend, à l'aide du secret de JWT créé ci-dessus.

Pour plus d'information, référez-vous à la documentation complète des JWT

Vous pouvez utiliser directement l'un de nos exemples de génération de JWT d'inscription.

Sauvegarde des identités

Pour enregistrer les identités des utilisateurs sur l'appareil local, vous pouvez utiliser une base de données locale persistante.

Additionnellement, pour protéger les identités des utilisateurs sur serveur, deux modes sont disponibles :

Ces modes sont disponibles sous forme de plugins pour le SDK Seald installables séparément :

bash
# Pour une protection par mot de passe @seald-io/sdk-plugin-ssks-password :
npm i -S @seald-io/sdk-plugin-ssks-password

# Pour une protection en 2-man rule @seald-io/sdk-plugin-ssks-2mr :
npm i -S @seald-io/sdk-plugin-ssks-2mr
# Pour une protection par mot de passe @seald-io/sdk-plugin-ssks-password :
npm i -S @seald-io/sdk-plugin-ssks-password

# Pour une protection en 2-man rule @seald-io/sdk-plugin-ssks-2mr :
npm i -S @seald-io/sdk-plugin-ssks-2mr

Pour plus de détails, voir ici.

WARNING

Si aucun plugin de protection des identités ni base de donnée persistante n'est utilisé, l'identité de l'utilisateur ne sera enregistrée nulle part, et les données chiffrées avec seraient irrécupérables dès la fermeture de l'onglet ou de l'application.

Commencer à chiffrer

Une fois tous ces éléments mis en œuvre, il ne reste plus qu'à commencer à chiffrer 😊.

Import

En premier lieu, il faut importer le SDK, et éventuellement les plugins voulus :

js
import SealdSDK from '@seald-io/sdk'

import SealdSDKPluginSSKSPassword from '@seald-io/sdk-plugin-ssks-password'
import SealdSDK from '@seald-io/sdk'

import SealdSDKPluginSSKSPassword from '@seald-io/sdk-plugin-ssks-password'

Pour des cas spécifiques (notamment dans des process de build non standards), voir le détail des modes d'imports.

Instanciation

Cette étape permet d'instancier le SDK.

js
const seald = SealdSDK({ appId, apiURL })
await seald.initialize()
const seald = SealdSDK({ appId, apiURL })
await seald.initialize()

Si vous utilisez des plugins, il faut les passer à l'instanciation :

js
const seald = SealdSDK({ appId, apiURL, plugins: [SealdSDKPluginSSKSPassword(keyStorageURL)] })
await seald.initialize()
const seald = SealdSDK({ appId, apiURL, plugins: [SealdSDKPluginSSKSPassword(keyStorageURL)] })
await seald.initialize()

Initialisation & récupération d'une identité Seald

Dans cet exemple, le mode de protection par mot de passe est employé, et l'identité chiffrée par un dérivé de ce mot de passe est envoyée sur l'instance en SaaS de SSKS.

js
// Si vous créez un compte pour la première fois
const password = 'SuperSecretPassword' // Le mot de passe de l'utilisateur. Sera utilisé pour chiffrer sa clé d'identité
const signupJWT = 'XXXXXXXXXXXXXX' // Donné par votre serveur
const { sealdId: mySealdId } = await seald.initiateIdentity({ signupJWT, displayName: 'Friendly Name' }) // Créer son identité Seald
await seald.ssksPassword.saveIdentity({ userId: myUserId, password }) // Sauvegarder l'identité Seald, chiffrée par le mot de passe, sur le serveur SSKS
// Si vous créez un compte pour la première fois
const password = 'SuperSecretPassword' // Le mot de passe de l'utilisateur. Sera utilisé pour chiffrer sa clé d'identité
const signupJWT = 'XXXXXXXXXXXXXX' // Donné par votre serveur
const { sealdId: mySealdId } = await seald.initiateIdentity({ signupJWT, displayName: 'Friendly Name' }) // Créer son identité Seald
await seald.ssksPassword.saveIdentity({ userId: myUserId, password }) // Sauvegarder l'identité Seald, chiffrée par le mot de passe, sur le serveur SSKS
js
// Si vous récupérez un compte déjà créé
const password = 'SuperSecretPassword' // Le mot de passe de l'utilisateur. Sera utilisé pour déchiffrer sa clé d'identité
const { sealdId: mySealdId } = await seald.ssksPassword.retrieveIdentity({ userId: myUserId, password })
// Si vous récupérez un compte déjà créé
const password = 'SuperSecretPassword' // Le mot de passe de l'utilisateur. Sera utilisé pour déchiffrer sa clé d'identité
const { sealdId: mySealdId } = await seald.ssksPassword.retrieveIdentity({ userId: myUserId, password })

Chiffrer et déchiffrer

Deux possibilités sont fournies pour chiffrer et déchiffrer :

js
// Chiffrer / déchiffrer des fichiers
const encryptedFile = await seald.encryptFile('Secret file content', 'SecretFile.txt', { sealdIds: [mySealdId, otherUserSealdId] })
const decryptedFile = await seald.decryptFile(encryptedFile)
// Chiffrer / déchiffrer des fichiers
const encryptedFile = await seald.encryptFile('Secret file content', 'SecretFile.txt', { sealdIds: [mySealdId, otherUserSealdId] })
const decryptedFile = await seald.decryptFile(encryptedFile)
js
// Utiliser des sessions
const session = await seald.createEncryptionSession({ sealdIds: [mySealdId, otherUserSealdId] })
const encryptedMessage = await session.encryptMessage('SecretMessage')
const decryptedMessage = await session.decryptMessage(encryptedMessage)
await session.addRecipients({ sealdIds: [anotherUserSealdId] })
await session.revokeRecipients({ sealdIds: [otherUserSealdId] })

const sessionBis = await seald.retrieveEncryptionSession({ encryptedMessage })
const decryptedMessageBis = await sessionBis.decryptMessage(encryptedMessage)
// Utiliser des sessions
const session = await seald.createEncryptionSession({ sealdIds: [mySealdId, otherUserSealdId] })
const encryptedMessage = await session.encryptMessage('SecretMessage')
const decryptedMessage = await session.decryptMessage(encryptedMessage)
await session.addRecipients({ sealdIds: [anotherUserSealdId] })
await session.revokeRecipients({ sealdIds: [otherUserSealdId] })

const sessionBis = await seald.retrieveEncryptionSession({ encryptedMessage })
const decryptedMessageBis = await sessionBis.decryptMessage(encryptedMessage)