Skip to content

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.

javascript
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`
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.

javascript
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'`
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.

javascript
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
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.

javascript
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é
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.

javascript
await sealdGroupAdmin.setGroupAdmin(groupId, { sealdIds: [newAdminSealdId] }, true) // newAdmin devient alors administrateur

await sealdGroupAdmin.setGroupAdmin(groupId, { sealdIds: [oldAdminSealdId] }, false) // oldAdmin n'est alors plus administrateur
await sealdGroupAdmin.setGroupAdmin(groupId, { sealdIds: [newAdminSealdId] }, true) // newAdmin devient alors administrateur

await sealdGroupAdmin.setGroupAdmin(groupId, { sealdIds: [oldAdminSealdId] }, false) // oldAdmin n'est alors plus administrateur