Supponiamo che un server abbia un% casuale segreto dikey, lo utilizzi per generare tuple di credenziali di <id = random(), secret = hmac(id, key)> e consegna queste tuple <id, secret> ai client liberamente (tramite una connessione protetta).
Ci sono dei punti deboli in un client che usa il suo secret per crittografare simmetricamente i messaggi diretti sul server?
Ad esempio:
1. Configurazione del server
- Il server è caricato con il segreto casuale
key
2. Credenziali fornite al cliente
- Il cliente richiede le credenziali sul canale protetto
- Il server genera un% casuale di
id - Il server genera un
secretdi HMACingidcon il suokey - Il server risponde (su canale sicuro) con
<id, secret>tupla
3. Il client invia un messaggio al server
- Il client crea un messaggio
Mda inviare al server - Il client genera
M'crittografando simmetricamenteMe quindi MACing consecret - Il client invia
<id, M'>tuple al server su un canale non protetto
4. Il server riceve un messaggio dal client
- Il server riceve
<id, M'>tupla sul canale non protetto - Il server deriva
secretda HMACingidcon il suokey - Il server autentica e decodifica
M'utilizzandosecret
Per me, questo offre il vantaggio del server che non ha bisogno di mantenere ID o segreti, ed è anche veloce (rispetto alla generazione di coppie di chiavi RSA).
Ma non vedo l'orrore di usare HMAC come questo per generare chiavi segrete?
Ho provato a cercare su Google questo schema ma il mio Google-fu non deve essere abbastanza strong ( questa domanda e risposta sembrano quasi chiuse , ma questa non è la "Key Derivation", vero?). Ci deve essere una buona ragione per cui questo non è più comune.
Inoltre, c'è un nome per questo?