Skip to content

Commit 6b2a58a

Browse files
committed
updated example json to have real values
1 parent 3566934 commit 6b2a58a

4 files changed

Lines changed: 60 additions & 55 deletions

File tree

-93.9 KB
Binary file not shown.

blog/2021-08-26-welcome/index.md

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,8 +22,6 @@ The blog post date can be extracted from filenames, such as:
2222

2323
A blog post folder can be convenient to co-locate blog post images:
2424

25-
![Docusaurus Plushie](./docusaurus-plushie-banner.jpeg)
26-
2725
The blog supports tags as well!
2826

2927
**And if you don't want a blog**: just delete this directory, and use `blog: false` in your Docusaurus config.

docs/platforms/api.md

Lines changed: 20 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -102,14 +102,14 @@ X-IRONSHIELD-CHALLENGE: eyJjaGFsbGVuZ2VfaWQiOiJjaGFsXzE3MDk1NTk2MDBfYWJjZGVmIiwi
102102
**Example Decoded Header Content:**
103103
```json
104104
IronShieldChallenge {
105-
random_nonce: "c08abf60044461685da78f81bbc8b1bb",
106-
created_time: 1750726438000,
107-
expiration_time: 1750726468000,
108-
website_id: "api.example.com",
109-
challenge_param: "[0, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]",
110-
recommended_attempts: 400000000,
111-
public_key: "[71, 15, 1, 1, 7, 64, 28, 152, 78, 88, 44, 175, 57, 103, 175, 203, 107, 65, 139, 247, 54, 246, 169, 209, 116, 166, 25, 71, 174, 193, 66, 191]",
112-
challenge_signature: "[53, 245, 22, 118, 172, 48, 137, 177, 241, 87, 101, 189, 242, 199, 123, 118, 136, 215, 213, 95, 160, 220, 252, 252, 210, 70, 192, 212, 245, 91, 164, 156, 124, 169, 26, 172, 38, 42, 104, 51, 140, 69, 39, 125, 114, 62, 146, 96, 202, 147, 184, 141, 182, 5, 218, 253, 111, 0, 213, 212, 197, 22, 114, 4]"
105+
random_nonce: "55a77bde84950b2a2a525885902a6b13",
106+
created_time: 1753923084753,
107+
expiration_time: 1753923114753,
108+
website_id: "ironshield-edge",
109+
challenge_param: "[0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]",
110+
recommended_attempts: 10000000,
111+
public_key: "[4, 1, 218, 71, 15, 1, 1, 7, 64, 75, 121, 0, 46, 128, 52, 26, 55, 136, 20, 182, 107, 189, 54, 235, 41, 1, 241, 143, 183, 142, 125, 60]",
112+
challenge_signature: "[80, 117, 53, 94, 228, 123, 162, 251, 221, 72, 66, 74, 202, 33, 225, 97, 34, 176, 138, 89, 32, 207, 247, 204, 221, 119, 194, 221, 172, 108, 190, 43, 127, 174, 95, 27,41, 160, 180, 20, 102, 152, 129, 222, 35, 79, 219, 106, 243, 86, 28, 99, 70, 151, 200, 101, 153, 98, 149, 167, 142, 139, 229, 5]"
113113
}
114114
```
115115

