FEAL Linear Cryptanalysis
feal-linear-cryptanalysis
This skill provides guidance for FEAL cipher linear cryptanalysis tasks. It should be used when recovering encryption keys from FEAL-encrypted data using known plaintext-ciphertext pairs, implementing linear approximation attacks on block ciphers, or solving cryptanalysis challenges involving the...
SKILL.md
Full skill instructions
FEAL Linear Cryptanalysis
Overview
This skill provides procedural guidance for attacking the FEAL (Fast Data Encipherment Algorithm) cipher using linear cryptanalysis. FEAL is a well-studied cipher with known vulnerabilities that make it susceptible to linear cryptanalysis attacks, which exploit linear approximations of non-linear components to recover key bits statistically.
Critical Decision Point: Brute Force vs. Linear Cryptanalysis
Before writing any code, determine the attack approach:
| Approach | Key Size | Feasibility | Time Complexity |
|---|---|---|---|
| Brute Force | 32-bit | Feasible | ~2^32 operations |
| Brute Force | 64-bit | Marginal | ~2^64 operations |
| Brute Force | 80+ bit | Infeasible | Days to years |
| Linear Cryptanalysis | Any | Feasible | Polynomial with sufficient pairs |
Rule of thumb: If the problem mentions "linear attack" or provides many known plaintext-ciphertext pairs (typically 32+), linear cryptanalysis is the intended approach. Brute force is almost never the answer for academic cryptanalysis challenges.
Linear Cryptanalysis Approach
Phase 1: Cipher Analysis
Before implementing any attack:
-
Study the cipher structure
- Identify the G-function (basic operation)
- Understand the F-function (round function)
- Map the key schedule and subkey derivation
- Count the number of rounds
-
Identify linear approximations
- Analyze the G-function for linear biases
- The G-function typically uses rotation and XOR
- Find input/output bit masks with bias > 0.5
- Document approximations with their probabilities
-
Chain approximations through rounds
- Connect single-round approximations
- Calculate cumulative bias using piling-up lemma: bias = 2^(n-1) * Π(bias_i)
- Identify which key bits are exposed by each approximation
Phase 2: Statistical Attack Implementation
-
Collect statistics from known pairs
- For each plaintext-ciphertext pair, evaluate the linear approximation
- Count how often the approximation holds (equals 0 or 1)
- The bias indicates the correct key guess
-
Key recovery strategy
- Attack round keys one at a time, typically starting from the last round
- For each candidate partial key, count approximation matches
- The correct key produces the strongest bias deviation from 0.5
- Use maximum likelihood or chi-squared test for key ranking
-
Recover full key from subkeys
- Once round keys are known, reverse the key schedule
- Verify by encrypting a known plaintext
Phase 3: Verification
Before running the full attack:
-
Test with known keys
- Generate your own key and encrypt test plaintexts
- Verify your attack recovers the known key
- This catches implementation bugs early
-
Verify cipher implementation
- Compare encrypt/decrypt outputs with reference implementations
- Check that your FEAL implementation matches the provided one exactly
-
Validate approximation bias
- With random keys, verify your approximations show expected bias
- If bias is ~0.5, the approximation is wrong
Common Pitfalls
Pitfall 1: Attempting Brute Force Despite Hints
Problem: Ignoring explicit hints about "linear attack" and attempting brute force variations.
Signs of this mistake:
- Writing meet-in-the-middle code
- Creating hash tables for partial key enumeration
- Running out of memory with 2^40+ entries
- Optimizing brute force with "prioritized" key values
Solution: If a problem mentions linear cryptanalysis, implement linear cryptanalysis. No amount of brute force optimization will work for 80-bit keys.
Pitfall 2: Insufficient Cipher Analysis
Problem: Starting to code without understanding the cipher's mathematical properties.
Signs of this mistake:
- Copy-pasting encrypt/decrypt without understanding internals
- Unable to explain what makes FEAL vulnerable
- No identification of specific linear approximations
Solution: Read the reference material on FEAL structure. Understand G(a,b) = ROL2((a+b) mod 256) and how this creates linear biases.
Pitfall 3: Not Verifying Implementation
Problem: Running attacks against unknown keys without first testing on known keys.
Signs of this mistake:
- Attack produces random-looking results
- No verification that cipher implementation matches specification
- Debugging complex attack logic instead of simple test cases
Solution: Always create a test harness:
1. Generate random key K
2. Encrypt known plaintext P -> C
3. Run attack with (P, C) pair
4. Verify attack recovers K
Pitfall 4: Memory-Intensive Approaches
Problem: Using hash tables or sorted arrays for 2^40+ entries.
Signs of this mistake:
- Out-of-memory errors
- Chunked processing that never completes
- Disk-based storage that's too slow
Solution: Linear cryptanalysis requires O(n) memory where n is the number of known pairs, not O(2^k) where k is key bits.
Pitfall 5: Repetitive Failed Attempts
Problem: Trying minor variations of the same failed approach instead of fundamentally changing strategy.
Pattern to recognize:
- Write brute-force code -> too slow
- Add meet-in-the-middle -> out of memory
- Chunk the hash table -> still too slow
- Prioritize small keys -> doesn't find key
- Repeat variations...
Solution: After 2-3 failed variations of the same approach, completely abandon it and implement the mathematically correct attack.
Time Management Strategy
- First 10% of time: Analyze the cipher and understand the attack
- Next 20% of time: Implement and verify with known test vectors
- Remaining 70% of time: Run the actual attack
If still attempting brute force after 30% of available time, stop and implement linear cryptanalysis.
Complexity Sanity Check
Before running any attack, calculate:
- Total operations: Should be polynomial in the number of pairs, not exponential in key size
- Memory usage: Should be O(pairs), not O(2^key_bits)
- Expected runtime: Should complete in minutes, not hours
If calculations show infeasibility, the approach is wrong.
Resources
For detailed technical information on FEAL structure and linear approximation derivation, refer to:
references/linear_cryptanalysis_guide.md- Detailed guide on linear cryptanalysis techniques and FEAL-specific approximations
