Skip to content
KitploitKITPLOIT
OutilsBlog
Soumettre
OutilsBlog
Soumettre

Outils de Hacking, PenTest et Cybersécurité pour votre Arsenal de Sécurité !

Kitploit est un répertoire d'outils de hacking, de cybersécurité et de pentesting. Découvrez les dernières mises à jour des projets pour trouver des vulnérabilités, analyser des systèmes, automatiser les tests et renforcer votre sécurité.

··Flux·Contact·Confidentialité·© 2026 Kitploit

Répertoire d'outils

Catégories

Voir toutes les catégories
Loading categories
enseal — Partage de secrets sécurisé et éphémère pour développeurs. | Kitploit
Outils/GitHubGitHub/fleralex/enseal
Outils de Chiffrement/DéchiffrementAudit de ConfigurationExfiltration de DonnéesSécurité CloudDevSecOpsProtection de la Vie PrivéeUtilitaires et FrameworksDétection de SecretsAuthentification
GitHubfleralex/enseal

enseal

Partage de secrets sécurisé et éphémère pour développeurs.

55il y a 5 moisPas encore vérifié

Populaires

Voir tout →

Découvrez les outils les plus utilisés par notre communauté.

Explorer tous les outils

Parcourez notre collection d'outils

Voir tous les outils →
Partager
Voir le dépôt

enseal

CI Release Crates.io License: MIT

Partage sécurisé et éphémère de secrets pour développeurs.

Arrêtez de coller des secrets dans Slack. enseal rend la voie sécurisée plus rapide que la voie non sécurisée — partagez des fichiers .env et des secrets via des canaux cryptés à usage unique en une seule commande et sans configuration.```bash

sender

$ enseal share .env Share code: 7-guitarist-revenge Secrets: 14 variables (staging) Expires: on first receive

recipient

$ enseal receive 7-guitarist-revenge ok: 14 secrets written to .env

root@kitploit:~
## Installation

### Depuis crates.io```bash
cargo install enseal

Depuis la source```bash

git clone https://github.com/FlerAlex/enseal.git cd enseal cargo build --release

binary at ./target/release/enseal

root@kitploit:~
### Binaires préconstruits

Téléchargez depuis [GitHub Releases](https://github.com/FlerAlex/enseal/releases) pour Linux (x86_64, aarch64), macOS (Intel, Apple Silicon), et Windows.

## Démarrage rapide

### Mode anonyme (zéro configuration)

Partagez des secrets en utilisant un code à usage unique. Pas de clés, pas de comptes — fonctionne immédiatement.```bash
# terminal 1 (sender)
enseal share .env
  Share code:  7-guitarist-revenge
  Secrets:     14 variables
  Expires:     on first receive

# terminal 2 (recipient) — enter the code
enseal receive 7-guitarist-revenge
ok: 14 secrets written to .env

Fonctionne aussi avec des secrets uniques :```bash

terminal 1 — pipe a token

echo "my-api-token" | enseal share --label "API key" Share code: 4-orbital-hammock

terminal 2 — prints to stdout

enseal receive 4-orbital-hammock my-api-token

root@kitploit:~
Les deux terminaux doivent être ouverts en même temps — l'expéditeur attend que le destinataire se connecte.

### Mode d'identité (basé sur des clés, sans codes)

Pour les équipes ayant une confiance établie dans les clés. Chiffrez vers un nom, aucune coordination nécessaire.```bash
# one-time setup
enseal keys init
enseal keys export > my-key.pub          # share this with teammates
enseal keys import teammate-key.pub      # import theirs

# sender encrypts to recipient by name
enseal share .env --to sarah

# or push through the public relay (no codes at all)
enseal share .env --to sarah --relay wss://relay.enseal.dev

# or produce an encrypted file (no network)
enseal share .env --to sarah --output ./drop/