@@ -154,16 +154,16 @@ X-IRONSHIELD-CHALLENGE-RESPONSE: eyJjaGFsbGVuZ2VfaWQiOiJjaGFsXzE3MDk1NTk2MDBfYWJ
154154
```json
155155
IronShieldChallengeResponse {
156156
solved_challenge: IronShieldChallenge {
157-
random_nonce: "c08abf60044461685da78f81bbc8b1bb",
158-
created_time: 1750726438000,
159-
expiration_time: 1750726468000,
160-
website_id: "api.example.com",
161-
challenge_param: "[0, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]",
162-
recommended_attempts: 400000000,
163-
public_key: "[71, 15, 1, 1, 7, 64, 28, 152, 78, 88, 44, 175, 57, 103, 175, 203, 107, 65, 139, 247, 54, 246, 169, 209, 116, 166, 25, 71, 174, 193, 66, 191]",
164-
challenge_signature: "[53, 245, 22, 118, 172, 48, 137, 177, 241, 87, 101, 189, 242, 199, 123, 118, 136, 215, 213, 95, 160, 220, 252, 252, 210, 70, 192, 212, 245, 91, 164, 156, 124, 169, 26, 172, 38, 42, 104, 51, 140, 69, 39, 125, 114, 62, 146, 96, 202, 147, 184, 141, 182, 5, 218, 253, 111, 0, 213, 212, 197, 22, 114, 4]"
157+
random_nonce: "55a77bde84950b2a2a525885902a6b13",
158+
created_time: 1753923084753,
159+
expiration_time: 1753923114753,
160+
website_id: "ironshield-edge",
161+
challenge_param: "[0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]",
162+
recommended_attempts: 10000000,
163+
public_key: "[4, 1, 218, 71, 15, 1, 1, 7, 64, 75, 121, 0, 46, 128, 52, 26, 55, 136, 20, 182, 107, 189, 54, 235, 41, 1, 241, 143, 183, 142, 125, 60]",
164+
challenge_signature: "[80, 117, 53, 94, 228, 123, 162, 251, 221, 72, 66, 74, 202, 33, 225, 97, 34, 176, 138, 89, 32, 207, 247, 204, 221, 119, 194, 221, 172, 108, 190, 43, 127, 174, 95, 27,41, 160, 180, 20, 102, 152, 129, 222, 35, 79, 219, 106, 243, 86, 28, 99, 70, 151, 200, 101, 153, 98, 149, 167, 142, 139, 229, 5]"
165165
},
166-
solution: 78612341
166+
solution: 11128447
167167
}
168168
```
169169

@@ -189,9 +189,9 @@ X-IRONSHIELD-TOKEN: eyJjaGFsbGVuZ2VfaWQiOiJjaGFsXzE3MDk1NTk2MDBfYWJjZGVmIiwiZGlm
189189
**Decoded Token Content:**
190190
```json
191191
IronShieldToken {
192-
"challenge_signature": "[53, 245, 22, 118, 172, 48, 137, 177, 241, 87, 101, 189, 242, 199, 123, 118, 136, 215, 213, 95, 160, 220, 252, 252, 210, 70, 192, 212, 245, 91, 164, 156, 124, 169, 26, 172, 38, 42, 104, 51, 140, 69, 39, 125, 114, 62, 146, 96, 202, 147, 184, 141, 182, 5, 218, 253, 111, 0, 213, 212, 197, 22, 114, 4]",
193-
"valid_for": 175072678000,
194-
"public_key": "[71, 15, 1, 1, 7, 64, 28, 152, 78, 88, 44, 175, 57, 103, 175, 203, 107, 65, 139, 247, 54, 246, 169, 209, 116, 166, 25, 71, 174, 193, 66, 191]",
192+
"challenge_signature":"[80, 117, 53, 94, 228, 123, 162, 251, 221, 72, 66, 74, 202, 33, 225, 97, 34, 176, 138, 89, 32, 207, 247, 204, 221, 119, 194, 221, 172, 108, 190, 43, 127, 174, 95, 27,41, 160, 180, 20, 102, 152, 129, 222, 35, 79, 219, 106, 243, 86, 28, 99, 70, 151, 200, 101, 153, 98, 149, 167, 142, 139, 229, 5]",
193+
"valid_for": 1753926714753,
194+
"public_key": "[4, 1, 218, 71, 15, 1, 1, 7, 64, 75, 121, 0, 46, 128, 52, 26, 55, 136, 20, 182, 107, 189, 54, 235, 41, 1, 241, 143, 183, 142, 125, 60]",
195195
"auth_signature": "[97, 70, 170, 21, 199, 121, 67, 32, 236, 222, 82, 62, 43, 209, 151, 191, 158, 231, 122, 96, 241, 168, 37, 99, 10, 250, 111, 79, 157, 29, 14, 133, 230, 49, 80, 85, 68, 45, 81, 71, 143, 206, 194, 129, 61, 95, 110, 103, 207, 77, 0, 234, 140, 143, 54, 136, 92, 149, 89, 105, 237, 171, 10, 0]"
196196
}
197197
```

