Security
Mobile signing materials are sensitive. Here is exactly how Corenna handles your keys, secrets, and builds.
Security Controls
Builds run on your GitHub
Signing materials
Secrets in transit
Access control
Build integrity
Log handling
Independent validation
Your control
Keystore credential lifecycle
The two most sensitive values Corenna handles are the Androidkeystore_passwordandkey_password. Here is exactly where they live, and when they are wiped.
At rest (server)
Stored only as encrypted secrets in our managed vault. Thesigning_configstable holds vault secret IDs (UUIDs), never the plaintext password.
In transit (server → GitHub)
Decrypted inside an edge function, immediately re-encrypted with GitHub's libsodium sealed-box, and written to your repository's GitHub Actions Secrets. The plaintext exists only inside the edge function's request memory and is garbage-collected when the function returns.
In transit (server → browser)
Returned by thereveal-keystorefunction over HTTPS only when you click "Show keystore credentials" on the project page. The response is never cached.
In the browser (memory only)
Held in a single React useState (keystoreReveal) on the Project Detail page. Never written to localStorage, sessionStorage, IndexedDB, cookies, or any service-worker cache.
When they are wiped
- You close the "Keystore credentials" dialog.
- You navigate away from the Project Detail page (component unmounts).
- You reload the tab.
- You close the tab or browser.
After any of these, the only way to see the password again is to re-authenticate and click "Show keystore credentials" again. The only persisted browser state is a boolean acknowledgment flag in sessionStorage recording that you confirmed you saved your keystore.
Runtime guard (defense in depth)
A runtime guard wraps localStorage, sessionStorage, and document.cookie to detect and reject any write whose key or value matches keystore-credential patterns. Blocked attempts throw an error, log to the browser console, and surface a destructive toast in the UI so the issue is visible immediately.
Responsible disclosure
If you believe you have found a security vulnerability, please email security@corenna.app with reproduction steps. Do not publicly disclose the issue until we have had a reasonable opportunity to investigate and respond.
Your responsibilities
- Use a strong, unique password for your Corenna account.
- Keep your GitHub App installation scoped to repositories you actually build.
- Rotate keystore and certificate passwords if you suspect compromise.
- Back up your Android keystore — losing it prevents future Play Store updates of the same app.