NDPA 2023 · AES-256-GCM · HMAC-SHA512

Security & Compliance Architecture

KoboSync is built to handle live payment webhook data and merchant financial records. This document describes the technical and operational measures we use to protect that data.

AES-256-GCM Encryption

All API keys and OAuth tokens encrypted at rest before storage — never plain text, ever.

HMAC-SHA512 Webhooks

Every incoming webhook verified using the raw body before any data is written or processed.

TLS 1.2+ in Transit

All communication between your browser, our servers, and third parties uses TLS 1.2 or higher.

01

Encryption & Key Management

KoboSync stores sensitive credentials — payment gateway API keys, Google OAuth refresh tokens, and Xero/QuickBooks tokens — exclusively as encrypted ciphertext. We use AES-256-GCM with a 12-byte random IV per encryption operation. The authentication tag is stored alongside the IV and ciphertext, meaning any tampering with the stored data is detectable before decryption is attempted.

The master encryption key lives as an environment variable, never in the database or version control. Rotation of this key requires re-encryption of stored secrets, a process that can be performed with zero service downtime.

What is never stored

  • Card numbers, CVV codes, or cardholder data of any kind
  • Bank account numbers or sort codes
  • Paystack/Flutterwave/Monnify customer payment credentials
  • Your Google account password
  • Your internet banking credentials (Mono/Okra handle these directly)
02

Webhook Security

Every incoming webhook from Paystack, Flutterwave, and Monnify is verified before any data is processed. We use HMAC-SHA512 (Paystack, Monnify) and Flutterwave's own verification hash scheme, each using the merchant's provider secret key.

A critical implementation detail: we preserve the raw request body exactly as received over the wire, before any JSON parsing, and use that exact byte sequence for the HMAC computation. Re-serialising the parsed JSON object would alter whitespace and key ordering, producing a different hash and causing legitimate events to fail verification.

Webhooks that fail signature verification are silently acknowledged with HTTP 200 to prevent Paystack and Flutterwave from retrying indefinitely, but no data from them is ever written to the database or acted upon. A log entry is created for security auditing.

03

Google OAuth & Minimal Scope Principle

When you connect your Google account, KoboSync requests only two OAuth scopes:

/auth/spreadsheets

Allows KoboSync to read from and write to Google Sheets. Required to log transaction data to your designated ledger.

/auth/drive.file

Allows KoboSync to access files it has created. Used when KoboSync creates a new Sheet on your behalf. We cannot access any file we did not create.

https://www.googleapis.com/auth/content

Allows KoboSync to programmatically manage your Google Merchant Center account. Required to synchronize product data, update pricing, and manage inventory.

We do not request access to your Gmail, Google Drive files, Calendar, Contacts, or any other Google service. The OAuth refresh token is stored encrypted using AES-256-GCM and is used only to generate short-lived access tokens when your bridges need to write data. You can revoke KoboSync's access at any time from your Google Account security settings or from the KoboSync dashboard.

04

Bank Feed Integrations (Mono & Okra)

KoboSync supports read-only bank feed integration via Mono and Okra. The authentication flow for these integrations is handled entirely by the respective provider — KoboSync never sees your internet banking username, password, PIN, or OTP at any point in the process.

We receive only the transaction history and balance data that Mono or Okra are authorised to share with your explicit consent. This data is used solely to perform payout-to-bank reconciliation within your dashboard and is subject to the same AES-256-GCM encryption at rest as all other data.

05

Infrastructure & Data Residency

KoboSync's infrastructure is operated across the following providers, all of which maintain SOC 2 Type II certification or equivalent:

Supabase (PostgreSQL)

Primary database and authentication. Data stored in AWS eu-west-2 (London) by default unless otherwise configured at account setup.

Vercel

Next.js application hosting and serverless API functions. Edge functions may execute in the region nearest to the requester.

Railway

Background worker processes (webhook queue, briefing worker, sheet sync worker). Deployed in the same region as the primary database.

Redis (via Railway)

BullMQ queue storage for background job management. Ephemeral — no persistent personal data stored in Redis.

06

NDPA Compliance & Data Subject Rights

KoboSync processes personal data in accordance with the Nigeria Data Protection Act 2023 (NDPA). Our compliance commitments include:

  • A designated Data Protection Officer (DPO) is available to handle data subject requests.
  • Data breach notification: in the event of a breach likely to affect your rights and freedoms, you will be notified within 72 hours of us becoming aware.
  • Data subject requests (access, rectification, erasure, portability) are acknowledged and responded to within 30 days.
  • We conduct data protection impact assessments (DPIAs) before introducing new features that process sensitive personal data.
  • We maintain a record of all processing activities as required by the NDPA.
07

Responsible Disclosure

If you discover a security vulnerability in KoboSync, we ask that you disclose it to us responsibly before making it public. Please email legal@kobosync.com with a description of the vulnerability, steps to reproduce it, and your assessment of its potential impact.

We commit to: acknowledging receipt within 48 hours, keeping you informed of our progress toward a fix, and not taking legal action against researchers who disclose in good faith and allow reasonable time to fix the issue before public disclosure.

Security Architecture

AES-256-GCM encryption at rest
TLS 1.2+ for all data in transit
HMAC-SHA512 webhook verification
Google OAuth minimal scopes only
No card or bank credential storage
90-day automatic log purge
MFA required for system access
Sentry error monitoring (anonymised)
SOC 2 Type II infrastructure partners

Data Retention

Account & transaction dataActive lifetime + 6 years
Server & webhook logs90 days
OAuth tokensDeleted on disconnect
Error telemetry (Sentry)30 days

Security Contact

For vulnerability reports or data subject requests:

legal@kobosync.com