DEV Community

Cover image for Stop Guessing, Start Measuring: Why Your App Needs a Shannon Entropy Check
Eka Prasetia
Eka Prasetia

Posted on

Stop Guessing, Start Measuring: Why Your App Needs a Shannon Entropy Check

We've all been there: a user sets their password to password123, or worse, a junior dev accidentally hardcodes a "test" API key into a frontend component. Standard regex checks for length and character sets are fine, but they don't actually tell you how predictable a string is. This is the "hidden" security debt in most apps. If you can't quantify the randomness of a secret, you're just crossing your fingers and hoping for the best. By measuring Shannon Entropy, we move from "this looks like a string" to "this string is mathematically complex enough to be secure."

Example

Here are a few ways to bake these checks into your workflow using a lightweight approach:

1. Validating API Keys in Middleware

Stop invalid or "dummy" keys before they hit your database. If the entropy is too low, it’s probably a placeholder.

import { calculate } from '@ekaone/entropy';

const apiKey = "key_12345"; // Way too predictable
if (calculate(apiKey).entropy < 3.5) {
  throw new Error("Security Risk: Token entropy is too low.");
}
Enter fullscreen mode Exit fullscreen mode

2. Smart Password Strength Meters

Instead of yelling at users for missing a capital letter, give them a real-time "Complexity Score" based on actual data density.

const userPass = "CorrectHorseBatteryStaple";
const score = calculate(userPass).entropy;

console.log(`Password Complexity: ${score.toFixed(2)} bits`);
// A much more "human" way to handle security UX.
Enter fullscreen mode Exit fullscreen mode

3. Detecting Secret Leaks in CI/CD

You can run a quick scan over your config files. If a string suddenly spikes in entropy, there’s a high chance someone accidentally pasted a private key where it doesn't belong.

const configValue = process.env.DATABASE_URL;
if (calculate(configValue).entropy > 4.5) {
  console.warn("Caution: High entropy detected. Ensure this secret is masked!");
}
Enter fullscreen mode Exit fullscreen mode

Finally

It’s a small addition to your stack that pays off the moment it catches a "123456" hiding in your production environment.

You can grab the source code, check the math, or contribute to the footprint-reduction movement over at the repository.

Install it, no judgment here:

npm install @ekaone/entropy
# or
yarn add @ekaone/entropy
# or
pnpm add @ekaone/entropy
Enter fullscreen mode Exit fullscreen mode

The code lives here, fully open, zero drama:
👉 GitHub: https://github.com/ekaone/entropy

Happy coding!!

Top comments (0)