Cifrado para un sistema que solo admite funciones criptográficas básicas [cerrado]

1

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.

    
pregunta david 08.09.2016 - 12:04
fuente

1 respuesta

1

Su clave 'fuerte' es solo una hmac con contenido estático: sería mejor que implementara HKDF para su clave Refuerzo de la porción si es posible. También valdría la pena asegurarse de que su IV aleatorio sea lo suficientemente aleatorio: un error hará que las cosas se compliquen mucho.

    
respondido por el C_Sto 08.09.2016 - 12:24
fuente

Lea otras preguntas en las etiquetas