A service that normally decrypts 40 rows a second starts doing 5,000. Encryption alone doesn't notice — the key is valid, the queries are legal, the data walks out perfectly decrypted. Crypto Sentinel notices, and emails you inside a second. And every alert it raises is captured for the compliance report.
No noise budget to manage, no rule engine to configure. Every alert the package can raise is listed here, with the exact condition that raises it.
| Alert | Raised when | Severity | Reaches you |
|---|---|---|---|
| Abnormal decryption | A metric series spikes past its learned baseline at 99% confidence, with at least 50
events in one interval. Each series — crypto.decrypt, entity:Customer — is
judged against its own history. |
Critical
Warning
|
Critical at 500+ events/interval, delivered on the next tick. Below that, warning. One
alert per series per 5 minutes. |
| Unencrypted PII found | The startup scan found a column holding data that passed a checksum-verified detector — Aadhaar
(Verhoeff), card (Luhn), IBAN (mod-97) — or a property declared [SensitiveData] and left in
plaintext. |
Critical | One email per finding, ~5 seconds after the app boots. |
| Scan summary | Everything the scan flagged below that bar: ML-classified matches and column names scoring 0.8+. | Warning | One digest, batched into the 15-minute window. |
| License expiry | A valid license has 14 days or fewer remaining, or a supplied key failed validation. | Warning | Once, 15 seconds after startup. |
| series | entity:Customer |
| eventsInInterval | 5120 |
| intervalSeconds | 1 |
| reason | SSA spike detected |
| pValue | 0.000004 |
| droppedTelemetryEvents | 0 |
pValue is the model's own confidence — evidence
for the incident report, not a number you have to tune.| entity | Customer |
| property | AadhaarNumber |
| column | aadhaar_number |
| evidence | 94% of 100 samples (pattern-verified) |
| entitiesScanned | 18 |
| propertiesScanned | 41 |
| encrypted | 34 |
| durationSeconds | 2.4 |
Detection, batching and delivery are separate stages with separate guarantees. These are the real defaults — every number is a setting you can change.
Always on, and the last line of defence — an alert is never invisible, even when every remote channel is
down. Critical maps to LogError.
Your server, your credentials, your relay. Nothing routes through vendor infrastructure and no alert content ever leaves your network.
Stable JSON to Slack, PagerDuty or your SIEM, with an X-RLML-Signature HMAC header so the
receiver can verify it was really you.
Implement one interface and register it. The dispatcher gives your channel the same retry, batching and dead-lettering as the built-ins.
POST /hooks/crypto-sentinel X-RLML-Signature: sha256=9f2c… { "deliveryId": "3f2b8c1e-…", "isDigest": false, "maxSeverity": "Critical", "windowStartUtc": "2026-07-23T03:14:07Z", "alerts": [{ "kind": "AnomalyDetected", "severity": "Critical", "source": "entity:Customer", "title": "Abnormal decryption activity on 'entity:Customer'", "data": { "eventsInInterval": "5120", "pValue": "0.000004" } }] }
Encryption is the easy half; noticing misuse in real time is the half that saves you. And when you need to prove it was in place, that report is already written too.