Skip to content

Client-Side Encryption

We cannot read your data. By design. Pauhu implements client-side encryption where all content is encrypted in your browser or application before transmission. Our servers process encrypted data and return encrypted results.


How It Works

sequenceDiagram
    participant User
    participant Client as Your Device
    participant Server as Pauhu Server
    participant HSM as Hardware Security Module

    User->>Client: "Translate this document"
    Client->>Client: Generate ephemeral key (AES-256-GCM)
    Client->>Client: Encrypt content locally
    Client->>Server: Send encrypted payload
    Server->>HSM: Process with encrypted computation
    HSM->>Server: Return encrypted result
    Server->>Client: Encrypted translation
    Client->>Client: Decrypt with ephemeral key
    Client->>User: "Translated document"

Encryption Stack

Layer Technology Purpose
Content Encryption AES-256-GCM Encrypts all text and documents
Key Exchange X25519 + ML-KEM-768 Quantum-safe session keys
Signing Ed25519 Verifies authenticity
Transport TLS 1.3 Secures transmission
Key Storage HSM (FIPS 140-3) Protects master keys

Quantum-Safe Encryption

Pauhu uses hybrid post-quantum cryptography (X25519 + ML-KEM-768) to protect against future quantum computer attacks. See Quantum-Safe Encryption for details.


Client-Side Implementation

from pauhu import Pauhu

# Initialize with client-side encryption (default)
client = Pauhu(
    api_key="pk_...",
    client_side_encryption=True  # Default: True
)

# All operations are automatically encrypted
result = client.translate(
    text="Classified: Project Falcon budget is EUR 2.5M",
    target="fi"
)

# Verify encryption was used
assert result.metadata.encrypted == True
assert result.metadata.key_id is not None

Manual Key Management

from pauhu.crypto import KeyPair, encrypt, decrypt

# Generate your own keys
keypair = KeyPair.generate()

# Encrypt before sending
encrypted = encrypt(
    plaintext="Sensitive content",
    public_key=keypair.public_key
)

# Send encrypted data
result = client.translate_encrypted(
    ciphertext=encrypted.ciphertext,
    nonce=encrypted.nonce,
    target="fi"
)

# Decrypt response
translation = decrypt(
    ciphertext=result.ciphertext,
    nonce=result.nonce,
    private_key=keypair.private_key
)

What We Cannot See

Data Type Visible to Pauhu?
Source text No
Translated text No
Document content No
File names No
Metadata (custom) No
API key Yes (for billing)
Request timestamp Yes (for rate limiting)
Character count Yes (for quota)

Compliance Implications

GDPR Article 32

"Taking into account the state of the art... the controller and processor shall implement appropriate technical and organisational measures to ensure a level of security appropriate to the risk, including... encryption of personal data."

Client-side encryption satisfies GDPR's encryption requirements because personal data is never exposed to our servers in plaintext.

VAHTI ST IV (Finnish Government)

Security Level IV: Classified (SALAINEN)
- Encryption: Required (AES-256 minimum)
- Key management: HSM required
- Processing: Isolated environment

Pauhu's client-side encryption meets ST IV requirements for classified information handling.

FedRAMP High

Control SC-28 (Protection of Information at Rest):

"Cryptographic mechanisms shall prevent unauthorized disclosure and modification of information."

Client-side encryption exceeds FedRAMP High requirements by encrypting data both at rest and in transit.


Verification

Audit Your Encryption

from pauhu.audit import verify_encryption

# Verify a specific request
audit = verify_encryption(
    request_id="req_abc123",
    api_key="pk_..."
)

print(audit.algorithm)        # "AES-256-GCM"
print(audit.key_derivation)   # "X25519"
print(audit.server_access)    # "none"
print(audit.verified)         # True

Independent Verification

Our client-side encryption implementation is audited by:

  • KPMG Finland - Annual security audit
  • Nixu Oy - Penetration testing
  • Traficom NCSC-FI - Government certification

Audit reports available under NDA for enterprise customers.


Offline Mode

Client-side encryption works identically in offline mode:

from pauhu import Pauhu

# Offline mode with local models
client = Pauhu(
    mode="offline",
    models_path="/opt/pauhu/models"
)

# Same encryption, no network
result = client.translate(
    text="Air-gapped facility report",
    target="fi"
)

# Encryption keys never leave the device
assert result.metadata.network_used == False

Getting Started

from pauhu import Pauhu

client = Pauhu()

# Client-side encryption is enabled by default
result = client.translate(
    text="Your sensitive content here",
    target="fi"
)

# Check encryption status
print(f"Encrypted: {result.metadata.encrypted}")
print(f"Algorithm: {result.metadata.algorithm}")