Estoy trabajando en un método de cifrado entre un servidor y varios clientes. El hardware del cliente solo admite algoritmos de cifrado básicos (actualmente Aes de 128 bits y HmacSha1). El hardware es demasiado simple para soportar TLS / SSL. He leído sobre Embedded System Communications Security y también comprobé enlace
Combinando esta información, se me ocurrió una EncryptionClass que toma una clave maestra débil que es única para cada cliente y también conocida para el servidor. La clase usa HmacSha1 para generar claves más fuertes para el cifrado y la autenticación. Se ve como sigue (pseudocódigo):
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)
}
Dado que no soy un experto en criptografía, me preguntaba si alguien ve algún problema con este enfoque, especialmente con la forma en que se generan y utilizan las claves. También consideraría un enfoque totalmente diferente si esto requiere menos poder de cómputo que TLS / SSL.