Zum Hauptinhalt springen
tsecurity.de LIVE
Echtzeit-Radar & Feeds
Alle RSS Feeds
👥 Community & Social
YouTube Security VideosfreeCodeCamp.org: TimescaleDB Course – PostgreSQL for Time-Series Data(23.09.2026 um 12:30 Uhr)
Windows Tipps & SecurityAndroid 17: Rollout auf Samsung-Galaxy-Smartphones verzögert sich(23.09.2026 um 11:42 Uhr)
Unix & Linux ServerUSN-8733-2: Gzip vulnerabilities(22.09.2026 um 18:04 Uhr)
Sichere ProgrammierungHow to Build Custom PowerPoint Add-Ins for Enterprise Teams(23.09.2026 um 11:25 Uhr)
Sichere ProgrammierungSearch Google Jobs in Real-Time with Go and SerpApi 🚀(23.09.2026 um 12:13 Uhr)
Sichere ProgrammierungA Psychological State is a Coefficient Vector(23.09.2026 um 12:16 Uhr)
YouTube Security VideosfreeCodeCamp.org: TimescaleDB Course – PostgreSQL for Time-Series Data(23.09.2026 um 12:30 Uhr)
Windows Tipps & SecurityAndroid 17: Rollout auf Samsung-Galaxy-Smartphones verzögert sich(23.09.2026 um 11:42 Uhr)
Unix & Linux ServerUSN-8733-2: Gzip vulnerabilities(22.09.2026 um 18:04 Uhr)
Sichere ProgrammierungHow to Build Custom PowerPoint Add-Ins for Enterprise Teams(23.09.2026 um 11:25 Uhr)
Sichere ProgrammierungSearch Google Jobs in Real-Time with Go and SerpApi 🚀(23.09.2026 um 12:13 Uhr)
Sichere ProgrammierungA Psychological State is a Coefficient Vector(23.09.2026 um 12:16 Uhr)
Intelligence View
⚡ tsecurity.de Intelligence

