惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

B
Blog
Microsoft Security Blog
Microsoft Security Blog
Jina AI
Jina AI
博客园 - 叶小钗
J
Java Code Geeks
博客园 - 聂微东
博客园 - 司徒正美
大猫的无限游戏
大猫的无限游戏
阮一峰的网络日志
阮一峰的网络日志
V
V2EX
美团技术团队
WordPress大学
WordPress大学
M
MIT News - Artificial intelligence
雷峰网
雷峰网
酷 壳 – CoolShell
酷 壳 – CoolShell
GbyAI
GbyAI
罗磊的独立博客
T
The Blog of Author Tim Ferriss
aimingoo的专栏
aimingoo的专栏
T
Tailwind CSS Blog
The Cloudflare Blog
Stack Overflow Blog
Stack Overflow Blog
N
Netflix TechBlog - Medium
小众软件
小众软件

DEV Community

Authentication Security Deep Dive: From Brute Force to Salted Hashing (With Java Examples) Why AI Systems Don’t Fail — They Drift Spilling beans for how i learn for exam😁"Reinforcement Learning Cheat Sheet" I Replaced Chrome with Safari for AI Browser Automation. Here's What Broke (and What Finally Worked) How Python Borrows Other People's Work The $40 Architecture: Processing 1 Billion API Requests with 99.99% Uptime Vibe Coding: A Workflow Guide (From Zero to SaaS) Most webhook security guides protect the wrong side. The scary part is delivery. Headless CMS for TanStack Start: Build a Blog with Cosmic EU Age Verification App "Hacked in 2 Minutes" — What Actually Happened Comfy Cloud’s delete function does not actually remove files Running AI Models on GPU Cloud Servers: A Beginner Guide Event-driven media intelligence with AWS Step Functions and Bedrock I scored 500 AI prompts across 8 quality dimensions — here's what broke How to Call Google Gemini API from Next.js (Free Tier, No Backend Needed) The Portal Protocol: Reclaiming Human Connection in the Age of AI How to Fix Your Team's Scattered Knowledge Problem With a Self-Hosted Forum Intro to tc Cloud Functors: A Graph-First Mental Model for the Modern Cloud Designing Multi-Tenant Backends With Both Ownership and Team Access I Built a Neumorphic CSS Library with 77+ Components — Here's What I Learned PostgreSQL Performance Optimization: Why Connection Pooling Is Critical at Scale Cómo construí un SaaS multi-rubro para gestionar expensas en Argentina con FastAPI + Vue 3 🚀 I Built an Ethical Hacking Scanner Tool – Open Source Project I Replaced /usage and /context in Claude Code With a Single Statusline A Pythonic Way to Handle Emails (IMAP/SMTP) with Auto-Discovery and AI-Ready Design I Collected 8.9 Million Polymarket Price Points — Here's What I Found About How Markets Really Move EcoTrack AI — Carbon Footprint Tracker & Dashboard Everyone's Using AI. No One Agrees How. 5 self-hosted ebook managers worth trying in 2026 Building Your First AI Agent with LangChain: From Chatbot to Autonomous Assistant
Peer-to-Peer Secrets: How We Built Client-Side E2E Team S...
The Seventeen · 2026-06-21 · via DEV Community

Here is a common developer anti-pattern that every engineering team has committed:

A new developer joins the team. They need the environment variables to run the application locally. A senior developer opens their password manager, copies the plaintext .env block, and pastes it into a Slack message or a secure note. The new developer copies it, pastes it into a local .env file on their disk, and starts coding.

You have just created a massive security debt:

  • The credentials exist in plaintext inside your team chat history.
  • They exist on a local disk in plaintext, vulnerable to local script harvesting.
  • There is no cryptographic audit trail of who has access, when the keys were shared, or if they have drifted out of sync.

Traditional cloud-based team secret managers attempt to solve this by storing keys in a centralized vault. But this shifts the trust boundary to the cloud provider: you must trust the server. If the cloud provider's database is breached, or if an inside attacker compromises their server RAM, your production keys are gone.

To build a truly secure team sync infrastructure, we must adopt a Zero-Knowledge Asymmetric Sync Model.

This article deep-dives into the cryptography of AgentSecrets workspaces, explaining how we use NaCl Curve25519 asymmetric sealed boxes to synchronize environment credentials across engineering teams without the coordination server ever seeing the plaintext secrets.

