Crittografia per un sistema che supporta solo funzioni di crittografia di base [chiusa]

1

Sto lavorando su un metodo di crittografia tra un server e più client. L'hardware client supporta solo algoritmi di crittografia di base (Attualmente Aes 128-bit e HmacSha1). L'hardware è troppo semplice per supportare TLS / SSL. Ho letto su Embedded System Communications Security e ho anche controllato link

Combinando queste informazioni ho trovato un EncryptionClass che accetta una chiave master debole che è unica per ogni client e anche nota al server. La classe utilizza HmacSha1 per generare chiavi più potenti per la crittografia e l'autenticazione. Sembra come segue (pseudocodice):

EncryptionClass(weakMasterK) {
    HmacSha1.init(weakMasterK)
    strongEncrK = HmacSha1.doFinal(0) // zero constant in bytes
    strongAuthK = HmacSha1.doFinal(1) // one constant in bytes

    // Message encryption:
    AesCipher.init("ENCRYPT_MODE", strongEncrK)
    AesCipher.doFinal(random IV || message)

    // Message decryption:
    AesCipher.init("DECRYPT_MODE", strongEncrK)
    AesCipher.doFinal(encrypted data)

    // Hash generation (for authentication):
    HmacSha1.init(strongAuthK)
    HmacSha1.doFinal(encrypted message)
}

Dato che non sono affatto un esperto di crittografia, mi chiedevo se qualcuno vedesse un problema con questo approccio, specialmente con il modo in cui le chiavi sono generate e utilizzate. Prenderò in considerazione anche un approccio totalmente diverso se questo richiede meno potenza di calcolo rispetto a TLS / SSL.

    
posta david 08.09.2016 - 12:04
fonte

1 risposta

1

La tua chiave "strong" è solo un hmac con contenuto statico: sarebbe meglio implementare HKDF per la tua chiave rinforzo della porzione se possibile. Vale anche la pena di assicurarsi che il tuo IV casuale sia abbastanza casuale - un errore ci farà fare un sacco di cose.

    
risposta data 08.09.2016 - 12:24
fonte

Leggi altre domande sui tag