Injecter des secrets dans un processus (ne jamais toucher au disque)```bash

anonymous mode: sender gives you a code

enseal inject 7-guitarist-revenge -- npm start

identity mode: listen on relay, sender pushes when ready

enseal inject --listen --relay wss://relay.enseal.dev -- docker compose up

from an encrypted file drop

enseal inject ./staging.env.age -- python manage.py runserver

root@kitploit:~
Les secrets n'existent que dans la mémoire du processus enfant. Lorsqu'il se termine, ils disparaissent.

## Fonctionnalités

### Trois modes de partage

**Mode anonyme** (par défaut) — basé sur un wormhole, aucune configuration. Un code lisible par l'homme est tout ce dont vous avez besoin. L'authentification mutuelle SPAKE2 empêche les attaques MITM.```bash
enseal share .env                         # generates wormhole code
enseal receive 7-guitarist-revenge        # uses code

Avec --relay, le mode anonyme contourne le wormhole et utilise le transport de relais enseal à la place. Les deux côtés doivent utiliser le même relais :```bash enseal share .env --relay ws://relay.internal:4443 # generates channel code enseal receive 3421-amber-frost --relay ws://relay.internal:4443

root@kitploit:~
**Async upload (`--upload`)** — réservé à l'expéditeur. Chiffre localement et publie sur [burnurl.dev](https://burnurl.dev), renvoyant une URL autodestructible que le destinataire ouvre dans un navigateur. Aucune CLI requise du côté destinataire.```bash
enseal share .env --upload
#   Secret URL:  https://burnurl.dev/s/a3f9c2e1...
#   Expires:     2026-03-08 19:42:00 UTC (24h)
#   Reads:       1 (self-destructs on first open)

Le destinataire ouvre l'URL dans n'importe quel navigateur — aucune installation d'enseal nécessaire. Ajoutez --passphrase pour chiffrer côté client avant le téléversement (le serveur ne voit que le texte chiffré) :```bash enseal share .env --upload --passphrase # prompts for passphrase enseal share .env --upload --ttl 4 # 4-hour TTL (max 24)

root@kitploit:~
L'accès à l'API nécessite un plan Pro ou Team sur burnurl.dev. Définissez `BURNURL_API_KEY` avec votre clé. Remplacez l'URL de base pour les instances auto-hébergées : `BURNURL_URL=https://burnurl.internal`.

**Identity mode** — chiffrement à clé publique pour les coéquipiers connus. Chiffrer à un nom.```bash
enseal keys init                          # one-time setup
enseal share .env --to sarah              # encrypt to sarah's public key

Le mode identité prend en charge trois options de transport :```bash

wormhole (default, no --relay): generates a code like anonymous mode

enseal share .env --to sarah

relay push (with --relay): zero codes, pushes directly to recipient's channel

enseal share .env --to sarah --relay wss://relay.enseal.dev

file drop (with --output): no network, produces encrypted file

enseal share .env --to sarah --output ./drop/

produces ./drop/[email protected]

root@kitploit:~
### Entrée flexible

enseal accepte les secrets de multiples sources :```bash
# .env file (default)
enseal share .env
enseal share staging.env

# environment profile
enseal share --env staging               # resolves to .env.staging

# pipe from stdin
echo "sk_live_abc123" | enseal share
cat secrets.env | enseal share
pass show stripe/key | enseal share --to sarah

# inline (careful — visible in shell history)
enseal share --secret "API_KEY=sk_live_abc123"

# wrap raw string as KEY=VALUE
echo "sk_live_abc123" | enseal share --as STRIPE_KEY

Interpolation de variables

Les références ${VAR} sont résolues avant l'envoi afin que les destinataires reçoivent des valeurs entièrement développées :```env DB_HOST=postgres.internal DB_PORT=5432 DATABASE_URL=postgres://user:pass@${DB_HOST}:${DB_PORT}/myapp

root@kitploit:~
Prend en charge la syntaxe de secours `${VAR:-default}`. Les références circulaires et anticipées sont détectées et rejetées. Utilisez `--no-interpolate` pour envoyer la syntaxe brute `${VAR}`.

### Filtrage

