PSRD Management
PSRD (Pre-Shared Random Data) is the entropy source consumed by DSKE during key generation and recovery. Think of it as fuel — without PSRD, DSKE cannot generate or recover secrets, and the AES tunnel will not establish.
PSRD Lifecycle
┌──────────────┐ ┌──────────────┐ ┌──────────────┐
│ Security Hub │ │ Out-of-band │ │ DSKE Client │
│ generates │────►│ transfer │────►│ ingests │
│ PSRD file │ │ (SSH, etc.) │ │ PSRD file │
└──────────────┘ └──────────────┘ └──────────────┘
│
▼
┌──────────────┐
│ Registers │
│ with hub │
└──────────────┘
│
▼
┌──────────────┐
│ Consumed by │
│ generate / │
│ recover ops │
└──────────────┘
Ingesting PSRD
When you receive a PSRD file from a security hub administrator, ingest it on the client:
qufabric dske ingest-psrd /path/to/psrd-wrapped.json
This command:
- Parses the wrapped JSON file
- Extracts the PSRD data, hub endpoint, hub ID, and client ID
- Registers the client with the security hub
- Stores the registration in the local DSKE database
Each PSRD file is single-use. Once ingested, the same file cannot be used again.
Each client peer must receive a unique PSRD file. If you try to re-ingest a file,
the SDK will return a PsrdPreviouslyInserted error.
PSRD File Format
The wrapped PSRD file is a JSON document containing everything needed to register with a security hub:
{
"version": 2,
"security_hub_fqdn": "hub.example.com",
"security_hub_id": "0a1b2c3d4e5f67890a1b2c3d4e5f6789",
"security_hub_port": 27277,
"dske_client_id": "7320cff5-6929-44f5-8106-46c5304c8047",
"dske_client_username": "my-client-name",
"psrd": "base64-encoded-psrd-data..."
}
| Field | Description |
|---|---|
security_hub_fqdn | Hub's hostname for endpoint construction |
security_hub_id | Hub's unique identifier |
security_hub_port | DSKE API port (default: 27277) |
dske_client_id | Your unique client ID on this hub |
dske_client_username | Human-readable client name |
psrd | Base64-encoded entropy data |
Monitoring PSRD Levels
Check your current PSRD status:
qufabric dske status
Example output:
DSKE Status: Enabled
Local Peer UUID: 625e104c8321934fd6533994f8967b7c
Registered Security Hubs:
Hub ID Client ID Generate Recover Status
0a1b2c3d4e5f67890a1b2c3d4e5f6789 fedcba9876543210fedcba9876543210 524288 524288 Enabled
1234567890abcdef1234567890abcdef abcdef1234567890abcdef1234567890 1048576 1048576 Enabled
The Generate and Recover columns show remaining PSRD bytes for each direction.
Warning Thresholds
The DSKE service automatically monitors PSRD levels:
| Level | Threshold | Action |
|---|---|---|
| Normal | > 10 KiB | No action |
| Warning | < 10 KiB | Logged as warning, automatic refill attempted |
| Critical | < 1 KiB | Logged as error, key operations may fail |
PSRD Consumption Rate
PSRD is consumed with every key generation and recovery operation:
| Factor | Value |
|---|---|
| Rotation interval | Every 120 seconds per peer pair |
| Shares per rotation | 2 (one per hub, with shares_required=2) |
| Approximate consumption | ~4 KiB per rotation |
| Duration per PSRD file | ~8–16 hours of continuous operation |
The actual consumption depends on the number of active peer pairs and the DSKE SDK's internal accounting.
Refilling PSRD
Automatic Refill
When PSRD levels drop below the warning threshold, the DSKE service automatically requests an online refill from the security hub:
# This happens automatically, but you can also trigger it manually:
qufabric dske refill-psrd <hub-id>
Manual Refill
If automatic refill is insufficient or the hub requires manual PSRD provisioning:
- Request a new PSRD file from the security hub administrator
- Ingest it:
qufabric dske ingest-psrd /path/to/new-psrd.json
Managing Hubs
List Registered Hubs
qufabric dske list-hubs
Disable a Hub
Temporarily disable a hub (local only — the hub is not notified):
qufabric dske disable-hub <hub-id>
Re-enable a Hub
qufabric dske enable-hub <hub-id>
Remove a Hub
Permanently remove a hub registration (requires re-ingesting PSRD to re-register):
qufabric dske remove-hub <hub-id>
Troubleshooting
"NotEnoughPSRD" Error
PSRD is exhausted. Either:
- Check levels:
qufabric dske status - Request refill:
qufabric dske refill-psrd <hub-id> - Ingest fresh PSRD from the hub administrator
"ClientAuthenticationFailed" Error
The hub doesn't recognize your client credentials:
- Verify you were added as a client on the security hub
- Re-ingest a fresh PSRD file
- Ensure the hub endpoint is reachable
"SecurityHubCommunication" Error
Cannot reach the security hub:
- Verify the hub endpoint URL and port
- Check network connectivity to the hub
- Verify the hub service is running
"GeneralError" or "AddPSRDFailure" on Ingest
Possible causes:
- PSRD file was already ingested (one-time use)
- Hub has conflicting state for this client ID
- PSRD data is corrupted or truncated
Try a fresh PSRD file — never re-ingest the same file.
Security Best Practices
- Secure transfer: Always use encrypted channels (SSH, SFTP) when transferring PSRD files
- File permissions: Set PSRD files to
0600before and after transfer - Delete after use: Remove PSRD files from both hub and client after successful ingestion
- Monitor levels: Set up alerting on PSRD levels to avoid service interruption
- Regular rotation: Periodically provision fresh PSRD for long-running deployments

