Groupes
Seald supporte la notion de groupes. Vous pouvez créer un groupe contenant plusieurs utilisateurs, afin de pouvoir facilement chiffrer des données pour tous les utilisateurs de ce groupe.
Vous pouvez aussi facilement ajouter ou enlever des membres du groupe. Bien entendu, quand vous ajoutez des membres à un groupe, ils ont immédiatement accès aux élements précédemment chiffrés pour le groupe ; réciproquement, quand vous supprimez des membres d'un groupe, ils perdent accès à tous les documents chiffrés pour le groupe.
Créer un groupe
Pour créer un groupe, vous devez utiliser la méthode SealdSDK.createGroup
.
const group = await seald.createGroup({
groupName: 'Mon super groupe', // sera affiché dans le tableau d'administration. Simple aide pour se retrouver. Vous pouvez par example mettre l'id que votre back-end a assigné à ce groupe.
members: {
sealdIds: [mySealdId, otherUserSealdId] // tous les membres du groupe : les utilisateurs qui pourront lire les messages destinés au groupe. Doit absolument contenir l'utilisateur qui est en train de créer le groupe.
},
admins: {
sealdIds: [mySealdId] // les administrateurs du groupe : les utilisateurs qui pourront ajouter / supprimer des membres au groupe. Doit absolument contenir l'utilisateur qui est en train de créer le groupe.
}
})
// `group` est alors de la forme `{ groupName: string, id: string }`.
// `group.groupName` est ce que vous venez d'assignez lors de la création du groupe, ici `Mon super groupe`.
// `group.id` est l'ID que vous pouvez utiliser afin de chiffrer à destination de ce groupe. C'est un `sealdId`
TIP
Pour accélérer la création de groupes, vous pouvez pré-générer les clés privées en appelant la fonction seald.preGenerateIdentityKeys()
à l'avance.
Chiffrer pour un groupe
Lorsqu'un utilisateur chiffre une donnée à destination d'un groupe, tous les membres de ce groupe peuvent alors la déchiffrer.
const encryptedForGroup = await sealdSender.encryptFile( // un premier utilisateur du SDK chiffre à destination du groupe
'Secret file content',
'my_secret_file.txt',
{ sealdIds: [groupId] }
)
const decrypted = await sealdGroupMember.decryptFile(encryptedForGroup) // un second utilisateur du SDK, qui est membre du groupe, déchiffre la donnée précédemment chiffrée pour le groupe
// Ici, l'utilisateur a déchiffré la donnée, et on a bien comme attendu `decrypted === 'Secret file content'`
TIP
Si vous chiffrez pour un groupe dont l'utilisateur fait partie, vous pouvez utiliser l'argument optionnelencryptForSelf: false
afin de ne pas chiffrer directement pour ses propres identités. L'utilisateur pourra toujours déchiffrer la donnée grâce à son appartenance au groupe. Ceci peut vous permettre d'améliorer la performance du chiffrement.
Ajouter / retirer des membres au groupe
Les administrateurs du groupe peuvent ajouter et retirer des membres au groupe.
Lorsqu'on ajoute un membre au groupe, il peut alors déchiffrer les données précédemment chiffrées pour ce groupe.
await sealdGroupAdmin.addGroupMembers(groupId, { sealdIds: [newMemberSealdId] }) // seul un administrateur du groupe peut ajouter des membres
const decrypted = await sealdNewMember.decryptFile(encryptedForGroup) // l'utilisateur nouvellement ajouté peut alors déchiffrer une donnée précédemment chiffrée pour le groupe
Réciproquement, lorsqu'on retire un membre du groupe, il ne peut plus déchiffrer les données chiffrées pour le groupe.
Dans ce cas, et pour plus de sécurité, il est conseillé de procéder à un renouvellement des clés du groupe.
const decrypted = await sealdGroupMember.decryptFile(encryptedForGroup) // un utilisateur du groupe peut déchiffrer une donnée chiffrée pour le groupe
await sealdGroupAdmin.removeGroupMembers(groupId, { sealdIds: [groupMemberToRemoveSealdId] }) // seul un administrateur du groupe peut retirer des membres
await sealdGroupMember.decryptFile(encryptedForGroup) // Rejette une erreur : l'utilisateur nouvellement retiré ne peut alors plus déchiffrer une donnée chiffrée pour le groupe
await sealdGroupAdmin.renewGroupKey(groupId) // un administrateur du groupe peut alors renouveler les clés du groupe pour plus de sécurité
Un administrateur du groupe peut également ajouter et retirer des administrateurs au groupe.
await sealdGroupAdmin.setGroupAdmin(groupId, { sealdIds: [newAdminSealdId] }, true) // newAdmin devient alors administrateur
await sealdGroupAdmin.setGroupAdmin(groupId, { sealdIds: [oldAdminSealdId] }, false) // oldAdmin n'est alors plus administrateur