# Rainbow Tables

A rainbow table is a precomputed table for caching the outputs of a cryptographic hash function, usually for cracking password hashes. They are an efficient way to perform time-memory trade-off attacks.

#### Size of Rainbow Table

Given:

* Each rainbow table entry is composed of 44 bytes (12 bytes + 32 bytes).
* To crack a passphrase, attackers would need a rainbow table that covers all possible combinations of characters of length 12.

#### Calculation

* **Number of possible combinations:**
  * Assuming a character pool of 94 characters (26 lowercase + 26 uppercase + 10 digits + 32 special characters)
  * Number of combinations = 94^12
  * Approximate number of combinations ≈ 4.7 × 10^23
* **Size of the rainbow table:**
  * Size per entry = 44 bytes
  * Total Size (in bytes) = 44 bytes \* 4.7 × 10^23
  * Impossible to store within the current storage capabilities

Even with powerful storage solutions, creating and storing a comprehensive rainbow table for this passphrase space is practically infeasible due to the enormous size required.

### Additional Consideration: The Role of the PIN

In the above analysis, we focused on the storage requirements for a passphrase space, but the actual security is exponentially higher because the pair of **passphrase and PIN** determines the private key and wallet address.&#x20;

Rainbow tables are only effective when an attacker can precompute hashes for common inputs and reuse them across many different targets.&#x20;

However, because the **PIN** acts as a personalized salt, an attacker would be forced to precompute a unique, near-infinite table for every possible PIN variation, which is practically impossible. This dual-input design ensures that even if a common passphrase is used, the specific combination of both secrets effectively neutralizes precomputed attacks and protects the wallet from time-memory trade-off techniques.<br>