Contrôlez quelles variables sont envoyées :```bash
# exclude public/non-secret vars
enseal share .env --exclude "^PUBLIC_|^NEXT_PUBLIC_"

# send only matching vars
enseal share .env --include "^DB_|^API_"

# skip .env parsing entirely (send raw file)
enseal share .env --no-filter

Réception intelligente

La sortie s'adapte à ce qui a été envoyé :```bash

.env payload -> writes to file

enseal receive CODE ok: 14 secrets written to .env

write to specific file

enseal receive CODE --output staging.env

raw string -> prints to stdout (pipe-friendly)

enseal receive CODE sk_live_abc123

force clipboard

enseal receive CODE --clipboard ok: copied to clipboard

force stdout for any payload

enseal receive CODE --no-write

receive from encrypted file drop (identity mode)

enseal receive ./staging.env.age ok: signature verified, file decrypted ok: 14 secrets written to .env

root@kitploit:~
### Inject

Recevoir des secrets et les injecter directement en tant que variables d'environnement dans un processus fils. Les secrets ne touchent jamais le système de fichiers.```bash
# anonymous mode: inject via wormhole code
enseal inject 7-guitarist-revenge -- npm start

# identity mode: listen for incoming transfer on relay
enseal inject --listen --relay wss://relay.enseal.dev -- docker compose up

# from encrypted file drop
enseal inject ./staging.env.age -- python manage.py runserver

Avec --listen, le récepteur se connecte au relais et attend. L'expéditeur pousse avec enseal share .env --to alex --relay wss://relay.enseal.dev — aucun code échangé, aucune coordination nécessaire.

.env Boîte à outils```bash

check: verify your .env has all required vars

enseal check error: missing from .env (present in .env.example): JWT_SECRET, REDIS_URL

diff: compare two .env files (keys only, never values)

enseal diff .env.development .env.staging

  • REDIS_CLUSTER_URL (only in staging)
  • DEBUG (only in development)

redact: strip values for safe sharing of structure

enseal redact .env DATABASE_URL= API_KEY= PORT=

validate: check values against schema rules

enseal validate .env error: missing required: JWT_SECRET error: PORT value "abc" is not an integer ok: 11/14 variables passed validation

template: generate .env.example with type hints

enseal template .env

DATABASE_URL=

API_KEY=<32+ character string>

PORT=<integer, 1024-65535>

root@kitploit:~
### Chiffrement au repos

Chiffrez les fichiers `.env` pour un stockage sûr dans git en utilisant le chiffrement age :```bash
# whole-file encryption
enseal encrypt .env
ok: .env encrypted in-place (14 variables, age key)

enseal decrypt .env

# per-variable: keys visible for diffing, values encrypted
enseal encrypt .env --per-var
# DB_HOST=ENC[age:abc123...]
# DB_PORT=ENC[age:def456...]

# multi-recipient: anyone on the team can decrypt
enseal encrypt .env --to sarah --to alex

Gestion de l'identité & des clés```bash

generate your keypair

enseal keys init

share your public key with teammates

enseal keys export > my-key.pub

import a teammate's key (shows fingerprint, prompts for confirmation)

enseal keys import sarah.pub

list all trusted keys and aliases

enseal keys list

show your key fingerprint (for out-of-band verification)

enseal keys fingerprint

remove a trusted key

enseal keys remove [email protected]

create aliases for convenience

enseal keys alias sarah [email protected]

create groups for multi-recipient sharing

enseal keys group create backend-team enseal keys group add backend-team sarah enseal keys group add backend-team alex enseal keys group list backend-team enseal share .env --to backend-team

delete a group

enseal keys group delete backend-team

root@kitploit:~
### Relais public

Un relais public gratuit est disponible à `wss://relay.enseal.dev`. Utilisez-le pour des tests rapides ou lorsque vous n'avez pas besoin d'un relais privé.```bash
# check relay health
curl https://relay.enseal.dev/health

# use it for identity-mode transfers
enseal share .env --to sarah --relay wss://relay.enseal.dev
enseal inject --listen --relay wss://relay.enseal.dev -- npm start

# or set it globally
export ENSEAL_RELAY=wss://relay.enseal.dev

Essayez par vous-même```bash

