====== 3.2 Configuration ======
Configuration options for the PQ cryptography infrastructure.
----
===== Environment Variables =====
^ Variable ^ Description ^ Example ^ Priority ^
| ''OPENSSL_PATH'' | Path to OpenSSL binaries | ''C:\OpenSSL\bin'' | High |
| ''WVDS_CRYPTO_MODE'' | Default crypto mode | ''Hybrid'' | Medium |
| ''WVDS_PQ_KEYSTORE'' | Path to PQ key store | ''%LOCALAPPDATA%\WvdS.Crypto\PqKeys'' | Optional |
==== Windows (PowerShell as Administrator) ====
# Permanent for all users (Machine scope)
[Environment]::SetEnvironmentVariable("OPENSSL_PATH", "C:\Program Files\OpenSSL\bin", "Machine")
[Environment]::SetEnvironmentVariable("WVDS_CRYPTO_MODE", "Hybrid", "Machine")
# Verify (open new PowerShell)
$env:OPENSSL_PATH
$env:WVDS_CRYPTO_MODE
==== Linux ====
# System-wide (/etc/profile.d/)
sudo tee /etc/profile.d/wvds-crypto.sh << 'EOF'
export OPENSSL_PATH=/usr/local/openssl/lib
export WVDS_CRYPTO_MODE=Hybrid
EOF
# For current user (~/.bashrc or ~/.profile)
echo 'export OPENSSL_PATH=/usr/local/openssl/lib' >> ~/.bashrc
echo 'export WVDS_CRYPTO_MODE=Hybrid' >> ~/.bashrc
# Activate
source ~/.bashrc
# Verify
echo $OPENSSL_PATH
echo $WVDS_CRYPTO_MODE
==== macOS ====
# In ~/.zshrc (default shell on macOS)
echo 'export OPENSSL_PATH=$(brew --prefix openssl@3)/lib' >> ~/.zshrc
echo 'export WVDS_CRYPTO_MODE=Hybrid' >> ~/.zshrc
source ~/.zshrc
----
===== Crypto Modes =====
^ Mode ^ Description ^ Usage ^
| ''Classic'' | RSA/ECDSA only | Legacy systems, backward compatibility |
| ''Hybrid'' | RSA + ML-DSA in parallel | **Recommended** for migration |
| ''PostQuantum'' | ML-DSA/ML-KEM only | New PQ-only systems |
**Recommendation:** Use ''Hybrid'' during the transition phase. This provides security even if one algorithm is compromised.
----
===== PQ Key Store =====
The Windows Certificate Store does not support native PQ keys. The library uses a separate side-store:
**Default paths:**
^ OS ^ Path ^
| Windows | ''%LOCALAPPDATA%\WvdS.Crypto\PqKeys\'' |
| Linux | ''~/.local/share/wvds-crypto/pqkeys/'' |
| macOS | ''~/Library/Application Support/WvdS.Crypto/PqKeys/'' |
==== Check Permissions ====
**Windows (PowerShell):**
# Determine path
$pqKeyStore = "$env:LOCALAPPDATA\WvdS.Crypto\PqKeys"
# Check existence
Test-Path $pqKeyStore
# Show permissions
Get-Acl $pqKeyStore | Format-List
# Set permissions (current user only)
icacls $pqKeyStore /inheritance:r /grant:r "$env:USERNAME:(OI)(CI)F"
**Linux:**
# Path
PQ_KEYSTORE=~/.local/share/wvds-crypto/pqkeys
# Check existence
ls -la $PQ_KEYSTORE
# Set permissions (owner read/write only)
chmod 700 $PQ_KEYSTORE
chmod 600 $PQ_KEYSTORE/*
# Verify
stat $PQ_KEYSTORE
**Important:** The PQ key store is **not** included in Windows Certificate Store backups!
Back up this folder separately.
----
===== FIPS Mode (OpenSSL) =====
For FIPS 140-3 compliance, the OpenSSL FIPS Provider must be enabled.
==== Check FIPS Provider Status ====
# List providers
openssl list -providers
# Expected output with FIPS:
# Providers:
# default
# fips
==== Enable FIPS Provider ====
**Configure openssl.cnf:**
# Determine OpenSSL configuration path
openssl version -d
# Output: OPENSSLDIR: "/usr/local/openssl"
# Edit configuration
sudo nano /usr/local/openssl/openssl.cnf
**Required entries in openssl.cnf:**
# At the beginning of the file
openssl_conf = openssl_init
[openssl_init]
providers = provider_sect
[provider_sect]
fips = fips_sect
base = base_sect
default = default_sect
[fips_sect]
activate = 1
[base_sect]
activate = 1
[default_sect]
activate = 1
**Verification:**
# Check FIPS status
openssl list -providers | grep -i fips
# FIPS-validated algorithms
openssl list -signature-algorithms -provider fips
----
===== Algorithm Configuration =====
**Available ML-DSA variants (signatures):**
^ Algorithm ^ NIST Level ^ Public Key ^ Signature ^ Recommendation ^
| ML-DSA-44 | Level 2 | 1,312 B | 2,420 B | Resource-constrained systems |
| ML-DSA-65 | Level 3 | 1,952 B | 3,309 B | **Standard (recommended)** |
| ML-DSA-87 | Level 5 | 2,592 B | 4,627 B | Highest security |
**Available ML-KEM variants (key exchange):**
^ Algorithm ^ NIST Level ^ Public Key ^ Ciphertext ^ Shared Secret ^
| ML-KEM-512 | Level 1 | 800 B | 768 B | 32 B |
| ML-KEM-768 | Level 3 | 1,184 B | 1,088 B | 32 B |
| ML-KEM-1024 | Level 5 | 1,568 B | 1,568 B | 32 B |
**Check algorithm support:**
# All available signature algorithms
openssl list -signature-algorithms
# ML-DSA specifically
openssl list -signature-algorithms | grep -i "ml-dsa"
# All KEM algorithms
openssl list -kem-algorithms
# ML-KEM specifically
openssl list -kem-algorithms | grep -i "ml-kem"
----
===== Further Reading =====
* [[.:betrieb|Operations]] – Health checks, certificates via CLI
* [[.:troubleshooting|Troubleshooting]] – Configuration errors
* [[en:int:pqcrypt:konzepte:algorithmen|Algorithms]] – Technical details
* [[en:int:pqcrypt:api:cryptoconfig|CryptoConfig API]] – For developers
----
//Wolfgang van der Stille @ EMSR DATA d.o.o. - Post-Quantum Cryptography Professional//
{{tag>configuration environment-variables fips openssl}}