Revisión por pares de la criptografía C # para la seguridad de la tabla Azure

4

Editar: Actualizar: estoy investigando cómo implementar AES con autenticación de una manera eficiente para este proyecto. Si tiene el tiempo, apreciaría su habilidad para encontrar la mejor implementación para este proyecto de FOSS.

¿Podría revisar y comentar el código de cifrado que acabo de publicar en Codeplex? La intención es usar esto como base para cifrar las propiedades de la tabla de Azure y evitar que cualquier empleado no autorizado de MSFT navegue o edite mis datos de forma casual. Es una muestra de trabajo que debería usar cualquier par de claves privadas públicas en su sistema local. Solo asegúrate de establecer los permisos en tu clave privada correctamente.

Para la tabla de Azure, quiero encriptar todas y cada una de las propiedades a continuación (incluyendo la clave de fila y la clave de partición) usando una clave simétrica.

public class ContactDataModel :TableServiceEntity
{
    public ContactDataModel(string partitionKey, string rowKey)
        : base(partitionKey, rowKey)
    {
    }

    public ContactDataModel(): this(Guid.NewGuid().ToString(), String.Empty)
    {
    }

    public string Name { get; set; }
    public string Address { get; set; }

    // Used to rotate keys, while allowing old data to still be read
    public int EncryptionVersion {get;set;}
}

Tengo la intención de almacenar la versión cifrada de la clave simétrica y el IV no cifrado en el almacenamiento de Azure Table. El diseño general asume que una clave simétrica cifrada inutiliza todos los demás datos de la tabla cifrada, incluso si el IV está disponible.

La clave simétrica se cifra con una clave RSA que es se entrega de forma segura a mi instancia de Azure Role .

Problemas conocidos:

Sé que me falta una semilla en mi cifrado simétrico. ¿Cómo implementaría esto desde una perspectiva Crypto?

    
pregunta random65537 11.05.2011 - 23:38
fuente

1 respuesta

4

Le sugiero que eche un vistazo al hilo de Lecciones aprendidas y conceptos erróneos sobre el cifrado y la criptología . Si estoy leyendo su código correctamente, parece que este código comete al menos uno de los errores enumerados allí. (por ejemplo, el uso del cifrado sin autenticación). Revise esa página con cuidado para asegurarse de evitar los errores documentados allí.

Más en serio, puede que no sea una buena idea diseñar su propio formato de cifrado. En lugar de reinventar la rueda (de forma insegura), le recomiendo que utilice un esquema bien comprobado existente, como GPG o PGP, para cifrar los datos. La mayoría de las bibliotecas criptográficas están destinadas a alguien que ya tiene muchos conocimientos sobre el diseño criptográfico; Si no tiene un gran conocimiento del diseño de esquemas criptográficos, las bibliotecas criptográficas pueden desviarlo, ya que las primitivas que proporcionan son de muy bajo nivel. Tienes que saber mucho para combinar esos primitivos correctamente en un esquema completamente seguro.

Por cierto, me parece que leer código es una forma dolorosa e ineficiente de revisar un diseño criptográfico. Sugiero que, si desea una revisión externa por parte de voluntarios, debería tomarse el tiempo para elaborar una especificación del formato de cifrado, en una notación criptográfica / matemática estándar. En términos generales, la especificación debe definir el formato con suficiente detalle para que otra persona pueda implementarlo de manera independiente, una implementación interoperable, sin ningún conocimiento de C # y sin ningún elemento específico de C #. Dicha especificación debe especificar los algoritmos exactos en uso. Por ejemplo, podría decir que cifrar un mensaje M al texto cifrado C como C = (X, AES-CMAC (K1, X)), donde X = AES-CBC (K0, M), o algo así. Si tiene que diseñar su propio formato de cifrado, ese es el nivel de abstracción que probablemente sea el más apropiado para analizarlo. Pero lo mejor de todo es evitar el diseño de su propio formato de cifrado y, por lo tanto, evitar la necesidad de dicho análisis.

    
respondido por el D.W. 12.05.2011 - 10:16
fuente

Lea otras preguntas en las etiquetas