docs/platforms/core.md

Lines changed: 40 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -4,37 +4,11 @@ sidebar_position: 2
44

55
# Core
66

7-
IronShield Core serves as the **intelligence center** of your security infrastructure, providing advanced bot detection, behavioral analysis, and centralized threat coordination across all protection layers.
7+
IronShield Core is the intelligence center of IronShield security infrastructure. It generates, verifyies, and authenticates **adaptive proof of work challenges**. It also provides advanced bot detection, behavioral analysis, and fingerprinting.
88

99
## Overview
1010

11-
The Core platform operates as the brain of IronShield's security ecosystem, analyzing patterns across multiple data sources to identify sophisticated threats that traditional rule-based systems miss. It employs machine learning algorithms and behavioral fingerprinting to distinguish between human users and automated attacks.
12-
13-
### Key Features
14-
15-
- **Advanced Bot Detection** - Multi-layered bot identification using behavioral analysis
16-
- **Stateless Fingerprinting** - Device and browser fingerprinting without persistent storage
17-
- **Machine Learning Engine** - Adaptive threat detection that improves over time
18-
- **Behavioral Analysis** - Real-time user behavior profiling and anomaly detection
19-
- **Threat Intelligence** - Integration with global threat feeds and reputation databases
20-
21-
## Architecture
22-
23-
```mermaid
24-
graph TD
25-
A[Edge Layer] --> B[Core Processing Engine]
26-
C[API Layer] --> B
27-
B --> D[Bot Detection Module]
28-
B --> E[Behavioral Analysis]
29-
B --> F[ML Threat Engine]
30-
D --> G[Decision Engine]
31-
E --> G
32-
F --> G
33-
G --> H[Protection Response]
34-
I[Threat Intelligence] --> F
35-
```
36-
37-
## Getting Started
11+
The Core platform functions as the primary gatekeeper in front of protected services. Any incoming request to a protected service must solve a proof-of-work computational challenge described in detail below. After successful completion of the challenge, it forwards the incoming traffic to the protected service. Since IronShield challenges are adaptive, the privacy-preserving fingerprinting engine can serve much more difficult challenges to traffic it sees as malicious, such as automated AI-driven scrapers or DDoS attacks, effectively blocking them.
3812

3913

4014
## Understanding Proof of Work Verification
@@ -46,15 +20,48 @@ Before diving into the technical implementation, it's important to understand **
4620
**Proof of Work** is a cryptographic mechanism that requires a client to perform a computationally expensive operation to prove they have expended real computational resources, most famously implemented in Bitcoin mining. IronShield's similar protocol consists of the following:
4721

4822
- **Challenge**: IronShield provides a mathematical puzzle that requires significant CPU cycles to solve. The "work" is the energy expended a device needs to solve the challenge.
49-
- **Solution**: The client must find a specific value (usually called a "nonce") that, when combined with the provided challenge data, produces a cryptographic hash with certain properties.
23+
- **Solution**: The client must find a specific value (usually called a "nonce") that, when combined with the provided challenge data, produces a cryptographic hash (e.g. SHA-256) with certain properties.
5024
- **Verification**: Any independent party can easily and quickly verify the solution is correct without having to recompute the soluition from scratch, but can be certain that the solver initially found it utilizing substantial computational work.
5125

