Varnostni Mehanizmi

WvdS Crypto Service implementira več zaščitnih mehanizmov, ki so samodejno aktivni. Ničesar vam ni treba konfigurirati.


Omejevanje Hitrosti

Ščiti pred napadi zavrnitve storitve (DoS) z obremenitvijo.

Parameter Vrednost
Maks. zahtev/sekundo 1000
Burst toleranca 100
Cooldown 100 ms

Obnašanje ob prekoračitvi:

Zahteva --> [Rate Limiter] --> Status: 0x07 (RATE_LIMITED)
                           --> Kriptografska operacija ni izvedena

Priporočilo za odjemalce:

  • Pri statusu 0x07: Počakajte in ponovite z backoff
  • Eksponentna čakalna doba: 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;  // Ni rate-limited
 
        usleep(delay_ms * 1000);
        delay_ms *= 2;  // Eksponentni backoff
        retry++;
    }
    return -1;  // Timeout
}

Sledenje Nonce

Ponovna uporaba Nonce = Katastrofa

Pri AES-GCM ponovna uporaba nonce vodi do popolnega kompromitiranja obeh čistopisov!

Crypto Service aktivno ščiti pred ponovno uporabo nonce:

Za Encrypt

  • Nonce generira storitev (CSPRNG)
  • Odjemalec ne more predložiti lastne nonce
  • Vsaka nonce se uporabi samo enkrat

Za Decrypt

  • Storitev shranjuje uporabljene nonce (Bloom Filter)
  • Pri ponovljeni nonce: Status 0x08 (NONCE_REUSE)
  • Velikost okna: 1 milijon nonce

Opomba: Sledenje nonce je na ključ-ID. Pri rotaciji ključa se sledilnik ponastavi.


Validacija Vhodov

Vsi vnosi se preverijo pred obdelavo:

Preverjanje Koda napake
Magic Byte != 0xC7 0x01 (INVALID_HEADER)
Neznan Request-Type 0x02 (INVALID_TYPE)
Dolžina vsebine napačna 0x03 (INVALID_PAYLOAD)
Key-ID ne obstaja 0x04 (KEY_NOT_FOUND)
Vsebina > 64 KB 0x09 (PAYLOAD_TOO_LARGE)

Brez izjem:

Storitev ne vrže izjem. Vse napake se sporočijo preko statusnih kod.


Maksimalna Velikost Vsebine

Omejitev 64 KB (65536 bajtov)

Razlogi:

  • Velikost skupnega pomnilnika omejena
  • Zaščita pred DoS (izčrpanje pomnilnika)
  • Predvidljiv čas izvajanja

Šifriranje velikih podatkov:

// Chunked Encryption za velike datoteke
#define CHUNK_SIZE (60 * 1024)  // 60 KB na kos
 
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 vsebuje Chunk-ID za zaščito vrstnega reda
        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 ob Opustitvi

Vsi varnostno kritični podatki se po uporabi prepišejo:

  • Ključi (po kriptografski operaciji)
  • Čistopisi (po šifriranju)
  • Skupne skrivnosti (po izmenjavi ključev)

Implementacija:

// Prepreči optimizacijo prevajalnika
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 teče kot izoliran L4Re task:

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

Varnostne garancije:

  • Lasten naslovni prostor (brez neposrednega dostopa do pomnilnika)
  • Dovoljen samo ekspliciten IPC (na osnovi zmožnosti)
  • Brez dostopa do omrežja (air-gapped)

Odpravljanje Težav

Simptom Možen vzrok Rešitev
Status 0x04 trajno Key-Storage poškodovan Ponovno generirajte ključe
Status 0x07 pogosto Hitrost zahtev previsoka Batching, caching
Status 0x08 Rotacija ključa pozabljena Generirajte nov ključ
Počasna zmogljivost FIPS način + Debug Uporabite release build
Puščanje pomnilnika Odgovori niso obdelani Počistite skupni pomnilnik

< API Referenca | Naprej: Skladnost >

Zuletzt geändert: dne 29.01.2026 ob 21:48