1. generate keys (one-time)

enseal keys init

2. export and import your own key (for self-testing)

enseal keys export > /tmp/mykey.pub enseal keys import /tmp/mykey.pub

enter an alias when prompted (e.g. "mykey")

3. test file drop (no network needed)

enseal share --secret "TEST=works" --to mykey --output /tmp/ enseal receive /tmp/mykey.env.age

4. test relay push (two terminals)

terminal 1 (receiver):

enseal inject --listen --relay wss://relay.enseal.dev -- env | grep TEST

terminal 2 (sender):

enseal share --secret "TEST=relay_works" --to mykey --relay wss://relay.enseal.dev

root@kitploit:~
### Relais auto-hébergé

Gardez tout à l'intérieur de votre réseau. Le relais est sans état — il ne voit que du texte chiffré.```bash
# Docker (one command)
docker run -d -p 4443:4443 enseal/relay

# Or as a binary
enseal serve --port 4443

# Check relay health
curl http://localhost:4443/health

enseal serve utilise le WebSocket simple (ws://). Pour TLS, placez un proxy inverse (Caddy, nginx) devant et connectez-vous avec wss://.

Avec --relay défini, tous les modes passent par votre relais :```bash

Anonymous mode — generates enseal channel code instead of wormhole code

enseal share .env --relay ws://relay.internal:4443

info: Share code: 3421-amber-frost

enseal receive 3421-amber-frost --relay ws://relay.internal:4443

Or set globally

export ENSEAL_RELAY=ws://relay.internal:4443 enseal share .env

root@kitploit:~
Identity mode avec un relais auto-hébergé est entièrement sans code :```bash
# receiver listens on the relay
enseal inject --listen --relay ws://relay.internal:4443 -- npm start

# sender pushes directly — no code generated
enseal share .env --to alex --relay ws://relay.internal:4443
ok: pushed to alex

Validation de schéma

Définissez les règles dans .enseal.toml à la racine du projet :```toml [schema] required = ["DATABASE_URL", "API_KEY", "JWT_SECRET"]

[schema.rules.DATABASE_URL] pattern = "^postgres://" description = "PostgreSQL connection string"

[schema.rules.PORT] type = "integer" range = [1024, 65535]

[schema.rules.API_KEY] min_length = 32

root@kitploit:~
Ensuite, validez :```bash
enseal validate .env

La validation s'exécute également automatiquement lors de la réception de fichiers .env — détectant les configurations cassées avant qu'elles ne causent de confusion.

Profils d'environnement```bash

enseal share --env staging # shares .env.staging enseal validate --env production # validates .env.production enseal diff .env.development .env.production

root@kitploit:~
## Comment ça fonctionne

### Mode Anonyme

**Wormhole (par défaut, sans `--relay`):**

1. L'expéditeur chiffre la charge utile avec `age`
2. Un échange de clés SPAKE2 établit un secret partagé via le relais wormhole public
3. La charge utile chiffrée transite par le relais
4. Le destinataire déchiffre avec la clé négociée
5. Le canal est détruit — usage unique, limité dans le temps

Le relais ne voit jamais le texte clair. Le code wormhole fournit une authentification mutuelle.

**Relais Enseal (`--relay`):**

1. L'expéditeur chiffre la charge utile avec `age` et l'envoie au relais enseal sous un code de canal généré
2. Le destinataire se connecte au même relais avec le même code et reçoit la charge utile
3. Le canal est consommé dès la première réception

Il n'y a pas de SPAKE2 dans ce mode — le code du canal est le seul identifiant.

### Téléchargement asynchrone (`--upload`)

1. L'expéditeur sérialise la charge utile dans une `Envelope` (JSON, vérification d'intégrité SHA-256)
2. La chiffre éventuellement côté client avec une phrase de passe age scrypt (`--passphrase`)
3. Envoie la charge utile en POST à `burnurl.dev/api/secret` via HTTPS
4. burnurl.dev la stocke avec un chiffrement AES-256-GCM côté serveur au repos et renvoie une URL à auto-destruction
5. L'URL est valide pendant la durée de vie configurée (jusqu'à 24h sur le niveau gratuit), lecture unique

