@f2a/network 0.1.3 → 0.2.0

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.
Files changed (91) hide show
  1. package/README.md +278 -63
  2. package/dist/cli/commands.d.ts.map +1 -1
  3. package/dist/cli/commands.js +29 -2
  4. package/dist/cli/commands.js.map +1 -1
  5. package/dist/cli/config.d.ts +176 -0
  6. package/dist/cli/config.d.ts.map +1 -0
  7. package/dist/cli/config.js +386 -0
  8. package/dist/cli/config.js.map +1 -0
  9. package/dist/cli/daemon.d.ts +54 -0
  10. package/dist/cli/daemon.d.ts.map +1 -0
  11. package/dist/cli/daemon.js +572 -0
  12. package/dist/cli/daemon.js.map +1 -0
  13. package/dist/cli/index.js +90 -16
  14. package/dist/cli/index.js.map +1 -1
  15. package/dist/cli/init.d.ts +13 -0
  16. package/dist/cli/init.d.ts.map +1 -0
  17. package/dist/cli/init.js +352 -0
  18. package/dist/cli/init.js.map +1 -0
  19. package/dist/core/e2ee-crypto.d.ts +127 -1
  20. package/dist/core/e2ee-crypto.d.ts.map +1 -1
  21. package/dist/core/e2ee-crypto.js +446 -12
  22. package/dist/core/e2ee-crypto.js.map +1 -1
  23. package/dist/core/f2a.d.ts +2 -1
  24. package/dist/core/f2a.d.ts.map +1 -1
  25. package/dist/core/f2a.js +6 -2
  26. package/dist/core/f2a.js.map +1 -1
  27. package/dist/core/identity/encrypted-key-store.d.ts +19 -0
  28. package/dist/core/identity/encrypted-key-store.d.ts.map +1 -0
  29. package/dist/core/identity/encrypted-key-store.js +72 -0
  30. package/dist/core/identity/encrypted-key-store.js.map +1 -0
  31. package/dist/core/identity/identity-manager.d.ts +133 -0
  32. package/dist/core/identity/identity-manager.d.ts.map +1 -0
  33. package/dist/core/identity/identity-manager.js +454 -0
  34. package/dist/core/identity/identity-manager.js.map +1 -0
  35. package/dist/core/identity/index.d.ts +8 -0
  36. package/dist/core/identity/index.d.ts.map +1 -0
  37. package/dist/core/identity/index.js +7 -0
  38. package/dist/core/identity/index.js.map +1 -0
  39. package/dist/core/identity/types.d.ts +70 -0
  40. package/dist/core/identity/types.d.ts.map +1 -0
  41. package/dist/core/identity/types.js +17 -0
  42. package/dist/core/identity/types.js.map +1 -0
  43. package/dist/core/p2p-network.d.ts +26 -0
  44. package/dist/core/p2p-network.d.ts.map +1 -1
  45. package/dist/core/p2p-network.js +434 -105
  46. package/dist/core/p2p-network.js.map +1 -1
  47. package/dist/core/reputation-security.d.ts +15 -0
  48. package/dist/core/reputation-security.d.ts.map +1 -1
  49. package/dist/core/reputation-security.js +73 -3
  50. package/dist/core/reputation-security.js.map +1 -1
  51. package/dist/core/reputation.d.ts +129 -4
  52. package/dist/core/reputation.d.ts.map +1 -1
  53. package/dist/core/reputation.js +294 -1
  54. package/dist/core/reputation.js.map +1 -1
  55. package/dist/core/review-committee.d.ts +2 -2
  56. package/dist/core/review-committee.d.ts.map +1 -1
  57. package/dist/core/review-committee.js +17 -0
  58. package/dist/core/review-committee.js.map +1 -1
  59. package/dist/daemon/control-server.d.ts.map +1 -1
  60. package/dist/daemon/control-server.js +44 -1
  61. package/dist/daemon/control-server.js.map +1 -1
  62. package/dist/daemon/webhook.d.ts +3 -0
  63. package/dist/daemon/webhook.d.ts.map +1 -1
  64. package/dist/daemon/webhook.js +318 -6
  65. package/dist/daemon/webhook.js.map +1 -1
  66. package/dist/index.d.ts +3 -3
  67. package/dist/index.d.ts.map +1 -1
  68. package/dist/index.js +7 -3
  69. package/dist/index.js.map +1 -1
  70. package/dist/types/index.d.ts +4 -0
  71. package/dist/types/index.d.ts.map +1 -1
  72. package/dist/types/index.js.map +1 -1
  73. package/dist/types/result.d.ts +1 -1
  74. package/dist/types/result.d.ts.map +1 -1
  75. package/dist/types/result.js.map +1 -1
  76. package/dist/utils/crypto-utils.d.ts +17 -0
  77. package/dist/utils/crypto-utils.d.ts.map +1 -0
  78. package/dist/utils/crypto-utils.js +28 -0
  79. package/dist/utils/crypto-utils.js.map +1 -0
  80. package/dist/utils/logger.d.ts +1 -0
  81. package/dist/utils/logger.d.ts.map +1 -1
  82. package/dist/utils/logger.js +9 -3
  83. package/dist/utils/logger.js.map +1 -1
  84. package/dist/utils/rate-limiter.d.ts.map +1 -1
  85. package/dist/utils/rate-limiter.js +3 -1
  86. package/dist/utils/rate-limiter.js.map +1 -1
  87. package/dist/utils/signature.d.ts +47 -1
  88. package/dist/utils/signature.d.ts.map +1 -1
  89. package/dist/utils/signature.js +166 -11
  90. package/dist/utils/signature.js.map +1 -1
  91. package/package.json +2 -1
