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:

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

Za Decrypt

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:

Š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:

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:


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 >