The cryptography, end to end.
This page is a public summary of Makro's security architecture: the algorithms we use, the trust boundaries our code crosses, and the OWASP items we treat as non-optional. It is deliberately high-level. For a deeper review - including exact code paths, test fixtures, and internal threat-model documents - contact security@makroexpander.com and we will arrange it under a standard NDA.
Two separate keys, one direction.
Macro encryption uses one key for local storage and a different key for cloud sync. Both are generated on your device and neither is transmitted to our servers.
crypto.getRandomValues · derives a 256-bit AES key via PBKDF2-SHA256 at 600,000 iterationsThe places where bytes cross boundaries.
Every trust boundary is a potential attack surface. These are the ones Makro has; we summarise our posture at each rather than list specific mitigations (detail is available to evaluators under NDA).
Web page DOM -> content script
Content script -> background service worker
Extension -> sync API
Worker -> D1 database
Which specific OWASP items we implement.
OWASP Top 10 is a starting point, not a finish line. Every item below has concrete enforcement - either an audit script that runs per commit or an architectural constraint.
Every commit earns its merge.
The gate is a chain of automated scans and disciplined reviews, with extra attention on anything that touches encryption or data flow.
The chain, at a glance.
Security scanning layers up across three categories. We're labelling each with how it's applied so the story is clear without turning the page into an attack-surface map.
1. Local lint on commit. A static-analysis ruleset focused on common security pitfalls runs as a pre-commit hook on the author's machine. The same ruleset runs again in CI, so nothing hides if a local hook is disabled.
2. Automated checks on every pull request. Static analysis, the full unit-test suite, an extension-store linter, a clean release build, and a manifest version-sync check. Failures are visible on the PR and are resolved before merge.
3. Review-time scanners. Secrets scanning, dependency vulnerability checks, SQL-safety audits across database queries, and locale-parity checks across all seven supported languages run as part of our review workflow.
4. Substantial-change policy. Larger diffs receive a second independent audit pass covering the same code through a fresh lens.
5. Release regression suite. Before tagging a release, a behavioural suite revisits previously-fixed classes of bug so that once a vulnerability is addressed it cannot quietly regress.
We are continuing to automate more of this chain over time and will update this page as gates move from process into pipeline.