How We Built Zero-Knowledge Encryption in the Browser (So We Can't Read Your Notes)

Most note-taking apps claim to be "encrypted" but still have a dirty secret: they can read all your data. When we built Typelets, we decided to do things differently - using true zero-knowledge encryption where even we can't decrypt your…

0
↗ Quelle (dev.to)
Reagiere als Erste:r — dein Feedback zählt!



Most note-taking apps claim to be "encrypted" but still have a dirty secret: they can read all your data. When we built Typelets, we decided to do things differently - using true zero-knowledge encryption where even we can't decrypt your notes.



Here's exactly how we did it using just the Web Crypto API.






The Problem That Made Us Build Typelets



When apps like Notion say they're encrypted, they usually mean:



✅ HTTPS encryption in transit


✅ Database encryption at rest


They still hold the keys to decrypt everything



We wanted to build a notes app where privacy wasn't just a marketing claim - it was mathematically guaranteed. That's why we created Typelets with zero-knowledge architecture.





How Typelets' Zero-Knowledge Encryption Works



In Typelets, here's what happens when you create a note:



🔐 Data encrypted on your device before transmission


🔑 Encryption keys never leave your browser


🚫 We literally cannot decrypt your data


🛡️ Even if our servers get hacked, attackers get useless encrypted blobs





Implementation: The Technical Details



Here's the actual code powering Typelets' encryption:





1. Key Derivation





async deriveUserKey(userId: string): Promise<EncryptionKey> {
// Create user-specific salt for this Typelets user
const encoder = new TextEncoder()
const userIdBytes = encoder.encode(userId)
const staticSalt = encoder.encode('notes-app-v1-salt-2024')

// Combine salts and hash
const combinedSalt = new Uint8Array(userIdBytes.length + staticSalt.length)
combinedSalt.set(userIdBytes)
combinedSalt.set(staticSalt, userIdBytes.length)

const saltHash = await crypto.subtle.digest('SHA-256', combinedSalt)
const salt = new Uint8Array(saltHash)

// Import key material
const keyMaterial = await crypto.subtle.importKey(
'raw',
encoder.encode(userId + 'encryption-key-material'),
{ name: 'PBKDF2' },
false,
['deriveKey']
)

// Derive the actual encryption key
const key = await crypto.subtle.deriveKey(
{
name: 'PBKDF2',
salt: salt,
iterations: 100000, // High iteration count for security
hash: 'SHA-256'
},
keyMaterial,
{ name: 'AES-GCM', length: 256 },
false,
['encrypt', 'decrypt']
)

return { key, salt }
}







2. How Typelets Encrypts Your Notes





// This runs in your browser when you save a note in Typelets
async encryptNote(userId: string, title: string, content: string): Promise<EncryptedNote> {
const { key } = await this.deriveUserKey(userId)

// Generate random IV for this note
const iv = crypto.getRandomValues(new Uint8Array(12))
const encoder = new TextEncoder()

// Encrypt title and content
const titleBytes = encoder.encode(title)
const contentBytes = encoder.encode(content)

const encryptedTitleBuffer = await crypto.subtle.encrypt(
{ name: 'AES-GCM', iv },
key,
titleBytes
)

const encryptedContentBuffer = await crypto.subtle.encrypt(
{ name: 'AES-GCM', iv },
key,
contentBytes
)

return {
encryptedTitle: this.arrayBufferToBase64(encryptedTitleBuffer),
encryptedContent: this.arrayBufferToBase64(encryptedContentBuffer),
iv: this.arrayBufferToBase64(iv)
}
}







3. What Typelets' Database Actually Stores



Our PostgreSQL database only ever sees encrypted data:




-- What Typelets stores (completely encrypted)
notes: {
id: "note_123",
encrypted_title: "kJ9fX2zR8vQ...", -- Encrypted blob
encrypted_content: "mP4sL7nE1wY...", -- Encrypted blob
iv: "aB3dF6gH9jK...", -- Initialization vector
user_id: "user_456"
}

-- What Typelets NEVER sees
{
title: "My secret thoughts", -- Never stored in plaintext
content: "Today I..." -- Never stored in plaintext
}









Security Considerations






The Good





  • Unbreakable privacy: AES-256-GCM with 100,000 PBKDF2 iterations


  • Perfect forward secrecy: Each note has unique IV


  • No server-side keys: We can't decrypt even if legally compelled


  • Browser security: Leverages battle-tested Web Crypto API






The Tradeoffs





  • No password recovery: Lose your keys = lose your data forever


  • No server-side search: Can't index encrypted content


  • Limited analytics: We can't analyze usage patterns in content


  • Device dependency: Encryption tied to browser capabilities






Performance Impact



Surprisingly minimal:





  • Encryption time: ~2ms for typical note (1000 chars)


  • Key derivation: ~100ms (cached after first use)


  • Bundle size: 0 bytes (uses native Web Crypto API)


  • Battery impact: Negligible on modern devices






Why We Built Typelets This Way



In an era where AI companies train on user data and governments demand backdoors, we wanted to create a notes app that was truly private by design.



The result? Even under legal pressure, we can only hand over encrypted blobs that are mathematically useless without the user's keys.






Try Typelets' Zero-Knowledge Encryption



You can experience this encryption in action at app.typelets.com. Open your browser's dev tools and watch the encryption happen client-side - it's pretty cool to see your data get scrambled before it leaves your device.



We've also published our security architecture at typelets.com/security if you want to dive deeper into the technical details.






Building Your Own Zero-Knowledge App?



The Web Crypto API makes client-side encryption surprisingly straightforward. The hardest part isn't the crypto - it's designing your entire app architecture around never seeing user data.



Questions for the community:




  • How do you handle encryption in your apps?

  • What other zero-knowledge services do you use?

  • Any security concerns with this approach?



Drop a comment - I'd love to discuss the technical challenges and tradeoffs of privacy-first development!

Ähnliche Beiträge
🔍 Verwandte News

Auch interessante Nachrichten How We Built Zero-Knowledge Encryption in the Browser (So We Can't Read Your Notes)

Thematisch verwandte Begriffe: Built, ZeroKnowledge, Encryption, Browser · 6 Treffer

Laden...

Videos werden geladen ...

Laden...

Beiträge werden geladen ...

Laden...

Videos werden geladen ...

Laden...

Beiträge werden geladen ...

Laden...

Videos werden geladen ...

Laden...

Beiträge werden geladen ...

Laden...

Videos werden geladen ...

Laden...

Beiträge werden geladen ...

Laden...

Videos werden geladen ...

Zum Aktualisieren ziehen
ZERO-DAY CVE-2026-96258 | A vulnerability has been found in onSite internet GmbH Auktion NG Auktio…
Advisory →
TTS Reader • tsecurity.de Voice
tsecurity.de Icon
tsecurity.de App
Offline-Lesen, Eilmeldungen & 0ms Ladezeit

Installiere tsecurity.de direkt auf deinen Home-Bildschirm für das ultimative Vollbild-Magazinerlebnis ohne Browser-Leisten.

Nächster Beitrag
Themen-Radar & Intelligence Matrix
Echtzeit-Taxonomie nach Angriffsvektoren & Plattformen

tsecurity.de Live Threat Radar

🔴 LIVE RADAR
MONITORING
AKTIV
CVE-DATENBANK
LIVE
🔍
Community Radar & Live Chat
Sentinel Bot online • Live-Stream
Dein Cluster: Security Explorer
Match:
lädt…
Verbindung zum Community-Stream wird aufgebaut...
Bearbeitungsmodus — Senden überschreibt deine Nachricht
Community-Puls — was gerade passiert
lädt…
Aktivitäten deiner Analysten
lädt…
Neues Thema oder Eilmeldung einreichen

Reiche interessante Links, Zero-Days oder Debatten ein. Die Community entscheidet per Upvote über die Veröffentlichung.

Heiß diskutierte Einreichungen
🔖 Gespeicherte Artikel
📂 Keine gespeicherten Artikel vorhanden.
Zurück Ziehen Vor
Links: vorheriger Artikel Rechts: nächster Artikel unten: schließen
News NIS-2 Frühwarnung Tier-1 Intel ⏱️ 3 Min vor 10 Min
Artikeldaten werden geladen...

Zurück: vorheriger Vor: nächster
↗ Original-Quelle
Social Reaktionen Deine Reaktion zählt
Einstufung & Relevanz-Poll 0 Stimmen
In sozialen Netzwerken teilen 1-Klick