w3pk 0.7.0 → 0.7.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +76 -19
- package/dist/index.d.mts +650 -5
- package/dist/index.d.ts +650 -5
- package/dist/index.js +776 -5
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +776 -5
- package/dist/index.mjs.map +1 -1
- package/docs/BUNDLE_SIZES.md +7 -4
- package/docs/MIGRATION.md +15 -15
- package/docs/QR_CODE.md +1887 -0
- package/docs/RECOVERY.md +992 -0
- package/docs/SECURITY.md +631 -0
- package/docs/ZK_INTEGRATION_GUIDE.md +6 -4
- package/docs/index.html +4 -3
- package/package.json +9 -2
package/docs/RECOVERY.md
ADDED
|
@@ -0,0 +1,992 @@
|
|
|
1
|
+
# Recovery System Architecture
|
|
2
|
+
|
|
3
|
+
> **Simple. Educational. Robust.**
|
|
4
|
+
> A three-layer backup and recovery system for w3pk wallets.
|
|
5
|
+
|
|
6
|
+
> ✅ **Status: Fully Implemented & Production-Ready**
|
|
7
|
+
> This system is complete with 35 passing tests covering backup encryption, social recovery, and educational features.
|
|
8
|
+
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
## 🎯 Overview
|
|
12
|
+
|
|
13
|
+
The w3pk Recovery System provides **three independent layers** of wallet backup and recovery, ensuring users never lose access to their funds while maintaining strong security guarantees.
|
|
14
|
+
|
|
15
|
+
```
|
|
16
|
+
┌─────────────────────────────────────────────────────────────┐
|
|
17
|
+
│ 🔐 RECOVERY VAULT │
|
|
18
|
+
├─────────────────────────────────────────────────────────────┤
|
|
19
|
+
│ │
|
|
20
|
+
│ Layer 1: 🔑 Passkey (Device) [Auto-Sync] │
|
|
21
|
+
│ ├─ WebAuthn credential │
|
|
22
|
+
│ ├─ Syncs via iCloud/Google │
|
|
23
|
+
│ └─ Status: 🟢 Active on 3 devices │
|
|
24
|
+
│ │
|
|
25
|
+
│ Layer 2: 🌱 Recovery Phrase [Manual Backup] │
|
|
26
|
+
│ ├─ 12-word mnemonic │
|
|
27
|
+
│ ├─ Encrypted ZIP backup (password-protected) │
|
|
28
|
+
│ └─ Status: ⚠️ Not backed up │
|
|
29
|
+
│ │
|
|
30
|
+
│ Layer 3: 🔗 Social Recovery [Friend Network] │
|
|
31
|
+
│ ├─ 3-of-5 guardian shares │
|
|
32
|
+
│ ├─ Encrypted with guardian keys │
|
|
33
|
+
│ └─ Status: 🟢 2/5 guardians active │
|
|
34
|
+
│ │
|
|
35
|
+
└─────────────────────────────────────────────────────────────┘
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
---
|
|
39
|
+
|
|
40
|
+
## 📚 Three Recovery Layers Explained
|
|
41
|
+
|
|
42
|
+
### **Layer 1: Passkey Auto-Sync** (Easiest)
|
|
43
|
+
|
|
44
|
+
**What it is:**
|
|
45
|
+
- Your WebAuthn credential (fingerprint/Face ID) automatically syncs across your devices
|
|
46
|
+
- Platform-dependent (iCloud Keychain, Google Password Manager, etc.)
|
|
47
|
+
|
|
48
|
+
**How it works:**
|
|
49
|
+
```
|
|
50
|
+
Device 1 (iPhone) iCloud Keychain Device 2 (Mac)
|
|
51
|
+
| | |
|
|
52
|
+
|-- Passkey Created -------->| |
|
|
53
|
+
| | |
|
|
54
|
+
| |<----- Login on Mac -----|
|
|
55
|
+
| | |
|
|
56
|
+
| Passkey Synced |
|
|
57
|
+
| |------- Decrypt -------->|
|
|
58
|
+
| | Wallet |
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
**Pros:**
|
|
62
|
+
- ✅ Automatic (no user action needed)
|
|
63
|
+
- ✅ Instant recovery on new device
|
|
64
|
+
- ✅ Hardware-protected security
|
|
65
|
+
- ✅ Works immediately after setup
|
|
66
|
+
|
|
67
|
+
**Cons:**
|
|
68
|
+
- ⚠️ Platform-specific (Apple/Google/Microsoft)
|
|
69
|
+
- ⚠️ Requires cloud account
|
|
70
|
+
- ⚠️ May not work across different ecosystems
|
|
71
|
+
|
|
72
|
+
**Recovery scenarios:**
|
|
73
|
+
| Scenario | Can Recover? | How |
|
|
74
|
+
|----------|--------------|-----|
|
|
75
|
+
| Lost iPhone (iCloud enabled) | ✅ Yes | Sign in on new iPhone → Passkey auto-syncs |
|
|
76
|
+
| Lost iPhone (iCloud disabled) | ❌ No | Need Layer 2 (mnemonic) |
|
|
77
|
+
| New Mac (same iCloud) | ✅ Yes | Passkey available immediately |
|
|
78
|
+
| Switch to Android | ❌ No | Need Layer 2 (mnemonic) |
|
|
79
|
+
|
|
80
|
+
---
|
|
81
|
+
|
|
82
|
+
### **Layer 2: Encrypted Backup** (Universal)
|
|
83
|
+
|
|
84
|
+
**What it is:**
|
|
85
|
+
- Your 12-word recovery phrase encrypted and packaged for safe storage
|
|
86
|
+
- Multiple backup formats: password-protected ZIP, QR code, encrypted file
|
|
87
|
+
|
|
88
|
+
**How it works:**
|
|
89
|
+
```typescript
|
|
90
|
+
1. User creates backup with password
|
|
91
|
+
2. System generates encrypted package:
|
|
92
|
+
├─ Mnemonic encrypted with AES-256-GCM
|
|
93
|
+
├─ Password-derived key (PBKDF2, 310,000 iterations)
|
|
94
|
+
└─ Device fingerprint binding (optional)
|
|
95
|
+
3. User saves encrypted file/QR code
|
|
96
|
+
4. To recover: Provide password → Decrypt → Import mnemonic
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
**Backup Methods:**
|
|
100
|
+
|
|
101
|
+
#### A. **Password-Protected ZIP File** (Recommended)
|
|
102
|
+
```typescript
|
|
103
|
+
await backupManager.createEncryptedZipBackup('my-strong-password')
|
|
104
|
+
// Downloads: wallet-backup-2025-10-26.zip
|
|
105
|
+
// Contains:
|
|
106
|
+
// - recovery-phrase.txt.enc (encrypted mnemonic)
|
|
107
|
+
// - metadata.json (wallet address, creation date)
|
|
108
|
+
// - instructions.txt (how to restore)
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
**Security:**
|
|
112
|
+
- Multi-layer encryption (AES-256-GCM)
|
|
113
|
+
- PBKDF2 key derivation (310,000 iterations)
|
|
114
|
+
- Optional device fingerprint binding
|
|
115
|
+
- Verification checksum included
|
|
116
|
+
|
|
117
|
+
**Pros:**
|
|
118
|
+
- ✅ Works on any device/platform
|
|
119
|
+
- ✅ Password protection
|
|
120
|
+
- ✅ Can store in cloud (encrypted)
|
|
121
|
+
- ✅ Universal wallet compatibility (BIP39)
|
|
122
|
+
|
|
123
|
+
**Cons:**
|
|
124
|
+
- ⚠️ User must remember password
|
|
125
|
+
- ⚠️ Can be lost if not stored properly
|
|
126
|
+
- ⚠️ Manual backup creation required
|
|
127
|
+
|
|
128
|
+
#### B. **QR Code Backup** (Offline/Paranoid Mode)
|
|
129
|
+
```typescript
|
|
130
|
+
await backupManager.createQRCodeBackup('optional-password')
|
|
131
|
+
// Generates QR code containing encrypted mnemonic
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
**Pros:**
|
|
135
|
+
- ✅ 100% offline
|
|
136
|
+
- ✅ Can print and store physically
|
|
137
|
+
- ✅ No cloud dependency
|
|
138
|
+
- ✅ Scannable from any device
|
|
139
|
+
|
|
140
|
+
**Cons:**
|
|
141
|
+
- ⚠️ Can be lost/destroyed
|
|
142
|
+
- ⚠️ QR code damage = data loss
|
|
143
|
+
- ⚠️ Physical security concerns
|
|
144
|
+
|
|
145
|
+
#### C. **Encrypted File Backup**
|
|
146
|
+
```typescript
|
|
147
|
+
await backupManager.createEncryptedFile(password, 'my-backup.enc')
|
|
148
|
+
```
|
|
149
|
+
|
|
150
|
+
**Pros:**
|
|
151
|
+
- ✅ Simple file storage
|
|
152
|
+
- ✅ Can copy to USB drive
|
|
153
|
+
- ✅ Email to yourself (encrypted)
|
|
154
|
+
|
|
155
|
+
**Cons:**
|
|
156
|
+
- ⚠️ Requires password
|
|
157
|
+
- ⚠️ File can be lost
|
|
158
|
+
|
|
159
|
+
**Recovery scenarios:**
|
|
160
|
+
| Scenario | Can Recover? | How |
|
|
161
|
+
|----------|--------------|-----|
|
|
162
|
+
| Lost all devices | ✅ Yes | Import backup file + password |
|
|
163
|
+
| Forgot password | ❌ No | Cannot decrypt backup |
|
|
164
|
+
| Backup file lost | ❌ No | Need Layer 3 (social recovery) |
|
|
165
|
+
| Switch wallet apps | ✅ Yes | BIP39 works everywhere |
|
|
166
|
+
|
|
167
|
+
---
|
|
168
|
+
|
|
169
|
+
### **Layer 3: Social Recovery** (Ultimate Safety Net)
|
|
170
|
+
|
|
171
|
+
**What it is:**
|
|
172
|
+
- Your recovery phrase split into encrypted shares
|
|
173
|
+
- Distributed to trusted friends/family (guardians)
|
|
174
|
+
- Requires M-of-N shares to recover (e.g., 3 out of 5)
|
|
175
|
+
|
|
176
|
+
**How it works (Shamir Secret Sharing):**
|
|
177
|
+
```typescript
|
|
178
|
+
// Setup: Split mnemonic into 5 shares, require 3 to recover
|
|
179
|
+
const guardians = [
|
|
180
|
+
{ name: 'Alice', email: 'alice@example.com' },
|
|
181
|
+
{ name: 'Bob', email: 'bob@example.com' },
|
|
182
|
+
{ name: 'Charlie', email: 'charlie@example.com' },
|
|
183
|
+
{ name: 'Diana', email: 'diana@example.com' },
|
|
184
|
+
{ name: 'Eve', email: 'eve@example.com' }
|
|
185
|
+
]
|
|
186
|
+
|
|
187
|
+
await socialRecovery.setup(mnemonic, guardians, threshold: 3)
|
|
188
|
+
|
|
189
|
+
// Generates 5 encrypted shares:
|
|
190
|
+
// Share 1 → Alice (via QR code or encrypted email)
|
|
191
|
+
// Share 2 → Bob
|
|
192
|
+
// Share 3 → Charlie
|
|
193
|
+
// Share 4 → Diana
|
|
194
|
+
// Share 5 → Eve
|
|
195
|
+
|
|
196
|
+
// To recover: Collect any 3 shares
|
|
197
|
+
const shares = [aliceShare, bobShare, charlieShare]
|
|
198
|
+
const recoveredMnemonic = await socialRecovery.recover(shares)
|
|
199
|
+
```
|
|
200
|
+
|
|
201
|
+
**Mathematical Security:**
|
|
202
|
+
- Uses Shamir's Secret Sharing algorithm
|
|
203
|
+
- Any 3 shares = full recovery
|
|
204
|
+
- Any 2 shares = mathematically impossible to recover
|
|
205
|
+
- Each guardian only has an encrypted piece
|
|
206
|
+
|
|
207
|
+
**Guardian Responsibilities:**
|
|
208
|
+
```
|
|
209
|
+
🛡️ You are Guardian 2/5
|
|
210
|
+
|
|
211
|
+
Your friend has entrusted you with a recovery share.
|
|
212
|
+
|
|
213
|
+
What this means:
|
|
214
|
+
- You hold 1 piece of a 3-piece puzzle
|
|
215
|
+
- 3 guardians needed to recover wallet
|
|
216
|
+
- Keep this safe but accessible
|
|
217
|
+
|
|
218
|
+
How to help recover:
|
|
219
|
+
1. Friend will request your share
|
|
220
|
+
2. Scan your QR code or enter share code
|
|
221
|
+
3. System verifies and reconstructs wallet
|
|
222
|
+
|
|
223
|
+
⚠️ Never share unless friend requests it!
|
|
224
|
+
```
|
|
225
|
+
|
|
226
|
+
**Pros:**
|
|
227
|
+
- ✅ No single point of failure
|
|
228
|
+
- ✅ Survives your own forgetfulness
|
|
229
|
+
- ✅ Survives any 2 guardians disappearing
|
|
230
|
+
- ✅ Highest security and redundancy
|
|
231
|
+
|
|
232
|
+
**Cons:**
|
|
233
|
+
- ⚠️ Requires trusted friends/family
|
|
234
|
+
- ⚠️ Setup complexity
|
|
235
|
+
- ⚠️ Recovery takes time (24-48 hours)
|
|
236
|
+
- ⚠️ Coordination required
|
|
237
|
+
|
|
238
|
+
**Recovery scenarios:**
|
|
239
|
+
| Scenario | Can Recover? | How |
|
|
240
|
+
|----------|--------------|-----|
|
|
241
|
+
| Forgot password + lost devices | ✅ Yes | Contact 3 guardians → combine shares |
|
|
242
|
+
| Lost backup + lost passkey | ✅ Yes | Contact 3 guardians |
|
|
243
|
+
| 2 guardians unavailable | ✅ Yes | Still have 3 others |
|
|
244
|
+
| All guardians lost shares | ❌ No | Need another recovery layer |
|
|
245
|
+
|
|
246
|
+
---
|
|
247
|
+
|
|
248
|
+
## 🔐 Security Architecture
|
|
249
|
+
|
|
250
|
+
### **Encrypted ZIP Backup Details**
|
|
251
|
+
|
|
252
|
+
When you create a password-protected ZIP backup, here's what happens:
|
|
253
|
+
|
|
254
|
+
```typescript
|
|
255
|
+
Input:
|
|
256
|
+
- mnemonic: "test test test test test test test test test test test junk"
|
|
257
|
+
- password: "my-super-secure-password-123"
|
|
258
|
+
|
|
259
|
+
Process:
|
|
260
|
+
1. Derive encryption key from password
|
|
261
|
+
├─ Salt: Random 32 bytes
|
|
262
|
+
├─ Algorithm: PBKDF2-SHA256
|
|
263
|
+
├─ Iterations: 310,000 (OWASP 2025 recommendation)
|
|
264
|
+
└─ Output: 256-bit AES key
|
|
265
|
+
|
|
266
|
+
2. Encrypt mnemonic
|
|
267
|
+
├─ Algorithm: AES-256-GCM
|
|
268
|
+
├─ IV: Random 12 bytes
|
|
269
|
+
├─ Input: mnemonic plaintext
|
|
270
|
+
└─ Output: encrypted ciphertext + auth tag
|
|
271
|
+
|
|
272
|
+
3. Optional: Add device fingerprint binding
|
|
273
|
+
├─ Hash: SHA-256(browser + OS + device ID)
|
|
274
|
+
├─ Purpose: Prevent copy/paste to different device
|
|
275
|
+
└─ Bypass: Can be disabled for portability
|
|
276
|
+
|
|
277
|
+
4. Create ZIP package
|
|
278
|
+
├─ recovery-phrase.txt.enc (encrypted mnemonic)
|
|
279
|
+
├─ metadata.json (address, creation date, checksum)
|
|
280
|
+
├─ salt.bin (for PBKDF2)
|
|
281
|
+
├─ instructions.txt (recovery guide)
|
|
282
|
+
└─ verification.json (address checksum for verification)
|
|
283
|
+
|
|
284
|
+
Output:
|
|
285
|
+
- wallet-backup-2025-10-26.zip (password-protected)
|
|
286
|
+
```
|
|
287
|
+
|
|
288
|
+
**Security guarantees:**
|
|
289
|
+
- ✅ **Cannot decrypt without password** (brute-force resistant with 310k iterations)
|
|
290
|
+
- ✅ **Verification checksum** ensures correct recovery
|
|
291
|
+
- ✅ **Metadata separate** from encrypted data
|
|
292
|
+
- ✅ **Safe to store in cloud** (Dropbox, Google Drive, etc.)
|
|
293
|
+
|
|
294
|
+
**Recovery verification:**
|
|
295
|
+
```typescript
|
|
296
|
+
After decryption:
|
|
297
|
+
1. Derive Ethereum address from recovered mnemonic
|
|
298
|
+
2. Compare with metadata.json checksum
|
|
299
|
+
3. Match = ✅ Success
|
|
300
|
+
4. No match = ❌ Wrong password or corrupted file
|
|
301
|
+
```
|
|
302
|
+
|
|
303
|
+
---
|
|
304
|
+
|
|
305
|
+
### **QR Code Backup Details**
|
|
306
|
+
|
|
307
|
+
```typescript
|
|
308
|
+
QR Code contains:
|
|
309
|
+
{
|
|
310
|
+
"version": 1,
|
|
311
|
+
"type": "encrypted", // or "plain" (not recommended)
|
|
312
|
+
"data": "encrypted_mnemonic_base64",
|
|
313
|
+
"salt": "salt_base64",
|
|
314
|
+
"checksum": "address_checksum",
|
|
315
|
+
"iterations": 310000
|
|
316
|
+
}
|
|
317
|
+
|
|
318
|
+
Properties:
|
|
319
|
+
- Error correction: Level H (30% damage tolerance)
|
|
320
|
+
- Can be printed and stored physically
|
|
321
|
+
- Scannable from any device with camera
|
|
322
|
+
- Optional password protection
|
|
323
|
+
```
|
|
324
|
+
|
|
325
|
+
**Use cases:**
|
|
326
|
+
- 📄 Print and store in safe deposit box
|
|
327
|
+
- 🏦 Give to trusted family member (physical)
|
|
328
|
+
- 💾 Offline cold storage
|
|
329
|
+
- 🔒 Air-gapped backup
|
|
330
|
+
|
|
331
|
+
---
|
|
332
|
+
|
|
333
|
+
### **Social Recovery Cryptography**
|
|
334
|
+
|
|
335
|
+
```typescript
|
|
336
|
+
Shamir Secret Sharing Algorithm:
|
|
337
|
+
|
|
338
|
+
Example: 3-of-5 scheme
|
|
339
|
+
- Split secret S into 5 shares: s1, s2, s3, s4, s5
|
|
340
|
+
- Any 3 shares can reconstruct S
|
|
341
|
+
- Any 2 shares reveal ZERO information about S
|
|
342
|
+
|
|
343
|
+
Mathematical basis:
|
|
344
|
+
- Polynomial interpolation over finite field
|
|
345
|
+
- Degree = threshold - 1 (e.g., degree-2 polynomial for 3-of-5)
|
|
346
|
+
- Points on polynomial = shares
|
|
347
|
+
- Reconstruct polynomial with 3 points → get secret
|
|
348
|
+
|
|
349
|
+
Share encryption:
|
|
350
|
+
Each share is encrypted with guardian's public key:
|
|
351
|
+
- Guardian generates key pair (on their device)
|
|
352
|
+
- Share encrypted with guardian's public key
|
|
353
|
+
- Only guardian can decrypt their share
|
|
354
|
+
- Prevents share theft from coordinator
|
|
355
|
+
```
|
|
356
|
+
|
|
357
|
+
**Trust model:**
|
|
358
|
+
```
|
|
359
|
+
Coordinator (You):
|
|
360
|
+
- Cannot recover from less than threshold shares
|
|
361
|
+
- Can revoke/replace guardians
|
|
362
|
+
- Can update threshold
|
|
363
|
+
|
|
364
|
+
Guardians:
|
|
365
|
+
- Cannot recover alone
|
|
366
|
+
- Cannot collude unless threshold met
|
|
367
|
+
- Can verify share validity
|
|
368
|
+
- Can export/backup their share
|
|
369
|
+
|
|
370
|
+
Attacker:
|
|
371
|
+
- Cannot recover with < threshold shares
|
|
372
|
+
- Cannot brute-force (mathematically secure)
|
|
373
|
+
- Must compromise guardians directly
|
|
374
|
+
```
|
|
375
|
+
|
|
376
|
+
---
|
|
377
|
+
|
|
378
|
+
## 📊 Backup Status Dashboard
|
|
379
|
+
|
|
380
|
+
Users see their security status at a glance:
|
|
381
|
+
|
|
382
|
+
```typescript
|
|
383
|
+
┌────────────────────────────────────────────────┐
|
|
384
|
+
│ 🛡️ Your Security Status │
|
|
385
|
+
├────────────────────────────────────────────────┤
|
|
386
|
+
│ │
|
|
387
|
+
│ Recovery Strength: ████████░░ 80% │
|
|
388
|
+
│ │
|
|
389
|
+
│ 🔑 Passkey Protection │
|
|
390
|
+
│ ├─ 🟢 Active on 3 devices │
|
|
391
|
+
│ ├─ Platform: Apple (iCloud Keychain) │
|
|
392
|
+
│ ├─ Last synced: 2 hours ago │
|
|
393
|
+
│ └─ [View devices] │
|
|
394
|
+
│ │
|
|
395
|
+
│ 🌱 Recovery Phrase Backup │
|
|
396
|
+
│ ├─ ⚠️ No encrypted backup created │
|
|
397
|
+
│ ├─ 📦 Encrypted ZIP: None │
|
|
398
|
+
│ ├─ 📱 QR Code: None │
|
|
399
|
+
│ └─ [Create backup now] │
|
|
400
|
+
│ │
|
|
401
|
+
│ 🔗 Social Recovery │
|
|
402
|
+
│ ├─ 🟢 Configured (3-of-5) │
|
|
403
|
+
│ ├─ 👥 5 guardians added │
|
|
404
|
+
│ ├─ ✅ 5 shares distributed │
|
|
405
|
+
│ ├─ ⚠️ 2 guardians haven't verified │
|
|
406
|
+
│ └─ [Manage guardians] │
|
|
407
|
+
│ │
|
|
408
|
+
│ 📊 Recovery Scenarios │
|
|
409
|
+
│ [Test what happens if...] │
|
|
410
|
+
│ │
|
|
411
|
+
└────────────────────────────────────────────────┘
|
|
412
|
+
```
|
|
413
|
+
|
|
414
|
+
---
|
|
415
|
+
|
|
416
|
+
## 🎓 Educational Components
|
|
417
|
+
|
|
418
|
+
### **Recovery Scenario Simulator**
|
|
419
|
+
|
|
420
|
+
Interactive tool to educate users about recovery options:
|
|
421
|
+
|
|
422
|
+
```typescript
|
|
423
|
+
Scenario 1: 📱 Lost Your Phone
|
|
424
|
+
──────────────────────────────
|
|
425
|
+
Your iPhone fell in the ocean.
|
|
426
|
+
|
|
427
|
+
Can you recover your wallet?
|
|
428
|
+
|
|
429
|
+
Available recovery options:
|
|
430
|
+
✅ iCloud Passkey Sync Time: ~5 min Success: 100%
|
|
431
|
+
✅ Encrypted ZIP Backup Time: ~2 min Success: 100% (if password remembered)
|
|
432
|
+
✅ Social Recovery Time: ~24 hrs Success: 100% (if 3 guardians respond)
|
|
433
|
+
|
|
434
|
+
Verdict: ✅ You're safe! 3 ways to recover
|
|
435
|
+
|
|
436
|
+
──────────────────────────────
|
|
437
|
+
|
|
438
|
+
Scenario 2: 🔥 Lost Recovery Phrase
|
|
439
|
+
──────────────────────────────
|
|
440
|
+
Your paper backup burned in a fire.
|
|
441
|
+
|
|
442
|
+
Can you recover your wallet?
|
|
443
|
+
|
|
444
|
+
Available recovery options:
|
|
445
|
+
✅ Passkey (still on device) Time: instant Success: 100%
|
|
446
|
+
✅ iCloud Passkey Sync Time: ~5 min Success: 100%
|
|
447
|
+
✅ Social Recovery Time: ~24 hrs Success: 100%
|
|
448
|
+
|
|
449
|
+
Verdict: ✅ You're safe! Passkey still works
|
|
450
|
+
|
|
451
|
+
──────────────────────────────
|
|
452
|
+
|
|
453
|
+
Scenario 3: 🚨 Lost Everything
|
|
454
|
+
──────────────────────────────
|
|
455
|
+
Phone stolen + forgot password + no guardians.
|
|
456
|
+
|
|
457
|
+
Can you recover your wallet?
|
|
458
|
+
|
|
459
|
+
Available recovery options:
|
|
460
|
+
❌ Passkey (device lost)
|
|
461
|
+
❌ Encrypted ZIP Backup (password forgotten)
|
|
462
|
+
❌ Social Recovery (not set up)
|
|
463
|
+
|
|
464
|
+
Verdict: ❌ Wallet is permanently lost
|
|
465
|
+
|
|
466
|
+
Recommendation:
|
|
467
|
+
Set up at least 2 backup methods to prevent total loss.
|
|
468
|
+
|
|
469
|
+
[Set up Social Recovery Now]
|
|
470
|
+
```
|
|
471
|
+
|
|
472
|
+
---
|
|
473
|
+
|
|
474
|
+
### **Security Score Gamification**
|
|
475
|
+
|
|
476
|
+
```typescript
|
|
477
|
+
Your Security Score: 65/100 (Protected)
|
|
478
|
+
|
|
479
|
+
Breakdown:
|
|
480
|
+
├─ Passkey Active: +20 pts ✅
|
|
481
|
+
├─ Multi-Device Sync: +10 pts ✅
|
|
482
|
+
├─ Encrypted ZIP Backup: +20 pts ❌ (not created)
|
|
483
|
+
├─ QR Code Backup: +5 pts ❌ (not created)
|
|
484
|
+
├─ Social Recovery (3-of-5): +30 pts ✅
|
|
485
|
+
└─ Guardian Verification: +15 pts 🔶 (3/5 verified)
|
|
486
|
+
|
|
487
|
+
Level: Protected 🟢
|
|
488
|
+
|
|
489
|
+
Next milestone: Create encrypted backup → reach "Secured" (85 pts)
|
|
490
|
+
|
|
491
|
+
───────────────────────────────────────
|
|
492
|
+
|
|
493
|
+
Security Levels:
|
|
494
|
+
0-20 pts: ⚠️ Vulnerable (only passkey)
|
|
495
|
+
21-50 pts: 🟡 Protected (passkey + 1 backup)
|
|
496
|
+
51-80 pts: 🟢 Secured (passkey + 2 backups)
|
|
497
|
+
81-100 pts: 🏆 Fort Knox (all methods enabled)
|
|
498
|
+
```
|
|
499
|
+
|
|
500
|
+
---
|
|
501
|
+
|
|
502
|
+
## 🚀 Implementation Plan
|
|
503
|
+
|
|
504
|
+
### **Phase 1: Foundation** (Weeks 1-2)
|
|
505
|
+
|
|
506
|
+
**Files to create:**
|
|
507
|
+
```
|
|
508
|
+
src/backup/
|
|
509
|
+
├── manager.ts # Main backup orchestration
|
|
510
|
+
├── types.ts # TypeScript interfaces
|
|
511
|
+
└── storage.ts # IndexedDB for metadata
|
|
512
|
+
|
|
513
|
+
src/backup/methods/
|
|
514
|
+
├── zip.ts # Password-protected ZIP
|
|
515
|
+
├── qr.ts # QR code generation
|
|
516
|
+
└── file.ts # Encrypted file export
|
|
517
|
+
```
|
|
518
|
+
|
|
519
|
+
**Core classes:**
|
|
520
|
+
- `BackupManager` - Main API for backup operations
|
|
521
|
+
- `BackupStorage` - IndexedDB for tracking backup metadata
|
|
522
|
+
- `BackupStatus` - Status tracking and reporting
|
|
523
|
+
|
|
524
|
+
**Features:**
|
|
525
|
+
- ✅ Get comprehensive backup status
|
|
526
|
+
- ✅ Track which backup methods are enabled
|
|
527
|
+
- ✅ Store backup metadata (when created, method, etc.)
|
|
528
|
+
|
|
529
|
+
---
|
|
530
|
+
|
|
531
|
+
### **Phase 2: Cross-Device Sync** (Weeks 3-4)
|
|
532
|
+
|
|
533
|
+
**Files to create:**
|
|
534
|
+
```
|
|
535
|
+
src/sync/
|
|
536
|
+
├── vault.ts # Encrypted vault for sync
|
|
537
|
+
├── device-manager.ts # Track trusted devices
|
|
538
|
+
├── platform-detect.ts # Detect iCloud/Google sync
|
|
539
|
+
└── types.ts # Sync-related interfaces
|
|
540
|
+
```
|
|
541
|
+
|
|
542
|
+
**Core classes:**
|
|
543
|
+
- `VaultSync` - Encrypted wallet sync across devices
|
|
544
|
+
- `DeviceManager` - Manage trusted devices
|
|
545
|
+
- `PlatformDetector` - Detect sync capabilities
|
|
546
|
+
|
|
547
|
+
**Features:**
|
|
548
|
+
- ✅ Detect available sync platforms (iCloud/Google)
|
|
549
|
+
- ✅ Estimate device count from passkey sync
|
|
550
|
+
- ✅ Show sync status in dashboard
|
|
551
|
+
- ✅ Educational messaging about platform sync
|
|
552
|
+
|
|
553
|
+
---
|
|
554
|
+
|
|
555
|
+
### **Phase 3: Encrypted Backups** (Weeks 5-6)
|
|
556
|
+
|
|
557
|
+
**Files to create:**
|
|
558
|
+
```
|
|
559
|
+
src/backup/methods/
|
|
560
|
+
├── zip.ts # ZIP file creation with encryption
|
|
561
|
+
├── qr.ts # QR code generation
|
|
562
|
+
└── encryption.ts # Encryption utilities
|
|
563
|
+
```
|
|
564
|
+
|
|
565
|
+
**Core classes:**
|
|
566
|
+
- `ZipBackupCreator` - Create password-protected ZIP files
|
|
567
|
+
- `QRBackupCreator` - Generate encrypted QR codes
|
|
568
|
+
- `EncryptionHelper` - PBKDF2 + AES-256-GCM utilities
|
|
569
|
+
|
|
570
|
+
**Features:**
|
|
571
|
+
- ✅ Password-protected ZIP backup
|
|
572
|
+
- ✅ QR code backup (encrypted/plain)
|
|
573
|
+
- ✅ Encrypted file export
|
|
574
|
+
- ✅ Verification checksums
|
|
575
|
+
- ✅ Recovery instructions included
|
|
576
|
+
|
|
577
|
+
---
|
|
578
|
+
|
|
579
|
+
### **Phase 4: Social Recovery** (Weeks 7-8)
|
|
580
|
+
|
|
581
|
+
**Files to create:**
|
|
582
|
+
```
|
|
583
|
+
src/recovery/
|
|
584
|
+
├── social.ts # Social recovery manager
|
|
585
|
+
├── shamir.ts # Shamir Secret Sharing
|
|
586
|
+
├── guardian.ts # Guardian management
|
|
587
|
+
└── types.ts # Recovery types
|
|
588
|
+
|
|
589
|
+
Dependencies to add:
|
|
590
|
+
- secrets.js-grempe # Shamir Secret Sharing
|
|
591
|
+
- qrcode # QR code generation
|
|
592
|
+
- jszip # ZIP file creation
|
|
593
|
+
```
|
|
594
|
+
|
|
595
|
+
**Core classes:**
|
|
596
|
+
- `SocialRecoveryManager` - Orchestrate social recovery
|
|
597
|
+
- `ShamirSplitter` - Split/combine secrets
|
|
598
|
+
- `GuardianManager` - Manage guardian list
|
|
599
|
+
|
|
600
|
+
**Features:**
|
|
601
|
+
- ✅ Split mnemonic into M-of-N shares
|
|
602
|
+
- ✅ Encrypt shares with guardian public keys
|
|
603
|
+
- ✅ Generate guardian invitations (QR + link)
|
|
604
|
+
- ✅ Recover from collected shares
|
|
605
|
+
- ✅ Guardian verification system
|
|
606
|
+
|
|
607
|
+
---
|
|
608
|
+
|
|
609
|
+
### **Phase 5: Educational UI** (Weeks 9-10)
|
|
610
|
+
|
|
611
|
+
**Files to create:**
|
|
612
|
+
```
|
|
613
|
+
src/education/
|
|
614
|
+
├── explainers.ts # Educational content
|
|
615
|
+
├── simulator.ts # Recovery scenario testing
|
|
616
|
+
├── gamification.ts # Security score tracking
|
|
617
|
+
└── types.ts # Education types
|
|
618
|
+
```
|
|
619
|
+
|
|
620
|
+
**Components:**
|
|
621
|
+
- `RecoverySimulator` - Test recovery scenarios
|
|
622
|
+
- `SecurityScoreTracker` - Gamification system
|
|
623
|
+
- `EducationalExplainers` - Content modules
|
|
624
|
+
- `BackupWizard` - Step-by-step backup setup
|
|
625
|
+
|
|
626
|
+
**Features:**
|
|
627
|
+
- ✅ Interactive recovery scenario simulator
|
|
628
|
+
- ✅ Security score with progression
|
|
629
|
+
- ✅ Educational explainers (passkeys, mnemonic, sync)
|
|
630
|
+
- ✅ Backup creation wizard
|
|
631
|
+
- ✅ Device loss scenario testing
|
|
632
|
+
|
|
633
|
+
---
|
|
634
|
+
|
|
635
|
+
### **Phase 6: SDK Integration** (Week 11)
|
|
636
|
+
|
|
637
|
+
**Files to modify:**
|
|
638
|
+
```
|
|
639
|
+
src/core/sdk.ts # Add backup methods to main SDK
|
|
640
|
+
src/core/config.ts # Add backup configuration options
|
|
641
|
+
```
|
|
642
|
+
|
|
643
|
+
**New SDK methods:**
|
|
644
|
+
```typescript
|
|
645
|
+
class Web3Passkey {
|
|
646
|
+
// Backup status
|
|
647
|
+
async getBackupStatus(): Promise<BackupStatus>
|
|
648
|
+
|
|
649
|
+
// Create backups
|
|
650
|
+
async createZipBackup(password: string): Promise<Blob>
|
|
651
|
+
async createQRBackup(password?: string): Promise<string>
|
|
652
|
+
async exportEncryptedFile(password: string): Promise<Blob>
|
|
653
|
+
|
|
654
|
+
// Social recovery
|
|
655
|
+
async setupSocialRecovery(
|
|
656
|
+
guardians: GuardianInfo[],
|
|
657
|
+
threshold: number
|
|
658
|
+
): Promise<Guardian[]>
|
|
659
|
+
|
|
660
|
+
async recoverFromGuardians(shares: string[]): Promise<string>
|
|
661
|
+
|
|
662
|
+
// Sync
|
|
663
|
+
async getSyncStatus(): Promise<DeviceSyncStatus>
|
|
664
|
+
async detectSyncCapabilities(): Promise<SyncCapabilities>
|
|
665
|
+
|
|
666
|
+
// Education
|
|
667
|
+
async simulateRecoveryScenario(
|
|
668
|
+
scenario: RecoveryScenario
|
|
669
|
+
): Promise<SimulationResult>
|
|
670
|
+
|
|
671
|
+
getSecurityScore(): SecurityScore
|
|
672
|
+
}
|
|
673
|
+
```
|
|
674
|
+
|
|
675
|
+
---
|
|
676
|
+
|
|
677
|
+
### **Phase 7: Testing** (Week 12)
|
|
678
|
+
|
|
679
|
+
**Test files to create:**
|
|
680
|
+
```
|
|
681
|
+
test/backup/
|
|
682
|
+
├── zip-backup.test.ts # ZIP backup tests
|
|
683
|
+
├── qr-backup.test.ts # QR code tests
|
|
684
|
+
├── social-recovery.test.ts # Shamir sharing tests
|
|
685
|
+
└── encryption.test.ts # Encryption tests
|
|
686
|
+
|
|
687
|
+
test/integration/
|
|
688
|
+
├── full-recovery.test.ts # End-to-end recovery tests
|
|
689
|
+
└── cross-device.test.ts # Multi-device scenarios
|
|
690
|
+
```
|
|
691
|
+
|
|
692
|
+
**Test scenarios:**
|
|
693
|
+
- ✅ Create ZIP backup → restore → verify mnemonic
|
|
694
|
+
- ✅ Split into shares → combine → verify mnemonic
|
|
695
|
+
- ✅ QR code generation → scan → decrypt → verify
|
|
696
|
+
- ✅ Password strength validation
|
|
697
|
+
- ✅ Encryption/decryption roundtrip
|
|
698
|
+
- ✅ Guardian management (add/remove/revoke)
|
|
699
|
+
- ✅ Security score calculation
|
|
700
|
+
- ✅ Backup status tracking
|
|
701
|
+
|
|
702
|
+
---
|
|
703
|
+
|
|
704
|
+
## 📦 Dependencies
|
|
705
|
+
|
|
706
|
+
```json
|
|
707
|
+
{
|
|
708
|
+
"dependencies": {
|
|
709
|
+
"secrets.js-grempe": "^2.0.0", // Shamir Secret Sharing
|
|
710
|
+
"jszip": "^3.10.1", // ZIP file creation
|
|
711
|
+
"qrcode": "^1.5.3", // QR code generation
|
|
712
|
+
"buffer": "^6.0.3" // Buffer polyfill for browsers
|
|
713
|
+
},
|
|
714
|
+
"devDependencies": {
|
|
715
|
+
"@types/qrcode": "^1.5.2"
|
|
716
|
+
}
|
|
717
|
+
}
|
|
718
|
+
```
|
|
719
|
+
|
|
720
|
+
---
|
|
721
|
+
|
|
722
|
+
## 🔒 Security Considerations
|
|
723
|
+
|
|
724
|
+
### **Password Requirements**
|
|
725
|
+
|
|
726
|
+
For encrypted backups, enforce strong passwords:
|
|
727
|
+
|
|
728
|
+
```typescript
|
|
729
|
+
import { isStrongPassword } from 'w3pk'
|
|
730
|
+
|
|
731
|
+
// Validate password before creating backup
|
|
732
|
+
const password = userInput
|
|
733
|
+
if (!isStrongPassword(password)) {
|
|
734
|
+
// Show error to user
|
|
735
|
+
throw new Error('Password does not meet security requirements')
|
|
736
|
+
}
|
|
737
|
+
|
|
738
|
+
// Password is strong - proceed with backup
|
|
739
|
+
const blob = await w3pk.createZipBackup(password)
|
|
740
|
+
```
|
|
741
|
+
|
|
742
|
+
**Password requirements:**
|
|
743
|
+
- Minimum 12 characters
|
|
744
|
+
- At least 1 uppercase letter
|
|
745
|
+
- At least 1 lowercase letter
|
|
746
|
+
- At least 1 number
|
|
747
|
+
- At least 1 special character
|
|
748
|
+
- Not a common password (dictionary check)
|
|
749
|
+
|
|
750
|
+
**Examples:**
|
|
751
|
+
```typescript
|
|
752
|
+
isStrongPassword('MyStr0ng!Pass') // ✅ Valid
|
|
753
|
+
isStrongPassword('weak') // ❌ Too short
|
|
754
|
+
isStrongPassword('Password123!') // ❌ Contains "password"
|
|
755
|
+
```
|
|
756
|
+
|
|
757
|
+
**Strength indicator:**
|
|
758
|
+
- 0-25% : ❌ Weak (rejected)
|
|
759
|
+
- 26-50% : ⚠️ Fair (warning shown)
|
|
760
|
+
- 51-75% : 🟡 Good (accepted)
|
|
761
|
+
- 76-100% : ✅ Strong (recommended)
|
|
762
|
+
|
|
763
|
+
### **Backup Storage Best Practices**
|
|
764
|
+
|
|
765
|
+
Educate users on where to store backups:
|
|
766
|
+
|
|
767
|
+
```typescript
|
|
768
|
+
Recommended storage:
|
|
769
|
+
✅ Password manager (1Password, Bitwarden)
|
|
770
|
+
✅ Encrypted cloud (Dropbox, Google Drive) - file is already encrypted
|
|
771
|
+
✅ USB drive in safe
|
|
772
|
+
✅ Physical printout in safe deposit box
|
|
773
|
+
|
|
774
|
+
NOT recommended:
|
|
775
|
+
❌ Email (unencrypted transmission)
|
|
776
|
+
❌ Plain text file on desktop
|
|
777
|
+
❌ Cloud storage without password protection
|
|
778
|
+
❌ Shared drives
|
|
779
|
+
```
|
|
780
|
+
|
|
781
|
+
### **Guardian Selection Guidelines**
|
|
782
|
+
|
|
783
|
+
```typescript
|
|
784
|
+
Good guardians:
|
|
785
|
+
✅ Trusted family/friends
|
|
786
|
+
✅ Tech-savvy (can handle QR codes)
|
|
787
|
+
✅ Geographically distributed
|
|
788
|
+
✅ Long-term relationships
|
|
789
|
+
✅ Available when needed
|
|
790
|
+
|
|
791
|
+
Bad guardians:
|
|
792
|
+
❌ Strangers or acquaintances
|
|
793
|
+
❌ Same physical location (house fire risk)
|
|
794
|
+
❌ Not tech-savvy (cannot help)
|
|
795
|
+
❌ Transient relationships
|
|
796
|
+
```
|
|
797
|
+
|
|
798
|
+
---
|
|
799
|
+
|
|
800
|
+
## 🎯 Success Metrics
|
|
801
|
+
|
|
802
|
+
Track user adoption and security:
|
|
803
|
+
|
|
804
|
+
```typescript
|
|
805
|
+
Metrics to monitor:
|
|
806
|
+
- % of users with encrypted backup
|
|
807
|
+
- % of users with social recovery
|
|
808
|
+
- Average security score
|
|
809
|
+
- Recovery success rate
|
|
810
|
+
- Time to recovery (by method)
|
|
811
|
+
- Guardian response rate
|
|
812
|
+
- Backup creation abandonment rate
|
|
813
|
+
|
|
814
|
+
Goals:
|
|
815
|
+
- 80% of users create encrypted backup within 7 days
|
|
816
|
+
- 50% of users set up social recovery
|
|
817
|
+
- Average security score > 65
|
|
818
|
+
- Recovery success rate > 95%
|
|
819
|
+
```
|
|
820
|
+
|
|
821
|
+
---
|
|
822
|
+
|
|
823
|
+
## 📚 User Documentation
|
|
824
|
+
|
|
825
|
+
### **Quick Start: Backup Your Wallet**
|
|
826
|
+
|
|
827
|
+
```markdown
|
|
828
|
+
1. Create Encrypted ZIP Backup (Recommended)
|
|
829
|
+
- Click "Backup Wallet" in settings
|
|
830
|
+
- Choose "Encrypted ZIP"
|
|
831
|
+
- Enter strong password (you MUST remember this!)
|
|
832
|
+
- Download wallet-backup-[date].zip
|
|
833
|
+
- Store in password manager or encrypted cloud
|
|
834
|
+
|
|
835
|
+
2. Optional: Set Up Social Recovery
|
|
836
|
+
- Click "Social Recovery" in settings
|
|
837
|
+
- Add 5 trusted friends/family
|
|
838
|
+
- Choose threshold (3-of-5 recommended)
|
|
839
|
+
- Send guardian invitations
|
|
840
|
+
- Wait for confirmations
|
|
841
|
+
|
|
842
|
+
3. Verify Your Backup
|
|
843
|
+
- Try restoring in a different browser
|
|
844
|
+
- Check that address matches
|
|
845
|
+
- Delete test import (keep original)
|
|
846
|
+
|
|
847
|
+
4. Test Recovery
|
|
848
|
+
- Use recovery scenario simulator
|
|
849
|
+
- Practice with test wallet first
|
|
850
|
+
- Ensure you understand the process
|
|
851
|
+
```
|
|
852
|
+
|
|
853
|
+
---
|
|
854
|
+
|
|
855
|
+
## 🚨 Recovery Guide
|
|
856
|
+
|
|
857
|
+
### **How to Recover Your Wallet**
|
|
858
|
+
|
|
859
|
+
#### **Method 1: Using Encrypted ZIP Backup**
|
|
860
|
+
|
|
861
|
+
```markdown
|
|
862
|
+
1. Download your backup file (wallet-backup-[date].zip)
|
|
863
|
+
2. Go to w3pk recovery page
|
|
864
|
+
3. Click "Import from Backup"
|
|
865
|
+
4. Select your ZIP file
|
|
866
|
+
5. Enter your password
|
|
867
|
+
6. System decrypts and verifies
|
|
868
|
+
7. Wallet restored ✅
|
|
869
|
+
|
|
870
|
+
Verification:
|
|
871
|
+
- Address shown: 0x1234...5678
|
|
872
|
+
- Match with your known address? → Success!
|
|
873
|
+
```
|
|
874
|
+
|
|
875
|
+
#### **Method 2: Using Passkey Sync**
|
|
876
|
+
|
|
877
|
+
```markdown
|
|
878
|
+
1. Get new device (same ecosystem)
|
|
879
|
+
2. Sign into cloud account (iCloud/Google)
|
|
880
|
+
3. Go to w3pk website
|
|
881
|
+
4. Click "Login"
|
|
882
|
+
5. Authenticate with biometric
|
|
883
|
+
6. Passkey syncs automatically
|
|
884
|
+
7. Wallet decrypted ✅
|
|
885
|
+
|
|
886
|
+
Platform-specific:
|
|
887
|
+
- iOS → iCloud Keychain must be enabled
|
|
888
|
+
- Android → Google Password Manager
|
|
889
|
+
- Windows → Limited sync support
|
|
890
|
+
```
|
|
891
|
+
|
|
892
|
+
#### **Method 3: Using Social Recovery**
|
|
893
|
+
|
|
894
|
+
```markdown
|
|
895
|
+
1. Go to w3pk recovery page
|
|
896
|
+
2. Click "Social Recovery"
|
|
897
|
+
3. Contact your guardians (need 3 of 5)
|
|
898
|
+
4. Each guardian provides their share:
|
|
899
|
+
- Scan QR code, OR
|
|
900
|
+
- Enter share code manually
|
|
901
|
+
5. After 3 shares collected:
|
|
902
|
+
- System reconstructs mnemonic
|
|
903
|
+
- Wallet restored ✅
|
|
904
|
+
|
|
905
|
+
Timeline: ~24-48 hours (depends on guardian availability)
|
|
906
|
+
```
|
|
907
|
+
|
|
908
|
+
#### **Method 4: Manual Mnemonic Import**
|
|
909
|
+
|
|
910
|
+
```markdown
|
|
911
|
+
1. Find your 12-word recovery phrase
|
|
912
|
+
- Check password manager
|
|
913
|
+
- Check physical backup
|
|
914
|
+
- Check encrypted file
|
|
915
|
+
2. Go to w3pk recovery page
|
|
916
|
+
3. Click "Import Mnemonic"
|
|
917
|
+
4. Enter 12 words in order
|
|
918
|
+
5. System validates and imports
|
|
919
|
+
6. Wallet restored ✅
|
|
920
|
+
|
|
921
|
+
Compatible with:
|
|
922
|
+
- MetaMask
|
|
923
|
+
- Ledger
|
|
924
|
+
- Trezor
|
|
925
|
+
- Any BIP39 wallet
|
|
926
|
+
```
|
|
927
|
+
|
|
928
|
+
---
|
|
929
|
+
|
|
930
|
+
## 🔮 Future Enhancements
|
|
931
|
+
|
|
932
|
+
**V2.0 Features:**
|
|
933
|
+
- Biometric-encrypted cloud sync (no password needed)
|
|
934
|
+
- Multi-sig social recovery (on-chain)
|
|
935
|
+
- Dead man's switch (automatic guardian notification)
|
|
936
|
+
- Encrypted backup to IPFS/Arweave
|
|
937
|
+
- Hardware security module (HSM) integration
|
|
938
|
+
- Recovery time-locks (prevent rushed recovery)
|
|
939
|
+
- Guardian reputation system
|
|
940
|
+
- Backup verification reminders
|
|
941
|
+
- Encrypted backup versioning
|
|
942
|
+
- Family accounts (shared guardians)
|
|
943
|
+
|
|
944
|
+
---
|
|
945
|
+
|
|
946
|
+
## 📖 References
|
|
947
|
+
|
|
948
|
+
- [BIP39 Mnemonic Specification](https://github.com/bitcoin/bips/blob/master/bip-0039.mediawiki)
|
|
949
|
+
- [Shamir's Secret Sharing](https://en.wikipedia.org/wiki/Shamir%27s_Secret_Sharing)
|
|
950
|
+
- [WebAuthn Specification](https://www.w3.org/TR/webauthn-2/)
|
|
951
|
+
- [OWASP Password Storage Cheat Sheet](https://cheatsheetseries.owasp.org/cheatsheets/Password_Storage_Cheat_Sheet.html)
|
|
952
|
+
- [NIST Digital Identity Guidelines](hhttps://pages.nist.gov/800-63-4/)
|
|
953
|
+
|
|
954
|
+
---
|
|
955
|
+
|
|
956
|
+
## ❓ FAQ
|
|
957
|
+
|
|
958
|
+
**Q: Can I use multiple backup methods?**
|
|
959
|
+
A: Yes! We recommend using at least 2 methods for redundancy.
|
|
960
|
+
|
|
961
|
+
**Q: Is my encrypted backup safe to store in Google Drive?**
|
|
962
|
+
A: Yes, the backup is encrypted with AES-256-GCM and cannot be decrypted without your password.
|
|
963
|
+
|
|
964
|
+
**Q: What if I forget my backup password?**
|
|
965
|
+
A: You'll need to use another recovery method (passkey sync or social recovery). Password cannot be reset.
|
|
966
|
+
|
|
967
|
+
**Q: How secure is social recovery?**
|
|
968
|
+
A: Mathematically secure with Shamir's Secret Sharing. Any 2 guardians cannot recover (need 3 of 5).
|
|
969
|
+
|
|
970
|
+
**Q: Can guardians steal my wallet?**
|
|
971
|
+
A: No, each guardian only has an encrypted piece. They need 3 pieces minimum, and even then, shares are encrypted.
|
|
972
|
+
|
|
973
|
+
**Q: What happens if a guardian loses their share?**
|
|
974
|
+
A: No problem! You only need 3 out of 5. As long as 3 guardians have their shares, you can recover.
|
|
975
|
+
|
|
976
|
+
**Q: Can I change guardians later?**
|
|
977
|
+
A: Yes, you can add/remove/replace guardians anytime. You'll need to redistribute new shares.
|
|
978
|
+
|
|
979
|
+
**Q: Does passkey sync work across Apple and Android?**
|
|
980
|
+
A: No, passkey sync is ecosystem-specific. Use encrypted backup or social recovery for cross-platform.
|
|
981
|
+
|
|
982
|
+
**Q: How often should I update my backup?**
|
|
983
|
+
A: Your mnemonic never changes! One backup is enough. Only update if you change your mnemonic.
|
|
984
|
+
|
|
985
|
+
**Q: Is this better than writing down 12 words on paper?**
|
|
986
|
+
A: Paper backup is good! Our system adds encryption and multiple options for convenience and security.
|
|
987
|
+
|
|
988
|
+
---
|
|
989
|
+
|
|
990
|
+
## 📝 License
|
|
991
|
+
|
|
992
|
+
This recovery system architecture is part of w3pk and follows the same license.
|