Revisione paritetica della crittografia C # per la sicurezza della tabella di Azure

4

Modifica: Aggiorna - Sto cercando come implementare AES con l'autenticazione in modo efficiente per questo progetto. Se hai tempo, apprezzerei la tua abilità nel trovare la migliore implementazione per questo progetto FOSS.

Potresti rivedere e commentare il codice di crittografia che ho appena pubblicato su Codeplex? L'intento è di utilizzarlo come base per crittografare le proprietà di Azure Table e impedire a qualsiasi dipendente MSFT non autorizzato di sfogliare o modificare casualmente i miei dati. È un esempio funzionante che dovrebbe utilizzare qualsiasi coppia di chiavi pubblica privata sul sistema locale. Assicurati di impostare correttamente le autorizzazioni per la tua chiave privata.

Per Azure Table, voglio crittografare ogni singola proprietà sottostante (incluso rowkey e partitionkey) usando una chiave simmetrica.

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;}
}

Intendo memorizzare la versione crittografata della chiave simmetrica e l'IV non crittografato nell'archivio di Azure Table. Il progetto generale presuppone che una chiave simmetrica crittografata renda inutilizzabili tutti gli altri dati della tabella crittografata, anche se l'IV è disponibile.

La chiave simmetrica è crittografata con una chiave RSA che è consegnata in modo sicuro alla mia istanza di ruolo di Azure .

Problemi noti:

So che mi manca un seme nella mia crittografia simmetrica. Come potrei implementarlo da una prospettiva Crypto?

    
posta random65537 11.05.2011 - 23:38
fonte

1 risposta

4

Ti suggerisco di dare un'occhiata al thread su Lezioni apprese e idee sbagliate riguardanti crittografia e crittologia . Se sto leggendo il tuo codice, sembra che questo codice faccia elencare almeno un errore. (ad esempio, utilizzo della crittografia senza autenticazione) Rivedi attentamente la pagina per assicurarti di evitare gli errori documentati lì.

Più seriamente, potrebbe non essere una buona idea progettare il proprio formato di crittografia. Piuttosto che reinventare la ruota (insicuro), ti consiglio di utilizzare uno schema già ben controllato, come GPG o PGP, per crittografare i dati. La maggior parte delle librerie crittografiche è destinata a qualcuno che è già molto ben informato sulla progettazione crittografica; se non sei super-esperto sulla progettazione di schemi crittografici, allora le librerie di crittografia potrebbero farti fuori strada, perché le primitive che forniscono sono troppo di basso livello. Devi sapere molto per combinare correttamente quelle primitive in uno schema completamente sicuro.

A proposito, trovo che leggere il codice sia un modo doloroso e inefficiente per rivedere un progetto crittografico. Suggerisco che, se desideri una revisione esterna da parte di volontari, dovresti prendere il tempo per creare una specifica del formato di crittografia, in una notazione crittografica / matematica standard. In parole povere, la specifica dovrebbe definire il formato in modo sufficientemente dettagliato che qualcun altro potrebbe implementarlo indipendentemente in un'implementazione interoperabile, senza alcuna conoscenza di C # e senza alcuna specifica specifica di C #. Tale specifica dovrebbe specificare gli algoritmi esatti in uso. Ad esempio, potrebbe dire di crittografare un messaggio M al testo cifrato C come C = (X, AES-CMAC (K1, X)), dove X = AES-CBC (K0, M), o qualcosa del genere. Se si deve progettare il proprio formato di crittografia, questo è il livello di astrazione che è probabilmente più appropriato per analizzarlo. Ma la cosa migliore è evitare di progettare il proprio formato di crittografia e quindi evitare la necessità di tale analisi.

    
risposta data 12.05.2011 - 10:16
fonte