A cryptographic string used as a primary input (seed) for creating key material for autonomic identifiers (AIDs) in KERI. The term was deliberately chosen to avoid conflicts with existing KERI terminology while maintaining semantic connection to seed-related concepts.
Related Concepts
No related concepts available
Comprehensive Explanation
bran
Technical Definition
Bran is a cryptographic string that serves as the primary entropy source for generating key material associated with autonomic identifiers (AIDs) in the KERI ecosystem. According to the canonical glossary definition, bran is "a cryptographic string used as a primary input, a seed, for creating key material for and autonomic-identifier."
Formal Definition
In KERI terminology, bran represents:
A pseudorandomly generated number typically expressed as a series of words
The foundational entropy from which cryptographic keypairs are deterministically derived
A primary input to key derivation functions that produce the private keys controlling AIDs
Purpose in KERI/ACDC
Bran serves as the root secret from which all cryptographic authority flows in a KERI-based identity system. It enables:
Deterministic key generation: The same bran always produces the same keypairs
Key recovery: Lost keys can be regenerated from the bran
Hierarchical key derivation: Multiple related keys can be derived from a single bran
Portability: Identity can be moved between systems by transferring the bran
Type Classification
Bran is classified as a cryptographic primitive in KERI, specifically a seed value that must be:
Generated with sufficient entropy (minimum 128 bits of cryptographic strength)
Implementation Notes
Implementation Notes for Bran
Generation Requirements
Minimum entropy: 128 bits of cryptographic strength
Generation method: Use CSPRNG or hardware RNG
Format: Can be raw bytes, Base64 string, or BIP-39 word list
Recovery testing: Regularly test key recovery from bran
Terminology Usage
Use "bran" in KERI contexts to avoid confusion with "seed" and "salt"
Document that bran is an alias for seed
Explain the terminology choice in developer documentation
Maintain consistency across all KERI implementations
Protected with the highest level of security (information-theoretic security)
Never exposed or transmitted in plaintext
Stored encrypted when persisted
Cryptographic Properties
Entropy Requirements
Bran must provide at least 128 bits of cryptographic strength to ensure collision resistance and security against brute-force attacks. This entropy level provides approximately 2^128 possible values, making exhaustive search computationally infeasible.
Generation Methods
Bran can be generated through:
Cryptographically Secure Pseudorandom Number Generators (CSPRNGs): Deterministic algorithms that produce statistically random sequences from high-entropy seeds
Hardware Random Number Generators: Physical devices that produce sequences closer to true randomness
BIP-39 Seed Phrases: Human-readable word sequences (typically 12 or 24 words) that encode the entropy
Parent-child key relationships through hierarchical derivation
Independent key management at each delegation level
Recovery capabilities for entire delegation trees
Related Primitives
Relationship to Seed
Bran is explicitly defined as an alias for seed in KERI terminology. According to Dr. Sam Smith, creator of KERI:
"We already use seed and salt for something else so bran is related to seed so we used a term that was evocative of its use but not conflict with already used seed"
This naming choice reflects:
Semantic relationship: Both bran and seed are grain-related terms
Disambiguation: Avoids confusion with existing KERI terms
Functional clarity: Represents raw input material for key generation
Relationship to Salt
While bran is related to cryptographic salts, KERI distinguishes:
Bran: Primary entropy source for key generation
Salt: Additional randomness for specific cryptographic operations
Salter: The KERI primitive that uses bran to generate keys
Relationship to Private Keys
Bran is the precursor to private keys:
Bran → Key Derivation Function → Private Key → Public Key → AID
Bran must be protected more carefully than private keys
Compromise of bran compromises all derived keys
Relationship to Passcode
In some KERI implementations:
Passcode: User-provided string for authentication
Bran: Cryptographically strong seed derived from or independent of passcode
Passcodes may be used to encrypt bran for storage
Implementation Considerations
Security Best Practices
Generation: Use CSPRNGs or hardware RNGs for bran generation
Storage: Encrypt bran when persisted, never store in plaintext
Transmission: Never transmit bran over networks
Memory: Clear bran from memory after use
Backup: Use secure, offline methods for bran backup
Use standardized algorithms (PBKDF2, Argon2, scrypt)
Apply appropriate iteration counts
Include context-specific information in derivation
Support hierarchical derivation for key families
Recovery Mechanisms
Implement robust recovery:
Support BIP-39 word lists for human-readable backup
Provide clear recovery procedures
Test recovery processes regularly
Consider multi-factor recovery options
Cross-Platform Compatibility
Ensure bran handling is consistent:
Use standard encoding formats (Base64, hex)
Implement identical key derivation across platforms
Validate derived keys match across implementations
Document platform-specific considerations
Terminology Design Rationale
The choice of "bran" as terminology demonstrates KERI's careful approach to specification design:
Avoiding Conflicts: KERI already uses "seed" and "salt" for specific purposes
Semantic Clarity: "Bran" evokes its seed-related function
Memorable: The term is distinctive and easy to remember
Unambiguous: No confusion with existing cryptographic terminology
This naming convention reflects the importance of precise, internally consistent vocabulary in cryptographic protocol design, where terminology clarity is essential for correct implementation and security analysis.