The Untrusted Server Architecture

The core constraint of a zero-knowledge cloud model is simple: the server is treated as an untrusted coordinator.

The server's only job is to route encrypted blobs from Client A to Client B. It must structurally lack the cryptographic keys required to decrypt those blobs.

+--------------------------------------------------------------------------+
|                        Client-Side Device Boundary                       |
|                                                                          |
|  [Developer A]                                            [Developer B]  |
|  Plaintext Secret                                         Plaintext Secret|
|        |                                                        ^        |
|        | 1. Encrypt with B's Public Key                         |        |
|        v                                                        | 4. Decrypt with B's Private Key
|  [Encrypted Blob]                                         [Encrypted Blob]
+--------+--------------------------------------------------------+--------+
         |                                                        ^
         | 2. Push E2EE Blob                             3. Pull  |
         v                                                        |
+--------+--------------------------------------------------------+--------+
|                          Untrusted Cloud Server                          |
|                                                                          |
|  Acts as dynamic relay of ciphertext blobs. Has no private keys.         |
+--------------------------------------------------------------------------+

To achieve this, AgentSecrets utilizes client-side Asymmetric Cryptography built on the networking and cryptography library (NaCl) primitives.


Under the Hood: NaCl Curve25519 Asymmetric Sync

When a developer initializes their AgentSecrets CLI (agentsecrets init), the client dynamically generates a local Curve25519 keypair consisting of a Public Key and a Private Key:

  • The Private Key never leaves the developer's local OS keychain.
  • The Public Key is uploaded to the coordination server and acts as their workspace identity.

Here is the exact cryptographic workflow when Developer A invites Developer B to a shared workspace and syncs a secret:

1. The Key Exchange (DH Handshake)

Developer A fetches Developer B's public key from the coordinator server.
Developer A uses their own private key and Developer B's public key to perform a Diffie-Hellman (DH) key exchange, generating a shared symmetric Workspace Master Key unique to their interaction.

2. SealedBox Encryption

Developer A encrypts the plaintext credential (e.g., STRIPE_KEY = sk_live_51H...) client-side using NaCl's crypto_box_seal (asymmetric SealedBox primitive).

  • A SealedBox is anonymous: it encrypts a payload using the recipient's public key, generating a ciphertext that can only be decrypted by the matching private key.
  • The SealedBox structurally prevents even the sender from decrypting the payload once it is formed.

3. Server Relay

Developer A transmits the encrypted SealedBox blob over the network to the untrusted coordination server:

POST /v1/workspaces/sync
Payload: {"recipient": "Developer-B-ID", "ciphertext": "8f3b2a1c..."}

The server saves the encrypted blob in its database. Because the server does not possess Developer B’s private key, the ciphertext is completely unreadable to the database engine or any backend server processes.

4. Client Decryption

When Developer B runs agentsecrets secrets pull, their local CLI queries the server, downloads the SealedBox blob, and passes it to their local OS-level keychain.
Their CLI uses Developer B's private key (securely accessed from their local OS vault) to decrypt the SealedBox, recovering the plaintext credential directly into their secure local OS keychain.

No plaintext key ever touched the wire, no plaintext keys exist in the cloud database, and the server remained a purely zero-knowledge coordinator.

Managing Parity and Drift

Traditional team synchronization is plagued by Credential Drift—the situation where different environments (dev, staging, production) get out of sync because changes aren't tracked.

Because AgentSecrets treats credentials as a versioned cryptographic repository, developers can instantly run drift audits:

agentsecrets secrets diff

The CLI compares the cryptographic metadata hashes of the local OS keychain against the workspace master records stored on the server. It identifies out-of-sync references and allows the developer to sync them with a single, secure pull, completely eliminating drift without manual file swaps.


Security is Mathematical, Not Policy-Based

We cannot secure collaboration by asking team members to be careful. Human error is the primary vector for data breaches.

By enforcing client-side SealedBox encryption at the device boundary, you build a structural security perimeter that guarantees your team credentials stay safe, in-sync, and completely insulated from server breaches.

Read docs: https://agentsecrets.theseventeen.co


How does your team manage shared credentials across development and staging? Have you built E2EE synchronization pipelines before? Let's discuss in the comments below!