====== 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}}