114 messaggi dal 09 luglio 2009
Buonasera a tutti.
Ho la necessità di avere maggiori informazioni circa l'utilizzo della classe RSACryptoServiceProvider per la firma di documenti XML.

Mi trovo in questo scenario:
Ho la mia applicazione WPF che a seguito di una serie di verifiche emette un documento XML nascosto contenente dei dati "importanti" per la mia applicazione.
Questo documento viene dapprima criptato e salvato, successivamente dovrà essere verificato ed eventualmente decriptato.

Premesso che tutto mi funziona (grazie anche alle msdn Microsoft), vorrei farVi conoscere il mio modo di lavorare per capire se possono esserci errori e se sussiste il possibile fallimento di tale procedura (se l'utente riesce a risalire al codice sorgente considerato che esso non è offuscato).

Step 1) creo il documento XML e lo salvo su disco (evito il codice), successivamente lo crittografo:
Dim cspParams As New CspParameters
                cspParams.KeyContainerName = "XXXX"
                Dim rsaKey As New RSACryptoServiceProvider(cspParams)
                Dim xmlDoc As New XmlDocument
                xmlDoc.PreserveWhitespace = True
                xmlDoc.Load("C:\Users\Marco\Desktop\44524111.xml")
                SignXml(xmlDoc, rsaKey)
                xmlDoc.Save("C:\Users\Marco\Desktop\44524111.xml")


Sub SignXml(ByVal xmlDoc As XmlDocument, ByVal Key As RSA)

        If xmlDoc Is Nothing Then
            Throw New ArgumentException("xmlDoc")
        End If
        If Key Is Nothing Then
            Throw New ArgumentException("Key")
        End If

        Dim signedXml As New SignedXml(xmlDoc)
        signedXml.SigningKey = Key

        Dim reference As New Reference()
        reference.Uri = ""

        Dim env As New XmlDsigEnvelopedSignatureTransform()
        reference.AddTransform(env)

        signedXml.AddReference(reference)

        signedXml.ComputeSignature()

        Dim xmlDigitalSignature As XmlElement = signedXml.GetXml()

        xmlDoc.DocumentElement.AppendChild(xmlDoc.ImportNode(xmlDigitalSignature, True))


Nel listato di cui sopra dichiaro un CspParameters con un contenitore di chiavi. Successivamente utilizzo la chiave per firmare il documento.

Step 2) Carico il documento XML, ricreo un contenitore di chiavi e una rsaKey e verifico che il documento sia integro e non sia stato variato:
Dim cspParams As New CspParameters
        cspParams.KeyContainerName = "XXXX"
        Dim rsaKey As New RSACryptoServiceProvider(cspParams)
...


 Dim signedXml As New SignedXml(Doc)
 Dim nodeList As XmlNodeList = Doc.GetElementsByTagName("Signature")
         signedXml.LoadXml(CType(nodeList(0), XmlElement))
        
        Return signedXml.CheckSignature(Key)


Come detto, il tutto mi funziona ma vorrei chiedervi, oltre se il modo di procedere è corretto, anche se il fatto di dichiarare la KeyContainerName "in chiaro" possa rendere vulnerabile il progetto. Inoltre le mie chiavi privata/pubblica sono facilmente raggiungibili da chi riuscisse a vedere il contenuto del codice intero?

Spero di riuscire ad avere maggiori informazioni da Voi.

Grazie tante!

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.