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 JWTJWTSecret
: Secret de JWT, permettant de générer des JSON Web Token nécessaire à l'utilisation du 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
:
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:
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 :
- par mot de passe avec le plugin
@seald-io/sdk-plugin-ssks-password
; - en two-man rule avec le plugin
@seald-io/sdk-plugin-ssks-2mr
.
Ces modes sont disponibles sous forme de plugins pour le SDK Seald installables séparément :
# 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 :
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.
const seald = SealdSDK({ appId, apiURL })
await seald.initialize()
Si vous utilisez des plugins, il faut les passer à l'instanciation :
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.
// 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 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 :
// Chiffrer / déchiffrer des fichiers
const encryptedFile = await seald.encryptFile('Secret file content', 'SecretFile.txt', { sealdIds: [mySealdId, otherUserSealdId] })
const decryptedFile = await seald.decryptFile(encryptedFile)
// 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)