The attribute plugin is not available, 2fa disabled

Sigurnosni Mehanizmi

WvdS Crypto Service implementira više zaštitnih mehanizama koji su automatski aktivni. Ne trebate ništa konfigurirati.


Ograničavanje Brzine

Štiti od napada uskraćivanja usluge (DoS) preopterećenjem.

Parametar Vrijednost
Maks. zahtjeva/sekundi 1000
Burst tolerancija 100
Cooldown 100 ms

Ponašanje pri prekoračenju:

Zahtjev --> [Rate Limiter] --> Status: 0x07 (RATE_LIMITED)
                           --> Kriptografska operacija nije izvršena

Preporuka za klijente:

  • Pri statusu 0x07: Pričekajte i ponovite s backoff
  • Eksponencijalno vrijeme čekanja: 100ms, 200ms, 400ms, …
int send_with_retry(const uint8_t* request, size_t len) {
    int retry = 0;
    int delay_ms = 100;
 
    while (retry < 5) {
        send_request(request, len);
        int status = get_response_status();
 
        if (status != 0x07) return status;  // Nije rate-limited
 
        usleep(delay_ms * 1000);
        delay_ms *= 2;  // Eksponencijalni backoff
        retry++;
    }
    return -1;  // Timeout
}

Praćenje Nonce

Ponovna uporaba Nonce = Katastrofa

Kod AES-GCM, ponovna uporaba nonce vodi do potpune kompromitacije oba čista teksta!

Crypto Service aktivno štiti od ponovne uporabe nonce:

Za Encrypt

  • Nonce generira servis (CSPRNG)
  • Klijent ne može predložiti vlastitu nonce
  • Svaka nonce koristi se samo jednom

Za Decrypt

  • Servis sprema korištene nonce (Bloom Filter)
  • Pri ponovljenoj nonce: Status 0x08 (NONCE_REUSE)
  • Veličina prozora: 1 milijun nonce

Napomena: Praćenje nonce je po Key-ID. Pri rotaciji ključa pratilica se resetira.


Validacija Unosa

Svi unosi se provjeravaju prije obrade:

Provjera Kod greške
Magic Byte != 0xC7 0x01 (INVALID_HEADER)
Nepoznat Request-Type 0x02 (INVALID_TYPE)
Duljina sadržaja pogrešna 0x03 (INVALID_PAYLOAD)
Key-ID ne postoji 0x04 (KEY_NOT_FOUND)
Sadržaj > 64 KB 0x09 (PAYLOAD_TOO_LARGE)

Bez iznimaka:

Servis ne baca iznimke. Sve greške se vraćaju putem statusnih kodova.


Maksimalna Veličina Sadržaja

Ograničenje 64 KB (65536 bajta)

Razlozi:

  • Veličina dijeljene memorije ograničena
  • Zaštita od DoS (iscrpljivanje memorije)
  • Predvidljivo vrijeme izvršavanja

Šifriranje velikih podataka:

// Chunked Encryption za velike datoteke
#define CHUNK_SIZE (60 * 1024)  // 60 KB po komadu
 
int encrypt_large_file(FILE* in, FILE* out) {
    uint8_t buffer[CHUNK_SIZE];
    size_t bytes_read;
    uint32_t chunk_id = 0;
 
    while ((bytes_read = fread(buffer, 1, CHUNK_SIZE, in)) > 0) {
        // AAD sadrži Chunk-ID za zaštitu redoslijeda
        char aad[32];
        snprintf(aad, sizeof(aad), "chunk:%u", chunk_id++);
 
        uint8_t ct[CHUNK_SIZE + 28];
        size_t ct_len;
        uint8_t nonce[12], tag[16];
 
        encrypt_message(buffer, bytes_read, aad, strlen(aad),
                       ct, &ct_len, nonce, tag);
 
        fwrite(nonce, 1, 12, out);
        fwrite(tag, 1, 16, out);
        fwrite(ct, 1, ct_len, out);
    }
    return 0;
}

Brisanje pri Oslobađanju

Svi sigurnosno kritični podaci se prepisuju nakon uporabe:

  • Ključevi (nakon kriptografske operacije)
  • Čisti tekstovi (nakon šifriranja)
  • Dijeljene tajne (nakon razmjene ključeva)

Implementacija:

// Spriječi optimizaciju kompajlera
static void secure_zero(void* ptr, size_t len) {
    volatile uint8_t* p = (volatile uint8_t*)ptr;
    while (len--) *p++ = 0;
}

L4Re Izolacija

Crypto Service radi kao izolirani L4Re task:

+---------------------------------------------------------------+
|                    L4Re Microkernel                           |
+---------------------------------------------------------------+
|     |              |              |              |            |
|  +--+--+       +---+---+      +---+---+      +---+---+        |
|  | Sigma0 |    | Moe   |      | Crypto |     | OEM   |        |
|  | (Root) |    | (Mem) |      | Service|     | Gateway|       |
|  +--------+    +-------+      +--------+     +--------+        |
|                                   |              |             |
|                                   +--------------+             |
|                                   SAMO ovaj IPC                |
+---------------------------------------------------------------+

Sigurnosna jamstva:

  • Vlastiti adresni prostor (bez izravnog pristupa memoriji)
  • Dozvoljen samo eksplicitni IPC (temeljen na mogućnostima)
  • Bez pristupa mreži (air-gapped)

Rješavanje Problema

Simptom Mogući uzrok Rješenje
Status 0x04 trajno Key-Storage oštećen Regenerirajte ključeve
Status 0x07 često Brzina zahtjeva previsoka Batching, caching
Status 0x08 Rotacija ključa zaboravljena Generirajte novi ključ
Spore performanse FIPS način + Debug Koristite release build
Curenje memorije Odgovori nisu obrađeni Očistite dijeljenu memoriju

< API Referenca | Dalje: Usklađenost >

Zuletzt geändert: 29.01.2026. u 21:57