Skip to content

Encrypt Trainer Class Export Files to Protect Student PII #2

Description

@enpasos

Problem

Currently, the Trainer export function produces a plain JSON file (skillpilot-class-*.json) that contains a direct mapping between Student Real Names and their SkillPilot-IDs.

If this file is leaked or shared insecurely (e.g., left on a shared school computer), anyone can use it to de-anonymize the student data associated with those IDs. This constitutes a PII leakage risk and weakens pseudonymization.


Proposal

Implement client-side encryption for the class export file.

  1. Export flow

    • When a trainer exports a class, prompt them to set a password.
    • Before generating the download blob, encrypt the JSON content with the provided password.
  2. Encryption

    • Use a secure, modern algorithm such as AES-GCM.
    • Derive an encryption key from the trainer’s password using a standard KDF (e.g., PBKDF2, scrypt, or Argon2).
    • Store any required metadata (e.g., salt, IV, version) alongside the ciphertext in the exported file.
  3. Import flow

    • When importing a class file, detect if the file is encrypted (e.g., via a version/format marker).
    • If encrypted, prompt the user for the password.
    • Decrypt the content client-side and then process the resulting JSON as today.
    • If decryption fails (wrong password, corrupted file), show a clear, non-technical error message.

Goals

  • Ensure that only the authorized teacher (who knows the password) can read the Real Name ↔︎ SkillPilot-ID mapping.
  • Reduce the risk of accidental PII leaks if the export file is mishandled, shared, or left on insecure devices.
  • Maintain a smooth UX while adding a meaningful privacy and security layer.

Impact

  • Improves alignment with data privacy regulations (e.g., GDPR) by strengthening pseudonymization and protecting the re-identification key (Real Name ↔︎ ID mapping).
  • Limits the damage of file leaks: exported class files are useless to unauthorized parties without the password.
  • Helps schools and institutions demonstrate privacy-by-design in handling student data.

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions