Skip to content

Commit cbe35d2

Browse files
committed
Split README: Chinese as default, English in README_EN.md
1 parent 2d4609b commit cbe35d2

2 files changed

Lines changed: 93 additions & 94 deletions

File tree

README.md

Lines changed: 2 additions & 94 deletions
Original file line numberDiff line numberDiff line change
@@ -1,101 +1,9 @@
11
# SeedShield
22

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-
973
**Paper/Spigot 服务器的加密结构种子保护插件。**
984

5+
**中文 | [English](README_EN.md)**
6+
997
SeedShield 通过将每种结构类型的放置盐值(salt)替换为不可逆的 SHA-256 哈希值,防止种子破解工具(chunkbase、SeedCrackerX、Structurecracker)定位结构位置。
1008

1019
**这是第一个为 Paper/Spigot 提供加密级结构种子保护的插件。** 此前,这种级别的保护只能通过 Fabric mod 或自定义服务端 fork 才能实现。

README_EN.md

Lines changed: 91 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,91 @@
1+
# SeedShield
2+
3+
**Cryptographic structure seed protection for Paper/Spigot servers.**
4+
5+
**[中文](README.md) | 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

0 commit comments

Comments
 (0)