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.