52-
53-
5426
### Why PoW Stops Bad Actors
55-
The problem with traditional automated attacks (bots, scrapers, DDoS) is that anybody with 20 minutes of effort and 50 dollars can bring a multimillion dollar system offline because spamming endpoints is incredibly cheap to do yet extremly costly to defend againt.
27+
The problem with traditional automated attacks (bots, scrapers, DDoS) is that anybody with 20 minutes of effort and 50 dollars can bring a multi-million dollar system offline because spamming endpoints is incredibly cheap to do yet extremly costly to defend againt.
28+
29+
IronShield Core turns scraping and DDoS protection from a networking problem to an economic one. Attacks become economically unfeasible when each request requires significant computational cost. Malicious actors can't easily scale attacks because each request demands real CPU time and energy consumption to the point where the assymetric cost IronShield creates would make an attack economically infeasible. On the other hand, the "cost" to real users solving occasional challenges is imperceptible since they only have to solve one challenge and can use all of their computer's hardware to do so for free.
30+
31+
## How IronSHield's PoW Functions
32+
33+
### Step 1: Client Decodes a Challenge
34+
IronShield's protocol primarily communicates with HTTP headers, for more infomration see the [API Platform Documentation](/docs/platforms/api).
35+
36+
**Example Decoded Header Content:**
37+
```json
38+
IronShieldChallenge {
39+
random_nonce: "55a77bde84950b2a2a525885902a6b13",
40+
created_time: 1753923084753,
41+
expiration_time: 1753923114753,
42+
website_id: "ironshield-edge",
43+
challenge_param: "[0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]",
44+
recommended_attempts: 10000000,
45+
public_key: "[4, 1, 218, 71, 15, 1, 1, 7, 64, 75, 121, 0, 46, 128, 52, 26, 55, 136, 20, 182, 107, 189, 54, 235, 41, 1, 241, 143, 183, 142, 125, 60]",
46+
challenge_signature: "[80, 117, 53, 94, 228, 123, 162, 251, 221, 72, 66, 74, 202, 33, 225, 97, 34, 176, 138, 89, 32, 207, 247, 204, 221, 119, 194, 221, 172, 108, 190, 43, 127, 174, 95, 27,41, 160, 180, 20, 102, 152, 129, 222, 35, 79, 219, 106, 243, 86, 28, 99, 70, 151, 200, 101, 153, 98, 149, 167, 142, 139, 229, 5]"
47+
}
48+
```
5649

57-
IronShield Core turns scraping and DDoS protection from a networking problem to an economic one. Attacks become economically unfeasible when each request requires significant computational cost. Malicious actors can't easily scale attacks because each request demands real CPU time and energy consumption. On the other hand, the "cost" to real users solving occasional challenges is imperceptible since they only have to solve one challenge and can use all of their computer's hardware to do so for free.
50+
### The Computational Challenge
51+
To solve an `IronShieldChallenge`, a client must find some `solution` nonce that when concatenated with the `random_nonce`, and the resulting string is hashed with SHA-256, such that the resulting hash represented as a *[u8; 32] little-endian byte array* is smaller than the `challenge_param` target threshold byte array. The lower the `challenge_param` is, the harder the challenge is. For example, the average probability of finding a SHA-256 hash less than 2^255 represented as a [u8; 32] byte array ([0, 0, 0, ..., 128]) is 50% since there is a 50% chance any random integer chosen between 0 and 2^256 will be less than 2^255. Mathematically, the probability of solving a given challenge is `challenge_param / 2^256`. Therefore, the difficulty, or the expected average number of attempts to solve a challenge, is `2^256 / challenge_param`.
52+
53+
#### Random Nonce
54+
The `random_nonce` is a SHA-256 hash of a random number represented as a hex string generated by IronShield servers. Since clients have to find a valid nonce that concatenated w
55+
**What Each Field Means:**
56+
57+
- **`random_nonce`**: The SHA-256 hash of a random number (hex string)
58+
- **`created_time`**: Unix milli timestamp for the challenge.
59+
- **`expiration_time`**: Unix milli timestamp for the challenge expiration time.
60+
- **`challenge_param`**: Target threshold - hash must be less than this value.
61+
- **`recommended_attempts`**: Expected number of attempts for user guidance (2x difficulty).
62+
- **`website_id`**: The identifier of the website.
63+
- **`public_key`**: Ed25519 public key for signature verification.
64+
- **`challenge_signature`**: Ed25519 signature over the challenge data.
5865

5966

6067
### Prerequisites

0 commit comments

Comments
 (0)