L'expéditeur partage l'URL. Le destinataire l'ouvre dans n'importe quel navigateur — pas besoin d'enseal. Avec `--passphrase`, la phrase de passe doit être partagée séparément ; le serveur ne voit jamais le texte clair.

**Niveaux :** L'accès à l'API nécessite un plan Pro ou Team sur burnurl.dev. Définissez `BURNURL_API_KEY` avec votre clé — le niveau gratuit n'a pas d'accès à l'API.

Remplacez `BURNURL_URL` pour pointer vers une instance burnurl auto-hébergée.

### Mode Identité (Clé publique)

1. L'expéditeur chiffre avec la clé publique `age` du destinataire
2. L'expéditeur signe avec sa propre clé `ed25519`
3. La charge utile transite par relais, dépôt de fichiers ou wormhole
4. Le destinataire déchiffre avec sa clé privée
5. Le destinataire vérifie la signature de l'expéditeur

La confiance repose sur les clés que vous avez importées.

**Options de transport en mode identité :**

| Transport | Drapeau | Fonctionnement |
|---|---|---|
| Wormhole (par défaut) | `--to sarah` | Génère un code, comme le mode anonyme mais avec signature |
| Push relais | `--to sarah --relay URL` | Pousse vers le canal déterministe du destinataire, pas de code |
| Dépôt de fichiers | `--to sarah --output ./dir/` | Produit un fichier `.env.age` chiffré, aucun réseau |

Avec le push relais, le destinataire écoute avec `enseal inject --listen --relay URL -- cmd` ou reçoit le dépôt de fichiers avec `enseal receive ./file.env.age`.

## Modèle de sécurité

**Protégé :**
- Secrets en transit (canal chiffré)
- Secrets dans l'historique Slack/e-mail (éphémère, aucune persistance)
- Attaques MITM (SPAKE2 / auth par clé publique)
- Relais malveillant (chiffrement de bout en bout, le relais ne voit que le texte chiffré)
- Usurpation de l'expéditeur (mode identité : signatures ed25519)
- Secrets sur disque (mode inject : mémoire du processus uniquement)
- Secrets dans git (encrypt : chiffrement au repos)

