first commit
This commit is contained in:
@@ -0,0 +1,65 @@
|
||||
# entropy
|
||||
|
||||
## Purpose
|
||||
|
||||
Detects high-entropy strings that are likely secret tokens, API keys, or
|
||||
passwords using Shannon entropy analysis. This heuristic catches secrets that
|
||||
have no fixed prefix and would be missed by pattern-based detectors.
|
||||
While less precise than dedicated pattern detectors, it provides a useful
|
||||
catch-all for novel or unrecognized credential formats.
|
||||
|
||||
## Features
|
||||
|
||||
- Scans for base64/hex-alphabet runs of at least 20 characters.
|
||||
- Computes Shannon entropy (bits per character) for each candidate.
|
||||
- Returns only candidates with entropy ≥ 4.5 bits per character, a threshold
|
||||
calibrated to separate random tokens from natural-language substrings.
|
||||
- Returns a deliberately conservative confidence of `0.6` to reflect the
|
||||
heuristic nature of the detection.
|
||||
|
||||
## Usage: Basic Example
|
||||
|
||||
```ts
|
||||
import { detect } from '@suaveplan/security-codes/patterns/entropy';
|
||||
|
||||
// A random-looking base64 string
|
||||
const matches = detect('secret=aB3dEfGhIjKlMnOpQrStUvWxYz012345678901');
|
||||
// matches[0].type === 'high-entropy', confidence 0.6
|
||||
```
|
||||
|
||||
## Usage: Advanced Example
|
||||
|
||||
```ts
|
||||
import { detect } from '@suaveplan/security-codes/patterns/entropy';
|
||||
|
||||
// Short or low-entropy strings are not flagged
|
||||
const noMatch = detect('hello world this is plain text');
|
||||
console.log(noMatch.length); // 0
|
||||
|
||||
// High-entropy token is flagged
|
||||
const match = detect('TOKEN=xK8mP2nQ9rS5tV7wY1aB4cD6eF0gH3iJ');
|
||||
console.log(match[0].confidence); // 0.6
|
||||
```
|
||||
|
||||
## API Reference
|
||||
|
||||
### `detect(input: string): SecurityCodeMatch[]`
|
||||
|
||||
Scans `input` for high-entropy strings.
|
||||
|
||||
| Parameter | Type | Description |
|
||||
|---|---|---|
|
||||
| `input` | `string` | The string to scan |
|
||||
|
||||
Returns an array of `SecurityCodeMatch` with `type: 'high-entropy'` and
|
||||
`confidence: 0.6`. Returns an empty array when no high-entropy candidates
|
||||
are found.
|
||||
|
||||
## Implementation Notes
|
||||
|
||||
Shannon entropy `H = -∑ p(x) log₂ p(x)` over a string's character frequency
|
||||
distribution. Natural English text scores around 3.5–4.0 bits per character;
|
||||
random tokens typically exceed 4.5. The threshold was chosen empirically to
|
||||
minimise false positives on common identifiers and UUIDs while still catching
|
||||
hex-encoded secrets and base64 tokens. The minimum length of 20 characters
|
||||
filters out short words that happen to have high entropy due to their brevity.
|
||||
Reference in New Issue
Block a user