@@ -3,22 +3,117 @@
3
3
  * 使用 X25519 + AES-256-GCM 实现 Agent 间加密通信
4
4
  */
5
5
  import { x25519 } from '@noble/curves/ed25519.js';
6
- import { randomBytes, createCipheriv, createDecipheriv, hkdfSync } from 'crypto';
6
+ import { randomBytes, createCipheriv, createDecipheriv, createHmac, hkdfSync, timingSafeEqual } from 'crypto';
7
7
  import { Logger } from '../utils/logger.js';
8
8
  // AES-256-GCM 参数
9
9
  const AES_KEY_SIZE = 32; // 256 bits
10
10
  const AES_IV_SIZE = 16; // 128 bits
11
11
  const AES_TAG_SIZE = 16; // 128 bits
12
+ // P2-7 修复:使用常量 SALT_SIZE 并保持一致
13
+ const SALT_SIZE = 16; // 128 bits
12
14
  /**
13
15
  * 密钥管理器
16
+ * P2-1 修复:实现 Disposable 接口
14
17
  */
15
18
  export class E2EECrypto {
16
19
  keyPair = null;
17
20
  peerPublicKeys = new Map();
18
21
  sharedSecrets = new Map();
19
22
  logger;
23
+ /** P2-10 修复:IV 使用记录,用于检测 IV 重用 */
24
+ usedIVs = new Map();
25
+ /** P2-10 修复:IV 重用警告阈值 */
26
+ static IV_REUSE_WARN_THRESHOLD = 1000;
27
+ /** P1-2 修复:待处理的密钥确认挑战 */
28
+ pendingChallenges = new Map();
29
+ /** P1-2 修复:已确认的密钥 */
30
+ keyConfirmed = new Map();
31
+ /** P1-1 修复:挑战清理定时器 */
32
+ challengeCleanupTimer = null;
33
+ /** P1-1 修复:挑战过期时间(5分钟) */
34
+ static CHALLENGE_EXPIRY_MS = 5 * 60 * 1000;
35
+ /** P1-1 修复:清理间隔(每分钟) */
36
+ static CHALLENGE_CLEANUP_INTERVAL_MS = 60 * 1000;
20
37
  constructor() {
21
38
  this.logger = new Logger({ component: 'E2EE' });
39
+ this.startChallengeCleanup();
40
+ }
41
+ /**
42
+ * P1-1 修复:启动挑战清理定时器
43
+ */
44
+ startChallengeCleanup() {
45
+ this.challengeCleanupTimer = setInterval(() => {
46
+ const now = Date.now();
47
+ let cleaned = 0;
48
+ for (const [key, challenge] of this.pendingChallenges) {
49
+ if (now - challenge.timestamp > E2EECrypto.CHALLENGE_EXPIRY_MS) {
50
+ this.pendingChallenges.delete(key);
51
+ cleaned++;
52
+ }
53
+ }
54
+ if (cleaned > 0) {
55
+ this.logger.debug('Cleaned expired challenges', { count: cleaned });
56
+ }
57
+ }, E2EECrypto.CHALLENGE_CLEANUP_INTERVAL_MS);
58
+ }
59
+ /**
60
+ * P1-2 修复:注销对等方,清理所有相关资源
61
+ * P1-4 修复:删除共享密钥前先零填充
62
+ * @param peerId 对等方标识
63
+ */
64
+ unregisterPeer(peerId) {
65
+ // P1-4 修复:清理共享密钥前先零填充
66
+ const sharedSecret = this.sharedSecrets.get(peerId);
67
+ if (sharedSecret) {
68
+ sharedSecret.fill(0);
69
+ }
70
+ this.sharedSecrets.delete(peerId);
71
+ // 清理对等方公钥
72
+ this.peerPublicKeys.delete(peerId);
73
+ // 清理密钥确认状态
74
+ const confirmKey = `confirmed:${peerId}`;
75
+ this.keyConfirmed.delete(confirmKey);
76
+ // 清理 IV 记录
77
+ this.usedIVs.delete(peerId);
78
+ // 清理相关的 pendingChallenges
79
+ const challengeKey = `challenge:${peerId}`;
80
+ const counterChallengeKey = `counter:${peerId}`;
81
+ this.pendingChallenges.delete(challengeKey);
82
+ this.pendingChallenges.delete(counterChallengeKey);
83
+ this.logger.info('Peer unregistered and resources cleaned', { peerId: peerId.slice(0, 16) });
84
+ }
85
+ /**
86
+ * P1-1 修复:停止清理定时器,释放资源
87
+ * P1-4 修复:清理共享密钥前先零填充
88
+ * R2-1 修复:零填充 privateKey,最敏感的密钥材料
89
+ */
90
+ stop() {
91
+ if (this.challengeCleanupTimer) {
92
+ clearInterval(this.challengeCleanupTimer);
93
+ this.challengeCleanupTimer = null;
94
+ }
95
+ // R2-1 修复:零填充 privateKey,这是最敏感的密钥材料
96
+ if (this.keyPair?.privateKey) {
97
+ this.keyPair.privateKey.fill(0);
98
+ this.keyPair = null;
99
+ }
100
+ // P1-4 修复:零填充所有共享密钥
101
+ for (const secret of this.sharedSecrets.values()) {
102
+ secret.fill(0);
103
+ }
104
+ // 清理所有资源
105
+ this.pendingChallenges.clear();
106
+ this.keyConfirmed.clear();
107
+ this.usedIVs.clear();
108
+ this.sharedSecrets.clear();
109
+ this.peerPublicKeys.clear();
110
+ this.logger.info('E2EECrypto stopped and all resources cleaned');
111
+ }
112
+ /**
113
+ * P2-1 修复:实现 Disposable 接口
114
+ */
115
+ [Symbol.dispose]() {
116
+ this.stop();
22
117
  }
23
118
  /**
24
119
  * 初始化密钥对
@@ -31,9 +126,33 @@ export class E2EECrypto {
31
126
  }
32
127
  /**
33
128
  * 从已有密钥初始化
129
+ * P1-2: 添加输入验证
34
130
  */
35
131
  initializeWithKeyPair(privateKey, publicKey) {
132
+ // 验证私钥长度 (X25519 私钥应为 32 字节)
133
+ if (privateKey.length !== 32) {
134
+ throw new Error(`Invalid private key length: expected 32 bytes, got ${privateKey.length}`);
135
+ }
136
+ // 验证公钥长度 (X25519 公钥应为 32 字节)
137
+ if (publicKey.length !== 32) {
138
+ throw new Error(`Invalid public key length: expected 32 bytes, got ${publicKey.length}`);
139
+ }
140
+ // 验证公私钥配对
141
+ try {
142
+ const derivedPublicKey = x25519.getPublicKey(privateKey);
143
+ const publicKeyMatch = Buffer.from(derivedPublicKey).equals(Buffer.from(publicKey));
144
+ if (!publicKeyMatch) {
145
+ throw new Error('Public key does not match the private key. The key pair is invalid.');
146
+ }
147
+ }
148
+ catch (error) {
149
+ // 如果派生失败,可能是无效的私钥
150
+ throw new Error(`Invalid key pair: ${error instanceof Error ? error.message : String(error)}`);
151
+ }
36
152
  this.keyPair = { privateKey, publicKey };
153
+ this.logger.info('Key pair initialized successfully', {
154
+ publicKeyPrefix: Buffer.from(publicKey).toString('hex').slice(0, 16)
155
+ });
37
156
  }
38
157
  /**
39
158
  * 获取公钥 (用于广播)
@@ -45,15 +164,24 @@ export class E2EECrypto {
45
164
  }
46
165
  /**
47
166
  * 注册对等方的公钥
167
+ * P2-3 修复:使用 Uint8Array.slice() 创建不可变副本
48
168
  */
49
169
  registerPeerPublicKey(peerId, publicKeyBase64) {
50
170
  try {
51
171
  const publicKey = Buffer.from(publicKeyBase64, 'base64');
52
- this.peerPublicKeys.set(peerId, publicKey);
172
+ // P3-1 修复:重命名为 Copy 以更准确反映语义(可修改的副本)
173
+ const publicKeyCopy = new Uint8Array(publicKey);
174
+ this.peerPublicKeys.set(peerId, publicKeyCopy);
53
175
  // 预计算共享密钥
54
176
  if (this.keyPair) {
55
- const sharedSecret = x25519.getSharedSecret(this.keyPair.privateKey, publicKey);
56
- this.sharedSecrets.set(peerId, sharedSecret);
177
+ const sharedSecret = x25519.getSharedSecret(this.keyPair.privateKey, publicKeyCopy);
178
+ // P3-1 修复:重命名为 Copy 以更准确反映语义
179
+ const sharedSecretCopy = new Uint8Array(sharedSecret);
180
+ this.sharedSecrets.set(peerId, sharedSecretCopy);
181
+ // P2-10 修复:初始化 IV 记录集
182
+ if (!this.usedIVs.has(peerId)) {
183
+ this.usedIVs.set(peerId, new Set());
184
+ }
57
185
  }
58
186
  }
59
187
  catch (error) {
@@ -66,6 +194,48 @@ export class E2EECrypto {
66
194
  canEncryptTo(peerId) {
67
195
  return this.sharedSecrets.has(peerId);
68
196
  }
197
+ /**
198
+ * P2-13 修复:提取独立的 IV 生成方法,处理碰撞检测
199
+ * P1-4 修复:添加最多 10 次尝试的循环逻辑
200
+ * P2-2 修复:当 ivSet 不存在时,创建并记录 IV,防止重用
201
+ * @param peerId 对等方标识
202
+ * @returns 唯一的 IV,如果无法生成则抛出错误
203
+ */
204
+ generateUniqueIV(peerId) {
205
+ // 确保 ivSet 存在
206
+ let ivSet = this.usedIVs.get(peerId);
207
+ if (!ivSet) {
208
+ ivSet = new Set();
209
+ this.usedIVs.set(peerId, ivSet);
210
+ }
211
+ const maxAttempts = 10;
212
+ for (let attempt = 0; attempt < maxAttempts; attempt++) {
213
+ const iv = randomBytes(AES_IV_SIZE);
214
+ const ivBase64 = iv.toString('base64');
215
+ if (!ivSet.has(ivBase64)) {
216
+ // IV 唯一,记录并返回
217
+ ivSet.add(ivBase64);
218
+ // P2-10 修复:清理过期的 IV 记录,防止内存泄漏
219
+ if (ivSet.size > E2EECrypto.IV_REUSE_WARN_THRESHOLD) {
220
+ this.logger.warn('IV usage count exceeded threshold, clearing old records', {
221
+ peerId: peerId.slice(0, 16),
222
+ count: ivSet.size
223
+ });
224
+ // 保留最近的一半记录
225
+ const entries = Array.from(ivSet);
226
+ ivSet.clear();
227
+ entries.slice(-Math.floor(E2EECrypto.IV_REUSE_WARN_THRESHOLD / 2)).forEach(e => ivSet.add(e));
228
+ }
229
+ return iv;
230
+ }
231
+ // IV 碰撞,重试
232
+ if (attempt === 0) {
233
+ this.logger.warn('IV collision detected, regenerating', { peerId: peerId.slice(0, 16) });
234
+ }
235
+ }
236
+ // P2-17 修复:达到 maxAttempts 时抛出错误,让调用方正确处理
237
+ throw new Error(`Failed to generate unique IV after ${maxAttempts} attempts. This is extremely unlikely and may indicate a cryptographic issue.`);
238
+ }
69
239
  /**
70
240
  * 加密消息
71
241
  */
@@ -80,12 +250,13 @@ export class E2EECrypto {
80
250
  return null;
81
251
  }
82
252
  try {
83
- // 生成随机盐值(每次加密使用不同的盐值,提高安全性)
84
- const salt = randomBytes(16);
253
+ // P2-7 修复:使用常量 SALT_SIZE
254
+ const salt = randomBytes(SALT_SIZE);
85
255
  // 从共享密钥派生 AES 密钥
86
256
  const aesKey = this.deriveAESKey(sharedSecret, salt);
87
- // 生成随机 IV
88
- const iv = randomBytes(AES_IV_SIZE);
257
+ // P2-13 修复:使用独立的 IV 生成方法
258
+ // P1-4 修复:包含循环尝试逻辑
259
+ const iv = this.generateUniqueIV(peerId);
89
260
  // 创建加密器
90
261
  const cipher = createCipheriv('aes-256-gcm', aesKey, iv);
91
262
  // 添加 AAD (如果有)
@@ -107,7 +278,7 @@ export class E2EECrypto {
107
278
  };
108
279
  }
109
280
  catch (error) {
110
- this.logger.error('Encryption failed', { error });
281
+ this.logger.error('Encryption failed', { error: error instanceof Error ? error.message : String(error) });
111
282
  return null;
112
283
  }
113
284
  }
@@ -123,8 +294,17 @@ export class E2EECrypto {
123
294
  // 使用发送方公钥计算共享密钥
124
295
  const senderPublicKey = Buffer.from(encrypted.senderPublicKey, 'base64');
125
296
  const sharedSecret = x25519.getSharedSecret(this.keyPair.privateKey, senderPublicKey);
126
- // 使用消息中的盐值派生 AES 密钥(与加密方使用相同的盐值)
127
- const salt = encrypted.salt ? Buffer.from(encrypted.salt, 'base64') : Buffer.from('F2A-E2EE-SALT-2024', 'utf-8');
297
+ // P2 修复:强制要求盐值,不使用硬编码默认值
298
+ if (!encrypted.salt) {
299
+ this.logger.error('Decryption failed: missing salt value. Salt is required for security.');
300
+ return null;
301
+ }
302
+ const salt = Buffer.from(encrypted.salt, 'base64');
303
+ // P2-7 修复:使用常量 SALT_SIZE 验证盐值长度
304
+ if (salt.length < SALT_SIZE) {
305
+ this.logger.error('Decryption failed: salt value too short. Minimum 16 bytes required.');
306
+ return null;
307
+ }
128
308
  const aesKey = this.deriveAESKey(sharedSecret, salt);
129
309
  // 解码参数
130
310
  const iv = Buffer.from(encrypted.iv, 'base64');
@@ -142,7 +322,24 @@ export class E2EECrypto {
142
322
  return plaintext;
143
323
  }
144
324
  catch (error) {
145
- this.logger.error('Decryption failed', { error });
325
+ // 增强错误处理:区分不同类型的解密失败
326
+ const errorMessage = error instanceof Error ? error.message : String(error);
327
+ const errorType = errorMessage.includes('authTag') || errorMessage.includes('authentication')
328
+ ? 'AUTH_FAILED'
329
+ : errorMessage.includes('invalid') || errorMessage.includes('corrupt')
330
+ ? 'INVALID_FORMAT'
331
+ : 'DECRYPTION_ERROR';
332
+ this.logger.error('Decryption failed', {
333
+ errorType,
334
+ errorMessage,
335
+ hasKey: !!this.keyPair,
336
+ hasSalt: !!encrypted.salt,
337
+ ciphertextLength: encrypted.ciphertext?.length || 0
338
+ });
339
+ // 安全提示:认证失败可能表示消息被篡改
340
+ if (errorType === 'AUTH_FAILED') {
341
+ this.logger.warn('Possible message tampering detected: authentication tag verification failed');
342
+ }
146
343
  return null;
147
344
  }
148
345
  }
@@ -184,6 +381,243 @@ export class E2EECrypto {
184
381
  getRegisteredPeerCount() {
185
382
  return this.peerPublicKeys.size;
186
383
  }
384
+ /**
385
+ * P1-2 修复:生成密钥确认挑战
386
+ * 在密钥交换后,用于验证双方拥有相同的共享密钥
387
+ * @param peerId 对等方标识
388
+ * @returns 挑战数据
389
+ */
390
+ generateKeyConfirmationChallenge(peerId) {
391
+ if (!this.keyPair) {
392
+ this.logger.error('Cannot generate challenge: not initialized');
393
+ return null;
394
+ }
395
+ const sharedSecret = this.sharedSecrets.get(peerId);
396
+ if (!sharedSecret) {
397
+ this.logger.error('Cannot generate challenge: no shared secret for peer', { peerId });
398
+ return null;
399
+ }
400
+ // 生成随机挑战
401
+ const challenge = randomBytes(32).toString('base64');
402
+ const timestamp = Date.now();
403
+ const random = randomBytes(8).toString('hex');
404
+ // P1-3 修复:使用包含 timestamp 和 random 的键名格式,避免并发冲突
405
+ const challengeKey = `challenge:${peerId}:${timestamp}:${random}`;
406
+ this.pendingChallenges.set(challengeKey, {
407
+ challenge,
408
+ timestamp
409
+ });
410
+ return {
411
+ challenge,
412
+ senderId: Buffer.from(this.keyPair.publicKey).toString('base64').slice(0, 16),
413
+ timestamp
414
+ };
415
+ }
416
+ /**
417
+ * P1-2 修复:响应密钥确认挑战
418
+ * 使用共享密钥加密挑战数据作为证明
419
+ * @param peerId 对等方标识
420
+ * @param challenge 收到的挑战
421
+ * @returns 响应数据和反向挑战
422
+ */
423
+ respondToKeyConfirmationChallenge(peerId, challenge) {
424
+ if (!this.keyPair) {
425
+ this.logger.error('Cannot respond to challenge: not initialized');
426
+ return null;
427
+ }
428
+ const sharedSecret = this.sharedSecrets.get(peerId);
429
+ if (!sharedSecret) {
430
+ this.logger.error('Cannot respond to challenge: no shared secret for peer', { peerId });
431
+ return null;
432
+ }
433
+ // 验证时间戳防止重放攻击(5分钟有效期)
434
+ // P1-6 修复:拒绝未来时间戳,只允许过去的时间戳
435
+ // R2-3 说明:5分钟 tolerance 对于分布式系统是合理的,考虑:
436
+ // - 时钟同步偏差(NTP 通常 < 100ms,极端情况可达秒级)
437
+ // - 消息传输延迟(跨区域可达秒级)
438
+ // - 系统处理延迟
439
+ const now = Date.now();
440
+ const maxAge = 5 * 60 * 1000; // 5 分钟
441
+ // P1-6 修复:拒绝未来时间戳
442
+ if (challenge.timestamp > now + maxAge) {
443
+ this.logger.error('Challenge timestamp is in the future');
444
+ return null;
445
+ }
446
+ if (challenge.timestamp < now - maxAge) {
447
+ this.logger.error('Challenge timestamp expired');
448
+ return null;
449
+ }
450
+ // 使用共享密钥加密挑战数据作为响应
451
+ // 这证明我们拥有正确的共享密钥
452
+ // P1-5 修复:使用 HMAC 而非 Hash,防止长度扩展攻击
453
+ const challengeResponse = createHmac('sha256', sharedSecret)
454
+ .update(challenge.challenge)
455
+ .digest('base64');
456
+ // 生成反向挑战
457
+ const counterChallenge = randomBytes(32).toString('base64');
458
+ const timestamp = Date.now();
459
+ const random = randomBytes(8).toString('hex');
460
+ // P1-3 修复:使用包含 timestamp 和 random 的键名格式,避免并发冲突
461
+ const counterChallengeKey = `counter:${peerId}:${timestamp}:${random}`;
462
+ this.pendingChallenges.set(counterChallengeKey, {
463
+ challenge: counterChallenge,
464
+ timestamp
465
+ });
466
+ return {
467
+ challengeResponse,
468
+ counterChallenge,
469
+ senderId: Buffer.from(this.keyPair.publicKey).toString('base64').slice(0, 16),
470
+ timestamp
471
+ };
472
+ }
473
+ /**
474
+ * P2-14 修复:提取公共的挑战响应验证逻辑
475
+ * @param peerId 对等方标识
476
+ * @param response 实际收到的响应
477
+ * @param expectedChallenge 原始挑战数据
478
+ * @returns 验证结果
479
+ */
480
+ verifyChallengeResponse(peerId, response, expectedChallenge) {
481
+ const sharedSecret = this.sharedSecrets.get(peerId);
482
+ if (!sharedSecret) {
483
+ this.logger.error('Cannot verify response: no shared secret for peer', { peerId });
484
+ return false;
485
+ }
486
+ // P1-5 修复:使用 HMAC 而非 Hash,防止长度扩展攻击
487
+ const expectedResponse = createHmac('sha256', sharedSecret)
488
+ .update(expectedChallenge)
489
+ .digest('base64');
490
+ // P3-1 修复:使用 timingSafeEqual 防止时序攻击
491
+ try {
492
+ const responseBuffer = Buffer.from(response, 'base64');
493
+ const expectedBuffer = Buffer.from(expectedResponse, 'base64');
494
+ if (responseBuffer.length !== expectedBuffer.length) {
495
+ this.logger.error('Challenge response length mismatch', { peerId });
496
+ return false;
497
+ }
498
+ return timingSafeEqual(responseBuffer, expectedBuffer);
499
+ }
500
+ catch {
501
+ // 长度不匹配或其他错误
502
+ return false;
503
+ }
504
+ }
505
+ /**
506
+ * P1-2 修复:验证密钥确认响应并响应反向挑战
507
+ * 完成双向密钥确认
508
+ * @param peerId 对等方标识
509
+ * @param response 收到的响应
510
+ * @param originalChallenge 原始挑战数据
511
+ * @returns 反向挑战的响应,如果验证失败返回 null
512
+ */
513
+ verifyKeyConfirmationResponse(peerId, response, originalChallenge) {
514
+ const sharedSecret = this.sharedSecrets.get(peerId);
515
+ if (!sharedSecret) {
516
+ this.logger.error('Cannot verify response: no shared secret for peer', { peerId });
517
+ return { success: false };
518
+ }
519
+ // 验证时间戳
520
+ const now = Date.now();
521
+ const maxAge = 5 * 60 * 1000; // 5 分钟
522
+ // P1-6 修复:拒绝未来时间戳
523
+ if (response.timestamp > now + maxAge) {
524
+ this.logger.error('Response timestamp is in the future');
525
+ return { success: false };
526
+ }
527
+ if (response.timestamp < now - maxAge) {
528
+ this.logger.error('Response timestamp expired');
529
+ return { success: false };
530
+ }
531
+ // P2-14 修复:使用公共验证方法
532
+ if (!this.verifyChallengeResponse(peerId, response.challengeResponse, originalChallenge)) {
533
+ this.logger.error('Challenge response verification failed', { peerId });
534
+ return { success: false };
535
+ }
536
+ // 响应反向挑战
537
+ // P1-5 修复:使用 HMAC 而非 Hash
538
+ const counterChallengeResponse = createHmac('sha256', sharedSecret)
539
+ .update(response.counterChallenge)
540
+ .digest('base64');
541
+ // 标记密钥确认完成
542
+ const confirmKey = `confirmed:${peerId}`;
543
+ this.keyConfirmed.set(confirmKey, true);
544
+ this.logger.info('Key exchange confirmed with peer', { peerId: peerId.slice(0, 16) });
545
+ return {
546
+ success: true,
547
+ counterChallengeResponse
548
+ };
549
+ }
550
+ /**
551
+ * P1-2 修复:验证反向挑战的响应
552
+ * P1-5 修复:使用 HMAC 而非 Hash
553
+ * @param peerId 对等方标识
554
+ * @param counterChallengeResponse 反向挑战的响应
555
+ * @param originalCounterChallenge 原始反向挑战
556
+ * @returns 验证结果
557
+ */
558
+ verifyCounterChallengeResponse(peerId, counterChallengeResponse, originalCounterChallenge) {
559
+ // P2-14 修复:使用公共验证方法
560
+ if (!this.verifyChallengeResponse(peerId, counterChallengeResponse, originalCounterChallenge)) {
561
+ this.logger.error('Counter challenge response verification failed', { peerId });
562
+ return false;
563
+ }
564
+ // 标记密钥确认完成
565
+ const confirmKey = `confirmed:${peerId}`;
566
+ this.keyConfirmed.set(confirmKey, true);
567
+ this.logger.info('Key exchange fully confirmed with peer', { peerId: peerId.slice(0, 16) });
568
+ return true;
569
+ }
570
+ /**
571
+ * P1-2 修复:检查与对等方的密钥是否已确认
572
+ */
573
+ isKeyConfirmed(peerId) {
574
+ const confirmKey = `confirmed:${peerId}`;
575
+ return this.keyConfirmed.get(confirmKey) === true;
576
+ }
577
+ /**
578
+ * P1-2 修复:执行完整的双向密钥确认流程
579
+ * 这是一个便捷方法,封装了完整的确认流程
580
+ * @param peerId 对等方标识
581
+ * @param sendChallenge 发送挑战的函数
582
+ * @param receiveResponse 接收响应的函数
583
+ * @returns 确认是否成功
584
+ */
585
+ async confirmKeyExchange(peerId, sendChallenge, receiveCounterResponse) {
586
+ try {
587
+ // 生成挑战
588
+ const challenge = this.generateKeyConfirmationChallenge(peerId);
589
+ if (!challenge) {
590
+ return false;
591
+ }
592
+ // 发送挑战并等待响应
593
+ const response = await sendChallenge(challenge);
594
+ if (!response) {
595
+ this.logger.error('No response received for key confirmation challenge', { peerId });
596
+ return false;
597
+ }
598
+ // 验证响应
599
+ const result = this.verifyKeyConfirmationResponse(peerId, response, challenge.challenge);
600
+ if (!result.success || !result.counterChallengeResponse) {
601
+ return false;
602
+ }
603
+ // 如果需要验证反向挑战响应
604
+ if (receiveCounterResponse) {
605
+ const verified = await receiveCounterResponse(result.counterChallengeResponse);
606
+ if (!verified) {
607
+ this.logger.error('Counter challenge response verification failed', { peerId });
608
+ return false;
609
+ }
610
+ }
611
+ return true;
612
+ }
613
+ catch (error) {
614
+ this.logger.error('Key exchange confirmation failed with exception', {
615
+ peerId: peerId.slice(0, 16),
616
+ error: error instanceof Error ? error.message : String(error)
617
+ });
618
+ return false;
619
+ }
620
+ }
187
621
  }
188
622
  // 单例导出
189
623
  export const defaultE2EECrypto = new E2EECrypto();
@@ -1 +1 @@
1
- {"version":3,"file":"e2ee-crypto.js","sourceRoot":"","sources":["../../src/core/e2ee-crypto.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"e2ee-crypto.js","sourceRoot":"","sources":["../../src/core/e2ee-crypto.ts"],"names":[],"mappings":"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"}
@@ -52,8 +52,9 @@ export declare class F2A extends EventEmitter<F2AEvents> implements F2AInstance
52
52
  stop(): Promise<void>;
53
53
  /**
54
54
  * 注册能力
55
+ * P3.3 修复:返回 Result 类型,统一错误处理
55
56
  */
56
- registerCapability(capability: AgentCapability, handler: (params: Record<string, unknown>) => Promise<unknown>): void;
57
+ registerCapability(capability: AgentCapability, handler: (params: Record<string, unknown>) => Promise<unknown>): Result<void>;
57
58
  /**
58
59
  * 获取已注册的能力
59
60
  */
@@ -1 +1 @@
1
- {"version":3,"file":"f2a.d.ts","sourceRoot":"","sources":["../../src/core/f2a.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"f2a.d.ts","sourceRoot":"","sources":["../../src/core/f2a.ts"],"names":[],"mappings":"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"}
package/dist/core/f2a.js CHANGED
@@ -3,6 +3,7 @@
3
3
  * 整合 P2P 网络、能力发现与任务委托
4
4
  */
5
5
  import { EventEmitter } from 'eventemitter3';
6
+ import { randomUUID } from 'crypto';
6
7
  import { P2PNetwork } from './p2p-network.js';
7
8
  import { Logger } from '../utils/logger.js';
8
9
  import { validateAgentCapability, validateTaskDelegateOptions } from '../utils/validation.js';
@@ -114,6 +115,7 @@ export class F2A extends EventEmitter {
114
115
  }
115
116
  /**
116
117
  * 注册能力
118
+ * P3.3 修复:返回 Result 类型,统一错误处理
117
119
  */
118
120
  registerCapability(capability, handler) {
119
121
  // 验证能力定义
@@ -122,7 +124,7 @@ export class F2A extends EventEmitter {
122
124
  this.logger.error('Invalid capability definition', {
123
125
  errors: validation.error.errors
124
126
  });
125
- throw new Error(`Invalid capability: ${validation.error.errors.map(e => e.message).join(', ')}`);
127
+ return failureFromError('INVALID_PARAMS', `Invalid capability: ${validation.error.errors.map(e => e.message).join(', ')}`);
126
128
  }
127
129
  this.registeredCapabilities.set(capability.name, {
128
130
  ...capability,
@@ -131,6 +133,7 @@ export class F2A extends EventEmitter {
131
133
  // 更新 agentInfo
132
134
  this.updateAgentCapabilities();
133
135
  this.logger.info('Registered capability', { name: capability.name });
136
+ return success(undefined);
134
137
  }
135
138
  /**
136
139
  * 获取已注册的能力
@@ -192,7 +195,8 @@ export class F2A extends EventEmitter {
192
195
  });
193
196
  return failureFromError('INVALID_OPTIONS', `Invalid options: ${validation.error.errors.map(e => e.message).join(', ')}`);
194
197
  }
195
- const taskId = `task-${Date.now()}-${Math.random().toString(36).slice(2, 8)}`;
198
+ // P3.1 修复:使用 randomUUID() 替代 Math.random()
199
+ const taskId = `task-${randomUUID()}`;
196
200
  this.logger.info('Delegating task', {
197
201
  taskId,
198
202
  capability: options.capability,