|
1 | 1 | # SeedShield |
2 | 2 |
|
3 | | -**Cryptographic structure seed protection for Paper/Spigot servers.** |
4 | | - |
5 | | -**[中文文档](#中文文档) | English** |
6 | | - |
7 | | -SeedShield prevents seed cracking tools (chunkbase, SeedCrackerX, Structurecracker) from determining structure locations by replacing each structure type's placement salt with an irreversible SHA-256 derived value. |
8 | | - |
9 | | -**This is the first Paper/Spigot plugin to provide cryptographic structure seed protection.** Previously, this level of protection was only available through Fabric mods or custom server forks. |
10 | | - |
11 | | -## How It Works |
12 | | - |
13 | | -Minecraft determines structure positions using this formula: |
14 | | - |
15 | | -``` |
16 | | -position = f(worldSeed, regionCoords, salt) |
17 | | -``` |
18 | | - |
19 | | -The `salt` is a hardcoded integer per structure type. Tools like chunkbase know these default salts, so knowing the world seed = knowing all structure locations. |
20 | | - |
21 | | -SeedShield replaces each salt with: |
22 | | - |
23 | | -``` |
24 | | -salt = SHA-256(secretKey + ":" + worldSeed + ":" + structureType)[0..4] |
25 | | -``` |
26 | | - |
27 | | -- **Per-structure isolation**: Each structure type gets a unique cryptographic salt. Cracking one type's salt reveals nothing about others. |
28 | | -- **Secret key protection**: Without the 256-bit key (stored in `config.yml`), salts cannot be reversed. |
29 | | -- **Stronghold protection**: Also modifies `concentricRingsSeed` and recalculates ring positions. |
30 | | - |
31 | | -## Comparison with Existing Solutions |
32 | | - |
33 | | -| Solution | Platform | Modifies Structure Positions | Crypto Protection | Per-Structure Isolation | Stronghold Protection | |
34 | | -|----------|----------|:---:|:---:|:---:|:---:| |
35 | | -| **SeedShield** | **Paper/Spigot plugin** | **✅** | **✅ SHA-256** | **✅** | **✅** | |
36 | | -| [SeedGuard](https://github.com/DrexHD/SeedGuard) | Fabric mod | ✅ | ❌ Random | ✅ | ✅ | |
37 | | -| [SecureSeed](https://github.com/Earthcomputer/SecureSeed) | Fabric mod (1.16.5, abandoned) | ✅ | ✅ BLAKE2 | ✅ | ✅ | |
38 | | -| [AntiSeedCracker](https://github.com/akshualy/AntiSeedCracker) | Spigot plugin | ❌ | ❌ | ❌ | ❌ | |
39 | | -| Leaf `secure-seed` | Server fork | ✅ | ✅ 1024-bit | ✅ | ✅ | |
40 | | -| spigot.yml seeds | Built-in | ✅ | ❌ Plain int | ❌ | ⚠️ | |
41 | | - |
42 | | -## Installation |
43 | | - |
44 | | -1. Download `SeedShield-1.0.0.jar` from [Releases](https://github.com/7yunluo/SeedShield/releases) |
45 | | -2. Place it in your server's `plugins/` folder |
46 | | -3. **Delete the region files** of worlds you want to protect (structures must regenerate) |
47 | | -4. Restart the server |
48 | | -5. Edit `plugins/SeedShield/config.yml` to configure which worlds to protect |
49 | | - |
50 | | -> **Important**: SeedShield only affects newly generated chunks. Existing structures in already-generated chunks will not change positions. |
51 | | -
|
52 | | -## Configuration |
53 | | - |
54 | | -```yaml |
55 | | -# Auto-generated 256-bit secret key. DO NOT SHARE. |
56 | | -secret-key: "a1b2c3d4..." |
57 | | - |
58 | | -# Worlds to protect |
59 | | -enabled-worlds: |
60 | | - - world |
61 | | - - survival |
62 | | -``` |
63 | | -
|
64 | | -## Requirements |
65 | | -
|
66 | | -- Paper 1.21+ (or forks: Leaves, Purpur, Folia, etc.) |
67 | | -- Java 17+ |
68 | | -
|
69 | | -## Security Analysis |
70 | | -
|
71 | | -| Attack Vector | Protection Level | |
72 | | -|---------------|:---:| |
73 | | -| chunkbase / online seed maps | ✅ Fully defeated | |
74 | | -| SeedCrackerX client mod | ✅ Defeated (combine with FakeSeed for hashed seed) | |
75 | | -| Brute-force single structure salt (2³² attempts) | ⚠️ Possible per-type, but each type must be cracked independently | |
76 | | -| Reverse secret key from salt | ✅ Infeasible (SHA-256 preimage resistance) | |
77 | | -| Cross-structure salt derivation | ✅ Impossible without key | |
78 | | -
|
79 | | -## Building from Source |
80 | | -
|
81 | | -```bash |
82 | | -git clone https://github.com/7yunluo/SeedShield.git |
83 | | -cd SeedShield |
84 | | -mvn package |
85 | | -``` |
86 | | - |
87 | | -The JAR will be at `target/SeedShield-1.0.0.jar`. |
88 | | - |
89 | | -## License |
90 | | - |
91 | | -MIT License |
92 | | - |
93 | | ---- |
94 | | - |
95 | | -# 中文文档 |
96 | | - |
97 | 3 | **Paper/Spigot 服务器的加密结构种子保护插件。** |
98 | 4 |
|
| 5 | +**中文 | [English](README_EN.md)** |
| 6 | + |
99 | 7 | SeedShield 通过将每种结构类型的放置盐值(salt)替换为不可逆的 SHA-256 哈希值,防止种子破解工具(chunkbase、SeedCrackerX、Structurecracker)定位结构位置。 |
100 | 8 |
|
101 | 9 | **这是第一个为 Paper/Spigot 提供加密级结构种子保护的插件。** 此前,这种级别的保护只能通过 Fabric mod 或自定义服务端 fork 才能实现。 |
|
0 commit comments