Skip to main content

Web Crypto benchmark

This page measures the cryptography this site depends on, in the browser that is reading it. Press run and it encrypts a fixed payload, derives a key at two iteration counts and hashes a fixed payload, then shows the timings and lets you download them.

Nothing here is uploaded. The benchmark runs through the Web Crypto API on your device; the result JSON is produced in your browser and only leaves it if you download it. We publish the parameters, never your numbers.

Method

The benchmark calls the Web Crypto API directly: an AES-GCM key is generated, a fixed payload is encrypted and decrypted, a key is derived with PBKDF2 at two iteration counts, and the SHA digests are computed over a fixed payload. Each measurement is timed around the awaited promise, and the result is written into one JSON object that you can download. There is no server call in any of it.

Parameter set date
2026-10-20
Environment
Your own device and browser, read at run time and reported next to your results. We publish no fixed device list and no author-side numbers for this benchmark, because a timing measured on someone else's machine says nothing about yours.

Fixed parameters (published)

  • AES-GCM payload size1MB
  • PBKDF2 iterations, baseline100000iterations
  • PBKDF2 iterations, hardened600000iterations
  • Digest payload size1MB

Measurement

  • aes-256-gcm-encrypt
  • aes-256-gcm-decrypt
  • pbkdf2-sha256-100k
  • pbkdf2-sha256-600k
  • sha-256
  • sha-512

Run it

One press runs the whole set. Expect the hardened PBKDF2 case to be the slow one — that is what its iteration count is for.

Not run yet.

Your results

No results yet.

Questions about this benchmark

Are these numbers published as site data?

No, and deliberately not. They describe one machine at one moment, and we have not run a fixed device set, so there is no author-side number to publish. What is published is the parameter set and the method; your run produces your own numbers.

Why is the hardened key derivation case slow?

Because it is meant to be. An iteration count exists to make guessing keys expensive; a derivation that feels instant on your device is also instant for someone attacking a stolen file. The two counts are printed here so the tradeoff is visible instead of asserted.

Can the results be compared across devices?

Only as a rough sense of magnitude. Timings depend on the device, the browser and what else it is doing, so treat a single run as an indication rather than a specification.