**Non protégé :**
- Terminaux compromis (si la machine est compromise, rien ne peut aider)
- Distribution des clés (vous faites confiance aux clés que vous importez — pas de PKI, pas d'AC)

## Configuration

Fichier `.enseal.toml` optionnel à la racine de votre projet :```toml
[defaults]
relay = "wss://relay.enseal.dev"     # public relay (identity mode)
# relay = "ws://relay.internal:4443" # self-hosted without TLS
# relay = "wss://relay.internal:4443" # self-hosted with TLS reverse proxy

[filter]
exclude = ["^PUBLIC_", "^NEXT_PUBLIC_", "^REACT_APP_"]

[identity]
default_recipient = "devops-team"

[schema]
required = ["DATABASE_URL", "API_KEY", "JWT_SECRET"]

Référence CLI```

CORE enseal share [] Send secrets (file, pipe, or --secret) enseal receive [<code|file>] Receive secrets enseal inject [] -- Inject secrets into a process enseal keys Manage identity keys and aliases enseal serve Run self-hosted relay server

Télécharger l’outil

.ENV TOOLKIT enseal check [file] Verify .env has all vars from .env.example enseal diff Compare .env files (keys only) enseal redact Replace values with enseal validate Validate against schema rules enseal template Generate .env.example with type hints

ENCRYPTION enseal encrypt Encrypt .env for git storage enseal decrypt Decrypt an encrypted .env

root@kitploit:~
### `share` drapeaux```
--to <name>              Identity mode: encrypt to recipient (alias, group, or identity)
--output <dir>           File drop: write encrypted file (identity mode, no network)
--upload                 Post to burnurl.dev (async, browser-readable, no CLI on recipient side)
--ttl <hours>            Secret TTL for --upload (1-24, default: 24)
--passphrase             Encrypt client-side before --upload (prompts; server never sees plaintext)
--secret <value>         Inline secret (raw string or KEY=VALUE)
--label <name>           Human label for raw/piped secrets
--as <KEY>               Wrap raw input as KEY=<value>
--relay <url>            Route through relay server. Anonymous mode: uses enseal relay transport
                         (generates channel code, bypasses wormhole). Identity mode: push to
                         recipient's channel. Also: ENSEAL_RELAY env var.
--env <profile>          Environment profile (resolves to .env.<profile>)
--exclude <pattern>      Regex to exclude vars
--include <pattern>      Regex to include only matching vars
--no-filter              Send raw file, skip .env parsing
--no-interpolate         Don't resolve ${VAR} references before sending
--words <n>              Words in wormhole code (2-5, default: 2). Wormhole mode only (no --relay).
--quiet / -q             Minimal output

receive drapeaux```

--output Write to specific file --clipboard Copy to clipboard instead of stdout/file --no-write Print to stdout even for .env payloads --relay Use specific relay server --quiet / -q Minimal output

root@kitploit:~
### `inject` drapeaux```
--listen                 Listen for incoming identity-mode transfer (requires --relay)
--relay <url>            Use specific relay server (also: ENSEAL_RELAY)
--quiet / -q             Minimal output

keys sous-commandes```

enseal keys init Generate your keypair enseal keys export Print your public key bundle enseal keys import Import a colleague's public key enseal keys list Show all trusted keys and aliases enseal keys remove Remove a trusted key enseal keys fingerprint Show your key fingerprint enseal keys alias Map short name to identity enseal keys group create Create a named group enseal keys group add Add identity to group enseal keys group remove Remove identity from group enseal keys group list [name] List groups or group members enseal keys group delete Delete a group

root@kitploit:~
### `serve` drapeaux```
--port <port>            Listen port (default: 4443)
--bind <addr>            Bind address (default: 0.0.0.0)
--max-mailboxes <n>      Max concurrent channels (default: 100)
--channel-ttl <seconds>  Idle channel lifetime (default: 300)
--max-payload <bytes>    Max WebSocket message size (default: 1048576)
--rate-limit <n>         Max connections per minute per IP (default: 10)
--health                 Print server health check and exit

encrypt / decrypt drapeaux```

--per-var Per-variable encryption (keys visible, values encrypted) --to Encrypt to specific recipients (multi-key)

root@kitploit:~
### Options globales```
--verbose / -v           Debug output (never prints secret values)
--quiet / -q             Minimal output (for scripting)

Comparaison

ensealSlack DM1Password Sharedotenvxcroc
Zéro configurationOuiOuiNonNonOui
Chiffré de bout en boutOuiNonOuiN/AOui
Éphémère (sans historique)OuiNonOuiN/AOui
Compatible .envOuiNonNonOuiNon
Injection de processusOuiNonNonOuiNon
Validation de schémaOuiNonNonNonNon
Chiffrement au reposOuiN/AN/AOuiNon
Relais auto-hébergeableOuiNonNonN/AOui
Support des chaînes brutes/pipeOuiOuiNonNonOui

Feuille de route

  • v0.1 — Cœur : partage/réception, pipe/stdin, boîte à outils .env (vérification, diff, masquage) (terminé)
  • v0.2 — Mode identité : clés, alias, option --to (terminé)
  • v0.3 — Commande d'injection, relais auto-hébergé (terminé)
  • v0.4 — Validation de schéma, modèles, interpolation, profils (terminé)
  • v0.5 — Chiffrement au repos (chiffrer/déchiffrer) (terminé)
  • v0.10 — Groupes, chart Helm, documentation (terminé)
  • v0.11 — Renforcement de la sécurité, synchronisation de la doc (terminé)
  • v0.12 — .enseal.toml configuré, relais privé pour mode anonyme (terminé)
  • v0.16 — Téléversement asynchrone via burnurl.dev (--upload) (en cours)
  • v1.0 — Publication sur crates.io, dernière finition

Licence

MIT