11 KiB
11 KiB
Implementation TODO
Remaining tasks from MIGRATION.md for the Nebula Key Enclave.
Status Summary
| Category | Status | Notes |
|---|---|---|
| Schema (10 tables) | Complete | internal/migrations/schema.sql |
| SQLC Queries | Complete | internal/migrations/query.sql |
| Generated Code | Complete | internal/keybase/*.go |
| Basic Plugin Functions | Complete | generate, load, exec, query, ping |
| Encryption | Not Started | WebAuthn PRF key derivation needed |
| UCAN Authorization | Placeholder | Validation logic not implemented |
| MPC Key Shares | Not Started | Key share management missing |
| Database Serialization | Incomplete | Export dumps comments only |
1. Encryption Strategy
Reference: MIGRATION.md lines 770-814
1.1 WebAuthn PRF Key Derivation
- Implement
DeriveEncryptionKey(prfOutput []byte) ([]byte, error) - Use HKDF with SHA-256 to derive 256-bit encryption key
- Salt with
"nebula-enclave-v1"as info parameter
1.2 Database Encryption
- Implement application-level AES-GCM encryption for serialized pages
- Add encryption wrapper around
Serialize()output - Add decryption wrapper for
Load()input - Store encryption metadata (IV, auth tag) with serialized data
1.3 Encrypted Database Wrapper
- Create
internal/enclave/enclave.go- Encrypted database wrapper - Create
internal/enclave/crypto.go- WebAuthn PRF key derivation - Integrate with existing
internal/keybasepackage
2. Database Serialization
Current implementation in
conn.go:exportDump()only outputs comments
2.1 Proper Serialization
- Implement full row export with proper SQL INSERT statements
- Handle JSON columns correctly (escape special characters)
- Include table creation order for foreign key constraints
- Add version header for migration compatibility
2.2 Proper Deserialization
- Parse serialized SQL dump in
Load() - Execute INSERT statements to restore data
- Validate data integrity after restore
- Handle schema version mismatches
3. Action Manager Extensions
Reference:
internal/keybase/actions.go
3.1 Key Share Actions
CreateKeyShare(ctx, params) (*KeyShareResult, error)ListKeyShares(ctx) ([]KeyShareResult, error)GetKeyShareByID(ctx, shareID) (*KeyShareResult, error)GetKeyShareByKeyID(ctx, keyID) (*KeyShareResult, error)RotateKeyShare(ctx, shareID) errorArchiveKeyShare(ctx, shareID) errorDeleteKeyShare(ctx, shareID) error
3.2 UCAN Token Actions
CreateUCAN(ctx, params) (*UCANResult, error)ListUCANs(ctx) ([]UCANResult, error)GetUCANByCID(ctx, cid) (*UCANResult, error)ListUCANsByAudience(ctx, audience) ([]UCANResult, error)RevokeUCAN(ctx, cid) errorIsUCANRevoked(ctx, cid) (bool, error)CreateRevocation(ctx, params) errorCleanExpiredUCANs(ctx) error
3.3 Delegation Actions
CreateDelegation(ctx, params) (*DelegationResult, error)ListDelegationsByDelegator(ctx, delegator) ([]DelegationResult, error)ListDelegationsByDelegate(ctx, delegate) ([]DelegationResult, error)ListDelegationsForResource(ctx, resource) ([]DelegationResult, error)GetDelegationChain(ctx, delegationID) ([]DelegationResult, error)RevokeDelegation(ctx, delegationID) errorRevokeDelegationChain(ctx, delegationID) error
3.4 Verification Method Actions
CreateVerificationMethod(ctx, params) (*VerificationMethodResult, error)ListVerificationMethods(ctx) ([]VerificationMethodResult, error)GetVerificationMethod(ctx, methodID) (*VerificationMethodResult, error)DeleteVerificationMethod(ctx, methodID) error
3.5 Service Actions
CreateService(ctx, params) (*ServiceResult, error)GetServiceByOrigin(ctx, origin) (*ServiceResult, error)GetServiceByID(ctx, serviceID) (*ServiceResult, error)UpdateService(ctx, params) errorListVerifiedServices(ctx) ([]ServiceResult, error)
3.6 Grant Actions (Extend Existing)
CreateGrant(ctx, params) (*GrantResult, error)GetGrantByService(ctx, serviceID) (*GrantResult, error)UpdateGrantScopes(ctx, grantID, scopes, accounts) errorUpdateGrantLastUsed(ctx, grantID) errorSuspendGrant(ctx, grantID) errorReactivateGrant(ctx, grantID) errorCountActiveGrants(ctx) (int64, error)
3.7 Account Actions (Extend Existing)
CreateAccount(ctx, params) (*AccountResult, error)ListAccountsByChain(ctx, chainID) ([]AccountResult, error)GetDefaultAccount(ctx, chainID) (*AccountResult, error)SetDefaultAccount(ctx, accountID, chainID) errorUpdateAccountLabel(ctx, accountID, label) errorDeleteAccount(ctx, accountID) error
3.8 Credential Actions (Extend Existing)
CreateCredential(ctx, params) (*CredentialResult, error)UpdateCredentialCounter(ctx, credentialID, signCount) errorRenameCredential(ctx, credentialID, name) errorDeleteCredential(ctx, credentialID) errorCountCredentialsByDID(ctx) (int64, error)
3.9 Session Actions (Extend Existing)
GetSessionByID(ctx, sessionID) (*SessionResult, error)GetCurrentSession(ctx) (*SessionResult, error)UpdateSessionActivity(ctx, sessionID) errorSetCurrentSession(ctx, sessionID) errorDeleteExpiredSessions(ctx) error
3.10 Sync Checkpoint Actions
GetSyncCheckpoint(ctx, resourceType) (*SyncCheckpointResult, error)UpsertSyncCheckpoint(ctx, params) errorListSyncCheckpoints(ctx) ([]SyncCheckpointResult, error)
4. UCAN Authorization
Reference: MIGRATION.md lines 820-821
4.1 Token Validation
- Implement proper UCAN token parsing (JWT-like structure)
- Validate token signature against issuer's public key
- Check token expiration (
expclaim) - Check token not-before (
nbfclaim) - Validate audience matches expected DID
4.2 Capability Verification
- Parse capabilities array from token
- Match requested action against granted capabilities
- Implement resource pattern matching (e.g.,
sonr://vault/*) - Respect action restrictions (e.g.,
sign,read,write)
4.3 Proof Chain Validation
- Follow proof chain to root UCAN
- Validate each link in the chain
- Ensure capability attenuation (child can't exceed parent)
- Check revocation status for all tokens in chain
4.4 Revocation Checking
- Query
ucan_revocationstable - Check all tokens in proof chain
- Cache revocation status for performance
5. MPC Key Share Management
Reference: MIGRATION.md lines 823-824
5.1 Key Share Storage
- Parse key share data from MPC protocol
- Encrypt share data before storage
- Store public key and chain code
- Track party index and threshold
5.2 Account Derivation
- Implement BIP44 derivation path parsing
- Derive addresses from public keys
- Support multiple chains (Cosmos 118, Ethereum 60)
- Generate proper address encoding per chain
5.3 Key Rotation
- Implement key rotation workflow
- Archive old shares
- Update status transitions
- Handle rotation failures gracefully
6. Plugin Function Extensions
Reference:
main.go
6.1 Extend exec Resource Handlers
- Add
key_sharesresource handler - Add
ucansresource handler - Add
delegationsresource handler - Add
verification_methodsresource handler - Add
servicesresource handler - Add
sync_checkpointsresource handler
6.2 Extend generate Function
- Parse WebAuthn credential properly (CBOR/COSE format)
- Extract public key from credential
- Create initial verification method
- Create initial credential record
- Generate initial account (if key share provided)
6.3 Signing Function
- Implement
signwasmexport function - Support signing with MPC key shares
- Return signature in appropriate format
- Log signing operations for audit
7. Capability Delegation
Reference: MIGRATION.md lines 826-827
7.1 Delegation Chain Management
- Enforce maximum delegation depth (prevent infinite chains)
- Validate delegator has capability to delegate
- Ensure proper capability attenuation
- Track parent-child relationships
7.2 Delegation Status
- Implement expiration checking
- Handle revocation cascades (revoke chain)
- Update status on expiry
8. DID State Sync
Reference: MIGRATION.md line 827
8.1 Sync Infrastructure
- Create
internal/enclave/sync.go- DID state sync logic - Implement checkpoint tracking
- Store last synced block height
- Track last processed transaction hash
8.2 Sync Operations
- Fetch DID document updates from chain
- Validate on-chain document hash
- Update local state on changes
- Handle reorgs and rollbacks
9. TypeScript SDK
Reference: README.md,
src/directory
9.1 Core SDK
- Implement
createEnclave(wasmPath)factory - Implement
generate(credential)wrapper - Implement
load(database)wrapper - Implement
exec(filter, token?)wrapper - Implement
query(did?)wrapper
9.2 Type Definitions
- Generate TypeScript types from Go structs
- Export type definitions for consumers
- Add JSDoc documentation
9.3 WebAuthn Integration
- Helper for credential creation
- Helper for PRF extension output
- Proper encoding/decoding utilities
10. Testing
10.1 Unit Tests
- Test all ActionManager methods
- Test serialization/deserialization roundtrip
- Test encryption/decryption
- Test UCAN validation logic
10.2 Integration Tests
- Test full generate → load → exec flow
- Test credential lifecycle
- Test session management
- Test grant management
10.3 Plugin Tests
- Extend
make test-pluginwith all functions - Add error case testing
- Test with various input formats
11. Security Hardening
11.1 Input Validation
- Validate all JSON inputs against schemas
- Sanitize SQL-sensitive characters in serialization
- Validate DID format on all inputs
- Validate base64 encoding
11.2 Cryptographic Security
- Use constant-time comparison for sensitive data
- Clear sensitive data from memory after use
- Validate key sizes and formats
- Implement proper nonce generation
11.3 Access Control
- Enforce DID ownership on all mutations
- Validate session before sensitive operations
- Check grant scopes before data access
- Log security-relevant operations
Priority Order
-
High Priority (Core Functionality)
- Database Serialization (2.1, 2.2)
- Credential Creation (6.2, 3.8)
- Key Share Actions (3.1)
- Account Actions (3.7)
-
Medium Priority (Authorization)
- UCAN Validation (4.1, 4.2)
- Delegation Management (7.1, 7.2)
- Encryption Strategy (1.1, 1.2)
-
Lower Priority (Enhancement)
- TypeScript SDK (9.x)
- DID State Sync (8.x)
- Additional exec handlers (6.1)
- Testing (10.x)
- Security Hardening (11.x)