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
secret
di HMACingid
con 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
M
da inviare al server - Il client genera
M'
crittografando simmetricamenteM
e 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
secret
da HMACingid
con 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?